Exemplo n.º 1
0
 /**
  * Retrieve the singleton.
  *
  * @return MetaModelDcaBuilder
  */
 public static function getInstance()
 {
     if (!self::$objInstance) {
         self::$objInstance = new MetaModelDcaBuilder();
     }
     return self::$objInstance;
 }
Exemplo n.º 2
0
 /**
  * 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;
 }
Exemplo n.º 3
0
 /**
  * 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());
     }
 }