... | ... |
@@ -2,9 +2,10 @@ |
2 | 2 |
Member Extension for Contao 4 Open Source CMS |
3 | 3 |
|
4 | 4 |
The following functions are added by this bundle: |
5 |
-- Avatar-Upload (BE/FE) |
|
6 |
- - Avatar Default-Image |
|
7 |
-- _More useful member extensions will follow..._ |
|
5 |
+- Avatar (BE/FE) |
|
6 |
+ - Fallback / Default Image |
|
7 |
+- Memberlist |
|
8 |
+- Memberreader |
|
8 | 9 |
|
9 | 10 |
### Avatar |
10 | 11 |
For the representation of the avatar, a separate module is provided. To prepare the avatar upload for the frontend, you only have to select the option "Avatar" in the module "Personal data". |
... | ... |
@@ -16,4 +17,4 @@ For the representation of the avatar, a separate module is provided. To prepare |
16 | 17 |
###### Member list |
17 | 18 |
 |
18 | 19 |
###### Member settings |
19 |
- |
|
20 | 20 |
\ No newline at end of file |
21 |
+ |
... | ... |
@@ -5,6 +5,7 @@ |
5 | 5 |
* |
6 | 6 |
* (c) https://www.oveleon.de/ |
7 | 7 |
*/ |
8 |
+ |
|
8 | 9 |
// Back end modules |
9 | 10 |
$GLOBALS['BE_MOD']['system']['member_settings'] = array |
10 | 11 |
( |
... | ... |
@@ -15,14 +16,16 @@ $GLOBALS['BE_MOD']['system']['member_settings'] = array |
15 | 16 |
// Front end modules |
16 | 17 |
array_insert($GLOBALS['FE_MOD']['user'], -1, array |
17 | 18 |
( |
18 |
- 'avatar' => '\\Oveleon\\ContaoMemberExtensionBundle\\ModuleAvatar' |
|
19 |
+ 'avatar' => 'Oveleon\ContaoMemberExtensionBundle\ModuleAvatar', |
|
20 |
+ 'memberList' => 'Oveleon\ContaoMemberExtensionBundle\ModuleMemberList', |
|
21 |
+ 'memberReader' => 'Oveleon\ContaoMemberExtensionBundle\ModuleMemberReader' |
|
19 | 22 |
)); |
20 | 23 |
|
21 | 24 |
// Register hooks |
22 |
-$GLOBALS['TL_HOOKS']['updatePersonalData'][] = array('\\Oveleon\\ContaoMemberExtensionBundle\\Member', 'updateAvatar'); |
|
25 |
+$GLOBALS['TL_HOOKS']['updatePersonalData'][] = array('Oveleon\ContaoMemberExtensionBundle\Member', 'updateAvatar'); |
|
23 | 26 |
|
24 | 27 |
// Style sheet |
25 | 28 |
if (TL_MODE == 'BE') |
26 | 29 |
{ |
27 | 30 |
$GLOBALS['TL_CSS'][] = 'bundles/contaomemberextension/style.css|static'; |
28 |
-} |
|
29 | 31 |
\ No newline at end of file |
32 |
+} |
... | ... |
@@ -8,5 +8,97 @@ |
8 | 8 |
|
9 | 9 |
array_insert($GLOBALS['TL_DCA']['tl_module']['palettes'], 0, array |
10 | 10 |
( |
11 |
- 'avatar' => '{title_legend},name,headline,type;{source_legend},imgSize;{template_legend:hide},memberTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID' |
|
11 |
+ 'avatar' => '{title_legend},name,headline,type;{source_legend},imgSize;{template_legend:hide},memberTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID', |
|
12 |
+ 'memberList' => '{title_legend},name,headline,type;{config_legend},groups,memberFields,imgSize;{redirect_legend},jumpTo;{template_legend:hide},customTpl,memberListTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID', |
|
13 |
+ 'memberReader' => '{title_legend},name,headline,type;{config_legend},groups,memberFields,imgSize;{template_legend:hide},customTpl,memberReaderTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID' |
|
12 | 14 |
)); |
15 |
+ |
|
16 |
+$GLOBALS['TL_DCA']['tl_module']['fields']['memberListTpl'] = array |
|
17 |
+( |
|
18 |
+ 'exclude' => true, |
|
19 |
+ 'inputType' => 'select', |
|
20 |
+ 'options_callback' => static function () |
|
21 |
+ { |
|
22 |
+ return Contao\Controller::getTemplateGroup('member_list_'); |
|
23 |
+ }, |
|
24 |
+ 'eval' => array('includeBlankOption'=>true, 'chosen'=>true, 'tl_class'=>'w50'), |
|
25 |
+ 'sql' => "varchar(64) NOT NULL default ''" |
|
26 |
+); |
|
27 |
+ |
|
28 |
+$GLOBALS['TL_DCA']['tl_module']['fields']['memberReaderTpl'] = array |
|
29 |
+( |
|
30 |
+ 'exclude' => true, |
|
31 |
+ 'inputType' => 'select', |
|
32 |
+ 'options_callback' => static function () |
|
33 |
+ { |
|
34 |
+ return Contao\Controller::getTemplateGroup('member_reader_'); |
|
35 |
+ }, |
|
36 |
+ 'eval' => array('includeBlankOption'=>true, 'chosen'=>true, 'tl_class'=>'w50'), |
|
37 |
+ 'sql' => "varchar(64) NOT NULL default ''" |
|
38 |
+); |
|
39 |
+ |
|
40 |
+$GLOBALS['TL_DCA']['tl_module']['fields']['memberFields'] = array |
|
41 |
+( |
|
42 |
+ 'exclude' => true, |
|
43 |
+ 'inputType' => 'checkboxWizard', |
|
44 |
+ 'options_callback' => array('tl_module_extension', 'getMemberProperties'), |
|
45 |
+ 'eval' => array('multiple'=>true), |
|
46 |
+ 'sql' => "blob NULL" |
|
47 |
+); |
|
48 |
+ |
|
49 |
+ |
|
50 |
+/** |
|
51 |
+ * Provide miscellaneous methods that are used by the data configuration array. |
|
52 |
+ * |
|
53 |
+ * @author Daniele Sciannimanica <https://github.com/doishub> |
|
54 |
+ */ |
|
55 |
+class tl_module_extension extends Contao\Backend |
|
56 |
+{ |
|
57 |
+ /** |
|
58 |
+ * Import the back end user object |
|
59 |
+ */ |
|
60 |
+ public function __construct() |
|
61 |
+ { |
|
62 |
+ parent::__construct(); |
|
63 |
+ $this->import('Contao\BackendUser', 'User'); |
|
64 |
+ } |
|
65 |
+ |
|
66 |
+ /** |
|
67 |
+ * Check permissions to edit the table |
|
68 |
+ * |
|
69 |
+ * @throws Contao\CoreBundle\Exception\AccessDeniedException |
|
70 |
+ */ |
|
71 |
+ public function checkPermission() |
|
72 |
+ { |
|
73 |
+ if ($this->User->isAdmin) { |
|
74 |
+ return; |
|
75 |
+ } |
|
76 |
+ |
|
77 |
+ if (!$this->User->hasAccess('modules', 'themes')) { |
|
78 |
+ throw new Contao\CoreBundle\Exception\AccessDeniedException('Not enough permissions to access the front end modules module.'); |
|
79 |
+ } |
|
80 |
+ } |
|
81 |
+ |
|
82 |
+ /** |
|
83 |
+ * Return all fields of table tl_member without account data |
|
84 |
+ * |
|
85 |
+ * @return array |
|
86 |
+ */ |
|
87 |
+ public function getMemberProperties() |
|
88 |
+ { |
|
89 |
+ $return = array(); |
|
90 |
+ |
|
91 |
+ Contao\System::loadLanguageFile('tl_member'); |
|
92 |
+ $this->loadDataContainer('tl_member'); |
|
93 |
+ |
|
94 |
+ foreach ($GLOBALS['TL_DCA']['tl_member']['fields'] as $k=>$v) |
|
95 |
+ { |
|
96 |
+ if (!empty($v['inputType']) && $v['inputType'] !== 'password') |
|
97 |
+ { |
|
98 |
+ $return[$k] = $GLOBALS['TL_DCA']['tl_member']['fields'][$k]['label'][0]; |
|
99 |
+ } |
|
100 |
+ } |
|
101 |
+ |
|
102 |
+ return $return; |
|
103 |
+ } |
|
104 |
+} |
13 | 105 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,14 @@ |
1 |
+<?xml version="1.0" ?><xliff version="1.1"> |
|
2 |
+ <file datatype="php" original="src/Resources/contao/languages/en/default.php" source-language="en" target-language="de"> |
|
3 |
+ <body> |
|
4 |
+ <trans-unit id="MSC.emptyMemberList"> |
|
5 |
+ <source>No members could be found.</source> |
|
6 |
+ <target>Es konnten keine Mitglieder gefunden werden.</target> |
|
7 |
+ </trans-unit> |
|
8 |
+ <trans-unit id="MSC.memberDetail"> |
|
9 |
+ <source>More</source> |
|
10 |
+ <target>Mehr</target> |
|
11 |
+ </trans-unit> |
|
12 |
+ </body> |
|
13 |
+ </file> |
|
14 |
+</xliff> |
... | ... |
@@ -10,13 +10,29 @@ |
10 | 10 |
<target>Mitglieder-Einstellungen vornehmen</target> |
11 | 11 |
</trans-unit> |
12 | 12 |
<trans-unit id="FMD.avatar.0"> |
13 |
- <source>Profile picture</source> |
|
14 |
- <target>Profilbild</target> |
|
13 |
+ <source>Profile picture / Avatar</source> |
|
14 |
+ <target>Profilbild / Avatar</target> |
|
15 | 15 |
</trans-unit> |
16 | 16 |
<trans-unit id="FMD.avatar.1"> |
17 | 17 |
<source>Displays the profile picture of the member.</source> |
18 | 18 |
<target>Zeigt das Profilbild des Mitgliedes an.</target> |
19 | 19 |
</trans-unit> |
20 |
+ <trans-unit id="FMD.memberList.0"> |
|
21 |
+ <source>Memberlist</source> |
|
22 |
+ <target>Mitgliederliste</target> |
|
23 |
+ </trans-unit> |
|
24 |
+ <trans-unit id="FMD.memberList.1"> |
|
25 |
+ <source>Displays a list of members.</source> |
|
26 |
+ <target>Gibt eine Liste der Mitglieder aus.</target> |
|
27 |
+ </trans-unit> |
|
28 |
+ <trans-unit id="FMD.memberReader.0"> |
|
29 |
+ <source>Memberreader</source> |
|
30 |
+ <target>Mitgliedleser</target> |
|
31 |
+ </trans-unit> |
|
32 |
+ <trans-unit id="FMD.memberReader.1"> |
|
33 |
+ <source>Displays a members details.</source> |
|
34 |
+ <target>Gibt eine Details eines Mitglieds aus.</target> |
|
35 |
+ </trans-unit> |
|
20 | 36 |
</body> |
21 | 37 |
</file> |
22 |
-</xliff> |
|
23 | 38 |
\ No newline at end of file |
39 |
+</xliff> |
24 | 40 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,30 @@ |
1 |
+<?xml version="1.0" ?><xliff version="1.1"> |
|
2 |
+ <file datatype="php" original="src/Resources/contao/languages/en/tl_module.php" source-language="en" target-language="de"> |
|
3 |
+ <body> |
|
4 |
+ <trans-unit id="tl_module.memberFields.0"> |
|
5 |
+ <source>Member fields</source> |
|
6 |
+ <target>Mitglied-Felder</target> |
|
7 |
+ </trans-unit> |
|
8 |
+ <trans-unit id="tl_module.memberFields.1"> |
|
9 |
+ <source>Here you can make a selection of the fields that will be output.</source> |
|
10 |
+ <target>Hier können Sie eine Auswhal der Felder treffen, welche ausgegeben werden.</target> |
|
11 |
+ </trans-unit> |
|
12 |
+ <trans-unit id="tl_module.memberListTpl.0"> |
|
13 |
+ <source>List-Template</source> |
|
14 |
+ <target>Listen-Template</target> |
|
15 |
+ </trans-unit> |
|
16 |
+ <trans-unit id="tl_module.memberListTpl.1"> |
|
17 |
+ <source>Here you can choose your own member list template.</source> |
|
18 |
+ <target>Hier können Sie ein eigenes Mitglieder-Listen Template wählen.</target> |
|
19 |
+ </trans-unit> |
|
20 |
+ <trans-unit id="tl_module.memberReaderTpl.0"> |
|
21 |
+ <source>Reader-Template</source> |
|
22 |
+ <target>Leser-Template</target> |
|
23 |
+ </trans-unit> |
|
24 |
+ <trans-unit id="tl_module.memberReaderTpl.1"> |
|
25 |
+ <source>Here you can choose your own member reader template.</source> |
|
26 |
+ <target>Hier können Sie ein eigenes Mitglied-Leser Template wählen.</target> |
|
27 |
+ </trans-unit> |
|
28 |
+ </body> |
|
29 |
+ </file> |
|
30 |
+</xliff> |
0 | 31 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,12 @@ |
1 |
+<?xml version="1.0" ?><xliff version="1.1"> |
|
2 |
+ <file datatype="php" original="src/Resources/contao/languages/en/default.php" source-language="en"> |
|
3 |
+ <body> |
|
4 |
+ <trans-unit id="MSC.emptyMemberList"> |
|
5 |
+ <source>No members could be found.</source> |
|
6 |
+ </trans-unit> |
|
7 |
+ <trans-unit id="MSC.memberDetail"> |
|
8 |
+ <source>More</source> |
|
9 |
+ </trans-unit> |
|
10 |
+ </body> |
|
11 |
+ </file> |
|
12 |
+</xliff> |
... | ... |
@@ -8,11 +8,23 @@ |
8 | 8 |
<source>Configure member settings</source> |
9 | 9 |
</trans-unit> |
10 | 10 |
<trans-unit id="FMD.avatar.0"> |
11 |
- <source>Profile picture</source> |
|
11 |
+ <source>Profile picture / Avatar</source> |
|
12 | 12 |
</trans-unit> |
13 | 13 |
<trans-unit id="FMD.avatar.1"> |
14 | 14 |
<source>Displays the profile picture of the member.</source> |
15 | 15 |
</trans-unit> |
16 |
+ <trans-unit id="FMD.memberList.0"> |
|
17 |
+ <source>Memberlist</source> |
|
18 |
+ </trans-unit> |
|
19 |
+ <trans-unit id="FMD.memberList.1"> |
|
20 |
+ <source>Displays a list of members.</source> |
|
21 |
+ </trans-unit> |
|
22 |
+ <trans-unit id="FMD.memberReader.0"> |
|
23 |
+ <source>Memberreader</source> |
|
24 |
+ </trans-unit> |
|
25 |
+ <trans-unit id="FMD.memberReader.1"> |
|
26 |
+ <source>Displays a members details.</source> |
|
27 |
+ </trans-unit> |
|
16 | 28 |
</body> |
17 | 29 |
</file> |
18 | 30 |
</xliff> |
19 | 31 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,24 @@ |
1 |
+<?xml version="1.0" ?><xliff version="1.1"> |
|
2 |
+ <file datatype="php" original="src/Resources/contao/languages/en/tl_module.php" source-language="en"> |
|
3 |
+ <body> |
|
4 |
+ <trans-unit id="tl_module.memberFields.0"> |
|
5 |
+ <source>Member fields</source> |
|
6 |
+ </trans-unit> |
|
7 |
+ <trans-unit id="tl_module.memberFields.1"> |
|
8 |
+ <source>Here you can make a selection of the fields that will be output.</source> |
|
9 |
+ </trans-unit> |
|
10 |
+ <trans-unit id="tl_module.memberListTpl.0"> |
|
11 |
+ <source>List-Template</source> |
|
12 |
+ </trans-unit> |
|
13 |
+ <trans-unit id="tl_module.memberListTpl.1"> |
|
14 |
+ <source>Here you can choose your own member list template.</source> |
|
15 |
+ </trans-unit> |
|
16 |
+ <trans-unit id="tl_module.memberReaderTpl.0"> |
|
17 |
+ <source>Reader-Template</source> |
|
18 |
+ </trans-unit> |
|
19 |
+ <trans-unit id="tl_module.memberReaderTpl.1"> |
|
20 |
+ <source>Here you can choose your own member reader template.</source> |
|
21 |
+ </trans-unit> |
|
22 |
+ </body> |
|
23 |
+ </file> |
|
24 |
+</xliff> |
0 | 25 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,144 @@ |
1 |
+<?php |
|
2 |
+/* |
|
3 |
+ * This file is part of Oveleon ContaoMemberExtension Bundle. |
|
4 |
+ * |
|
5 |
+ * (c) https://www.oveleon.de/ |
|
6 |
+ */ |
|
7 |
+ |
|
8 |
+namespace Oveleon\ContaoMemberExtensionBundle; |
|
9 |
+ |
|
10 |
+use Contao\Config; |
|
11 |
+use Contao\Environment; |
|
12 |
+use Contao\FilesModel; |
|
13 |
+use Contao\MemberModel; |
|
14 |
+use Contao\Module; |
|
15 |
+use Contao\PageModel; |
|
16 |
+use Contao\StringUtil; |
|
17 |
+use Contao\System; |
|
18 |
+ |
|
19 |
+/** |
|
20 |
+ * Parent class for member modules. |
|
21 |
+ * |
|
22 |
+ * @author Daniele Sciannimanica <https://github.com/doishub> |
|
23 |
+ */ |
|
24 |
+abstract class ModuleMemberExtension extends Module |
|
25 |
+{ |
|
26 |
+ /** |
|
27 |
+ * Parse member template |
|
28 |
+ * |
|
29 |
+ * @param $objMember |
|
30 |
+ * @param $objTemplate |
|
31 |
+ * @param $arrMemberFields |
|
32 |
+ * @param $varImageSize |
|
33 |
+ * |
|
34 |
+ * @return string |
|
35 |
+ */ |
|
36 |
+ protected function parseMemberTemplate($objMember, $objTemplate, $arrMemberFields, $varImgSize) |
|
37 |
+ { |
|
38 |
+ $arrFields = []; |
|
39 |
+ |
|
40 |
+ foreach ($arrMemberFields as $field) |
|
41 |
+ { |
|
42 |
+ switch($field) |
|
43 |
+ { |
|
44 |
+ case 'avatar': |
|
45 |
+ $this->addAvatarToTemplate($objMember, $objTemplate, $varImgSize); |
|
46 |
+ break; |
|
47 |
+ |
|
48 |
+ default: |
|
49 |
+ if($varValue = $objMember->{$field}) |
|
50 |
+ { |
|
51 |
+ if (\is_array(($arrValue = StringUtil::deserialize($varValue)))) |
|
52 |
+ { |
|
53 |
+ $arrFields[] = implode(",", $arrValue); |
|
54 |
+ } |
|
55 |
+ else |
|
56 |
+ { |
|
57 |
+ $arrFields[] = $varValue; |
|
58 |
+ } |
|
59 |
+ } |
|
60 |
+ } |
|
61 |
+ } |
|
62 |
+ |
|
63 |
+ $objTemplate->fields = $arrFields; |
|
64 |
+ |
|
65 |
+ if($this->jumpTo) |
|
66 |
+ { |
|
67 |
+ $objTemplate->link = $this->generateMemberUrl($objMember); |
|
68 |
+ } |
|
69 |
+ |
|
70 |
+ return $objTemplate->parse(); |
|
71 |
+ } |
|
72 |
+ |
|
73 |
+ /** |
|
74 |
+ * Add avatar to template |
|
75 |
+ * |
|
76 |
+ * @param $objMember |
|
77 |
+ * @param $objTemplate |
|
78 |
+ * @param $varImageSize |
|
79 |
+ */ |
|
80 |
+ protected function addAvatarToTemplate($objMember, $objTemplate, $varImgSize) |
|
81 |
+ { |
|
82 |
+ $objTemplate->addImage = false; |
|
83 |
+ |
|
84 |
+ $arrData = array( |
|
85 |
+ 'size' => $varImgSize |
|
86 |
+ ); |
|
87 |
+ |
|
88 |
+ if ($objMember->avatar == '' && Config::get('defaultAvatar') == '') |
|
89 |
+ { |
|
90 |
+ return; |
|
91 |
+ } |
|
92 |
+ |
|
93 |
+ if ($objMember->avatar == '') |
|
94 |
+ { |
|
95 |
+ $objFile = FilesModel::findByUuid( Config::get('defaultAvatar') ); |
|
96 |
+ |
|
97 |
+ if ($objFile === null || !is_file(TL_ROOT . '/' . $objFile->path)) |
|
98 |
+ { |
|
99 |
+ return; |
|
100 |
+ } |
|
101 |
+ |
|
102 |
+ $arrData['singleSRC'] = $objFile->path; |
|
103 |
+ $objTemplate->addImage = true; |
|
104 |
+ $this->addImageToTemplate($objTemplate, $arrData); |
|
105 |
+ } |
|
106 |
+ |
|
107 |
+ $objFile = FilesModel::findByUuid($objMember->avatar); |
|
108 |
+ |
|
109 |
+ if ($objFile === null || !is_file(TL_ROOT . '/' . $objFile->path)) |
|
110 |
+ { |
|
111 |
+ $arrData['singleSRC'] = FilesModel::findByUuid(Config::get('defaultAvatar'))->path; |
|
112 |
+ $objTemplate->addImage = true; |
|
113 |
+ $this->addImageToTemplate($objTemplate, $arrData); |
|
114 |
+ } |
|
115 |
+ |
|
116 |
+ $arrData['singleSRC'] = $objFile->path; |
|
117 |
+ $objTemplate->addImage = true; |
|
118 |
+ $this->addImageToTemplate($objTemplate, $arrData, null, null, $objFile); |
|
119 |
+ } |
|
120 |
+ |
|
121 |
+ /** |
|
122 |
+ * Generate a URL and return it as string |
|
123 |
+ * |
|
124 |
+ * @param MemberModel $objMember |
|
125 |
+ * |
|
126 |
+ * @return string |
|
127 |
+ */ |
|
128 |
+ protected function generateMemberUrl($objMember) |
|
129 |
+ { |
|
130 |
+ $objPage = PageModel::findPublishedById($this->jumpTo); |
|
131 |
+ |
|
132 |
+ if (!$objPage instanceof PageModel) |
|
133 |
+ { |
|
134 |
+ $strLink = ampersand(Environment::get('request')); |
|
135 |
+ } |
|
136 |
+ else |
|
137 |
+ { |
|
138 |
+ $params = (Config::get('useAutoItem') ? '/' : '/items/') . ($objMember->alias ?: $objMember->id); |
|
139 |
+ $strLink = ampersand($objPage->getFrontendUrl($params)); |
|
140 |
+ } |
|
141 |
+ |
|
142 |
+ return $strLink; |
|
143 |
+ } |
|
144 |
+} |
0 | 145 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,91 @@ |
1 |
+<?php |
|
2 |
+ |
|
3 |
+/* |
|
4 |
+ * This file is part of Oveleon ContaoMemberExtension Bundle. |
|
5 |
+ * |
|
6 |
+ * (c) https://www.oveleon.de/ |
|
7 |
+ */ |
|
8 |
+ |
|
9 |
+namespace Oveleon\ContaoMemberExtensionBundle; |
|
10 |
+ |
|
11 |
+use Contao\BackendTemplate; |
|
12 |
+use Contao\FrontendTemplate; |
|
13 |
+use Contao\MemberModel; |
|
14 |
+use Contao\StringUtil; |
|
15 |
+use Patchwork\Utf8; |
|
16 |
+ |
|
17 |
+/** |
|
18 |
+ * Class ModuleMemberList |
|
19 |
+ * |
|
20 |
+ * @author Daniele Sciannimanica <https://github.com/doishub> |
|
21 |
+ */ |
|
22 |
+class ModuleMemberList extends ModuleMemberExtension |
|
23 |
+{ |
|
24 |
+ |
|
25 |
+ /** |
|
26 |
+ * Template |
|
27 |
+ * @var string |
|
28 |
+ */ |
|
29 |
+ protected $strTemplate = 'mod_memberList'; |
|
30 |
+ |
|
31 |
+ /** |
|
32 |
+ * Template |
|
33 |
+ * @var string |
|
34 |
+ */ |
|
35 |
+ protected $strMemberTemplate = 'member_list_default'; |
|
36 |
+ |
|
37 |
+ /** |
|
38 |
+ * Return a wildcard in the back end |
|
39 |
+ * |
|
40 |
+ * @return string |
|
41 |
+ */ |
|
42 |
+ public function generate() |
|
43 |
+ { |
|
44 |
+ if (TL_MODE == 'BE') |
|
45 |
+ { |
|
46 |
+ /** @var BackendTemplate|object $objTemplate */ |
|
47 |
+ $objTemplate = new BackendTemplate('be_wildcard'); |
|
48 |
+ |
|
49 |
+ $objTemplate->wildcard = '### ' . Utf8::strtoupper($GLOBALS['TL_LANG']['FMD']['memberList'][0]) . ' ###'; |
|
50 |
+ $objTemplate->title = $this->headline; |
|
51 |
+ $objTemplate->id = $this->id; |
|
52 |
+ $objTemplate->link = $this->name; |
|
53 |
+ $objTemplate->href = 'contao/main.php?do=themes&table=tl_module&act=edit&id=' . $this->id; |
|
54 |
+ |
|
55 |
+ return $objTemplate->parse(); |
|
56 |
+ } |
|
57 |
+ |
|
58 |
+ return parent::generate(); |
|
59 |
+ } |
|
60 |
+ |
|
61 |
+ /** |
|
62 |
+ * Generate the module |
|
63 |
+ */ |
|
64 |
+ protected function compile() |
|
65 |
+ { |
|
66 |
+ $objGroups = MemberModel::findByGroups($this->groups); |
|
67 |
+ $arrMembers = null; |
|
68 |
+ |
|
69 |
+ while($objGroups->next()) |
|
70 |
+ { |
|
71 |
+ if($objGroups->disable) |
|
72 |
+ { |
|
73 |
+ continue; |
|
74 |
+ } |
|
75 |
+ |
|
76 |
+ $arrMemberFields = StringUtil::deserialize($this->memberFields, true); |
|
77 |
+ |
|
78 |
+ $objTemplate = new FrontendTemplate($this->memberListTpl ?: $this->strMemberTemplate); |
|
79 |
+ $objTemplate->setData($objGroups->current()->row()); |
|
80 |
+ |
|
81 |
+ $arrMembers[] = $this->parseMemberTemplate($objGroups->current(), $objTemplate, $arrMemberFields, $this->imgSize); |
|
82 |
+ } |
|
83 |
+ |
|
84 |
+ if(null === $arrMembers) |
|
85 |
+ { |
|
86 |
+ $this->Template->empty = $GLOBALS['TL_LANG']['MSC']['emptyMemberList']; |
|
87 |
+ } |
|
88 |
+ |
|
89 |
+ $this->Template->members = $arrMembers; |
|
90 |
+ } |
|
91 |
+} |
0 | 92 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,104 @@ |
1 |
+<?php |
|
2 |
+ |
|
3 |
+/* |
|
4 |
+ * This file is part of Oveleon ContaoMemberExtension Bundle. |
|
5 |
+ * |
|
6 |
+ * (c) https://www.oveleon.de/ |
|
7 |
+ */ |
|
8 |
+ |
|
9 |
+namespace Oveleon\ContaoMemberExtensionBundle; |
|
10 |
+ |
|
11 |
+use Contao\BackendTemplate; |
|
12 |
+use Contao\Config; |
|
13 |
+use Contao\CoreBundle\Exception\PageNotFoundException; |
|
14 |
+use Contao\Environment; |
|
15 |
+use Contao\FrontendTemplate; |
|
16 |
+use Contao\Input; |
|
17 |
+use Contao\MemberModel; |
|
18 |
+use Contao\StringUtil; |
|
19 |
+use Patchwork\Utf8; |
|
20 |
+ |
|
21 |
+/** |
|
22 |
+ * Class ModuleMemberList |
|
23 |
+ * |
|
24 |
+ * @author Daniele Sciannimanica <https://github.com/doishub> |
|
25 |
+ */ |
|
26 |
+class ModuleMemberReader extends ModuleMemberExtension |
|
27 |
+{ |
|
28 |
+ |
|
29 |
+ /** |
|
30 |
+ * Template |
|
31 |
+ * @var string |
|
32 |
+ */ |
|
33 |
+ protected $strTemplate = 'mod_memberReader'; |
|
34 |
+ |
|
35 |
+ /** |
|
36 |
+ * Template |
|
37 |
+ * @var string |
|
38 |
+ */ |
|
39 |
+ protected $strMemberTemplate = 'member_reader_full'; |
|
40 |
+ |
|
41 |
+ /** |
|
42 |
+ * Return a wildcard in the back end |
|
43 |
+ * |
|
44 |
+ * @return string |
|
45 |
+ */ |
|
46 |
+ public function generate() |
|
47 |
+ { |
|
48 |
+ if (TL_MODE == 'BE') |
|
49 |
+ { |
|
50 |
+ /** @var BackendTemplate|object $objTemplate */ |
|
51 |
+ $objTemplate = new BackendTemplate('be_wildcard'); |
|
52 |
+ |
|
53 |
+ $objTemplate->wildcard = '### ' . Utf8::strtoupper($GLOBALS['TL_LANG']['FMD']['memberList'][0]) . ' ###'; |
|
54 |
+ $objTemplate->title = $this->headline; |
|
55 |
+ $objTemplate->id = $this->id; |
|
56 |
+ $objTemplate->link = $this->name; |
|
57 |
+ $objTemplate->href = 'contao/main.php?do=themes&table=tl_module&act=edit&id=' . $this->id; |
|
58 |
+ |
|
59 |
+ return $objTemplate->parse(); |
|
60 |
+ } |
|
61 |
+ |
|
62 |
+ // Set the item from the auto_item parameter |
|
63 |
+ if (!isset($_GET['items']) && isset($_GET['auto_item']) && Config::get('useAutoItem')) |
|
64 |
+ { |
|
65 |
+ Input::setGet('items', Input::get('auto_item')); |
|
66 |
+ } |
|
67 |
+ |
|
68 |
+ return parent::generate(); |
|
69 |
+ } |
|
70 |
+ |
|
71 |
+ /** |
|
72 |
+ * Generate the module |
|
73 |
+ */ |
|
74 |
+ protected function compile() |
|
75 |
+ { |
|
76 |
+ $this->Template->referer = 'javascript:history.go(-1)'; |
|
77 |
+ $this->Template->back = $GLOBALS['TL_LANG']['MSC']['goBack']; |
|
78 |
+ |
|
79 |
+ // Get the member |
|
80 |
+ $objMember = MemberModel::findByIdOrAlias(Input::get('items')); |
|
81 |
+ |
|
82 |
+ // The member does not exist |
|
83 |
+ if ($objMember === null || $objMember->disable) |
|
84 |
+ { |
|
85 |
+ throw new PageNotFoundException('Page not found: ' . Environment::get('uri')); |
|
86 |
+ } |
|
87 |
+ |
|
88 |
+ // Check groups |
|
89 |
+ $arrGroups = StringUtil::deserialize($this->groups); |
|
90 |
+ $memberGroups = StringUtil::deserialize($objMember->groups); |
|
91 |
+ |
|
92 |
+ if (empty($arrGroups) || !\is_array($arrGroups) || !\count(array_intersect($arrGroups, $memberGroups))) |
|
93 |
+ { |
|
94 |
+ throw new PageNotFoundException('Page not found: ' . Environment::get('uri')); |
|
95 |
+ } |
|
96 |
+ |
|
97 |
+ $arrMemberFields = StringUtil::deserialize($this->memberFields, true); |
|
98 |
+ |
|
99 |
+ $objTemplate = new FrontendTemplate($this->memberReaderTpl ?: $this->strMemberTemplate); |
|
100 |
+ $objTemplate->setData($objMember->row()); |
|
101 |
+ |
|
102 |
+ $this->Template->member = $this->parseMemberTemplate($objMember, $objTemplate, $arrMemberFields, $this->imgSize); |
|
103 |
+ } |
|
104 |
+} |
0 | 105 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,15 @@ |
1 |
+<div class="member_list_default"> |
|
2 |
+ <?php if($this->addImage): ?> |
|
3 |
+ <figure class="image_container"> |
|
4 |
+ <?php $this->insert('picture_default', $this->picture); ?> |
|
5 |
+ </figure> |
|
6 |
+ <?php endif; ?> |
|
7 |
+ <ul> |
|
8 |
+ <?php foreach ($this->fields as $field): ?> |
|
9 |
+ <li><?=$field?></li> |
|
10 |
+ <?php endforeach; ?> |
|
11 |
+ </ul> |
|
12 |
+ <?php if($this->link): ?> |
|
13 |
+ <a href="<?=$this->link?>"><?=$GLOBALS['TL_LANG']['MSC']['memberDetail']?></a> |
|
14 |
+ <?php endif; ?> |
|
15 |
+</div> |
0 | 16 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,12 @@ |
1 |
+<div class="member_reader_full"> |
|
2 |
+ <?php if($this->addImage): ?> |
|
3 |
+ <figure class="image_container"> |
|
4 |
+ <?php $this->insert('picture_default', $this->picture); ?> |
|
5 |
+ </figure> |
|
6 |
+ <?php endif; ?> |
|
7 |
+ <ul> |
|
8 |
+ <?php foreach ($this->fields as $field): ?> |
|
9 |
+ <li><?=$field?></li> |
|
10 |
+ <?php endforeach; ?> |
|
11 |
+ </ul> |
|
12 |
+</div> |
0 | 13 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,13 @@ |
1 |
+<?php $this->extend('block_unsearchable'); ?> |
|
2 |
+ |
|
3 |
+<?php $this->block('content'); ?> |
|
4 |
+ |
|
5 |
+<?php if ($this->members): ?> |
|
6 |
+ <?php foreach ($this->members as $member): ?> |
|
7 |
+ <?=$member?> |
|
8 |
+ <?php endforeach; ?> |
|
9 |
+<?php else: ?> |
|
10 |
+ <p class="empty message"><?=$this->empty?></p> |
|
11 |
+<?php endif; ?> |
|
12 |
+ |
|
13 |
+<?php $this->endblock(); ?> |