... | ... |
@@ -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 |
} |