Exemplo n.º 1
0
 /**
  * @ActivityListQueryDesigner $queryDesigner
  *
  * @return DatagridInterface
  */
 public function createGrid(ActivityListQueryDesigner $source)
 {
     $this->datagridConfigurationBuilder->setGridName('related-activity');
     $this->datagridConfigurationBuilder->setSource($source);
     $config = $this->datagridConfigurationBuilder->getConfiguration();
     $stopPropagationListener = function (Event $e) {
         $e->stopPropagation();
     };
     $this->eventDispatcher->addListener(BuildBefore::NAME, $stopPropagationListener, 255);
     $grid = $this->gridBuilderLink->getService()->build($config, new ParameterBag());
     $this->eventDispatcher->removeListener(BuildBefore::NAME, $stopPropagationListener);
     return $grid;
 }
 /**
  * {@inheritdoc}
  */
 public function getConfiguration()
 {
     $configuration = parent::getConfiguration();
     $className = $this->source->getEntity();
     $metadata = $this->configManager->getEntityMetadata($className);
     if (!$metadata || empty($metadata->routeView)) {
         return $configuration;
     }
     $fromPart = $configuration->offsetGetByPath('[source][query][from]');
     $entityAlias = null;
     $doctrineMetadata = $this->doctrine->getManagerForClass($className)->getClassMetadata($className);
     $identifiers = $doctrineMetadata->getIdentifier();
     $primaryKey = array_shift($identifiers);
     foreach ($fromPart as $piece) {
         if ($piece['table'] == $className) {
             $entityAlias = $piece['alias'];
             break;
         }
     }
     if (!$entityAlias || !$primaryKey || count($identifiers) > 1 || !$this->isActionSupported($primaryKey)) {
         return $configuration;
     }
     $viewAction = ['view' => ['type' => 'navigate', 'label' => 'oro.report.datagrid.view', 'acl_resource' => 'VIEW;entity:' . $className, 'icon' => 'eye-open', 'link' => 'view_link', 'rowAction' => true]];
     $properties = [$primaryKey => null, 'view_link' => ['type' => 'url', 'route' => $metadata->routeView, 'params' => [$primaryKey]]];
     $configuration->offsetAddToArrayByPath('[source][query][select]', ["{$entityAlias}.{$primaryKey}"]);
     $configuration->offsetAddToArrayByPath('[properties]', $properties);
     $configuration->offsetAddToArrayByPath('[actions]', $viewAction);
     return $configuration;
 }
 /**
  * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  */
 public function testComplexQuery()
 {
     $gridName = 'test_grid';
     $en = 'Acme\\Entity\\TestEntity';
     $en1 = 'Acme\\Entity\\TestEntity1';
     $en2 = 'Acme\\Entity\\TestEntity2';
     $en3 = 'Acme\\Entity\\TestEntity3';
     $definition = ['columns' => [['name' => 'column1', 'label' => 'lbl1', 'sorting' => 'DESC'], ['name' => 'rc1,' . $en1 . '::column2', 'label' => 'lbl2', 'sorting' => ''], ['name' => 'rc2,' . $en2 . '::column3', 'label' => 'lbl3', 'sorting' => 'ASC']], 'filters' => [['columnName' => 'rc1,' . $en1 . '::column2', 'criterion' => ['filter' => 'string', 'data' => ['type' => '1', 'value' => 'test']]], ['columnName' => 'rc1,' . $en1 . '::rc4,' . $en3 . '::column5', 'criterion' => ['filter' => 'string', 'data' => ['type' => '1', 'value' => 'test']]], ['columnName' => 'rc1,' . $en1 . '::rc4,' . $en3 . '::column6', 'criterion' => ['filter' => 'string', 'data' => ['type' => '1', 'value' => 'test']]]], 'filters_logic' => ' 1  OR  ( 2 And ( ( 3 or 1 ) oR 2) ) '];
     $doctrine = $this->getDoctrine([$en => ['column1' => 'string'], $en1 => ['column2' => 'integer'], $en2 => ['column3' => 'float']]);
     $model = new QueryDesignerModel();
     $model->setEntity($en);
     $model->setDefinition(json_encode($definition));
     $builder = new DatagridConfigurationBuilder($gridName, $model, $doctrine);
     $result = $builder->getConfiguration()->toArray();
     $expected = ['source' => ['type' => 'orm', 'query' => ['select' => ['t1.column1 as c1', 't2.column2 as c2', 't4.column3 as c3'], 'from' => [['table' => $en, 'alias' => 't1']], 'join' => ['left' => [['join' => 't1.rc1', 'alias' => 't2'], ['join' => 't2.rc4', 'alias' => 't3'], ['join' => 't1.rc2', 'alias' => 't4']]]], 'query_config' => ['table_aliases' => ['' => 't1', $en . '::rc1' => 't2', $en . '::rc1,' . $en1 . '::rc4' => 't3', $en . '::rc2' => 't4'], 'column_aliases' => ['column1' => 'c1', 'rc1,' . $en1 . '::column2' => 'c2', 'rc2,' . $en2 . '::column3' => 'c3'], 'filters' => [['column' => 't2.column2', 'filter' => 'string', 'filterData' => ['type' => '1', 'value' => 'test'], 'columnAlias' => 'c2'], 'OR', [['column' => 't3.column5', 'filter' => 'string', 'filterData' => ['type' => '1', 'value' => 'test']], 'AND', [[['column' => 't3.column6', 'filter' => 'string', 'filterData' => ['type' => '1', 'value' => 'test']], 'OR', ['column' => 't2.column2', 'filter' => 'string', 'filterData' => ['type' => '1', 'value' => 'test'], 'columnAlias' => 'c2']], 'OR', ['column' => 't3.column5', 'filter' => 'string', 'filterData' => ['type' => '1', 'value' => 'test']]]]]]], 'columns' => ['c1' => ['label' => 'lbl1', 'frontend_type' => 'string'], 'c2' => ['label' => 'lbl2', 'frontend_type' => 'integer'], 'c3' => ['label' => 'lbl3', 'frontend_type' => 'decimal']], 'sorters' => ['columns' => ['c1' => ['data_name' => 't1.column1'], 'c2' => ['data_name' => 't2.column2'], 'c3' => ['data_name' => 't4.column3']], 'default' => ['c1' => 'DESC', 'c3' => 'ASC']], 'name' => $gridName, 'filters' => ['columns' => ['c1' => ['data_name' => 't1.column1', 'type' => 'string'], 'c2' => ['data_name' => 't2.column2', 'type' => 'number'], 'c3' => ['data_name' => 't4.column3', 'type' => 'number']]]];
     $this->assertEquals($expected, $result);
 }