publicationIds = is_array($publicationIds) ? $publicationIds : [$publicationIds]; return $this; } public function filterByContexts(array $contextIds): self { $this->contextIds = $contextIds; return $this; } /** * @copydoc PKP\services\queryBuilders\interfaces\EntityQueryBuilderInterface::getCount() */ public function getCount() { return $this ->getQuery() ->select('g.galley_id') ->get() ->count(); } /** * @copydoc PKP\services\queryBuilders\interfaces\EntityQueryBuilderInterface::getCount() */ public function getIds() { return $this ->getQuery() ->select('g.galley_id') ->pluck('g.galley_id') ->toArray(); } /** * @copydoc PKP\services\queryBuilders\interfaces\EntityQueryBuilderInterface::getCount() */ public function getQuery() { $this->columns = ['*']; $q = DB::table('publication_galleys as g'); if (!empty($this->publicationIds)) { $q->whereIn('g.publication_id', $this->publicationIds); } // Contexts $q->when($this->contextIds !== null, function (Builder $q) { $q->whereIn('g.galley_id', function (Builder $q) { $q->select('g.galley_id') ->from('publication_galleys as g') ->leftJoin('publications as p', 'p.publication_id', '=', 'g.publication_id') ->leftJoin('submissions as s', 's.submission_id', '=', 'p.submission_id') ->whereIn('s.context_id', $this->contextIds); }); }); $q->orderBy('g.seq', 'asc'); // Add app-specific query statements Hook::call('Galley::getMany::queryObject', [&$q, $this]); $q->select($this->columns); return $q; } }