/** * Render the panels. * * @param array $ignoredPanels A list with ignored elements [Optional]. * * @throws DcGeneralRuntimeException When no information of panels can be obtained from the data container. * * @return string */ public function render($ignoredPanels = array()) { // TODO: Determine list of ignored panels by triggering an event. if ($this->view->getPanel() === null) { throw new DcGeneralRuntimeException('No panel information stored in data container.'); } $environment = $this->getEnvironment(); $dispatcher = $environment->getEventDispatcher(); $panels = array(); foreach ($this->view->getPanel() as $panel) { $panels[] = $this->renderPanelRow($panel, $ignoredPanels); } if (count($panels)) { $template = new ContaoBackendViewTemplate('dcbe_general_panel'); $themeEvent = new GetThemeEvent(); $dispatcher->dispatch(ContaoEvents::BACKEND_GET_THEME, $themeEvent); $template->set('action', ampersand($environment->getInputProvider()->getRequestUrl(), true))->set('theme', $themeEvent->getTheme())->set('panel', $panels); return $template->parse(); } return ''; }
/** * Handle the show event. * * @return void * * @throws DcGeneralRuntimeException The error. */ public function process() { $environment = $this->getEnvironment(); if ($environment->getDataDefinition()->getBasicDefinition()->isEditOnlyMode()) { $this->getEvent()->setResponse($environment->getView()->edit($this->getEvent()->getAction())); return; } $translator = $environment->getTranslator(); $modelId = ModelId::fromSerialized($environment->getInputProvider()->getParameter('id')); $dataProvider = $environment->getDataProvider($modelId->getDataProviderName()); $model = $this->getModel(); $data = $this->convertModel($model, $environment); $headline = $this->getHeadline($model); $template = new ContaoBackendViewTemplate('dcbe_general_show'); $template->set('headline', $headline)->set('arrFields', $data['values'])->set('arrLabels', $data['labels']); if ($dataProvider instanceof MultiLanguageDataProviderInterface) { $template->set('languages', $environment->getController()->getSupportedLanguages($model->getId()))->set('currentLanguage', $dataProvider->getCurrentLanguage())->set('languageSubmit', specialchars($translator->translate('MSC.showSelected')))->set('backBT', specialchars($translator->translate('MSC.backBT'))); } else { $template->set('languages', null); } $this->getEvent()->setResponse($template->parse()); }
/** * Create the edit mask. * * @return string * * @throws DcGeneralRuntimeException If the data container is not editable, closed. * * @throws DcGeneralInvalidArgumentException If an unknown property is encountered in the palette. * * @SuppressWarnings(PHPMD.LongVariable) */ public function execute() { $environment = $this->getEnvironment(); $definition = $this->getDataDefinition(); $dataProvider = $environment->getDataProvider($this->model->getProviderName()); $dataProviderDefinition = $definition->getDataProviderDefinition(); $dataProviderInformation = $dataProviderDefinition->getInformation($this->model->getProviderName()); $inputProvider = $environment->getInputProvider(); $palettesDefinition = $definition->getPalettesDefinition(); $blnSubmitted = $inputProvider->getValue('FORM_SUBMIT') === $definition->getName(); $blnIsAutoSubmit = $inputProvider->getValue('SUBMIT_TYPE') === 'auto'; $widgetManager = new ContaoWidgetManager($environment, $this->model); $this->checkEditable($this->model); $this->checkCreatable($this->model); $environment->getEventDispatcher()->dispatch(PreEditModelEvent::NAME, new PreEditModelEvent($environment, $this->model)); $environment->getEventDispatcher()->dispatch(DcGeneralEvents::ENFORCE_MODEL_RELATIONSHIP, new EnforceModelRelationshipEvent($this->getEnvironment(), $this->model)); // Pass 1: Get the palette for the values stored in the model. $palette = $palettesDefinition->findPalette($this->model); $propertyValues = $this->processInput($widgetManager); if ($blnSubmitted && $propertyValues) { // Pass 2: Determine the real palette we want to work on if we have some data submitted. $palette = $palettesDefinition->findPalette($this->model, $propertyValues); // Update the model - the model might add some more errors to the propertyValueBag via exceptions. $this->getEnvironment()->getController()->updateModelFromPropertyBag($this->model, $propertyValues); } $fieldSets = $this->buildFieldSet($widgetManager, $palette, $propertyValues); if (!$blnIsAutoSubmit && $blnSubmitted && empty($this->errors)) { if ($this->doPersist()) { $this->handleSubmit($this->model); } } $objTemplate = new ContaoBackendViewTemplate('dcbe_general_edit'); $objTemplate->setData(array('fieldsets' => $fieldSets, 'versions' => $dataProviderInformation->isVersioningEnabled() ? $dataProvider->getVersions($this->model->getId()) : null, 'subHeadline' => $this->getHeadline(), 'table' => $definition->getName(), 'enctype' => 'multipart/form-data', 'error' => $this->errors, 'editButtons' => $this->getEditButtons(), 'noReload' => (bool) $this->errors, 'breadcrumb' => $this->breadcrumb)); if (in_array('ContaoCommunityAlliance\\DcGeneral\\Data\\MultiLanguageDataProviderInterface', class_implements($environment->getDataProvider($this->model->getProviderName())))) { /** @var MultiLanguageDataProviderInterface $dataProvider */ $langsNative = array(); require TL_ROOT . '/system/config/languages.php'; $objTemplate->set('languages', $environment->getController()->getSupportedLanguages($this->model->getId()))->set('language', $dataProvider->getCurrentLanguage())->set('languageHeadline', $langsNative[$dataProvider->getCurrentLanguage()]); } else { $objTemplate->set('languages', null)->set('languageHeadline', ''); } return $objTemplate->parse(); }
/** * Render a given model. * * @param ModelInterface $objModel The model to render. * * @param string $strToggleID The id of the toggler. * * @return string */ protected function parseModel($objModel, $strToggleID) { $objModel->setMeta($objModel::LABEL_VALUE, $this->formatModel($objModel)); if ($objModel->getMeta($objModel::SHOW_CHILDREN)) { $toggleTitle = $this->getEnvironment()->getTranslator()->translate('collapseNode', 'MSC'); } else { $toggleTitle = $this->getEnvironment()->getTranslator()->translate('expandNode', 'MSC'); } $toggleScript = sprintf('Backend.getScrollOffset(); return BackendGeneral.loadSubTree(this, ' . '{\'toggler\':\'%s\', \'id\':\'%s\', \'providerName\':\'%s\', \'level\':\'%s\'});', $strToggleID, $objModel->getId(), $objModel->getProviderName(), $objModel->getMeta('dc_gen_tv_level')); $toggleUrlEvent = new AddToUrlEvent('ptg=' . $objModel->getId() . '&provider=' . $objModel->getProviderName()); $this->getEnvironment()->getEventDispatcher()->dispatch(ContaoEvents::BACKEND_ADD_TO_URL, $toggleUrlEvent); $template = new ContaoBackendViewTemplate('widget_treepicker_entry'); $template->setTranslator($this->getEnvironment()->getTranslator())->set('id', $this->strId)->set('name', $this->strName)->set('fieldType', $this->fieldType)->set('environment', $this->getEnvironment())->set('objModel', $objModel)->set('strToggleID', $strToggleID)->set('toggleUrl', $toggleUrlEvent->getUrl())->set('toggleTitle', $toggleTitle)->set('toggleScript', $toggleScript)->set('active', $this->optionChecked($objModel->getProperty($this->idProperty), $this->value))->set('idProperty', $this->idProperty); $level = $objModel->getMeta(DCGE::TREE_VIEW_LEVEL); if ($this->minLevel > 0 && $level < $this->minLevel - 1) { $template->set('fieldType', 'none'); } if ($this->maxLevel > 0 && $level > $this->maxLevel - 1) { $template->set('fieldType', 'none'); } return $template->parse(); }