/** * 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; }
/** * @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()); }
/** * 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; }
/** * 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; }