[ Mini Kiebo ]
Server: Windows NT DESKTOP-5B8S0D4 6.2 build 9200 (Windows 8 Professional Edition) i586
Path:
D:
/
Backup
/
05122024
/
htdocs
/
jurnal-kesmas
/
v1
/
lib
/
pkp
/
classes
/
publication
/
[
Home
]
File: Collector.php
<?php /** * @file classes/publication/Collector.php * * Copyright (c) 2014-2021 Simon Fraser University * Copyright (c) 2000-2021 John Willinsky * Distributed under the GNU GPL v3. For full terms see the file docs/COPYING. * * @class Collector * * @brief A helper class to configure a Query Builder to get a collection of announcements */ namespace PKP\publication; use APP\publication\Publication; use Illuminate\Database\Query\Builder; use Illuminate\Support\Collection; use Illuminate\Support\Facades\DB; use Illuminate\Support\LazyCollection; use PKP\core\interfaces\CollectorInterface; use PKP\plugins\Hook; /** * @template T of Publication */ class Collector implements CollectorInterface { public \APP\publication\DAO $dao; public ?array $contextIds; public ?array $submissionIds; public ?array $doiIds = null; public ?int $count; public ?int $offset; public function __construct(DAO $dao) { $this->dao = $dao; } public function getCount(): int { return $this->dao->getCount($this); } /** * @return Collection<int,int> */ public function getIds(): Collection { return $this->dao->getIds($this); } /** * @copydoc DAO::getMany() * @return LazyCollection<int,T> */ public function getMany(): LazyCollection { return $this->dao->getMany($this); } /** * Filter by contexts */ public function filterByContextIds(?array $contextIds): self { $this->contextIds = $contextIds; return $this; } /** * Filter by submissions */ public function filterBySubmissionIds(?array $submissionIds): self { $this->submissionIds = $submissionIds; return $this; } public function filterByDoiIds(?array $doiIds): self { $this->doiIds = $doiIds; return $this; } /** * Limit the number of objects retrieved */ public function limit(?int $count): self { $this->count = $count; return $this; } /** * Offset the number of objects retrieved, for example to * retrieve the second page of contents */ public function offset(?int $offset): self { $this->offset = $offset; return $this; } /** * @copydoc CollectorInterface::getQueryBuilder() */ public function getQueryBuilder(): Builder { $qb = DB::table('publications as p') ->select(['p.*']); if (isset($this->contextIds)) { $qb->join('submissions as s', 'p.submission_id', '=', 's.submission_id'); $qb->whereIn('s.context_id', $this->contextIds); } if (isset($this->submissionIds)) { $qb->whereIn('p.submission_id', $this->submissionIds); } $qb->when($this->doiIds !== null, function (Builder $qb) { $qb->whereIn('p.doi_id', $this->doiIds); }); if (isset($this->count)) { $qb->limit($this->count); } if (isset($this->offset)) { $qb->offset($this->offset); } $qb->orderBy('p.version', 'asc'); // Add app-specific query statements Hook::call('Publication::Collector', [&$qb, $this]); return $qb; } }