/**
  * {@inheritDoc}
  */
 public function visitDatasource(DatagridConfiguration $config, DatasourceInterface $datasource)
 {
     $entityName = $config->offsetGetByPath(self::EXTEND_ENTITY_CONFIG_PATH);
     $fields = $this->getDynamicFields($entityName);
     if ($datasource instanceof OrmDatasource && !empty($fields)) {
         /** @var QueryBuilder $qb */
         $qb = $datasource->getQueryBuilder();
         $fromParts = $qb->getDQLPart('from');
         $alias = false;
         foreach ($fromParts as $fromPart) {
             if ($fromPart->getFrom() == $entityName) {
                 $alias = $fromPart->getAlias();
             }
         }
         if ($alias === false) {
             // add entity if it not exists in from clause
             $alias = ExtendConfigDumper::FIELD_PREFIX . 'o';
             $qb->from($entityName, $alias);
         }
         foreach ($fields as $field) {
             $fn = ExtendConfigDumper::FIELD_PREFIX . $field->getFieldName();
             $qb->addSelect(sprintf('%s.%s', $alias, $fn));
             // set real "data name" for filters and sorters
             $config->offsetSetByPath(sprintf('%s[%s][%s]', OrmSorterConfiguration::COLUMNS_PATH, $fn, PropertyInterface::DATA_NAME_KEY), sprintf('%s.%s', $alias, $fn));
             $config->offsetSetByPath(sprintf('%s[%s][%s]', FilterConfiguration::COLUMNS_PATH, $fn, FilterUtility::DATA_NAME_KEY), sprintf('%s.%s', $alias, $fn));
         }
     }
 }
 /**
  * {@inheritDoc}
  */
 public function visitDatasource(DatagridConfiguration $config, DatasourceInterface $datasource)
 {
     $filters = $this->getFiltersToApply($config);
     $values = $this->getValuesToApply($config);
     $datasourceAdapters = [];
     foreach ($datasource->getQueryBuilders() as $qb) {
         $datasourceAdapters[] = new OrmFilterDatasourceAdapter($qb);
     }
     foreach ($filters as $filter) {
         $value = isset($values[$filter->getName()]) ? $values[$filter->getName()] : false;
         if ($value === false) {
             continue;
         }
         $form = $filter->getForm();
         if (!$form->isSubmitted()) {
             $form->submit($value);
         }
         if (!$form->isValid()) {
             continue;
         }
         foreach ($datasourceAdapters as $datasourceAdapter) {
             $filter->apply($datasourceAdapter, $form->getData());
         }
     }
 }
Пример #3
0
 /**
  * {@inheritdoc}
  */
 public function visitDatasource(DatagridConfiguration $config, DatasourceInterface $datasource)
 {
     if (!$this->isApplicable($config)) {
         return;
     }
     /** @var OrmDatasource $datasource */
     $qb = $datasource->getQueryBuilder();
     $dqlParts = $qb->getDQLParts();
     if (empty($dqlParts['where'])) {
         return;
     }
     /** @var Andx $conditions */
     $conditions = $dqlParts['where'];
     $parts = $conditions->getParts();
     if (empty($parts)) {
         return;
     }
     $qb->resetDQLPart('where');
     $addParameter = false;
     foreach ($parts as $part) {
         if (!is_string($part)) {
             $part = $qb->expr()->orX($part, $this->createItemsFunc($qb));
             $addParameter = true;
         }
         $qb->andWhere($part);
     }
     $gridName = $config->offsetGetByPath(self::NAME_PATH);
     if ($addParameter) {
         $qb->setParameter('marketingListId', $this->marketingListHelper->getMarketingListIdByGridName($gridName));
     }
     $this->appliedFor[$gridName] = true;
 }
 /**
  * {@inheritdoc}
  */
 public function apply(DatasourceInterface $datasource, $field, $direction)
 {
     $attribute = $this->attributeRepository->findOneByCode($field);
     $qb = $datasource->getQueryBuilder();
     $pqb = $this->productRepository->getProductQueryBuilder($qb);
     $pqb->addAttributeSorter($attribute, $direction);
 }
Пример #5
0
 /**
  * {@inheritdoc}
  */
 public function visitDatasource(DatagridConfiguration $config, DatasourceInterface $datasource)
 {
     /** @var QueryBuilder $qb */
     $qb = $datasource->getQueryBuilder();
     $ds = new GroupingOrmFilterDatasourceAdapter($qb);
     $filters = $config->offsetGetByPath('[source][query_config][filters]');
     $this->restrictionBuilder->buildRestrictions($filters, $ds);
 }
 /**
  * Build references data
  *
  * @param DatasourceInterface   $dataSource
  * @param DatagridConfiguration $configuration
  */
 protected function buildReferenceData(DatasourceInterface $dataSource, DatagridConfiguration $configuration)
 {
     $source = $configuration->offsetGet('source');
     $qb = $dataSource->getQueryBuilder();
     foreach ($configuration->offsetGet('columns') as $column => $config) {
         $this->buildQueryBuilder($qb, $source, $column);
     }
 }
 /**
  * {@inheritdoc}
  */
 public function apply(DatasourceInterface $datasource, DatagridConfiguration $configuration)
 {
     $qb = $datasource->getQueryBuilder();
     $joinAlias = 'selectCompleteness';
     $util = new CompletenessJoin($qb);
     $util->addJoins($joinAlias);
     $qb->addSelect($joinAlias . '.ratio AS ratio');
 }
 /**
  * {@inheritDoc}
  */
 public function visitDatasource(DatagridConfiguration $config, DatasourceInterface $datasource)
 {
     $defaultPerPage = $config->offsetGetByPath(ToolbarExtension::PAGER_DEFAULT_PER_PAGE_OPTION_PATH, 10);
     $this->pager->setQuery($datasource->getQuery());
     $this->pager->setPage($this->getOr(self::PAGE_PARAM, 1));
     $this->pager->setMaxPerPage($this->getOr(self::PER_PAGE_PARAM, $defaultPerPage));
     $this->pager->init();
 }
 /**
  * {@inheritdoc}
  */
 public function apply(DatasourceInterface $datasource, $field, $direction)
 {
     $groupId = $this->requestParams->get('currentGroup', null);
     if (!$groupId) {
         throw new \LogicException('The current product group must be configured');
     }
     $field = 'in_group_' . $groupId;
     $datasource->getProductQueryBuilder()->addSorter($field, $direction);
 }
 /**
  * {@inheritdoc}
  */
 public function apply(DatasourceInterface $datasource, DatagridConfiguration $configuration)
 {
     $qb = $datasource->getQueryBuilder();
     $joinAlias = 'selectCompleteness';
     $util = new CompletenessJoin($qb);
     $locale = $configuration->offsetGetByPath('[source][locale_code]');
     $scope = $configuration->offsetGetByPath('[source][scope_code]');
     $util->addJoins($joinAlias, $locale, $scope);
     $qb->addSelect($joinAlias . '.ratio AS ratio');
 }
Пример #11
0
 /**
  * {@inheritdoc}
  */
 public function apply(DatasourceInterface $datasource, DatagridConfiguration $configuration)
 {
     if ($this->applied === false) {
         $rootAlias = $datasource->getQueryBuilder()->getRootAlias();
         $path = sprintf('[source][%s]', ContextConfigurator::DISPLAYED_ATTRIBUTES_KEY);
         $attributeIds = $configuration->offsetGetByPath($path);
         $datasource->getQueryBuilder()->leftJoin($rootAlias . '.values', 'values', 'WITH', 'values.attribute IN (:attributeIds) ' . 'AND (values.locale = :dataLocale OR values.locale IS NULL) ' . 'AND (values.scope = :scopeCode OR values.scope IS NULL)')->addSelect('values')->leftJoin('values.attribute', 'attribute')->addSelect('attribute')->setParameter('attributeIds', $attributeIds);
     }
     $this->applied = true;
 }
Пример #12
0
 /**
  * {@inheritdoc}
  */
 public function visitDatasource(DatagridConfiguration $config, DatasourceInterface $datasource)
 {
     $path = $config->offsetGetByPath(self::CHANNEL_RELATION_OPTION_PATH);
     list($mainEntity, $relationName) = explode('.', $path);
     /** @var OrmDatasource $datasource */
     $queryBuilder = $datasource->getQueryBuilder();
     $mainEntity = $this->ensureJoined($queryBuilder, $mainEntity);
     $relationName = $this->ensureJoined($queryBuilder, $relationName, $mainEntity);
     $channelIds = explode(',', $this->getParameters()->get('channelIds'));
     $queryBuilder->andWhere($relationName . '.id in (:channelIds)');
     $queryBuilder->setParameter('channelIds', $channelIds);
 }
 /**
  * {@inheritdoc}
  */
 public function visitDatasource(DatagridConfiguration $config, DatasourceInterface $datasource)
 {
     if (!$this->isApplicable($config) || !$datasource instanceof OrmDatasource) {
         return;
     }
     $accountId = $this->request->get(self::ACCOUNT_KEY);
     /** @var OrmDatasource $datasource */
     $qb = $datasource->getQueryBuilder();
     $rootAlias = $qb->getRootAliases()[0];
     $qb->andWhere($qb->expr()->eq(sprintf('IDENTITY(%s.account)', $rootAlias), ':account'))->setParameter('account', $accountId);
     $this->applied = true;
 }
Пример #14
0
 /**
  * {@inheritDoc}
  */
 public function visitDatasource(DatagridConfiguration $config, DatasourceInterface $datasource)
 {
     $defaultPerPage = $config->offsetGetByPath(ToolbarExtension::PAGER_DEFAULT_PER_PAGE_OPTION_PATH, 10);
     if ($datasource instanceof OrmDatasource) {
         $this->pager->setQueryBuilder($datasource->getQueryBuilder());
         $this->pager->setSkipAclCheck($config->offsetGetByPath(Builder::DATASOURCE_SKIP_ACL_CHECK, false));
         $this->pager->setSkipCountWalker($config->offsetGetByPath(Builder::DATASOURCE_SKIP_COUNT_WALKER_PATH));
     }
     $this->pager->setPage($this->getOr(PagerInterface::PAGE_PARAM, 1));
     $this->pager->setMaxPerPage($this->getOr(PagerInterface::PER_PAGE_PARAM, $defaultPerPage));
     $this->pager->init();
 }
Пример #15
0
 /**
  * {@inheritdoc}
  */
 public function visitDatasource(DatagridConfiguration $config, DatasourceInterface $datasource)
 {
     $fields = $this->getFields($config);
     if (empty($fields)) {
         return;
     }
     $entityClassName = $this->entityClassResolver->getEntityClass($this->getEntityName($config));
     /** @var QueryBuilder $qb */
     $qb = $datasource->getQueryBuilder();
     $fromParts = $qb->getDQLPart('from');
     $alias = false;
     /** @var From $fromPart */
     foreach ($fromParts as $fromPart) {
         if ($this->entityClassResolver->getEntityClass($fromPart->getFrom()) == $entityClassName) {
             $alias = $fromPart->getAlias();
         }
     }
     if ($alias === false) {
         // add entity if it not exists in from clause
         $alias = 'o';
         $qb->from($entityClassName, $alias);
     }
     $relationIndex = 0;
     $relationTemplate = 'auto_rel_%d';
     foreach ($fields as $field) {
         $fieldName = $field->getFieldName();
         switch ($field->getFieldType()) {
             case 'enum':
                 $extendFieldConfig = $this->getFieldConfig('extend', $field);
                 $joinAlias = sprintf($relationTemplate, ++$relationIndex);
                 $qb->leftJoin(sprintf('%s.%s', $alias, $fieldName), $joinAlias);
                 $columnDataName = $fieldName;
                 $sorterDataName = sprintf('%s.%s', $joinAlias, $extendFieldConfig->get('target_field'));
                 $selectExpr = sprintf('%s as %s', $sorterDataName, $fieldName);
                 break;
             case 'multiEnum':
                 $columnDataName = ExtendHelper::getMultiEnumSnapshotFieldName($fieldName);
                 $sorterDataName = sprintf('%s.%s', $alias, $columnDataName);
                 $selectExpr = $sorterDataName;
                 break;
             default:
                 $columnDataName = $fieldName;
                 $sorterDataName = sprintf('%s.%s', $alias, $fieldName);
                 $selectExpr = $sorterDataName;
                 break;
         }
         $qb->addSelect($selectExpr);
         // set real "data name" for filters and sorters
         $config->offsetSetByPath(sprintf('[%s][%s][data_name]', FormatterConfiguration::COLUMNS_KEY, $fieldName), $columnDataName);
         $config->offsetSetByPath(sprintf('%s[%s][data_name]', SorterConfiguration::COLUMNS_PATH, $fieldName), $sorterDataName);
         $config->offsetSetByPath(sprintf('%s[%s][data_name]', FilterConfiguration::COLUMNS_PATH, $fieldName), sprintf('%s.%s', $alias, $fieldName));
     }
 }
Пример #16
0
 /**
  * {@inheritdoc}
  */
 public function visitDatasource(DatagridConfiguration $config, DatasourceInterface $datasource)
 {
     $gridName = $config->offsetGetByPath(self::NAME_PATH);
     $parametersKey = md5(json_encode($this->parameters->all()));
     if (!empty($this->appliedFor[$gridName . $parametersKey])) {
         return;
     }
     /** @var QueryBuilder $qb */
     $qb = $datasource->getQueryBuilder();
     $ds = new GroupingOrmFilterDatasourceAdapter($qb);
     $filters = $config->offsetGetByPath('[source][query_config][filters]');
     $this->restrictionBuilder->buildRestrictions($filters, $ds);
     $this->appliedFor[$gridName . $parametersKey] = true;
 }
 /**
  * {@inheritdoc}
  */
 public function visitDatasource(DatagridConfiguration $config, DatasourceInterface $datasource)
 {
     if (!$this->isApplicable($config) || !$datasource instanceof OrmDatasource) {
         return;
     }
     if ($this->request) {
         $currency = $this->request->get(self::CURRENCY_KEY, null);
     } else {
         $currency = null;
     }
     /** @var OrmDatasource $datasource */
     $qb = $datasource->getQueryBuilder();
     $this->productListModifier->applyPriceListLimitations($qb, $currency);
     $this->applied = true;
 }
Пример #18
0
 /**
  * {@inheritDoc}
  */
 public function visitDatasource(DatagridConfiguration $config, DatasourceInterface $datasource)
 {
     $defaultPerPage = $config->offsetGetByPath(ToolbarExtension::PAGER_DEFAULT_PER_PAGE_OPTION_PATH, 10);
     if ($datasource instanceof OrmDatasource) {
         $this->pager->setQueryBuilder($datasource->getQueryBuilder());
         $this->pager->setSkipAclCheck($config->isDatasourceSkipAclApply());
         $this->pager->setSkipCountWalker($config->offsetGetByPath(DatagridConfiguration::DATASOURCE_SKIP_COUNT_WALKER_PATH));
     }
     if ($config->offsetGetByPath(ToolbarExtension::PAGER_ONE_PAGE_OPTION_PATH, false) || $config->offsetGetByPath(ModeExtension::MODE_OPTION_PATH) === ModeExtension::MODE_CLIENT) {
         // no restrictions applied
         $this->pager->setPage(0);
         $this->pager->setMaxPerPage(0);
     } else {
         $this->pager->setPage($this->getOr(PagerInterface::PAGE_PARAM, 1));
         $this->pager->setMaxPerPage($this->getOr(PagerInterface::PER_PAGE_PARAM, $defaultPerPage));
     }
     $this->pager->init();
 }
 /**
  * {@inheritdoc}
  */
 public function visitDatasource(DatagridConfiguration $config, DatasourceInterface $datasource)
 {
     $filters = $this->getFiltersToApply($config);
     $values = $this->getValuesToApply($config);
     $datasourceType = $config->offsetGetByPath(Builder::DATASOURCE_TYPE_PATH);
     $adapterClass = $this->adapterResolver->getAdapterClass($datasourceType);
     $datasourceAdapter = new $adapterClass($datasource->getQueryBuilder());
     foreach ($filters as $filter) {
         $value = isset($values[$filter->getName()]) ? $values[$filter->getName()] : false;
         if ($value !== false) {
             $form = $filter->getForm();
             if (!$form->isSubmitted()) {
                 $form->submit($value);
             }
             if ($form->isValid()) {
                 $filter->apply($datasourceAdapter, $form->getData());
             }
         }
     }
 }
 /**
  * Constructor
  *
  * @param DatasourceInterface $datasource
  */
 public function __construct(DatasourceInterface $datasource)
 {
     $this->qb = $datasource->getQueryBuilder();
 }
 /**
  * {@inheritdoc}
  */
 public function apply(DatasourceInterface $datasource, $field, $direction)
 {
     $datasource->getProductQueryBuilder()->addSorter('is_associated', $direction);
 }
 /**
  * {@inheritdoc}
  */
 public function apply(DatasourceInterface $datasource, DatagridConfiguration $configuration)
 {
     $rootAlias = $datasource->getQueryBuilder()->getRootAlias();
     $datasource->getQueryBuilder()->leftJoin($rootAlias . '.groups', 'pGroups')->leftJoin('pGroups.translations', 'pGroupsTrans', 'WITH', 'pGroupsTrans.locale = :dataLocale')->addSelect('pGroups')->addSelect('pGroupsTrans');
 }
 /**
  * @param DatagridConfiguration $config
  * @param DatasourceInterface   $datasource
  * @return void
  */
 public function visitDatasource(DatagridConfiguration $config, DatasourceInterface $datasource)
 {
     $datasource->setSorters($this->getSortersToApply($config));
 }
 /**
  * Constructor
  *
  * @param DatasourceInterface $datasource
  */
 public function __construct(DatasourceInterface $datasource)
 {
     $this->qb = $datasource->getQueryBuilder();
     $this->pqb = $datasource->getProductQueryBuilder();
     $this->expressionBuilder = null;
 }
Пример #25
0
 /**
  * {@inheritDoc}
  */
 public function visitDatasource(DatagridConfiguration $config, DatasourceInterface $datasource)
 {
     $this->masterQB = clone $datasource->getQueryBuilder();
 }
 /**
  * {@inheritdoc}
  */
 public function apply(DatasourceInterface $datasource, $field, $direction)
 {
     $datasource->getProductQueryBuilder()->addSorter('completeness', $direction);
 }
 /**
  * {@inheritdoc}
  */
 public function apply(DatasourceInterface $datasource, DatagridConfiguration $configuration)
 {
     $rootAlias = $datasource->getQueryBuilder()->getRootAlias();
     $datasource->getQueryBuilder()->leftJoin($rootAlias . '.family', 'family')->leftJoin('family.translations', 'ft', 'WITH', 'ft.locale = :dataLocale');
     $datasource->getQueryBuilder()->addSelect('COALESCE(ft.label, CONCAT(\'[\', family.code, \']\')) as familyLabel');
 }
 /**
  * {@inheritdoc}
  */
 public function apply(DatasourceInterface $datasource, $field, $direction)
 {
     $qb = $datasource->getQueryBuilder();
     $pqb = $this->repository->getProductQueryBuilder($qb);
     $pqb->addFieldSorter('family', $direction);
 }
Пример #29
0
 /**
  * {@inheritdoc}
  */
 public function apply(DatasourceInterface $datasource, $field, $direction)
 {
     $datasource->getQueryBuilder()->addOrderBy($field, $direction);
 }
 /**
  * {@inheritdoc}
  */
 public function apply(DatasourceInterface $datasource, DatagridConfiguration $configuration)
 {
     $rootAlias = $datasource->getQueryBuilder()->getRootAlias();
     $inGroupExpr = sprintf('CASE WHEN :currentGroup MEMBER OF p.groups THEN true ELSE false END', $rootAlias);
     $datasource->getQueryBuilder()->addSelect($inGroupExpr . ' AS in_group');
 }