예제 #1
0
 /**
  * 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 '';
 }
예제 #2
0
 /**
  * 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());
 }
예제 #3
0
 /**
  * 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();
 }
예제 #4
0
 /**
  * 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();
 }