/** * 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(); }
/** * 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; }
/** * 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); }