/**
  * Update the event with the information returned by the callback.
  *
  * @param GetParentHeaderEvent $event The event being emitted.
  *
  * @param array                $value The additional information.
  *
  * @return void
  */
 public function update($event, $value)
 {
     if ($value === null) {
         return;
     }
     $event->setAdditional($value);
     $event->stopPropagation();
 }
Exemplo n.º 2
0
 /**
  * Render the header of the parent view with information from the parent table.
  *
  * @param ModelInterface $parentModel The parent model.
  *
  * @return array
  */
 protected function renderFormattedHeaderFields($parentModel)
 {
     $environment = $this->getEnvironment();
     $propagator = $this->getEnvironment()->getEventPropagator();
     $definition = $environment->getDataDefinition();
     $viewDefinition = $this->getViewSection();
     $listingDefinition = $viewDefinition->getListingConfig();
     $headerFields = $listingDefinition->getHeaderPropertyNames();
     $parentDefinition = $environment->getParentDataDefinition();
     $parentName = $definition->getBasicDefinition()->getParentDataProvider();
     $add = array();
     foreach ($headerFields as $v) {
         $value = deserialize($parentModel->getProperty($v));
         if ($v == 'tstamp') {
             $value = date($GLOBALS['TL_CONFIG']['datimFormat'], $value);
         }
         $property = $parentDefinition->getPropertiesDefinition()->getProperty($v);
         // FIXME: foreignKey is not implemented yet.
         if ($property && $v != 'tstamp') {
             $evaluation = $property->getExtra();
             $reference = isset($evaluation['reference']) ? $evaluation['reference'] : null;
             $options = $property->getOptions();
             if (is_array($value)) {
                 $value = implode(', ', $value);
             } elseif ($property->getWidgetType() == 'checkbox' && !$evaluation['multiple']) {
                 $value = strlen($value) ? $this->translate('yes', 'MSC') : $this->translate('no', 'MSC');
             } elseif ($value && in_array($evaluation['rgxp'], array('date', 'time', 'datim'))) {
                 $event = new ParseDateEvent($value, $GLOBALS['TL_CONFIG'][$evaluation['rgxp'] . 'Format']);
                 $propagator->propagate(ContaoEvents::DATE_PARSE, $event);
                 $value = $event->getResult();
             } elseif (is_array($reference[$value])) {
                 $value = $reference[$value][0];
             } elseif (isset($reference[$value])) {
                 $value = $reference[$value];
             } elseif ($evaluation['isAssociative'] || array_is_assoc($options)) {
                 $value = $options[$value];
             }
         }
         // Add the sorting field.
         if ($value != '') {
             $lang = $this->translate(sprintf('%s.0', $v), $parentName);
             $key = $lang ? $lang : $v;
             $add[$key] = $value;
         }
     }
     $event = new GetParentHeaderEvent($environment);
     $event->setAdditional($add);
     $propagator->propagate($event::NAME, $event, $this->getEnvironment()->getDataDefinition()->getName());
     if (!$event->getAdditional() !== null) {
         $add = $event->getAdditional();
     }
     // Set header data.
     $arrHeader = array();
     foreach ($add as $k => $v) {
         if (is_array($v)) {
             $v = $v[0];
         }
         $arrHeader[$k] = $v;
     }
     return $arrHeader;
 }
Exemplo n.º 3
0
 /**
  * Add additional parent header fields.
  *
  * @param GetParentHeaderEvent $event The subscribed event.
  *
  * @return void
  */
 public static function addAdditionalParentHeaderFields(GetParentHeaderEvent $event)
 {
     $parentModel = $event->getModel();
     if (!$parentModel instanceof Model) {
         return;
     }
     $item = $parentModel->getItem();
     $metaModel = $item->getMetaModel();
     $renderSetting = $metaModel->getServiceContainer()->getRenderSettingFactory()->createCollection($metaModel);
     $additional = array();
     foreach ($renderSetting->getSettingNames() as $name) {
         $parsed = $item->parseAttribute($name, 'text', $renderSetting);
         $name = $item->getAttribute($name)->getName();
         $additional[$name] = $parsed['text'];
     }
     $additional = array_merge($additional, $event->getAdditional());
     $event->setAdditional($additional);
 }