Exemple #1
0
 /**
  * Get the widget instance.
  *
  * @param string $fieldName     The property name.
  *
  * @param string $serializedId  The serialized id of the model.
  *
  * @param string $propertyValue The property value.
  *
  * @return \Widget
  */
 protected function getWidget($fieldName, $serializedId, $propertyValue)
 {
     $environment = $this->getEnvironment();
     $property = $environment->getDataDefinition()->getPropertiesDefinition()->getProperty($fieldName);
     $propertyValues = new PropertyValueBag();
     if ($serializedId !== null) {
         $model = $this->getModelFromSerializedId($serializedId);
     } else {
         $dataProvider = $environment->getDataProvider();
         $model = $dataProvider->getEmptyModel();
     }
     $widgetManager = new ContaoWidgetManager($environment, $model);
     // Process input and update changed properties.
     $treeType = substr($property->getWidgetType(), 0, 4);
     $propertyValue = $this->getTreeValue($treeType, $propertyValue);
     if ($treeType == 'file' || $treeType == 'page') {
         $extra = $property->getExtra();
         if (is_array($propertyValue) && !isset($extra['multiple'])) {
             $propertyValue = $propertyValue[0];
         } else {
             $propertyValue = implode(',', (array) $propertyValue);
         }
     }
     $propertyValues->setPropertyValue($fieldName, $propertyValue);
     $widgetManager->processInput($propertyValues);
     $model->setProperty($fieldName, $propertyValues->getPropertyValue($fieldName));
     $widget = $widgetManager->getWidget($fieldName);
     return $widget;
 }
 /**
  * Render all fieldsets.
  *
  * @return array
  */
 private function renderSubForms()
 {
     $fieldSets = array();
     $first = true;
     foreach ($this->getForms() as $form) {
         $fields = array();
         foreach ($form->getFields() as $field) {
             $fields[] = $this->widgetManager->renderWidget($field->getName(), false, $this->propertyValues);
         }
         $fieldset = array('label' => $form->getLabel(), 'name' => $form->getFullName(), 'palette' => implode('', $fields), 'legend' => $form->getLabel(), 'description' => $form->getDescription());
         if (isset($fieldset['class'])) {
             $fieldset['class'] .= ' ';
             $fieldset['class'] .= $first ? 'tl_tbox' : 'tl_box';
         } else {
             $fieldset['class'] = $first ? 'tl_tbox' : 'tl_box';
         }
         $fieldSets[] = $fieldset;
         $first = false;
     }
     return $fieldSets;
 }
Exemple #3
0
 /**
  * @param ActionEvent $event
  *
  * @throws \Exception
  * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  */
 public function handleActionForSelectri(ActionEvent $event)
 {
     if (!\Input::get('striAction') || !\Input::get('striID') || \Input::get('striID') === '' && \Input::get('striAction') != 'levels') {
         return;
     }
     $environment = $event->getEnvironment();
     $dataDefinition = $environment->getDataDefinition();
     $inputProvider = $environment->getInputProvider();
     $providerInformation = $dataDefinition->getDataProviderDefinition()->getInformation($dataDefinition->getName());
     $dataProviderClass = $providerInformation->getClassName();
     /** @var EntityDataProvider $dataProvider */
     $dataProvider = new $dataProviderClass();
     $dataProvider->setBaseConfig(array('source' => $dataDefinition->getName()));
     $repository = $dataProvider->getEntityRepository();
     $messageContent = null;
     if ($inputProvider->hasParameter('id')) {
         $modelId = ModelId::fromSerialized(\Input::get('id'));
         $messageContent = $repository->find($modelId->getId());
     }
     if (!$messageContent) {
         $contentModel = $dataProvider->getEmptyModel();
         foreach (array_keys($contentModel->getPropertiesAsArray()) as $property) {
             if (!$inputProvider->hasValue($property)) {
                 continue;
             }
             $contentModel->setProperty($property, $inputProvider->getValue($property));
         }
         $messageContent = $contentModel->getEntity();
     }
     $model = new EntityModel($messageContent);
     $selectriProperty = null;
     foreach ($dataDefinition->getPalettesDefinition()->getPalettes() as $palette) {
         foreach ($palette->getLegends() as $legend) {
             foreach ($legend->getProperties() as $legendProperty) {
                 $property = $dataDefinition->getPropertiesDefinition()->getProperty($legendProperty->getName());
                 if (!in_array($property->getWidgetType(), array('selectri', 'avisotaSelectriWithItems')) || $legendProperty->getName() != \Input::get('striID')) {
                     continue;
                 }
                 $model->getEntity()->setType($palette->getName());
                 $selectriProperty = $property;
             }
         }
     }
     if (!$selectriProperty) {
         return;
     }
     $widgetManager = new ContaoWidgetManager($environment, $model);
     $widgetManager->renderWidget($selectriProperty->getName());
 }
Exemple #4
0
 /**
  * Build the field sets.
  *
  * @param ContaoWidgetManager $widgetManager  The widget manager in use.
  *
  * @param PaletteInterface    $palette        The palette to use.
  *
  * @param PropertyValueBag    $propertyValues The property values.
  *
  * @return array
  */
 protected function buildFieldSet($widgetManager, $palette, $propertyValues)
 {
     $environment = $this->getEnvironment();
     $definition = $this->getDataDefinition();
     $translator = $environment->getTranslator();
     $propertyDefinitions = $definition->getPropertiesDefinition();
     $isAutoSubmit = $environment->getInputProvider()->getValue('SUBMIT_TYPE') === 'auto';
     $legendStates = $this->getLegendStates();
     $fieldSets = array();
     $first = true;
     foreach ($palette->getLegends() as $legend) {
         $legendName = $translator->translate($legend->getName() . '_legend', $definition->getName());
         $fields = array();
         $properties = $legend->getProperties($this->model, $propertyValues);
         if (!$properties) {
             continue;
         }
         $legendVisible = $this->isLegendVisible($legend, $legendStates);
         foreach ($properties as $property) {
             $this->ensurePropertyExists($property->getName(), $propertyDefinitions);
             // If this property is invalid, fetch the error.
             if (!$isAutoSubmit && $propertyValues && $propertyValues->hasPropertyValue($property->getName()) && $propertyValues->isPropertyValueInvalid($property->getName())) {
                 $this->errors = array_merge($this->errors, $propertyValues->getPropertyValueErrors($property->getName()));
                 // Force legend open on error.
                 $legendVisible = true;
             }
             $fields[] = $widgetManager->renderWidget($property->getName(), $isAutoSubmit, $propertyValues);
         }
         $fieldSet['label'] = $legendName;
         $fieldSet['class'] = $this->getLegendClass($first, $legendVisible);
         $fieldSet['palette'] = implode('', $fields);
         $fieldSet['legend'] = $legend->getName();
         $fieldSets[] = $fieldSet;
         $first = false;
     }
     return $fieldSets;
 }
Exemple #5
0
 /**
  * Process input and return all modified properties or null if there is no input.
  *
  * @param ContaoWidgetManager $widgetManager The widget manager in use.
  *
  * @return null|PropertyValueBag
  */
 public function processInput($widgetManager)
 {
     $input = $this->getEnvironment()->getInputProvider();
     if ($input->getValue('FORM_SUBMIT') == $this->getEnvironment()->getDataDefinition()->getName()) {
         $propertyValues = new PropertyValueBag();
         $propertyNames = $this->getEnvironment()->getDataDefinition()->getPropertiesDefinition()->getPropertyNames();
         // Process input and update changed properties.
         foreach ($propertyNames as $propertyName) {
             if ($input->hasValue($propertyName)) {
                 $propertyValue = $input->getValue($propertyName);
                 $propertyValues->setPropertyValue($propertyName, $propertyValue);
             }
         }
         $widgetManager->processInput($propertyValues);
         return $propertyValues;
     }
     return null;
 }