Open Journal Systems  3.3.0
PKPPublicationQueryBuilder.inc.php
1 <?php
16 
17 use Illuminate\Database\Capsule\Manager as Capsule;
19 
21 
23  protected $contextIds = [];
24 
26  protected $submissionIds = [];
27 
29  protected $limit = null;
30 
32  protected $offset = 0;
33 
40  public function filterByContextIds($contextIds) {
41  $this->contextIds = is_array($contextIds) ? $contextIds : [$contextIds];
42  return $this;
43  }
44 
51  public function filterBySubmissionIds($submissionIds) {
52  $this->submissionIds = is_array($submissionIds) ? $submissionIds : [$submissionIds];
53  return $this;
54  }
55 
63  public function limitTo($count) {
64  $this->limit = $count;
65  return $this;
66  }
67 
75  public function offsetBy($offset) {
76  $this->offset = $offset;
77  return $this;
78  }
79 
83  public function getCount() {
84  return $this
85  ->getQuery()
86  ->select('p.publication_id')
87  ->get()
88  ->count();
89  }
90 
94  public function getIds() {
95  return $this
96  ->getQuery()
97  ->select('p.publication_id')
98  ->pluck('p.publication_id')
99  ->toArray();
100  }
101 
106  public function getQuery($applyOrder = true) {
107  $this->columns = ['*'];
108  $q = Capsule::table('publications as p');
109 
110  if (!empty($this->contextIds)) {
111  $q->leftJoin('submissions as s', 's.submission_id', '=', 'p.submission_id')
112  ->whereIn('s.context_id', $this->contextIds);
113  }
114 
115  if (!empty($this->submissionIds)) {
116  $q->whereIn('p.submission_id', $this->submissionIds);
117  }
118 
119  // Limit and offset results for pagination
120  if (!is_null($this->limit)) {
121  $q->limit($this->limit);
122  }
123  if (!empty($this->offset)) {
124  $q->offset($this->offset);
125  }
126 
127  if ($applyOrder) {
128  // Order by version number
129  $q->orderBy('p.version', 'asc');
130  }
131 
132  // Add app-specific query statements
133  \HookRegistry::call('Publication::getMany::queryObject', array(&$q, $this));
134 
135  $q->select($this->columns);
136 
137  return $q;
138  }
139 
145  public function getDateBoundaries() {
146  return $this->getQuery(false)
147  ->select([
148  Capsule::raw('MIN(p.date_published), MAX(p.date_published)')
149  ]);
150  }
151 
159  public function getQueryByUrlPath($urlPath, $contextId) {
160  return Capsule::table('publications as p')
161  ->leftJoin('submissions as s', 's.submission_id', '=', 'p.submission_id')
162  ->where('s.context_id', '=', $contextId)
163  ->where('p.url_path', '=', $urlPath);
164  }
165 
183  public function isDuplicateUrlPath($urlPath, $submissionId, $contextId) {
184  return (bool) Capsule::table('publications as p')
185  ->leftJoin('submissions as s', 's.submission_id', '=', 'p.submission_id')
186  ->where('url_path', '=' , $urlPath)
187  ->where('p.submission_id', '!=', $submissionId)
188  ->where('s.context_id', '=', $contextId)
189  ->count();
190  }
191 }
PKP\Services\QueryBuilders\PKPPublicationQueryBuilder\getQuery
getQuery($applyOrder=true)
Definition: PKPPublicationQueryBuilder.inc.php:118
PKP\Services\QueryBuilders\PKPPublicationQueryBuilder\$contextIds
$contextIds
Definition: PKPPublicationQueryBuilder.inc.php:26
PKP\Services\QueryBuilders\PKPPublicationQueryBuilder\getCount
getCount()
Definition: PKPPublicationQueryBuilder.inc.php:95
PKP\Services\QueryBuilders\PKPPublicationQueryBuilder\$offset
$offset
Definition: PKPPublicationQueryBuilder.inc.php:44
PKP\Services\QueryBuilders
PKP\Services\QueryBuilders\PKPPublicationQueryBuilder\getQueryByUrlPath
getQueryByUrlPath($urlPath, $contextId)
Definition: PKPPublicationQueryBuilder.inc.php:171
PKP\Services\QueryBuilders\PKPPublicationQueryBuilder
Definition: PKPPublicationQueryBuilder.inc.php:20
PKP\Services\QueryBuilders\PKPPublicationQueryBuilder\getDateBoundaries
getDateBoundaries()
Definition: PKPPublicationQueryBuilder.inc.php:157
PKP\Services\QueryBuilders\PKPPublicationQueryBuilder\isDuplicateUrlPath
isDuplicateUrlPath($urlPath, $submissionId, $contextId)
Definition: PKPPublicationQueryBuilder.inc.php:195
PKP\Services\QueryBuilders\PKPPublicationQueryBuilder\$submissionIds
$submissionIds
Definition: PKPPublicationQueryBuilder.inc.php:32
PKP\Services\QueryBuilders\PKPPublicationQueryBuilder\filterByContextIds
filterByContextIds($contextIds)
Definition: PKPPublicationQueryBuilder.inc.php:52
PKP\Services\QueryBuilders\PKPPublicationQueryBuilder\filterBySubmissionIds
filterBySubmissionIds($submissionIds)
Definition: PKPPublicationQueryBuilder.inc.php:63
PKP\Services\QueryBuilders\PKPPublicationQueryBuilder\getIds
getIds()
Definition: PKPPublicationQueryBuilder.inc.php:106
PKP\Services\QueryBuilders\Interfaces\EntityQueryBuilderInterface\getQuery
getQuery()
PKP\Services\QueryBuilders\PKPPublicationQueryBuilder\limitTo
limitTo($count)
Definition: PKPPublicationQueryBuilder.inc.php:75
PKP\Services\QueryBuilders\PKPPublicationQueryBuilder\offsetBy
offsetBy($offset)
Definition: PKPPublicationQueryBuilder.inc.php:87
HookRegistry\call
static call($hookName, $args=null)
Definition: HookRegistry.inc.php:86
PKP\Services\QueryBuilders\Interfaces\EntityQueryBuilderInterface
Definition: EntityQueryBuilderInterface.inc.php:19
PKP\Services\QueryBuilders\PKPPublicationQueryBuilder\$limit
$limit
Definition: PKPPublicationQueryBuilder.inc.php:38