/** * Default handler for formatting a model. * * @param FormatModelLabelEvent $event The event. * * @return void */ public function handleFormatModelLabel(FormatModelLabelEvent $event) { $environment = $event->getEnvironment(); $model = $event->getModel(); $dataDefinition = $environment->getDataDefinition(); /** @var Contao2BackendViewDefinitionInterface $viewSection */ $viewSection = $dataDefinition->getDefinition(Contao2BackendViewDefinitionInterface::NAME); $listing = $viewSection->getListingConfig(); $properties = $dataDefinition->getPropertiesDefinition(); $formatter = $listing->getLabelFormatter($model->getProviderName()); $sorting = ViewHelpers::getGroupingMode($environment); $sortingDefinition = $sorting['sorting']; $firstSorting = ''; if ($sortingDefinition) { /** @var GroupAndSortingDefinitionInterface $sortingDefinition */ foreach ($sortingDefinition as $information) { /** @var GroupAndSortingInformationInterface $information */ if ($information->getProperty()) { $firstSorting = reset($sorting); break; } } } $args = array(); foreach ($formatter->getPropertyNames() as $propertyName) { if ($properties->hasProperty($propertyName)) { $property = $properties->getProperty($propertyName); $args[$propertyName] = (string) ViewHelpers::getReadableFieldValue($environment, $property, $model); } else { $args[$propertyName] = '-'; } } $modelToLabelEvent = new ModelToLabelEvent($environment, $model); $modelToLabelEvent->setArgs($args)->setLabel($formatter->getFormat())->setFormatter($formatter); $environment->getEventDispatcher()->dispatch(ModelToLabelEvent::NAME, $modelToLabelEvent); $label = array(); // Add columns. if ($listing->getShowColumns()) { $fields = $formatter->getPropertyNames(); $args = $modelToLabelEvent->getArgs(); if (!is_array($args)) { $label[] = array('colspan' => count($fields), 'class' => 'tl_file_list col_1', 'content' => $args); } else { foreach ($fields as $j => $propertyName) { $label[] = array('colspan' => 1, 'class' => 'tl_file_list col_' . $j . ($propertyName == $firstSorting ? ' ordered_by' : ''), 'content' => $args[$propertyName] != '' ? $args[$propertyName] : '-'); } } } else { if (!is_array($modelToLabelEvent->getArgs())) { $string = $modelToLabelEvent->getArgs(); } else { $string = vsprintf($modelToLabelEvent->getLabel(), $modelToLabelEvent->getArgs()); } if ($formatter->getMaxLength() !== null && strlen($string) > $formatter->getMaxLength()) { $string = substr($string, 0, $formatter->getMaxLength()); } $label[] = array('colspan' => null, 'class' => 'tl_file_list', 'content' => $string); } $event->setLabel($label); }
/** * Convert a model to it's labels and human readable values. * * @param ModelInterface $model The model to display. * * @param EnvironmentInterface $environment The environment. * * @return array * * @throws DcGeneralRuntimeException When a property could not be retrieved. */ protected function convertModel($model, $environment) { $definition = $environment->getDataDefinition(); $properties = $definition->getPropertiesDefinition(); $palette = $definition->getPalettesDefinition()->findPalette($model); $values = array(); $labels = array(); // Show only allowed fields. foreach ($palette->getVisibleProperties($model) as $paletteProperty) { $property = $properties->getProperty($paletteProperty->getName()); if (!$property) { throw new DcGeneralRuntimeException('Unable to retrieve property ' . $paletteProperty->getName()); } // Make it human readable. $values[$paletteProperty->getName()] = ViewHelpers::getReadableFieldValue($this->getEnvironment(), $property, $model); $labels[$paletteProperty->getName()] = $this->getPropertyLabel($property); } return array('labels' => $labels, 'values' => $values); }
/** * Format the group header by the grouping mode. * * @param mixed $value The given value. * * @param int $groupingMode The grouping mode. * * @param int $groupingLength The grouping length. * * @param EnvironmentInterface $environment The environment. * * @param PropertyInterface $property The current property definition. * * @param ModelInterface $model The current data model. * * @return string */ private function formatByGroupingMode($value, $groupingMode, $groupingLength, $environment, $property, $model) { $dispatcher = $environment->getEventDispatcher(); switch ($groupingMode) { case GroupAndSortingInformationInterface::GROUP_CHAR: $value = ViewHelpers::getReadableFieldValue($environment, $property, $model); return $value != '' ? ucfirst(utf8_substr($value, 0, $groupingLength ?: null)) : '-'; case GroupAndSortingInformationInterface::GROUP_DAY: $value = $this->getTimestamp($value); $event = new ParseDateEvent($value, \Config::get('dateFormat')); $dispatcher->dispatch(ContaoEvents::DATE_PARSE, $event); return $value != '' ? $event->getResult() : '-'; case GroupAndSortingInformationInterface::GROUP_MONTH: $value = $this->getTimestamp($value); $event = new ParseDateEvent($value, 'F Y'); $dispatcher->dispatch(ContaoEvents::DATE_PARSE, $event); return $event->getResult(); case GroupAndSortingInformationInterface::GROUP_YEAR: if ($value instanceof \DateTime) { $value = $value->getTimestamp(); } return $value != '' ? date('Y', $value) : '-'; default: return ViewHelpers::getReadableFieldValue($environment, $property, $model); } }