array ( 'dataContainer' => 'Table', 'ptable' => 'tl_eSM_team_group', 'enableVersioning' => true, 'sql' => array ( 'keys' => array ( 'id' => 'primary', 'pid' => 'index', 'pid,published' => 'index' ) ) ), // List 'list' => array ( 'sorting' => array ( 'mode' => 4, 'fields' => array('division', 'lastname'), 'headerFields' => array('title'), 'panelLayout' => 'filter,search;sort,limit', 'child_record_callback' => array('tl_eSM_team', 'listMembers') ), 'global_operations' => array ( 'all' => array ( 'label' => &$GLOBALS['TL_LANG']['MSC']['all'], 'href' => 'act=select', 'class' => 'header_edit_all', 'attributes' => 'onclick="Backend.getScrollOffset()" accesskey="e"' ) ), 'operations' => array ( 'edit' => array ( 'label' => &$GLOBALS['TL_LANG']['tl_eSM_team']['edit'], 'href' => 'act=edit', 'icon' => 'edit.gif' ), 'copy' => array ( 'label' => &$GLOBALS['TL_LANG']['tl_eSM_team']['copy'], 'href' => 'act=copy', 'icon' => 'copy.gif' ), 'delete' => array ( 'label' => &$GLOBALS['TL_LANG']['tl_eSM_team']['delete'], 'href' => 'act=delete', 'icon' => 'delete.gif', 'attributes' => 'onclick="if (!confirm(\'' . $GLOBALS['TL_LANG']['tl_eSM_team']['deleteConfirm'] . '\')) return false; Backend.getScrollOffset();"' ), 'toggle' => array ( 'label' => &$GLOBALS['TL_LANG']['tl_eSM_team']['toggle'], 'icon' => 'visible.gif', 'attributes' => 'onclick="Backend.getScrollOffset();return AjaxRequest.toggleVisibility(this,%s)"', 'button_callback' => array('tl_eSM_team', 'toggleIcon') ), 'show' => array ( 'label' => &$GLOBALS['TL_LANG']['tl_eSM_team']['show'], 'href' => 'act=show', 'icon' => 'show.gif' ) ) ), // Palettes 'palettes' => array ( 'default' => '{person_legend},firstname,lastname;{company_legend},position,division;{picture_legend},singleSRC;{publish_legend:hide},published' ), // Subpalettes 'subpalettes' => array ( ), // Fields 'fields' => array ( 'id' => array ( 'sql' => "int(10) unsigned NOT NULL auto_increment" ), 'pid' => array ( 'foreignKey' => 'tl_faq_category.title', 'sql' => "int(10) unsigned NOT NULL default '0'", 'relation' => array('type'=>'belongsTo', 'load'=>'eager') ), 'tstamp' => array ( 'sql' => "int(10) unsigned NOT NULL default '0'" ), 'firstname' => array ( 'label' => &$GLOBALS['TL_LANG']['tl_eSM_team']['firstname'], 'exclude' => true, 'search' => true, 'inputType' => 'text', 'eval' => array('mandatory'=>true, 'maxlength'=>128, 'tl_class'=>'w50'), 'sql' => "varchar(128) NOT NULL default ''" ), 'lastname' => array ( 'label' => &$GLOBALS['TL_LANG']['tl_eSM_team']['lastname'], 'exclude' => true, 'search' => true, 'inputType' => 'text', 'eval' => array('mandatory'=>false, 'maxlength'=>128, 'tl_class'=>'w50'), 'sql' => "varchar(128) NOT NULL default ''" ), 'position' => array ( 'label' => &$GLOBALS['TL_LANG']['tl_eSM_team']['position'], 'exclude' => true, 'search' => true, 'inputType' => 'text', 'eval' => array('mandatory'=>true, 'maxlength'=>128, 'tl_class'=>'w50'), 'sql' => "varchar(128) NOT NULL default ''" ), 'division' => array ( 'label' => &$GLOBALS['TL_LANG']['tl_eSM_team']['division'], 'exclude' => true, 'filter' => true, 'inputType' => 'select', 'options' => $GLOBALS['eSM_team']['divisions'], 'reference' => &$GLOBALS['TL_LANG']['REF']['divisions'], 'eval' => array('mandatory'=>true, 'maxlength'=>128, 'tl_class'=>'w50'), 'sql' => "varchar(128) NOT NULL default ''" ), 'singleSRC' => array ( 'label' => &$GLOBALS['TL_LANG']['tl_eSM_team']['singleSRC'], 'exclude' => true, 'inputType' => 'fileTree', 'eval' => array('filesOnly'=>true, 'extensions'=>Config::get('validImageTypes'), 'fieldType'=>'radio', 'mandatory'=>true), 'sql' => "binary(16) NULL" ), 'published' => array ( 'label' => &$GLOBALS['TL_LANG']['tl_eSM_team']['published'], 'exclude' => true, 'filter' => true, 'inputType' => 'checkbox', 'default' => '1', 'eval' => array('doNotCopy'=>true), 'sql' => "char(1) NOT NULL default ''" ), ) ); /** * Provide miscellaneous methods that are used by the data configuration array. */ class tl_eSM_team extends Backend { /** * Import the back end user object */ public function __construct() { parent::__construct(); $this->import('BackendUser', 'User'); } /** * Add the type of input field * * @param array $arrRow * * @return string */ public function listMembers($arrRow) { return '
' . $arrRow['firstname'] . ' ' . $arrRow['lastname'] . '
[' . $arrRow['position'] . ']
' . "\n"; } /** * Return the "toggle visibility" button * * @param array $row * @param string $href * @param string $label * @param string $title * @param string $icon * @param string $attributes * * @return string */ public function toggleIcon($row, $href, $label, $title, $icon, $attributes) { if (strlen(Input::get('tid'))) { $this->toggleVisibility(Input::get('tid'), (Input::get('state') == 1), (@func_get_arg(12) ?: null)); $this->redirect($this->getReferer()); } // Check permissions AFTER checking the tid, so hacking attempts are logged if (!$this->User->hasAccess('tl_eSM_team::published', 'alexf')) { return ''; } $href .= '&tid='.$row['id'].'&state='.($row['published'] ? '' : 1); if (!$row['published']) { $icon = 'invisible.gif'; } return ''.Image::getHtml($icon, $label, 'data-state="' . ($row['published'] ? 1 : 0) . '"').' '; } /** * Disable/enable a user group * * @param integer $intId * @param boolean $blnVisible * @param DataContainer $dc */ public function toggleVisibility($intId, $blnVisible, DataContainer $dc=null) { // Set the ID and action Input::setGet('id', $intId); Input::setGet('act', 'toggle'); if ($dc) { $dc->id = $intId; // see #8043 } // Check the field access if (!$this->User->hasAccess('tl_eSM_team::published', 'alexf')) { $this->log('Not enough permissions to publish/unpublish teammember ID "'.$intId.'"', __METHOD__, TL_ERROR); $this->redirect('contao/main.php?act=error'); } $objVersions = new Versions('tl_eSM_team', $intId); $objVersions->initialize(); // Trigger the save_callback if (is_array($GLOBALS['TL_DCA']['tl_news']['fields']['published']['save_callback'])) { foreach ($GLOBALS['TL_DCA']['tl_news']['fields']['published']['save_callback'] as $callback) { if (is_array($callback)) { $this->import($callback[0]); $blnVisible = $this->{$callback[0]}->{$callback[1]}($blnVisible, ($dc ?: $this)); } elseif (is_callable($callback)) { $blnVisible = $callback($blnVisible, ($dc ?: $this)); } } } // Update the database $this->Database->prepare("UPDATE tl_eSM_team SET tstamp=". time() .", published='" . ($blnVisible ? '1' : '') . "' WHERE id=?") ->execute($intId); $objVersions->create(); $this->log('A new version of record "tl_eSM_team.id='.$intId.'" has been created'.$this->getParentEntries('tl_eSM_team', $intId), __METHOD__, TL_GENERAL); } }