/** * Create the data container of a metamodel table. * * @param string $strTableName the name of the meta model table that shall be created. * * @return bool true on success, false otherwise. */ public function createDataContainer($strTableName) { if (!in_array($strTableName, MetaModelFactory::getAllTables())) { return false; } // call the loadDataContainer from Controller.php for the base DCA. parent::loadDataContainer('tl_metamodel_item'); parent::loadLanguageFile('tl_metamodel_item'); $GLOBALS['TL_DCA'][$strTableName] = array_replace_recursive($GLOBALS['TL_DCA']['tl_metamodel_item'], (array) $GLOBALS['TL_DCA'][$strTableName]); $arrDCA =& $GLOBALS['TL_DCA'][$strTableName]; $arrDCA['dca_config']['data_provider']['default']['source'] = $strTableName; $objMetaModel = MetaModelFactory::byTableName($strTableName); if ($objMetaModel->isTranslated()) { $this->loadLanguageFile('languages'); } $arrDCASettings = MetaModelDcaBuilder::getInstance()->getDca($objMetaModel->get('id')); $arrViewSettings = MetaModelDcaBuilder::getInstance()->getView($objMetaModel->get('id')); if (!$arrDCASettings) { $strMessage = sprintf($GLOBALS['TL_LANG']['ERR']['no_palette'], $objMetaModel->getName(), self::getUser()->username); MetaModelBackendModule::addMessageEntry($strMessage, METAMODELS_ERROR, $this->addToUrl('do=metamodels&table=tl_metamodel_dca&id=' . $objMetaModel->get('id'))); $this->log($strMessage, 'MetaModelDatabase createDataContainer()', TL_ERROR); return true; } if (!$arrViewSettings) { $strMessage = sprintf($GLOBALS['TL_LANG']['ERR']['no_view'], $objMetaModel->getName(), self::getUser()->username); MetaModelBackendModule::addMessageEntry($strMessage, METAMODELS_ERROR, $this->addToUrl('do=metamodels&table=tl_metamodel_rendersettings&id=' . $objMetaModel->get('id'))); $this->log($strMessage, 'MetaModelDatabase createDataContainer()', TL_ERROR); return true; } $arrDCA['config']['metamodel_view'] = $arrViewSettings['id']; $arrDCA['palettes']['default'] = $this->getPaletteAndFields($arrDCASettings['id'], $objMetaModel, $arrDCA); if ($arrDCASettings['backendcaption']) { $arrCaptions = deserialize($arrDCASettings['backendcaption'], true); foreach ($arrCaptions as $arrLangEntry) { if ($arrLangEntry['label'] != '' && $arrLangEntry['langcode'] == $objMetaModel->getActiveLanguage()) { $arrDCA['config']['label'] = $arrLangEntry['label']; } else { if ($arrLangEntry['label'] != '' && !$arrDCA['config']['label'] && $arrLangEntry['langcode'] == $objMetaModel->getFallbackLanguage()) { $arrDCA['config']['label'] = $arrLangEntry['label']; } } } } if (!$arrDCA['config']['label']) { $arrDCA['config']['label'] = $objMetaModel->get('name'); } // Check access level. if ($arrDCASettings['isclosed']) { $arrDCA['config']['closed'] = true; $arrDCA['config']['notDeletable'] = true; unset($arrDCA['list']['operations']['delete']); } // FIXME: if we have variants, we force mode 5 here, no matter what the DCA configs say. if ($objMetaModel->hasVariants()) { $this->createDataContainerWithVariants($objMetaModel, $arrDCASettings, $arrDCA); } else { $this->createDataContainerNormal($objMetaModel, $arrDCASettings, $arrDCA); } $GLOBALS['TL_LANG'][$objMetaModel->getTableName()] = array_replace_recursive($GLOBALS['TL_LANG']['tl_metamodel_item'], (array) $GLOBALS['TL_LANG'][$objMetaModel->getTableName()]); // TODO: add a HOOK here for extensions to manipulate the DCA. loadMetaModelDataContainer($objMetaModel) //$GLOBALS['METAMODEL_HOOKS']['loadDataContainer'] return true; }
/** * Called from config.php in TL_MODE == 'BE' to register everything neccessary for the backend. * * @return void */ public static function buildBackendMenu() { if (!self::initializeContaoObjectStack()) { return; } try { if (self::isDBInitialized()) { // if no backend user authenticated, we will get redirected. self::authenticateBackendUser(); MetaModelDcaBuilder::getInstance()->injectBackendMenu(); self::registerLateConfig(); } } catch (Exception $exc) { // Note: do NOT use the logging prvided by class System here as that one logs into the DB // which is pretty useless as the DB most likely was the one throwing the exception. log_message('Exception in MetaModelBackend::buildBackendMenu() - ' . $exc->getMessage()); } }