/** * {@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()); } } }
/** * {@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); }
/** * {@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'); }
/** * {@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; }
/** * {@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; }
/** * {@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(); }
/** * {@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)); } }
/** * {@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; }
/** * {@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; }
/** * {@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); }
/** * {@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'); }