/** * @param AbstractQueryDesigner $abstractQueryDesigner * @param object $entity * @param string $type * * @return string[] */ public function getQueryContactInformationFields(AbstractQueryDesigner $abstractQueryDesigner, $entity, $type) { $contactInformationFields = $this->contactInformationFieldHelper->getEntityContactInformationColumns(ClassUtils::getRealClass($entity)); if (empty($contactInformationFields)) { return []; } $definitionColumns = []; $definition = $abstractQueryDesigner->getDefinition(); if ($definition) { $definition = json_decode($definition, JSON_OBJECT_AS_ARRAY); if (!empty($definition['columns'])) { $definitionColumns = array_map(function (array $columnDefinition) { return $columnDefinition['name']; }, $definition['columns']); } } $typedFields = array_keys(array_filter($contactInformationFields, function ($contactInformationField) use($type) { return $contactInformationField === $type; })); if (!empty($definitionColumns)) { $typedFields = array_intersect($typedFields, $definitionColumns); } $propertyAccessor = PropertyAccess::createPropertyAccessor(); return array_map(function ($typedField) use($propertyAccessor, $entity) { return (string) $propertyAccessor->getValue($entity, $typedField); }, $typedFields); }
public function testGetEntityContactInformationColumns() { $entity = '\\stdClass'; $columns = array($this->fields['one'], $this->fields['two'], $this->fields['three'], $this->fields['four']); $this->assertEntityMetadataCall($entity, $columns); $this->assertContactInformationConfig($entity); $this->assertEquals(array($this->fields['one'] => 'email', $this->fields['two'] => 'phone'), $this->helper->getEntityContactInformationColumns($entity)); }
/** * @param string|object $entityOrClass * @param string|null $type * @return array */ public function getEntityTypedFields($entityOrClass, $type = null) { $entityOrClass = ClassUtils::getRealClass($entityOrClass); $contactInformationFields = $this->contactInformationFieldHelper->getEntityContactInformationColumns($entityOrClass); if (empty($contactInformationFields)) { return []; } if ($type) { $contactInformationFields = $this->filterByType($contactInformationFields, $type); } return $contactInformationFields; }