Programming Language PHP

Namespace Oro\Component\DoctrineUtils\ORM

Class QueryBuilderUtil

Method/Function checkField

Total Examples 10

10 code examples of PHP Oro\Component\DoctrineUtils\ORM\QueryBuilderUtil::checkField extracted from open source projects

Was this example useful?
0
                                                    /**
     * @param string|string[]|null $from
     */
    public function getSimpleSearchQuery(
        ?string $searchString,
        ?int $offset = 0,
        ?int $maxResults = 0,
        $from = null,
        ?int $page = 0
    ): Query {
        $query = $this->select();
        $criteria = $query->getCriteria();

        $nameField = Criteria::implodeFieldTypeName(Query::TYPE_TEXT, self::NAME_FIELD);
        QueryBuilderUtil::checkField($nameField);

        $query->addSelect($nameField . ' as name');
        $query->from($from ?: '*');

        $searchString = trim($searchString);
        if ($searchString) {
            $criteria->where(Criteria::expr()->contains(
                Criteria::implodeFieldTypeName(Query::TYPE_TEXT, self::TEXT_ALL_DATA_FIELD),
                $searchString
            ));
        }

        $criteria->setMaxResults($maxResults > 0 ? $maxResults : Query::INFINITY);
        if ($page > 0) {
            $offset = $maxResults * ($page - 1);
        }
        if ($offset > 0) {
            $criteria->setFirstResult($offset);
        }

        return $query;
    }
                                            
Was this example useful?
0
                                                    /**
     * @return array [DQL, parameters]
     */
    public static function getSubQueryExpressionWithParameters(
        OrmFilterDatasourceAdapter $ds,
        QueryBuilder $subQuery,
        string $fieldExpr,
        string $filterName
    ): array {
        QueryBuilderUtil::checkField($fieldExpr);
        $subQuery
            ->resetDQLPart('orderBy')
            ->resetDQLPart('groupBy')
            ->select($fieldExpr)
            ->andWhere(sprintf('%1$s = %1$s', $fieldExpr));

        self::processSubQueryExpressionGroupBy($ds, $subQuery, $fieldExpr);
        [$dql, $replacements] = self::createDqlWithReplacedAliases($ds, $subQuery, $filterName);
        [$fieldAlias, $field] = explode('.', $fieldExpr);
        $replacedFieldExpr = sprintf('%s.%s', $replacements[$fieldAlias], $field);
        $oldExpr = sprintf('%1$s = %1$s', $replacedFieldExpr);
        $newExpr = sprintf('%s = %s', $replacedFieldExpr, $fieldExpr);
        $dql = strtr($dql, [$oldExpr => $newExpr]);

        return [$dql, $subQuery->getParameters()];
    }
                                            
Was this example useful?
0
                                                    /**
     * @inheritdoc
     */
    protected function buildComparisonExpr(
        FilterDatasourceAdapterInterface $ds,
        $comparisonType,
        $fieldName,
        $parameterName
    ) {
        QueryBuilderUtil::checkField($fieldName);

        switch ($comparisonType) {
            case FilterUtility::TYPE_NOT_EMPTY:
                return $ds->expr()->isNotNull($fieldName);
            case FilterUtility::TYPE_EMPTY:
                return $ds->expr()->isNull($fieldName);
            default:
                return parent::buildComparisonExpr($ds, $comparisonType, $fieldName, $parameterName);
        }
    }
                                            
Was this example useful?
0
                                                    protected function addWhereClause(QueryBuilder $qb, string $filterType)
    {
        $extraWhereClauses = !$qb->getDQLPart('where')
            ? null :
            $this->getExtraWhereClauses($qb->getDQLPart('where')->getParts());

        $whereClauseParameters = $this->getExtraWhereParameters($qb->getParameters(), $extraWhereClauses);

        $usedDates = $this->getUsedDates(
            $filterType,
            'calendarDateTableForGrouping',
            'date',
            $this->get(self::JOINED_TABLE),
            $this->get(self::JOINED_COLUMN),
            $extraWhereClauses,
            $whereClauseParameters
        );

        if (!$usedDates) {
            return;
        }

        $dataFieldName = $this->getDataFieldName();
        $notNullableField = $this->get(self::NOT_NULLABLE_FIELD);
        QueryBuilderUtil::checkField($notNullableField);

        $qb->andWhere(
            $qb->expr()->orX(
                $qb->expr()->andX(
                    $qb->expr()->notIn(
                        sprintf(
                            "CONCAT(%s(%s), '-', %s(%s))",
                            $filterType,
                            $dataFieldName,
                            self::TYPE_YEAR,
                            $dataFieldName
                        ),
                        $usedDates
                    )
                ),
                $qb->expr()->andX(
                    $qb->expr()->in(
                        sprintf(
                            "CONCAT(%s(%s), '-', %s(%s))",
                            $filterType,
                            $dataFieldName,
                            self::TYPE_YEAR,
                            $dataFieldName
                        ),
                        $usedDates
                    ),
                    $qb->expr()->isNotNull($notNullableField)
                )
            )
        );
    }
                                            
Was this example useful?
0
                                                    private function getSelectAlias(string $postfix): string
    {
        $selectAlias = $this->get(self::COLUMN_NAME) . ucfirst($postfix);
        QueryBuilderUtil::checkField($selectAlias);

        return $selectAlias;
    }
                                            
Was this example useful?
0
                                                    /**
     * If grouping by Day or Month make sure Year order is in same direction and keep multisort.
     */
    public function applyOrderBy(OrmDatasource $datasource, String $sortKey, String $direction)
    {
        QueryBuilderUtil::checkField($sortKey);
        $direction = QueryBuilderUtil::getSortOrder($direction);

        $qb = $datasource->getQueryBuilder();
        $added = false;

        foreach ([self::TYPE_YEAR, self::TYPE_QUARTER, self::TYPE_MONTH, self::TYPE_DAY] as $groupBy) {
            $columnName = $this->getSelectAlias($groupBy);
            $groupingName = $this->getSelectClause($groupBy);

            /** @var Select $select */
            foreach ($qb->getDQLPart('select') as $select) {
                foreach ($select->getParts() as $part) {
                    if (\in_array($part, [$groupingName, sprintf('%s as %s', $groupingName, $columnName)], true)) {
                        $qb->addOrderBy($columnName, $direction);
                        $added = true;
                    }
                }
            }
        }

        if (!$added) {
            $qb->addOrderBy($sortKey, $direction);
        }
    }
                                            
Was this example useful?
0
                                                    /**
     * @inheritDoc
     */
    public function apply(FilterDatasourceAdapterInterface $ds, $data)
    {
        $data = $this->parseData($data);
        if (!$data) {
            return false;
        }

        /** @var OrmFilterDatasourceAdapter $ds */
        /** @var QueryBuilder $qb */
        $qb = $ds->getQueryBuilder();
        $columnName = $this->get(self::COLUMN_NAME);
        QueryBuilderUtil::checkField($columnName);

        switch ($data['value']) {
            case self::TYPE_DAY:
                $dayGroupingName = $this->addFilter(self::TYPE_DAY, $qb);
                $monthGroupingName = $this->addFilter(self::TYPE_MONTH, $qb);
                $yearGroupingName = $this->addFilter(self::TYPE_YEAR, $qb);

                $this->addSelect(
                    $qb,
                    [
                        $dayGroupingName,
                        $monthGroupingName,
                        $yearGroupingName,
                    ],
                    $columnName
                );

                break;
            case self::TYPE_MONTH:
                $monthGroupingName = $this->addFilter(self::TYPE_MONTH, $qb);
                $yearGroupingName = $this->addFilter(self::TYPE_YEAR, $qb);

                $this->addSelect(
                    $qb,
                    [
                        $monthGroupingName,
                        $yearGroupingName,
                    ],
                    $columnName
                );

                $this->addWhereClause($qb, self::TYPE_MONTH);
                break;
            case self::TYPE_QUARTER:
                $quarterGroupingName = $this->addFilter(self::TYPE_QUARTER, $qb);
                $yearGroupingName = $this->addFilter(self::TYPE_YEAR, $qb);

                $this->addSelect(
                    $qb,
                    [
                        $quarterGroupingName,
                        $yearGroupingName,
                    ],
                    $columnName
                );

                $this->addWhereClause($qb, self::TYPE_QUARTER);
                break;
            default:
                $yearGroupingName = $this->addFilter(self::TYPE_YEAR, $qb);

                $qb->addSelect(sprintf('%s as %s', $yearGroupingName, $columnName));

                $this->addWhereClause($qb, self::TYPE_YEAR);
                break;
        }

        $qb->addGroupBy($columnName);

        return true;
    }
                                            
Was this example useful?
0
                                                    /**
     * Validates the filter field name.
     */
    protected function validateFieldName()
    {
        QueryBuilderUtil::checkField($this->get(FilterUtility::DATA_NAME_KEY));
    }
                                            
Was this example useful?
0
                                                    private function getIdentifierField(ActionConfiguration $actionConfiguration): string
    {
        $identifier = $actionConfiguration->offsetGetOr('data_identifier');
        if (!$identifier) {
            throw new LogicException('Mass action must define identifier name');
        }
        QueryBuilderUtil::checkField($identifier);

        return $identifier;
    }
                                            
Was this example useful?
0
                                                    public function addDatePartsSelect(
        \DateTime $start,
        \DateTime $end,
        QueryBuilder $qb,
        string $entityField
    ) {
        QueryBuilderUtil::checkField($entityField);
        switch ($this->getFormatStrings($start, $end)['viewType']) {
            case 'year':
                $qb->addSelect(sprintf(
                    '%s as yearCreated',
                    $this->getEnforcedTimezoneFunction('YEAR', $entityField)
                ));
                $qb->addGroupBy('yearCreated');
                break;
            case 'month':
                $qb->addSelect(sprintf(
                    '%s as yearCreated',
                    $this->getEnforcedTimezoneFunction('YEAR', $entityField)
                ));
                $qb->addSelect(
                    sprintf(
                        '%s as monthCreated',
                        $this->getEnforcedTimezoneFunction('MONTH', $entityField)
                    )
                );
                $qb->addGroupBy('yearCreated');
                $qb->addGroupBy('monthCreated');
                break;
            case 'date':
                $qb->addSelect(sprintf(
                    '%s as yearCreated',
                    $this->getEnforcedTimezoneFunction('YEAR', $entityField)
                ));
                $qb->addSelect(sprintf(
                    '%s as weekCreated',
                    $this->getEnforcedTimezoneFunction('WEEK', $entityField)
                ));
                $qb->addGroupBy('yearCreated');
                $qb->addGroupBy('weekCreated');
                break;
            case 'day':
                $qb->addSelect(sprintf(
                    '%s as yearCreated',
                    $this->getEnforcedTimezoneFunction('YEAR', $entityField)
                ));
                $qb->addSelect(
                    sprintf(
                        '%s as monthCreated',
                        $this->getEnforcedTimezoneFunction('MONTH', $entityField)
                    )
                );
                $qb->addSelect(sprintf(
                    '%s as dayCreated',
                    $this->getEnforcedTimezoneFunction('DAY', $entityField)
                ));
                $qb->addGroupBy('yearCreated');
                $qb->addGroupBy('monthCreated');
                $qb->addGroupBy('dayCreated');
                break;
            case 'time':
                $qb->addSelect(sprintf(
                    '%s as dateCreated',
                    $this->getEnforcedTimezoneFunction('DATE', $entityField)
                ));
                $qb->addSelect(sprintf(
                    '%s as hourCreated',
                    $this->getEnforcedTimezoneFunction('HOUR', $entityField)
                ));
                $qb->addGroupBy('dateCreated');
                $qb->addGroupBy('hourCreated');
                break;
        }
    }