/** * 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; }
/** * Build all widgets. * * @return void */ private function buildWidgets() { foreach ($this->getForms() as $form) { foreach ($form->getFields() as $field) { $this->widgets[$field->getName()] = $this->widgetManager->getWidget($field->getName(), $this->propertyValues); } } }