<?php /** * ArtLayout for Contao * * Copyright (c) 2016 Benjamin Roth * * @link http://www.esales-media.de * @license commercial */ /** * Callbacks */ $GLOBALS['TL_DCA']['tl_content']['fields']['type']['options_callback'] = array('tl_content_eSM_artLayout','getContentElements'); $GLOBALS['TL_DCA']['tl_content']['config']['onload_callback'][] = array('tl_content_eSM_artLayout','setDefault'); /** * Provide miscellaneous methods that are used by the data configuration array. * * @author Benjamin Roth <http://www.esales-media.de> */ class tl_content_eSM_artLayout extends \Backend { /** * Import the back end user object */ public function __construct() { parent::__construct(); $this->import('BackendUser', 'User'); } /** * Return all allowed content elements * * @param DataContainer $dc * * @return array */ public function getContentElements(\DataContainer $dc) { $groups = array(); if ($dc->activeRecord->ptable == 'tl_article') { // Get article model $Article = \ArticleModel::findByPk($dc->activeRecord->pid); // Check for article layout if ($Article->es_type) { // Get layout model $ArticleLayout = \ArticleLayoutsModel::findByPk($Article->es_type); // Build array of allowed elements if restriction is set if ($ArticleLayout !== null && $ArticleLayout->restrictContentElements) { $arrAllowedCTE = deserialize($ArticleLayout->allowedElements, true); } } // Build elements groups foreach ($GLOBALS['TL_CTE'] as $k => $v) { foreach (array_keys($v) as $kk) { // Skip not allowed elements if (isset($arrAllowedCTE)) { if (!in_array($kk, $arrAllowedCTE)) { continue; } } $groups[$k][] = $kk; } } } else { foreach ($GLOBALS['TL_CTE'] as $k=>$v) { foreach (array_keys($v) as $kk) { $groups[$k][] = $kk; } } } return $groups; } /** * Set default type value * * @param DataContainer $dc */ public function setDefault($dc) { if ($_GET['act'] == 'edit') { $ContentElement = \ContentModel::findByPk($dc->id); if ($ContentElement !== null) { $dc->activeRecord = $ContentElement; $arrGroups = $this->getContentElements($dc); if (count($arrGroups)) { $blnDefaultAvailable = false; foreach ($arrGroups as $k => $v) { if (in_array($ContentElement->type, $v)) { $blnDefaultAvailable = true; } } if (!$blnDefaultAvailable) { $varValue = reset(reset($arrGroups)); \Database::getInstance()->prepare("UPDATE tl_content SET type = ? WHERE id = ?")->execute($varValue,$dc->id); $this->reload(); } } } } } }