/**
  * 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);
 }
Esempio n. 2
0
 /**
  * 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);
     }
 }