| ... | ... |
@@ -10,7 +10,7 @@ |
| 10 | 10 |
|
| 11 | 11 |
--- |
| 12 | 12 |
|
| 13 |
-> Working with **Contao 4.9** and up to **Contao 4.13** (PHP ^7.4 and PHP 8) |
|
| 13 |
+> Working with **Contao 4.13** (PHP ^8.0) |
|
| 14 | 14 |
|
| 15 | 15 |
--- |
| 16 | 16 |
|
| ... | ... |
@@ -20,7 +20,7 @@ Additionally, you can display members with their details in a reader page. |
| 20 | 20 |
|
| 21 | 21 |
+ [Features](#features) |
| 22 | 22 |
+ [Installation](#installation) |
| 23 |
- + [Upgrading](#upgrading-to-version-12) |
|
| 23 |
+ + [Upgrading (v.1.1 to >=v.1.2)](#upgrading-to-version--12) |
|
| 24 | 24 |
+ [Composer](#via-composer) |
| 25 | 25 |
+ [Contao Manager](#via-contao-manager) |
| 26 | 26 |
+ [Initial Setup](#initial-setup) |
| ... | ... |
@@ -36,7 +36,7 @@ Additionally, you can display members with their details in a reader page. |
| 36 | 36 |
|
| 37 | 37 |
## Features |
| 38 | 38 |
|
| 39 |
-- Compatible with Contao 4.9 and higher versions (PHP 8 Support) |
|
| 39 |
+- Compatible with Contao 4.13 (PHP ^8.0) |
|
| 40 | 40 |
- Extends members with avatars |
| 41 | 41 |
- Paginated member lists |
| 42 | 42 |
- Member detail pages |
| ... | ... |
@@ -46,8 +46,8 @@ Additionally, you can display members with their details in a reader page. |
| 46 | 46 |
|
| 47 | 47 |
## Installation |
| 48 | 48 |
|
| 49 |
-#### Upgrading to version 1.2 |
|
| 50 |
-> After upgrading from version 1.1 to version 1.2, make sure to edit your modules (memberlist, memberreader and avatar/profile picture) and set up the new templates. |
|
| 49 |
+#### Upgrading to version >=1.2 |
|
| 50 |
+> After upgrading from version 1.1 to version >=1.2, make sure to edit your modules (memberlist, memberreader and avatar/profile picture) and set up the new templates. |
|
| 51 | 51 |
|
| 52 | 52 |
#### Via composer |
| 53 | 53 |
``` |
| ... | ... |
@@ -23,8 +23,8 @@ |
| 23 | 23 |
} |
| 24 | 24 |
], |
| 25 | 25 |
"require": {
|
| 26 |
- "php": "^7.4 || ^8.0", |
|
| 27 |
- "contao/core-bundle":"^4.9" |
|
| 26 |
+ "php": "^8.0", |
|
| 27 |
+ "contao/core-bundle": "^4.13" |
|
| 28 | 28 |
}, |
| 29 | 29 |
"require-dev": {
|
| 30 | 30 |
"contao/manager-plugin": "^2.3.1" |
| ... | ... |
@@ -35,7 +35,7 @@ |
| 35 | 35 |
}, |
| 36 | 36 |
"extra": {
|
| 37 | 37 |
"branch-alias": {
|
| 38 |
- "dev-master": "1.2.x-dev" |
|
| 38 |
+ "dev-master": "1.3.x-dev" |
|
| 39 | 39 |
}, |
| 40 | 40 |
"contao-manager-plugin": "Oveleon\\ContaoMemberExtensionBundle\\ContaoManager\\Plugin" |
| 41 | 41 |
}, |
| ... | ... |
@@ -14,7 +14,7 @@ declare(strict_types=1); |
| 14 | 14 |
*/ |
| 15 | 15 |
|
| 16 | 16 |
// Back end modules |
| 17 |
-use Contao\System; |
|
| 17 |
+use Contao\ArrayUtil; |
|
| 18 | 18 |
|
| 19 | 19 |
$GLOBALS['BE_MOD']['system']['member_settings'] = [ |
| 20 | 20 |
'tables' => ['tl_member_settings'], |
| ... | ... |
@@ -22,8 +22,7 @@ $GLOBALS['BE_MOD']['system']['member_settings'] = [ |
| 22 | 22 |
]; |
| 23 | 23 |
|
| 24 | 24 |
// Front end modules |
| 25 |
-// ToDo: Change to ArrayUtil::arrayInsert when Contao 4.9 support ends |
|
| 26 |
-array_insert($GLOBALS['FE_MOD']['user'], -1, [ |
|
| 25 |
+ArrayUtil::arrayInsert($GLOBALS['FE_MOD']['user'], -1, [ |
|
| 27 | 26 |
'avatar' => 'Oveleon\ContaoMemberExtensionBundle\ModuleAvatar', |
| 28 | 27 |
'deleteAvatar' => 'Oveleon\ContaoMemberExtensionBundle\ModuleDeleteAvatar', |
| 29 | 28 |
'memberList' => 'Oveleon\ContaoMemberExtensionBundle\ModuleMemberList', |
| ... | ... |
@@ -31,8 +30,5 @@ array_insert($GLOBALS['FE_MOD']['user'], -1, [ |
| 31 | 30 |
]); |
| 32 | 31 |
|
| 33 | 32 |
// Register hooks |
| 34 |
-$GLOBALS['TL_HOOKS']['createNewUser'][] = ['Oveleon\ContaoMemberExtensionBundle\Member', 'createAvatar']; |
|
| 33 |
+$GLOBALS['TL_HOOKS']['createNewUser'][] = ['Oveleon\ContaoMemberExtensionBundle\Member', 'createAvatar']; |
|
| 35 | 34 |
$GLOBALS['TL_HOOKS']['updatePersonalData'][] = ['Oveleon\ContaoMemberExtensionBundle\Member', 'updateAvatar']; |
| 36 |
- |
|
| 37 |
-// Style sheet |
|
| 38 |
-$request = System::getContainer()->get('request_stack')->getCurrentRequest();
|
| ... | ... |
@@ -24,17 +24,17 @@ PaletteManipulator::create() |
| 24 | 24 |
|
| 25 | 25 |
// Add global operations |
| 26 | 26 |
$GLOBALS['TL_DCA']['tl_member']['list']['global_operations']['settings'] = [ |
| 27 |
- 'label' => &$GLOBALS['TL_LANG']['tl_member']['settings'], |
|
| 28 |
- 'href' => 'do=member_settings', |
|
| 29 |
- 'icon' => 'edit.svg', |
|
| 30 |
- 'attributes' => 'onclick="Backend.getScrollOffset()" accesskey="e"' |
|
| 27 |
+ 'label' => &$GLOBALS['TL_LANG']['tl_member']['settings'], |
|
| 28 |
+ 'href' => 'do=member_settings', |
|
| 29 |
+ 'icon' => 'edit.svg', |
|
| 30 |
+ 'attributes' => 'onclick="Backend.getScrollOffset()" accesskey="e"' |
|
| 31 | 31 |
]; |
| 32 | 32 |
|
| 33 | 33 |
// Add fields to tl_user |
| 34 | 34 |
$GLOBALS['TL_DCA']['tl_member']['fields']['avatar'] = [ |
| 35 |
- 'label' => &$GLOBALS['TL_LANG']['tl_member']['avatar'], |
|
| 36 |
- 'exclude' => true, |
|
| 37 |
- 'inputType' => 'fileTree', |
|
| 38 |
- 'eval' => ['feEditable'=>true, 'feViewable'=>true, 'feGroup'=>'personal', 'fieldType'=>'radio', 'filesOnly'=>true, 'isGallery'=>true, 'extensions'=>Config::get('validImageTypes'), 'tl_class'=>'clr'],
|
|
| 39 |
- 'sql' => "binary(16) NULL" |
|
| 35 |
+ 'label' => &$GLOBALS['TL_LANG']['tl_member']['avatar'], |
|
| 36 |
+ 'exclude' => true, |
|
| 37 |
+ 'inputType' => 'fileTree', |
|
| 38 |
+ 'eval' => ['feEditable'=>true, 'feViewable'=>true, 'feGroup'=>'personal', 'fieldType'=>'radio', 'filesOnly'=>true, 'isGallery'=>true, 'extensions'=>Config::get('validImageTypes'), 'tl_class'=>'clr'],
|
|
| 39 |
+ 'sql' => "binary(16) NULL" |
|
| 40 | 40 |
]; |
| ... | ... |
@@ -26,9 +26,9 @@ $GLOBALS['TL_DCA']['tl_member_settings'] = [ |
| 26 | 26 |
|
| 27 | 27 |
'fields' => [ |
| 28 | 28 |
'defaultAvatar' => [ |
| 29 |
- 'label' => &$GLOBALS['TL_LANG']['tl_member_settings']['defaultAvatar'], |
|
| 29 |
+ 'label' => &$GLOBALS['TL_LANG']['tl_member_settings']['defaultAvatar'], |
|
| 30 | 30 |
'inputType' => 'fileTree', |
| 31 |
- 'eval' => array('fieldType'=>'radio', 'filesOnly'=>true, 'isGallery'=>true, 'extensions'=>Config::get('validImageTypes'), 'tl_class'=>'clr')
|
|
| 31 |
+ 'eval' => ['fieldType'=>'radio', 'filesOnly'=>true, 'isGallery'=>true, 'extensions'=>Config::get('validImageTypes'), 'tl_class'=>'clr']
|
|
| 32 | 32 |
] |
| 33 | 33 |
] |
| 34 | 34 |
]; |
| ... | ... |
@@ -16,11 +16,9 @@ declare(strict_types=1); |
| 16 | 16 |
namespace Oveleon\ContaoMemberExtensionBundle; |
| 17 | 17 |
|
| 18 | 18 |
use Contao\BackendTemplate; |
| 19 |
-use Contao\Config; |
|
| 20 |
-use Contao\FilesModel; |
|
| 21 | 19 |
use Contao\FrontendUser; |
| 22 | 20 |
use Contao\MemberModel; |
| 23 |
-use Contao\Module; |
|
| 21 |
+use Contao\StringUtil; |
|
| 24 | 22 |
use Contao\System; |
| 25 | 23 |
|
| 26 | 24 |
/** |
| ... | ... |
@@ -39,22 +37,23 @@ class ModuleAvatar extends ModuleMemberExtension |
| 39 | 37 |
protected $strTemplate = 'memberExtension_avatar'; |
| 40 | 38 |
|
| 41 | 39 |
/** |
| 42 |
- * Return a wildcard in the back end |
|
| 40 |
+ * Display a wildcard in the back end |
|
| 43 | 41 |
* |
| 44 | 42 |
* @return string |
| 45 | 43 |
*/ |
| 46 | 44 |
public function generate() |
| 47 | 45 |
{
|
| 46 |
+ $container = System::getContainer(); |
|
| 48 | 47 |
$request = System::getContainer()->get('request_stack')->getCurrentRequest();
|
| 49 | 48 |
|
| 50 |
- if ($request && System::getContainer()->get('contao.routing.scope_matcher')->isBackendRequest($request))
|
|
| 49 |
+ if ($request && $container->get('contao.routing.scope_matcher')->isBackendRequest($request))
|
|
| 51 | 50 |
{
|
| 52 | 51 |
$objTemplate = new BackendTemplate('be_wildcard');
|
| 53 |
- $objTemplate->wildcard = '### ' . mb_strtoupper($GLOBALS['TL_LANG']['FMD']['avatar'][0], 'UTF-8') . ' ###'; |
|
| 52 |
+ $objTemplate->wildcard = '### ' . $GLOBALS['TL_LANG']['FMD']['avatar'][0] . ' ###'; |
|
| 54 | 53 |
$objTemplate->title = $this->headline; |
| 55 | 54 |
$objTemplate->id = $this->id; |
| 56 | 55 |
$objTemplate->link = $this->name; |
| 57 |
- $objTemplate->href = 'contao/main.php?do=themes&table=tl_module&act=edit&id=' . $this->id; |
|
| 56 |
+ $objTemplate->href = StringUtil::specialcharsUrl(System::getContainer()->get('router')->generate('contao_backend', ['do'=>'themes', 'table'=>'tl_module', 'act'=>'edit', 'id'=>$this->id]));
|
|
| 58 | 57 |
|
| 59 | 58 |
return $objTemplate->parse(); |
| 60 | 59 |
} |
| ... | ... |
@@ -39,24 +39,23 @@ class ModuleDeleteAvatar extends Module |
| 39 | 39 |
protected $strTemplate = 'memberExtension_deleteAvatar'; |
| 40 | 40 |
|
| 41 | 41 |
/** |
| 42 |
- * Return a wildcard in the back end |
|
| 42 |
+ * Display a wildcard in the back end |
|
| 43 | 43 |
* |
| 44 | 44 |
* @return string |
| 45 | 45 |
*/ |
| 46 | 46 |
public function generate() |
| 47 | 47 |
{
|
| 48 | 48 |
$container = System::getContainer(); |
| 49 |
- |
|
| 50 | 49 |
$request = System::getContainer()->get('request_stack')->getCurrentRequest();
|
| 51 | 50 |
|
| 52 |
- if ($request && System::getContainer()->get('contao.routing.scope_matcher')->isBackendRequest($request))
|
|
| 51 |
+ if ($request && $container->get('contao.routing.scope_matcher')->isBackendRequest($request))
|
|
| 53 | 52 |
{
|
| 54 | 53 |
$objTemplate = new BackendTemplate('be_wildcard');
|
| 55 |
- $objTemplate->wildcard = '### ' . mb_strtoupper($GLOBALS['TL_LANG']['FMD']['deleteAvatar'][0] ?? '', 'UTF-8') . ' ###'; |
|
| 54 |
+ $objTemplate->wildcard = '### ' . $GLOBALS['TL_LANG']['FMD']['deleteAvatar'][0] . ' ###'; |
|
| 56 | 55 |
$objTemplate->title = $this->headline; |
| 57 | 56 |
$objTemplate->id = $this->id; |
| 58 | 57 |
$objTemplate->link = $this->name; |
| 59 |
- $objTemplate->href = 'contao/main.php?do=themes&table=tl_module&act=edit&id=' . $this->id; |
|
| 58 |
+ $objTemplate->href = StringUtil::specialcharsUrl(System::getContainer()->get('router')->generate('contao_backend', ['do'=>'themes', 'table'=>'tl_module', 'act'=>'edit', 'id'=>$this->id]));
|
|
| 60 | 59 |
|
| 61 | 60 |
return $objTemplate->parse(); |
| 62 | 61 |
} |
| ... | ... |
@@ -101,12 +101,12 @@ abstract class ModuleMemberExtension extends Module |
| 101 | 101 |
|
| 102 | 102 |
if (!$objPage instanceof PageModel) |
| 103 | 103 |
{
|
| 104 |
- $strLink = ampersand(Environment::get('request'));
|
|
| 104 |
+ $strLink = StringUtil::ampersand(Environment::get('request'));
|
|
| 105 | 105 |
} |
| 106 | 106 |
else |
| 107 | 107 |
{
|
| 108 | 108 |
$params = (Config::get('useAutoItem') ? '/' : '/items/') . ($objMember->alias ?: $objMember->id);
|
| 109 |
- $strLink = ampersand($objPage->getFrontendUrl($params)); |
|
| 109 |
+ $strLink = StringUtil::ampersand($objPage->getFrontendUrl($params)); |
|
| 110 | 110 |
} |
| 111 | 111 |
|
| 112 | 112 |
return $strLink; |
| ... | ... |
@@ -53,22 +53,23 @@ class ModuleMemberList extends ModuleMemberExtension |
| 53 | 53 |
protected $strMemberTemplate = 'memberExtension_list_default'; |
| 54 | 54 |
|
| 55 | 55 |
/** |
| 56 |
- * Return a wildcard in the back end |
|
| 56 |
+ * Display a wildcard in the back end |
|
| 57 | 57 |
* |
| 58 | 58 |
* @return string |
| 59 | 59 |
*/ |
| 60 | 60 |
public function generate() |
| 61 | 61 |
{
|
| 62 |
+ $container = System::getContainer(); |
|
| 62 | 63 |
$request = System::getContainer()->get('request_stack')->getCurrentRequest();
|
| 63 | 64 |
|
| 64 |
- if ($request && System::getContainer()->get('contao.routing.scope_matcher')->isBackendRequest($request))
|
|
| 65 |
+ if ($request && $container->get('contao.routing.scope_matcher')->isBackendRequest($request))
|
|
| 65 | 66 |
{
|
| 66 | 67 |
$objTemplate = new BackendTemplate('be_wildcard');
|
| 67 |
- $objTemplate->wildcard = '### ' . mb_strtoupper($GLOBALS['TL_LANG']['FMD']['memberList'][0], 'UTF-8') . ' ###'; |
|
| 68 |
+ $objTemplate->wildcard = '### ' . $GLOBALS['TL_LANG']['FMD']['memberList'][0] . ' ###'; |
|
| 68 | 69 |
$objTemplate->title = $this->headline; |
| 69 | 70 |
$objTemplate->id = $this->id; |
| 70 | 71 |
$objTemplate->link = $this->name; |
| 71 |
- $objTemplate->href = 'contao/main.php?do=themes&table=tl_module&act=edit&id=' . $this->id; |
|
| 72 |
+ $objTemplate->href = StringUtil::specialcharsUrl(System::getContainer()->get('router')->generate('contao_backend', ['do'=>'themes', 'table'=>'tl_module', 'act'=>'edit', 'id'=>$this->id]));
|
|
| 72 | 73 |
|
| 73 | 74 |
return $objTemplate->parse(); |
| 74 | 75 |
} |
| ... | ... |
@@ -48,22 +48,23 @@ class ModuleMemberReader extends ModuleMemberExtension |
| 48 | 48 |
protected $strMemberTemplate = 'memberExtension_reader_full'; |
| 49 | 49 |
|
| 50 | 50 |
/** |
| 51 |
- * Return a wildcard in the back end |
|
| 51 |
+ * Display a wildcard in the back end |
|
| 52 | 52 |
* |
| 53 | 53 |
* @return string |
| 54 | 54 |
*/ |
| 55 | 55 |
public function generate() |
| 56 | 56 |
{
|
| 57 |
+ $container = System::getContainer(); |
|
| 57 | 58 |
$request = System::getContainer()->get('request_stack')->getCurrentRequest();
|
| 58 | 59 |
|
| 59 |
- if ($request && System::getContainer()->get('contao.routing.scope_matcher')->isBackendRequest($request))
|
|
| 60 |
+ if ($request && $container->get('contao.routing.scope_matcher')->isBackendRequest($request))
|
|
| 60 | 61 |
{
|
| 61 | 62 |
$objTemplate = new BackendTemplate('be_wildcard');
|
| 62 |
- $objTemplate->wildcard = '### ' . mb_strtoupper($GLOBALS['TL_LANG']['FMD']['memberList'][0], 'UTF-8') . ' ###'; |
|
| 63 |
+ $objTemplate->wildcard = '### ' . $GLOBALS['TL_LANG']['FMD']['memberList'][0] . ' ###'; |
|
| 63 | 64 |
$objTemplate->title = $this->headline; |
| 64 | 65 |
$objTemplate->id = $this->id; |
| 65 | 66 |
$objTemplate->link = $this->name; |
| 66 |
- $objTemplate->href = 'contao/main.php?do=themes&table=tl_module&act=edit&id=' . $this->id; |
|
| 67 |
+ $objTemplate->href = StringUtil::specialcharsUrl(System::getContainer()->get('router')->generate('contao_backend', ['do'=>'themes', 'table'=>'tl_module', 'act'=>'edit', 'id'=>$this->id]));
|
|
| 67 | 68 |
|
| 68 | 69 |
return $objTemplate->parse(); |
| 69 | 70 |
} |