... | ... |
@@ -21,8 +21,8 @@ use Contao\Controller; |
21 | 21 |
array_insert($GLOBALS['TL_DCA']['tl_module']['palettes'], 0, [ |
22 | 22 |
'avatar' => '{title_legend},name,headline,type;{source_legend},imgSize;{template_legend:hide},memberTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID', |
23 | 23 |
'deleteAvatar' => '{title_legend},name,headline,type;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID', |
24 |
- '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', |
|
25 |
- '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' |
|
24 |
+ 'memberList' => '{title_legend},name,headline,type;{config_legend},ext_groups,memberFields,imgSize;{redirect_legend},jumpTo;{template_legend:hide},customTpl,memberListTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID', |
|
25 |
+ 'memberReader' => '{title_legend},name,headline,type;{config_legend},ext_groups,memberFields,imgSize;{template_legend:hide},customTpl,memberReaderTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID' |
|
26 | 26 |
]); |
27 | 27 |
|
28 | 28 |
$GLOBALS['TL_DCA']['tl_module']['fields']['memberListTpl'] = [ |
... | ... |
@@ -49,6 +49,15 @@ $GLOBALS['TL_DCA']['tl_module']['fields']['memberFields'] = [ |
49 | 49 |
'sql' => "blob NULL" |
50 | 50 |
]; |
51 | 51 |
|
52 |
+$GLOBALS['TL_DCA']['tl_module']['fields']['ext_groups'] = [ |
|
53 |
+ 'exclude' => true, |
|
54 |
+ 'inputType' => 'checkbox', |
|
55 |
+ 'foreignKey' => 'tl_member_group.name', |
|
56 |
+ 'eval' => ['multiple'=>true], |
|
57 |
+ 'sql' => "blob NULL", |
|
58 |
+ 'relation' => ['type'=>'hasMany', 'load'=>'lazy'] |
|
59 |
+]; |
|
60 |
+ |
|
52 | 61 |
class tl_module_extension extends Backend |
53 | 62 |
{ |
54 | 63 |
/** |
... | ... |
@@ -24,7 +24,9 @@ use Contao\System; |
24 | 24 |
/** |
25 | 25 |
* Class ModuleMemberList |
26 | 26 |
* |
27 |
- * @author Daniele Sciannimanica <https://github.com/doishub> |
|
27 |
+ * @property string $ext_groups considered member groups |
|
28 |
+ * @property string $memberFields Fields to be displayed |
|
29 |
+ * @property string $memberListTpl Frontend list template |
|
28 | 30 |
*/ |
29 | 31 |
class ModuleMemberList extends ModuleMemberExtension |
30 | 32 |
{ |
... | ... |
@@ -70,17 +72,30 @@ class ModuleMemberList extends ModuleMemberExtension |
70 | 72 |
*/ |
71 | 73 |
protected function compile() |
72 | 74 |
{ |
73 |
- $objGroups = MemberModel::findAll(); |
|
74 |
- $arrGroups = StringUtil::deserialize($this->groups); |
|
75 |
- $arrMembers = null; |
|
75 |
+ $arrGroups = StringUtil::deserialize($this->ext_groups); |
|
76 | 76 |
|
77 |
- if($objGroups->count()) |
|
77 |
+ if(empty($arrGroups) || !\is_array($arrGroups)) |
|
78 | 78 |
{ |
79 |
- while($objGroups->next()) |
|
79 |
+ $this->Template->empty = $GLOBALS['TL_LANG']['MSC']['emptyMemberList']; |
|
80 |
+ return; |
|
81 |
+ } |
|
82 |
+ |
|
83 |
+ $objMembers = MemberModel::findAll(); |
|
84 |
+ $arrMembers = []; |
|
85 |
+ |
|
86 |
+ if($objMembers->count()) |
|
87 |
+ { |
|
88 |
+ while($objMembers->next()) |
|
80 | 89 |
{ |
81 |
- $memberGroups = StringUtil::deserialize($objGroups->groups); |
|
90 |
+ // Skip disabled users instantly |
|
91 |
+ if($objMembers->disable) |
|
92 |
+ { |
|
93 |
+ continue; |
|
94 |
+ } |
|
95 |
+ |
|
96 |
+ $memberGroups = StringUtil::deserialize($objMembers->groups); |
|
82 | 97 |
|
83 |
- if($objGroups->disable || empty($arrGroups) || !\is_array($arrGroups) || !\count(array_intersect($arrGroups, $memberGroups))) |
|
98 |
+ if(!\count(array_intersect($arrGroups, $memberGroups))) |
|
84 | 99 |
{ |
85 | 100 |
continue; |
86 | 101 |
} |
... | ... |
@@ -88,9 +103,9 @@ class ModuleMemberList extends ModuleMemberExtension |
88 | 103 |
$arrMemberFields = StringUtil::deserialize($this->memberFields, true); |
89 | 104 |
|
90 | 105 |
$objTemplate = new FrontendTemplate($this->memberListTpl ?: $this->strMemberTemplate); |
91 |
- $objTemplate->setData($objGroups->current()->row()); |
|
106 |
+ $objTemplate->setData($objMembers->current()->row()); |
|
92 | 107 |
|
93 |
- $arrMembers[] = $this->parseMemberTemplate($objGroups->current(), $objTemplate, $arrMemberFields, $this->imgSize); |
|
108 |
+ $arrMembers[] = $this->parseMemberTemplate($objMembers->current(), $objTemplate, $arrMemberFields, $this->imgSize); |
|
94 | 109 |
} |
95 | 110 |
} |
96 | 111 |
|
... | ... |
@@ -27,8 +27,10 @@ use Contao\System; |
27 | 27 |
|
28 | 28 |
/** |
29 | 29 |
* Class ModuleMemberList |
30 |
- * |
|
31 |
- * @author Daniele Sciannimanica <https://github.com/doishub> |
|
30 |
+ * |
|
31 |
+ * @property string $ext_groups considered member groups |
|
32 |
+ * @property string $memberFields Fields to be displayed |
|
33 |
+ * @property string $memberReaderTpl Frontend reader template |
|
32 | 34 |
*/ |
33 | 35 |
class ModuleMemberReader extends ModuleMemberExtension |
34 | 36 |
{ |
... | ... |
@@ -86,14 +88,14 @@ class ModuleMemberReader extends ModuleMemberExtension |
86 | 88 |
// Get the member |
87 | 89 |
$objMember = MemberModel::findByIdOrAlias(Input::get('items')); |
88 | 90 |
|
89 |
- // The member does not exist |
|
91 |
+ // The member does not exist and is not deactivated |
|
90 | 92 |
if ($objMember === null || $objMember->disable) |
91 | 93 |
{ |
92 | 94 |
throw new PageNotFoundException('Page not found: ' . Environment::get('uri')); |
93 | 95 |
} |
94 | 96 |
|
95 |
- // Check groups |
|
96 |
- $arrGroups = StringUtil::deserialize($this->groups); |
|
97 |
+ // Check for group intersection |
|
98 |
+ $arrGroups = StringUtil::deserialize($this->ext_groups); |
|
97 | 99 |
$memberGroups = StringUtil::deserialize($objMember->groups); |
98 | 100 |
|
99 | 101 |
if (empty($arrGroups) || !\is_array($arrGroups) || !\count(array_intersect($arrGroups, $memberGroups))) |