/** * Converts a query from the query designer format to a target format * * @param AbstractQueryDesigner $source * @throws InvalidConfigurationException */ protected function doConvert(AbstractQueryDesigner $source) { $this->entity = $source->getEntity(); $this->definition = json_decode($source->getDefinition(), true); if (!isset($this->definition['columns'])) { throw new InvalidConfigurationException('The "columns" definition does not exist.'); } if (empty($this->definition['columns'])) { throw new InvalidConfigurationException('The "columns" definition must not be empty.'); } $this->tableAliases = []; $this->columnAliases = []; $this->buildQuery(); $this->tableAliases = null; $this->columnAliases = null; }
/** * @param AbstractQueryDesigner $queryDesigner * @param string|null $type * * @return array */ public function getQueryTypedFields(AbstractQueryDesigner $queryDesigner, $type = null) { $entityClass = $queryDesigner->getEntity(); $typedFields = $this->getEntityTypedFields($entityClass, $type); $definitionColumns = []; $definition = $queryDesigner->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']); } } if (!empty($definitionColumns)) { $typedFields = array_intersect($typedFields, $definitionColumns); } return $typedFields; }
/** * @param AbstractQueryDesigner $queryDesigner * * @return array */ public function getQueryContactInformationColumns(AbstractQueryDesigner $queryDesigner) { $columns = array(); // If definition is empty there is no one contact information field $definition = $queryDesigner->getDefinition(); if (!$definition) { return $columns; } $definition = json_decode($definition, JSON_OBJECT_AS_ARRAY); if (empty($definition['columns'])) { return $columns; } $entity = $queryDesigner->getEntity(); foreach ($definition['columns'] as $column) { $contactInformationType = $this->getContactInformationFieldType($entity, $column['name']); if (!empty($contactInformationType)) { $columns[$contactInformationType][] = $column; } } return $columns; }
/** * Process convert * * @param AbstractQueryDesigner $source * * @return \Doctrine\ORM\QueryBuilder */ public function convert(AbstractQueryDesigner $source) { $this->qb = $this->doctrine->getManagerForClass($source->getEntity())->createQueryBuilder(); $this->doConvert($source); return $this->qb; }
/** * @param AbstractQueryDesigner $entity */ public function setCurrentItem(AbstractQueryDesigner $entity) { $this->entityName = $entity->getEntity(); }
/** * @param AbstractQueryDesigner $source */ public function setSource(AbstractQueryDesigner $source) { $em = $this->doctrine->getManagerForClass($source->getEntity()); $this->source = new DatagridSourceSegmentProxy($source, $em); }