Open Monograph Press  3.3.0
SubmissionQueryBuilder.inc.php
1 <?php
2 
17 
18 use Illuminate\Database\Capsule\Manager as Capsule;
19 
21 
23  protected $seriesIds = null;
24 
26  protected $orderByFeaturedSeq = null;
27 
35  public function filterBySeries($seriesIds) {
36  if (!is_null($seriesIds) && !is_array($seriesIds)) {
37  $seriesIds = array($seriesIds);
38  }
39  $this->seriesIds = $seriesIds;
40  return $this;
41  }
42 
53  public function orderBy($column, $direction = 'DESC') {
54  // Bring in orderby constants
55  import('classes.submission.SubmissionDAO');
56  switch ($column) {
57  case ORDERBY_SERIES_POSITION:
58  $this->orderColumn = 'po.series_position';
59  break;
60  default:
61  return parent::orderBy($column, $direction);
62  }
63  $this->orderDirection = $direction;
64 
65  return $this;
66  }
67 
73  public function orderByFeatured() {
74  $this->orderByFeaturedSeq = true;
75  }
76 
84  public function appGet($q) {
85 
86  if (!empty($this->seriesIds)) {
87  $q->leftJoin('publications as publication_s', 's.current_publication_id', '=', 'publication_s.publication_id');
88  $q->whereIn('publication_s.series_id', $this->seriesIds);
89  }
90 
91  // order by series position
92  if ($this->orderColumn === 'po.series_position') {
93  $this->columns[] = 'po.series_position';
94  $q->leftJoin('publications as po', 's.current_publication_id', '=', 'po.publication_id');
95  $q->groupBy('po.series_position');
96  }
97 
98  if (!empty($this->orderByFeaturedSeq)) {
99  if (!empty($this->seriesIds)) {
100  $assocType = ASSOC_TYPE_SERIES;
101  $assocIds = $this->seriesIds;
102  } elseif (!empty($this->categoryIds)) {
103  $assocType = ASSOC_TYPE_CATEGORY;
104  $assocIds = $this->categoryIds;
105  } else {
106  $assocType = ASSOC_TYPE_PRESS;
107  $assocIds = [$this->contextId ? $this->contextId : CONTEXT_ID_NONE];
108  }
109  $q->leftJoin('features as sf', function($join) use ($assocType, $assocIds) {
110  $join->on('s.submission_id', '=', 'sf.submission_id')
111  ->on('sf.assoc_type', '=', Capsule::raw($assocType));
112  foreach ($assocIds as $assocId) {
113  $join->on('sf.assoc_id', '=', Capsule::raw(intval($assocId)));
114  }
115  });
116 
117  // Featured sorting should be the first sort parameter. We sort by
118  // the seq parameter, with null values last
119  $q->groupBy(Capsule::raw('sf.seq'));
120  $this->columns[] = 'sf.seq';
121  $this->columns[] = Capsule::raw('case when sf.seq is null then 1 else 0 end');
122  array_unshift(
123  $q->orders,
124  array('type' => 'raw', 'sql' => 'case when sf.seq is null then 1 else 0 end'),
125  array('column' => 'sf.seq', 'direction' => 'ASC')
126  );
127  }
128 
129  return $q;
130  }
131 }
PKP\Services\QueryBuilders\PKPSubmissionQueryBuilder\$categoryIds
$categoryIds
Definition: PKPSubmissionQueryBuilder.inc.php:27
APP\Services\QueryBuilders\SubmissionQueryBuilder\orderByFeatured
orderByFeatured()
Definition: SubmissionQueryBuilder.inc.php:79
PKP\Services\QueryBuilders\PKPSubmissionQueryBuilder
Definition: PKPSubmissionQueryBuilder.inc.php:21
APP\Services\QueryBuilders\SubmissionQueryBuilder\orderBy
orderBy($column, $direction='DESC')
Definition: SubmissionQueryBuilder.inc.php:59
APP\Services\QueryBuilders\SubmissionQueryBuilder\$seriesIds
$seriesIds
Definition: SubmissionQueryBuilder.inc.php:26
APP\Services\QueryBuilders\SubmissionQueryBuilder\appGet
appGet($q)
Definition: SubmissionQueryBuilder.inc.php:90
APP\Services\QueryBuilders
Definition: ContextQueryBuilder.inc.php:14
APP\Services\QueryBuilders\SubmissionQueryBuilder\filterBySeries
filterBySeries($seriesIds)
Definition: SubmissionQueryBuilder.inc.php:41
APP\Services\QueryBuilders\SubmissionQueryBuilder\$orderByFeaturedSeq
$orderByFeaturedSeq
Definition: SubmissionQueryBuilder.inc.php:32
APP\Services\QueryBuilders\SubmissionQueryBuilder
Definition: SubmissionQueryBuilder.inc.php:20