<?php
declare(strict_types=1);
/*
* This file is part of Oveleon ContaoMemberExtension Bundle.
*
* @package contao-member-extension-bundle
* @license MIT
* @author Daniele Sciannimanica <https://github.com/doishub>
* @author Fabian Ekert <https://github.com/eki89>
* @author Sebastian Zoglowek <https://github.com/zoglo>
* @copyright Oveleon <https://www.oveleon.de/>
*/
use Contao\Backend;
use Contao\Controller;
use Contao\System;
System::loadLanguageFile('tl_member_settings');
// Add palettes to tl_module
// ToDo: Change to ArrayUtil::arrayInsert in the future
array_insert($GLOBALS['TL_DCA']['tl_module']['palettes'], 0, [
'avatar' => '{title_legend},name,headline,type;{source_legend},imgSize;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID',
'deleteAvatar' => '{title_legend},name,headline,type;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID',
'memberList' => '{title_legend},name,headline,type;{config_legend},ext_order,ext_orderField,ext_groups,memberFields,imgSize;{redirect_legend},jumpTo;{template_legend:hide},customTpl,memberListTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID',
'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'
]);
$GLOBALS['TL_DCA']['tl_module']['fields']['memberListTpl'] = [
'exclude' => true,
'inputType' => 'select',
'options_callback' => static fn () => Controller::getTemplateGroup('memberExtension_list_'),
'eval' => ['includeBlankOption'=>true, 'chosen'=>true, 'tl_class'=>'w50'],
'sql' => "varchar(64) NOT NULL default ''"
];
$GLOBALS['TL_DCA']['tl_module']['fields']['memberReaderTpl'] = [
'exclude' => true,
'inputType' => 'select',
'options_callback' => static fn () => Controller::getTemplateGroup('memberExtension_reader_'),
'eval' => ['includeBlankOption'=>true, 'chosen'=>true, 'tl_class'=>'w50'],
'sql' => "varchar(64) NOT NULL default ''"
];
$GLOBALS['TL_DCA']['tl_module']['fields']['ext_order'] = [
'exclude' => true,
'inputType' => 'select',
'options' => ['order_random', 'order_asc', 'order_desc'],
'reference' => &$GLOBALS['TL_LANG']['tl_member_settings'],
'eval' => ['tl_class'=>'w50 clr', 'includeBlankOption'=>true, 'chosen'=>true,],
'sql' => "varchar(32) NOT NULL default ''"
];
$GLOBALS['TL_DCA']['tl_module']['fields']['ext_orderField'] = [
'exclude' => true,
'inputType' => 'select',
'options_callback' => ['tl_module_extension', 'getViewableMemberFields'],
'eval' => ['tl_class'=>'w50', 'includeBlankOption'=>true, 'chosen'=>true,],
'sql' => "varchar(32) NOT NULL default ''"
];
$GLOBALS['TL_DCA']['tl_module']['fields']['memberFields'] = [
'exclude' => true,
'inputType' => 'checkboxWizard',
'options_callback' => ['tl_module_extension', 'getMemberProperties'],
'eval' => ['multiple'=>true, 'tl_class'=>'clr'],
'sql' => "blob NULL"
];
$GLOBALS['TL_DCA']['tl_module']['fields']['ext_groups'] = [
'exclude' => true,
'inputType' => 'checkbox',
'foreignKey' => 'tl_member_group.name',
'eval' => ['multiple'=>true, 'tl_class'=>'clr'],
'sql' => "blob NULL",
'relation' => ['type'=>'hasMany', 'load'=>'lazy']
];
class tl_module_extension extends Backend
{
/**
* Import the back end user object
*/
public function __construct()
{
parent::__construct();
$this->import('Contao\BackendUser', 'User');
}
/**
* Check permissions to edit the table
*
* @throws Contao\CoreBundle\Exception\AccessDeniedException
*/
public function checkPermission()
{
if ($this->User->isAdmin)
{
return;
}
if (!$this->User->hasAccess('modules', 'themes')) {
throw new Contao\CoreBundle\Exception\AccessDeniedException('Not enough permissions to access the front end modules module.');
}
}
/**
* Return all fields of table tl_member without account data
*
* @return array
*/
public function getMemberProperties()
{
$return = [];
Contao\System::loadLanguageFile('tl_member');
$this->loadDataContainer('tl_member');
foreach ($GLOBALS['TL_DCA']['tl_member']['fields'] as $k=>$v)
{
if (!empty($v['inputType']) && $v['inputType'] !== 'password')
{
$return[$k] = $GLOBALS['TL_DCA']['tl_member']['fields'][$k]['label'][0];
}
}
return $return;
}
/**
* Return all sortable fields of table tl_member
*
* @return array
*/
public function getViewableMemberFields()
{
$return = [];
Contao\System::loadLanguageFile('tl_member');
$this->loadDataContainer('tl_member');
foreach ($GLOBALS['TL_DCA']['tl_member']['fields'] as $k=>$v)
{
if (!empty($v['inputType']) && $v['eval']['feViewable'] === true)
{
$return[$k] = $GLOBALS['TL_DCA']['tl_member']['fields'][$k]['label'][0] . ' ['.$k.']';
}
}
return $return;
}
}