/** * Get the static instance. * * @static * @return MetaModelController */ public static function getInstance() { if (self::$objInstance == null) { self::$objInstance = new self(); } return self::$objInstance; }
protected function handleStandalone($arrDCA) { $objMetaModel = MetaModelFactory::byId($arrDCA['pid']); $strModuleName = 'metamodel_' . $objMetaModel->getTableName(); $strTableCaption = $objMetaModel->getName(); // determine image to use. if ($arrDCA['backendicon'] && file_exists(TL_ROOT . '/' . $arrDCA['backendicon'])) { $strIcon = MetaModelController::getImage(MetaModelController::urlEncode($arrDCA['backendicon']), 16, 16); } else { $strIcon = 'system/modules/metamodels/html/metamodels.png'; } $strSection = trim($arrDCA['backendsection']) ? $arrDCA['backendsection'] : 'metamodels'; $GLOBALS['BE_MOD'][$strSection][$strModuleName] = array('tables' => array($objMetaModel->getTableName()), 'icon' => $strIcon, 'callback' => 'MetaModelBackendModule'); $arrCaption = array($strTableCaption); foreach (deserialize($arrDCA['backendcaption'], true) as $arrLangEntry) { if ($arrLangEntry['label'] != '' && $arrLangEntry['langcode'] == self::getUser()->language) { $arrCaption = array($arrLangEntry['label'], $arrLangEntry['description']); } } $GLOBALS['TL_LANG']['MOD'][$strModuleName] = $arrCaption; }
public function getBackendIcon($strBackendIcon) { // determine image to use. if ($strBackendIcon && file_exists(TL_ROOT . '/' . $strBackendIcon)) { return MetaModelController::getImage(MetaModelController::urlEncode($strBackendIcon), 16, 16); } else { return 'system/modules/metamodels/html/metamodels.png'; } }
/** * Build the jumpTo link for use in templates. * * The returning array will hold the following keys: * * params - the url parameter (only if a valid filter setting could be determined). * * deep - boolean true, if parameters are non empty, false otherwise. * * page - id of the jumpTo page. * * url - the complete generated url * * @param IMetaModelRenderSettings $objSettings The render settings to use. * * @return array */ public function buildJumpToLink($objSettings) { if (!$objSettings) { return null; } // Get the right jumpto. $strDesiredLanguage = $this->getMetaModel()->getActiveLanguage(); $strFallbackLanguage = $this->getMetaModel()->getFallbackLanguage(); $intJumpTo = 0; $intFilterSettings = 0; foreach ((array) $objSettings->get('jumpTo') as $arrJumpTo) { // If either desired language or fallback, keep the result. if (!$this->getMetaModel()->isTranslated() || $arrJumpTo['langcode'] == $strDesiredLanguage || $arrJumpTo['langcode'] == $strFallbackLanguage) { $intJumpTo = $arrJumpTo['value']; $intFilterSettings = $arrJumpTo['filter']; // If the desired language, break. Otherwise try to get the desired one until all have been evaluated. if ($strDesiredLanguage == $arrJumpTo['langcode']) { break; } } } // Apply jumpTo urls based upon the filter defined in the render settings. $objPage = MetaModelController::getPageDetails($intJumpTo); if (!$objPage) { return null; } $arrJumpTo = array(); $strParams = ''; if ($intFilterSettings) { $objFilterSettings = MetaModelFilterSettingsFactory::byId($intFilterSettings); $arrParams = $objFilterSettings->generateFilterUrlFrom($this, $objSettings); foreach ($arrParams as $strKey => $strValue) { if ($strKey == 'auto_item') { $strParams = '/' . $strValue . $strParams; } else { $strParams .= sprintf('/%s/%s', $strKey, $strValue); } } $arrJumpTo['params'] = $arrParams; $arrJumpTo['deep'] = strlen($strParams) > 0; if (isset($GLOBALS['TL_LANG']['MSC'][$this->getMetaModel()->getTableName()][$objSettings->get('id')]['details'])) { $arrJumpTo['label'] = $GLOBALS['TL_LANG']['MSC'][$this->getMetaModel()->getTableName()][$objSettings->get('id')]['details']; } elseif (isset($GLOBALS['TL_LANG']['MSC'][$this->getMetaModel()->getTableName()]['details'])) { $arrJumpTo['label'] = $GLOBALS['TL_LANG']['MSC'][$this->getMetaModel()->getTableName()]['details']; } else { $arrJumpTo['label'] = $GLOBALS['TL_LANG']['MSC']['details']; } } $arrJumpTo['page'] = $intJumpTo; $arrJumpTo['url'] = MetaModelController::generateFrontendUrl($objPage->row(), $strParams); return $arrJumpTo; }
/** * Makes all protected methods from class Controller callable publically. */ public function __call($strMethod, $arrArgs) { return call_user_func_array(array(MetaModelController::getInstance(), $strMethod), $arrArgs); }
/** * Returns the frontend filter widget information for the filter setting. * * The returning array will hold the following keys: * * class - The CSS classes for the widget. * * label - The label text for the widget. * * formfield - The parsed default widget object for this filter setting. * * raw - The widget information that was used for rendering "formfield" as raw array (this means * prior calling prepareForWidget()). * * urlparam - The URL parameter used for this widget. * * options - The filter options available to be used in selects etc. see prepareFrontendFilterOptions * for details on the contained array. * * autosubmit - True if the frontend filter shall perform auto form submitting, false otherwise. * * urlvalue - The current value selected in the filtersetting. Will use "urlvalue" from $arrWidget with * fallback to the value of the url param in the filter url. * * @param array $arrWidget The widget information to use for generating. * * @param array $arrFilterUrl The filter url parameters to use. * * @param array $arrJumpTo The jumpTo page to use for URL generating - if empty, the current * frontend page will get used. * * @param bool $blnAutoSubmit Determines if the generated options/widgets shall perform auto submitting * or not. * * @return array */ protected function prepareFrontendFilterWidget($arrWidget, $arrFilterUrl, $arrJumpTo, MetaModelFrontendFilterOptions $objFrontendFilterOptions) { $strClass = $GLOBALS['TL_FFL'][$arrWidget['inputType']]; // No widget? no output! that's it. if (!$strClass) { return array(); } // Determine current value. $arrWidget['value'] = $arrFilterUrl[$arrWidget['eval']['urlparam']]; $arrData = MetaModelController::getInstance()->prepareForWidget($arrWidget, $arrWidget['eval']['urlparam'], $arrWidget['value']); if ($objFrontendFilterOptions->isAutoSubmit() && TL_MODE == 'FE') { $GLOBALS['TL_JAVASCRIPT']['metamodels'] = 'system/modules/metamodels/html/metamodels.js'; } /** @var Widget $objWidget */ $objWidget = new $strClass($arrData); $strField = $objWidget->generate(); return array('class' => sprintf('mm_%s %s%s%s', $arrWidget['inputType'], $arrWidget['eval']['urlparam'], $arrWidget['value'] !== null ? ' used' : ' unused', $objFrontendFilterOptions->isAutoSubmit() ? ' submitonchange' : ''), 'label' => $objWidget->generateLabel(), 'formfield' => $strField, 'raw' => $arrWidget, 'urlparam' => $arrWidget['eval']['urlparam'], 'options' => $this->prepareFrontendFilterOptions($arrWidget, $arrFilterUrl, $arrJumpTo, $objFrontendFilterOptions->isAutoSubmit()), 'count' => $arrWidget['count'], 'showCount' => $objFrontendFilterOptions->isShowCountValues(), 'autosubmit' => $objFrontendFilterOptions->isAutoSubmit(), 'urlvalue' => array_key_exists('urlvalue', $arrWidget) ? $arrWidget['urlvalue'] : $arrWidget['value']); }
/** * Replace all insert tags in the query string. * * @param string $strSQL SQL to parse * * @param array $arrParams Query param stack * * @return string Parsed SQL */ protected function parseInsertTags($strSQL, array &$arrParams) { return MetaModelController::getInstance()->replaceInsertTags($strSQL); }
/** * Process all folders and resolve to a valid file list. * * @return ToolboxFile */ public function resolveFiles() { // Step 1.: fetch all files. $this->collectFiles(); // TODO: check if downloading is allowed and send file to browser then // see https://github.com/MetaModels/attribute_file/issues/6 if (!$this->getShowImages() && ($strFile = Input::getInstance()->get('file')) && in_array($strFile, $this->foundFiles)) { MetaModelController::getInstance()->sendFileToBrowser($strFile); } // Step 2.: Fetch all meta data for the found files. $this->parseMetafiles(); // Step 3.: fetch additional information like modification time etc. and prepare the output buffer. $this->fetchAdditionalData(); return $this; }