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