/**
  * @param object $entity
  *
  * @return ConfigInterface[]
  */
 protected function getEntityActivityContactFields($entity)
 {
     $fields = array_keys(ActivityScope::$fieldsConfiguration);
     return $this->extendProvider->filter(function (ConfigInterface $config) use($fields) {
         /** @var FieldConfigId $fieldConfigId */
         $fieldConfigId = $config->getId();
         return in_array($fieldConfigId->getFieldName(), $fields);
     }, ClassUtils::getClass($entity));
 }
 /**
  * @param object $entity
  * @param null|string $entityClass
  * @return array
  */
 public function getFields($entity, $entityClass = null)
 {
     $dynamicRow = array();
     if (null === $entityClass) {
         $entityClass = ClassUtils::getRealClass($entity);
     }
     $fields = $this->extendProvider->filter(array($this, 'filterFields'), $entityClass);
     foreach ($fields as $field) {
         /** @var FieldConfigId $fieldConfigId */
         $fieldConfigId = $field->getId();
         $fieldName = $fieldConfigId->getFieldName();
         $fieldType = $fieldConfigId->getFieldType();
         $underlyingFieldType = $this->fieldTypeHelper->getUnderlyingType($fieldType);
         $value = $this->propertyAccessor->getValue($entity, $fieldName);
         /** Prepare OptionSet field type */
         if ($fieldType == 'optionSet') {
             $value = $this->getValueForOptionSet($entity, $fieldConfigId);
         }
         if ($value && $underlyingFieldType == 'manyToOne') {
             $value = $this->propertyAccessor->getValue(FieldAccessor::getValue($entity, $fieldName), $field->get('target_field'));
         }
         /** Prepare Relation field type */
         if ($value && $value instanceof Collection) {
             $value = $this->getValueForCollection($value, $fieldConfigId);
         }
         $fieldConfig = $this->entityProvider->getConfigById($fieldConfigId);
         $label = $fieldConfig->get('label');
         if (!$label) {
             $label = $fieldName;
         }
         $dynamicRow[$fieldName] = array('type' => $fieldType, 'label' => $label, 'value' => $value);
     }
     return $dynamicRow;
 }
 /**
  * @param object      $entity
  * @param null|string $entityClass
  * @return array
  */
 public function getFields($entity, $entityClass = null)
 {
     $dynamicRow = [];
     $priorities = [];
     if (null === $entityClass) {
         $entityClass = ClassUtils::getRealClass($entity);
     }
     $fields = $this->extendProvider->filter([$this, 'filterFields'], $entityClass);
     foreach ($fields as $field) {
         /** @var FieldConfigId $fieldConfigId */
         $fieldConfigId = $field->getId();
         $fieldName = $fieldConfigId->getFieldName();
         $fieldType = $fieldConfigId->getFieldType();
         $value = $this->propertyAccessor->getValue($entity, $fieldName);
         $event = new ValueRenderEvent($entity, $value, $fieldConfigId);
         $this->eventDispatcher->dispatch(EntityExtendEvents::BEFORE_VALUE_RENDER, $event);
         $fieldConfig = $this->entityProvider->getConfigById($fieldConfigId);
         $dynamicRow[$fieldName] = ['type' => $fieldType, 'label' => $fieldConfig->get('label') ?: $fieldName, 'value' => $event->getFieldViewValue()];
         $priorities[] = $this->viewProvider->getConfigById($fieldConfigId)->get('priority', false, 0);
     }
     array_multisort($priorities, SORT_DESC, $dynamicRow);
     return $dynamicRow;
 }