/**
  * 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);
 }
Beispiel #2
0
 /**
  * Render the html for the input screen.
  *
  * @param ModelToLabelEvent $event The event.
  *
  * @return void
  */
 public function modelToLabel(ModelToLabelEvent $event)
 {
     if ($event->getEnvironment()->getDataDefinition()->getName() !== 'tl_metamodel_dca') {
         return;
     }
     $environment = $event->getEnvironment();
     $translator = $environment->getTranslator();
     $model = $event->getModel();
     if (!$model->getProperty('isdefault')) {
         return;
     }
     $event->setArgs(array_merge($event->getArgs(), array($translator->translate('MSC.fallback'))))->setLabel(sprintf('%s <span style="color:#b3b3b3; padding-left:3px">[%%s]</span>', $event->getLabel()));
 }
Beispiel #3
0
 /**
  * Format a model accordingly to the current configuration.
  *
  * Returns either an array when in tree mode or a string in (parented) list mode.
  *
  * @param ModelInterface $model    The model that shall be formatted.
  *
  * @param bool           $treeMode Flag if we are running in tree mode or not (optional, default: true).
  *
  * @return array
  */
 public function formatModel(ModelInterface $model, $treeMode = true)
 {
     /** @var ListingConfigInterface $listing */
     $definition = $this->getEnvironment()->getDataDefinition();
     $listing = $definition->getDefinition(Contao2BackendViewDefinitionInterface::NAME)->getListingConfig();
     $properties = $definition->getPropertiesDefinition();
     $sorting = array_keys((array) $listing->getDefaultSortingFields());
     $firstSorting = reset($sorting);
     $formatter = $this->getFormatter($model, $treeMode);
     $args = array();
     foreach ($formatter->getPropertyNames() as $propertyName) {
         if ($properties->hasProperty($propertyName)) {
             $args[$propertyName] = (string) $model->getProperty($propertyName);
         } else {
             $args[$propertyName] = '-';
         }
     }
     $event = new ModelToLabelEvent($this->getEnvironment(), $model);
     $event->setArgs($args)->setLabel($formatter->getFormat())->setFormatter($formatter);
     $this->getEnvironment()->getEventDispatcher()->dispatch($event::NAME, $event);
     $arrLabel = array();
     // Add columns.
     if ($listing->getShowColumns()) {
         $fields = $formatter->getPropertyNames();
         $args = $event->getArgs();
         if (!is_array($args)) {
             $arrLabel[] = array('colspan' => count($fields), 'class' => 'tl_file_list col_1', 'content' => $args);
         } else {
             foreach ($fields as $j => $propertyName) {
                 $arrLabel[] = array('colspan' => 1, 'class' => 'tl_file_list col_' . $j . ($propertyName == $firstSorting ? ' ordered_by' : ''), 'content' => $args[$propertyName] != '' ? $args[$propertyName] : '-');
             }
         }
     } else {
         if (!is_array($event->getArgs())) {
             $string = $event->getArgs();
         } else {
             $string = vsprintf($event->getLabel(), $event->getArgs());
         }
         if ($formatter->getMaxLength() !== null && strlen($string) > $formatter->getMaxLength()) {
             $string = substr($string, 0, $formatter->getMaxLength());
         }
         $arrLabel[] = array('colspan' => null, 'class' => 'tl_file_list', 'content' => $string);
     }
     return $arrLabel;
 }
Beispiel #4
0
 /**
  * Render the current item using the specified render setting.
  *
  * @param ModelToLabelEvent $event The event.
  *
  * @return void
  */
 public static function render(ModelToLabelEvent $event)
 {
     $environment = $event->getEnvironment();
     /** @var IMetaModelDataDefinition $definition */
     $definition = $environment->getDataDefinition();
     /** @var Contao2BackendViewDefinitionInterface $viewSection */
     $viewSection = $definition->getDefinition(Contao2BackendViewDefinitionInterface::NAME);
     $listing = $viewSection->getListingConfig();
     /** @var Model $model */
     $model = $event->getModel();
     if (!$model instanceof Model) {
         return;
     }
     $nativeItem = $model->getItem();
     $metaModel = $nativeItem->getMetaModel();
     $renderSetting = $metaModel->getServiceContainer()->getRenderSettingFactory()->createCollection($metaModel, $definition->getMetaModelDefinition()->getActiveRenderSetting());
     if (!$renderSetting) {
         return;
     }
     $data = array($nativeItem->parseValue('html5', $renderSetting));
     if ($listing->getShowColumns()) {
         $event->setArgs($data[0]['html5']);
         return;
     }
     $template = new Template($renderSetting->get('template'));
     $renderSetting = self::removeInvariantAttributes($nativeItem, $renderSetting);
     $template->setData(array('settings' => $renderSetting, 'items' => new Items(array($nativeItem)), 'view' => $renderSetting, 'data' => $data));
     $event->setArgs(array($template->parse('html5')));
 }