/** * Returns total count and data for all Locations satisfying the parameters. * * @param \eZ\Publish\API\Repository\Values\Content\Query\Criterion $criterion * @param int $offset * @param int|null $limit * @param null|\eZ\Publish\API\Repository\Values\Content\Query\SortClause[] $sortClauses * * @return mixed[][] */ public function find(Criterion $criterion, $offset = 0, $limit = null, array $sortClauses = null) { $count = $this->getTotalCount($criterion, $sortClauses); if ($limit === 0) { return array("count" => $count, "rows" => array()); } $selectQuery = $this->handler->createSelectQuery(); $selectQuery->select('ezcontentobject_tree.*'); if ($sortClauses !== null) { $this->sortClauseConverter->applySelect($selectQuery, $sortClauses); } $selectQuery->from($this->handler->quoteTable('ezcontentobject_tree'))->innerJoin('ezcontentobject', 'ezcontentobject_tree.contentobject_id', 'ezcontentobject.id')->innerJoin('ezcontentobject_version', 'ezcontentobject.id', 'ezcontentobject_version.contentobject_id'); if ($sortClauses !== null) { $this->sortClauseConverter->applyJoin($selectQuery, $sortClauses); } $selectQuery->where($this->criteriaConverter->convertCriteria($selectQuery, $criterion), $selectQuery->expr->eq('ezcontentobject.status', $selectQuery->bindValue(1, null, PDO::PARAM_INT)), $selectQuery->expr->eq('ezcontentobject_version.status', $selectQuery->bindValue(1, null, PDO::PARAM_INT)), $selectQuery->expr->neq($this->handler->quoteColumn("depth"), $selectQuery->bindValue(0, null, PDO::PARAM_INT))); if ($sortClauses !== null) { $this->sortClauseConverter->applyOrderBy($selectQuery); } $selectQuery->limit($limit > 0 ? $limit : self::MAX_LIMIT, $offset); $statement = $selectQuery->prepare(); $statement->execute(); return array("count" => $count, "rows" => $statement->fetchAll(PDO::FETCH_ASSOC)); }
/** * Get sorted arrays of content IDs, which should be returned * * @param Criterion $filter * @param array $sort * @param mixed $offset * @param mixed $limit * @param mixed $translations * * @return int[] */ protected function getContentInfoList(Criterion $filter, $sort, $offset, $limit, $translations) { $query = $this->handler->createSelectQuery(); $query->select('DISTINCT ezcontentobject.id', 'ezcontentobject.*', $this->handler->aliasedColumn($query, 'main_node_id', 'main_tree')); if ($sort !== null) { $this->sortClauseConverter->applySelect($query, $sort); } $query->from($this->handler->quoteTable('ezcontentobject'))->innerJoin('ezcontentobject_version', 'ezcontentobject.id', 'ezcontentobject_version.contentobject_id')->leftJoin($this->handler->alias($this->handler->quoteTable('ezcontentobject_tree'), $this->handler->quoteIdentifier('main_tree')), $query->expr->lAnd($query->expr->eq($this->handler->quoteColumn("contentobject_id", "main_tree"), $this->handler->quoteColumn("id", "ezcontentobject")), $query->expr->eq($this->handler->quoteColumn("main_node_id", "main_tree"), $this->handler->quoteColumn("node_id", "main_tree")))); if ($sort !== null) { $this->sortClauseConverter->applyJoin($query, $sort); } $query->where($this->getQueryCondition($filter, $query, $translations)); if ($sort !== null) { $this->sortClauseConverter->applyOrderBy($query); } $query->limit($limit, $offset); $statement = $query->prepare(); $statement->execute(); return $statement->fetchAll(\PDO::FETCH_ASSOC); }
/** * Get sorted arrays of content IDs, which should be returned * * @param Criterion $filter * @param array $sort * @param mixed $offset * @param mixed $limit * @param mixed $translations * * @return int[] */ protected function getContentIds(Criterion $filter, $sort, $offset, $limit, $translations) { $query = $this->handler->createSelectQuery(); $query->select($this->handler->quoteColumn('id', 'ezcontentobject')); if ($sort !== null) { $this->sortClauseConverter->applySelect($query, $sort); } $query->from($this->handler->quoteTable('ezcontentobject')); $query->innerJoin('ezcontentobject_version', 'ezcontentobject.id', 'ezcontentobject_version.contentobject_id'); if ($sort !== null) { $this->sortClauseConverter->applyJoin($query, $sort); } $query->where($this->getQueryCondition($filter, $query, $translations)); if ($sort !== null) { $this->sortClauseConverter->applyOrderBy($query); } $query->limit($limit, $offset); $statement = $query->prepare(); $statement->execute(); return $statement->fetchAll(\PDO::FETCH_COLUMN); }