/** * 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)); $this->view->enforceModelRelationship($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)) { $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 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()) { 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 ''; }
/** * Create the edit mask. * * @param BackendViewInterface $view The view in use. * * @param ModelInterface $model The model with the current data. * * @param ModelInterface $originalModel The data from the original data. * * @param callable $preFunction The function to call before saving an item. * * @param callable $postFunction The function to call after saving an item. * * @param string $breadcrumb The rendered breadcrumb. */ public function __construct($view, $model, $originalModel, $preFunction, $postFunction, $breadcrumb) { $this->environment = $view->getEnvironment(); $this->model = $model; $this->originalModel = $originalModel; $this->preFunction = $preFunction; $this->postFunction = $postFunction; $this->breadcrumb = $breadcrumb; }