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