/** * @param Collection $collection * @param ConfigIdInterface $fieldConfig * * @return array */ protected function getValueForCollection(Collection $collection, ConfigIdInterface $fieldConfig) { $extendConfig = $this->extendProvider->getConfigById($fieldConfig); $titleFieldName = $extendConfig->get('target_title'); $value = $this->getEntityRouteOptions($extendConfig->get('target_entity')); $values = []; $priorities = []; /** @var object $item */ foreach ($collection as $item) { $value['route_params']['id'] = $item->getId(); $title = []; foreach ($titleFieldName as $fieldName) { $title[] = $this->propertyAccessor->getValue($item, $fieldName); } $values[] = ['id' => $item->getId(), 'link' => $value['route'] ? $this->router->generate($value['route'], $value['route_params']) : false, 'title' => implode(' ', $title)]; if ($item instanceof PriorityItem) { $priorities[] = $item->getPriority(); } } // sort values by priority if needed if (!empty($priorities) && count($priorities) === count($values)) { array_multisort($priorities, $values); } $value['values'] = $values; return $value; }
/** * @param ConfigInterface $config * @return bool */ public function filterFields(ConfigInterface $config) { $extendConfig = $this->extendProvider->getConfigById($config->getId()); /** @var FieldConfigId $fieldConfigId */ $fieldConfigId = $extendConfig->getId(); // skip system, new and deleted fields if (!$config->is('owner', ExtendScope::OWNER_CUSTOM) || $config->is('state', ExtendScope::STATE_NEW) || $config->is('is_deleted')) { return false; } // skip invisible fields if (!$this->viewProvider->getConfigById($config->getId())->is('is_displayable')) { return false; } // skip relations if they are referenced to deleted entity $underlyingFieldType = $this->fieldTypeHelper->getUnderlyingType($fieldConfigId->getFieldType()); if (in_array($underlyingFieldType, RelationType::$anyToAnyRelations) && $this->extendProvider->getConfig($extendConfig->get('target_entity'))->is('is_deleted', true)) { return false; } return true; }