/** * Main method to build expressions for given tables * Evaluates the ctrl/enablecolumns/fe_group flag of the table and adds the according restriction if set * * @param array $queriedTables Array of tables, where array key is table name and value potentially an alias * @param ExpressionBuilder $expressionBuilder Expression builder instance to add restrictions with * @return CompositeExpression The result of query builder expression(s) */ public function buildExpression(array $queriedTables, ExpressionBuilder $expressionBuilder) : CompositeExpression { $constraints = []; foreach ($queriedTables as $tableName => $tableAlias) { $groupFieldName = $GLOBALS['TCA'][$tableName]['ctrl']['enablecolumns']['fe_group'] ?? null; if (!empty($groupFieldName)) { $fieldName = ($tableAlias ?: $tableName) . '.' . $groupFieldName; // Allow records where no group access has been configured (field values NULL, 0 or empty string) $constraints = [$expressionBuilder->isNull($fieldName), $expressionBuilder->eq($fieldName, $expressionBuilder->literal('')), $expressionBuilder->eq($fieldName, $expressionBuilder->literal('0'))]; foreach ($this->frontendGroupIds as $frontendGroupId) { $constraints[] = $expressionBuilder->inSet($fieldName, $expressionBuilder->literal((string) $frontendGroupId)); } } } return $expressionBuilder->orX(...$constraints); }
/** * Main method to build expressions for given tables * * @param array $queriedTables Array of tables, where array key is table name and value potentially an alias * @param ExpressionBuilder $expressionBuilder Expression builder instance to add restrictions with * @return CompositeExpression The result of query builder expression(s) */ public function buildExpression(array $queriedTables, ExpressionBuilder $expressionBuilder) : CompositeExpression { $constraints = []; foreach ($queriedTables as $tableName => $tableAlias) { $workspaceEnabled = $GLOBALS['TCA'][$tableName]['ctrl']['versioningWS'] ?? null; if (!empty($workspaceEnabled)) { $tablePrefix = $tableAlias ?: $tableName; $workspaceIdExpression = $expressionBuilder->eq($tablePrefix . '.t3ver_wsid', (int) $this->workspaceId); if ($this->includeRowsForWorkspaceOverlay) { $constraints[] = $expressionBuilder->orX($workspaceIdExpression, $expressionBuilder->lte($tablePrefix . '.t3ver_state', (int) (string) new VersionState(VersionState::DEFAULT_STATE))); } else { $comparisonExpression = $this->workspaceId === 0 ? 'neq' : 'eq'; $constraints[] = $workspaceIdExpression; $constraints[] = $expressionBuilder->{$comparisonExpression}($tablePrefix . '.pid', -1); } } } return $expressionBuilder->andX(...$constraints); }
/** * Main method to build expressions for given tables * Evaluates the ctrl/versioningWS flag of the table and adds various workspace related restrictions if set * * @param array $queriedTables Array of tables, where array key is table name and value potentially an alias * @param ExpressionBuilder $expressionBuilder Expression builder instance to add restrictions with * @return CompositeExpression The result of query builder expression(s) */ public function buildExpression(array $queriedTables, ExpressionBuilder $expressionBuilder) : CompositeExpression { $constraints = []; foreach ($queriedTables as $tableName => $tableAlias) { $workspaceEnabled = $GLOBALS['TCA'][$tableName]['ctrl']['versioningWS'] ?? null; if (!empty($workspaceEnabled)) { $tablePrefix = $tableAlias ?: $tableName; if (!$this->includeRowsForWorkspacePreview) { // Filter out placeholder records (new/moved/deleted items) // in case we are NOT in a versioning preview (That means we are online!) $constraints[] = $expressionBuilder->lte($tablePrefix . '.t3ver_state', (int) (string) new VersionState(VersionState::DEFAULT_STATE)); } elseif ($tableName !== 'pages') { // Show only records of the live and current workspace in case we are in a versioning preview $constraints[] = $expressionBuilder->orX($expressionBuilder->eq($tablePrefix . '.t3ver_wsid', 0), $expressionBuilder->eq($tablePrefix . '.t3ver_wsid', (int) $this->workspaceId)); } // Filter out versioned records if ($this->enforceLiveRowsOnly) { $constraints[] = $expressionBuilder->neq($tablePrefix . '.pid', -1); } } } return $expressionBuilder->andX(...$constraints); }
/** * @param ExpressionBuilder $expressionBuilder * @param string $tableAlias * @return \Doctrine\DBAL\Query\Expression\CompositeExpression * @internal */ protected function userConstraints(ExpressionBuilder $expressionBuilder, string $tableAlias = '') : \Doctrine\DBAL\Query\Expression\CompositeExpression { if ($tableAlias === '') { $tableAlias = $this->user_table; } $constraints = $expressionBuilder->andX(); if ($this->enablecolumns['rootLevel']) { $constraints->add($expressionBuilder->eq($tableAlias . '.pid', 0)); } if ($this->enablecolumns['disabled']) { $constraints->add($expressionBuilder->eq($tableAlias . '.' . $this->enablecolumns['disabled'], 0)); } if ($this->enablecolumns['deleted']) { $constraints->add($expressionBuilder->eq($tableAlias . '.' . $this->enablecolumns['deleted'], 0)); } if ($this->enablecolumns['starttime']) { $constraints->add($expressionBuilder->lte($tableAlias . '.' . $this->enablecolumns['starttime'], $GLOBALS['EXEC_TIME'])); } if ($this->enablecolumns['endtime']) { $constraints->add($expressionBuilder->orX($expressionBuilder->eq($tableAlias . '.' . $this->enablecolumns['endtime'], 0), $expressionBuilder->gt($tableAlias . '.' . $this->enablecolumns['endtime'], $GLOBALS['EXEC_TIME']))); } return $constraints; }
/** * @test */ public function orXReturnType() { $result = $this->subject->orX('"uid" = 1', '"uid" = 7'); $this->assertInstanceOf(CompositeExpression::class, $result); $this->assertSame(CompositeExpression::TYPE_OR, $result->getType()); }