Open Journal Systems  3.3.0
PKPAuthorQueryBuilder.inc.php
1 <?php
16 
17 use Illuminate\Database\Capsule\Manager as Capsule;
19 
21 
23  protected $contextIds = [];
24 
26  protected $familyName = '';
27 
29  protected $givenName = '';
30 
32  protected $publicationIds = [];
33 
35  protected $country = '';
36 
38  protected $affiliation = '';
39 
46  public function filterByContextIds($contextIds) {
47  $this->contextIds = is_array($contextIds) ? $contextIds : [$contextIds];
48  return $this;
49  }
50 
58  public function filterByName($givenName, $familyName) {
59  $this->givenName = $givenName;
60  $this->familyName = $familyName;
61  return $this;
62  }
63 
70  public function filterByCountry($country) {
71  $this->country = $country;
72  return $this;
73  }
74 
81  public function filterByAffiliation($affiliation) {
82  $this->affiliation = $affiliation;
83  return $this;
84  }
85 
92  public function filterByPublicationIds($publicationIds) {
93  $this->publicationIds = is_array($publicationIds) ? $publicationIds : [$publicationIds];
94  return $this;
95  }
96 
100  public function getCount() {
101  return $this
102  ->getQuery()
103  ->select('a.author_id')
104  ->get()
105  ->count();
106  }
107 
111  public function getIds() {
112  return $this
113  ->getQuery()
114  ->select('a.author_id')
115  ->pluck('a.author_id')
116  ->toArray();
117  }
118 
122  public function getQuery() {
123  $this->columns = ['*', 'p.locale AS submission_locale'];
124  $q = Capsule::table('authors as a');
125  $q->leftJoin('publications as p', 'a.publication_id', '=', 'p.publication_id');
126 
127  if (!empty($this->contextIds)) {
128  $q->leftJoin('submissions as s', 'p.submission_id', '=', 's.submission_id')
129  ->whereIn('s.context_id', $this->contextIds);
130  }
131 
132  if (!empty($this->familyName) || !empty($this->givenName)) {
135  $q->leftJoin('author_settings as fn', 'a.author_id', '=', 'fn.author_id')
136  ->where(function($q) use ($familyName) {
137  $q->where('fn.setting_name', '=', 'familyName');
138  $q->where('fn.setting_value', '=', $familyName);
139  });
140  $q->leftJoin('author_settings as gn', 'a.author_id', '=', 'gn.author_id')
141  ->where(function($q) use ($givenName) {
142  $q->where('gn.setting_name', '=', 'givenName');
143  $q->where('gn.setting_value', '=', $givenName);
144  });
145  }
146 
147  if (!empty($this->publicationIds)) {
148  $q->whereIn('a.publication_id', $this->publicationIds);
149  }
150 
151  if (!empty($this->country)) {
153  $q->join('author_settings as cs', 'a.author_id', '=', 'cs.author_id')
154  ->where(function($q) use ($country) {
155  $q->where('cs.setting_name', '=', 'country');
156  $q->where('cs.setting_value', '=', $country);
157  });
158  }
159 
160  if (!empty($this->affiliation)) {
162  $q->join('author_settings as afs', 'a.author_id', '=', 'afs.author_id')
163  ->where(function($q) use ($affiliation) {
164  $q->where('afs.setting_name', '=', 'affiliation');
165  $q->where('afs.setting_value', '=', $affiliation);
166  });
167  }
168 
169  $q->orderBy('a.seq', 'ASC');
170 
171  // Add app-specific query statements
172  \HookRegistry::call('Author::getMany::queryObject', array(&$q, $this));
173 
174  $q->select($this->columns);
175 
176  return $q;
177  }
178 }
PKP\Services\QueryBuilders\PKPAuthorQueryBuilder\$publicationIds
$publicationIds
Definition: PKPAuthorQueryBuilder.inc.php:44
PKP\Services\QueryBuilders\PKPAuthorQueryBuilder\$affiliation
$affiliation
Definition: PKPAuthorQueryBuilder.inc.php:56
PKP\Services\QueryBuilders
PKP\Services\QueryBuilders\PKPAuthorQueryBuilder\getQuery
getQuery()
Definition: PKPAuthorQueryBuilder.inc.php:140
PKP\Services\QueryBuilders\PKPAuthorQueryBuilder\getIds
getIds()
Definition: PKPAuthorQueryBuilder.inc.php:129
PKP\Services\QueryBuilders\PKPAuthorQueryBuilder\$givenName
$givenName
Definition: PKPAuthorQueryBuilder.inc.php:38
PKP\Services\QueryBuilders\PKPAuthorQueryBuilder\filterByPublicationIds
filterByPublicationIds($publicationIds)
Definition: PKPAuthorQueryBuilder.inc.php:110
PKP\Services\QueryBuilders\PKPAuthorQueryBuilder\filterByContextIds
filterByContextIds($contextIds)
Definition: PKPAuthorQueryBuilder.inc.php:64
PKP\Services\QueryBuilders\PKPAuthorQueryBuilder
Definition: PKPAuthorQueryBuilder.inc.php:20
PKP\Services\QueryBuilders\PKPAuthorQueryBuilder\getCount
getCount()
Definition: PKPAuthorQueryBuilder.inc.php:118
PKP\Services\QueryBuilders\PKPAuthorQueryBuilder\filterByName
filterByName($givenName, $familyName)
Definition: PKPAuthorQueryBuilder.inc.php:76
PKP\Services\QueryBuilders\PKPAuthorQueryBuilder\filterByAffiliation
filterByAffiliation($affiliation)
Definition: PKPAuthorQueryBuilder.inc.php:99
PKP\Services\QueryBuilders\PKPAuthorQueryBuilder\$familyName
$familyName
Definition: PKPAuthorQueryBuilder.inc.php:32
HookRegistry\call
static call($hookName, $args=null)
Definition: HookRegistry.inc.php:86
PKP\Services\QueryBuilders\PKPAuthorQueryBuilder\filterByCountry
filterByCountry($country)
Definition: PKPAuthorQueryBuilder.inc.php:88
PKP\Services\QueryBuilders\Interfaces\EntityQueryBuilderInterface
Definition: EntityQueryBuilderInterface.inc.php:19
PKP\Services\QueryBuilders\PKPAuthorQueryBuilder\$country
$country
Definition: PKPAuthorQueryBuilder.inc.php:50
PKP\Services\QueryBuilders\PKPAuthorQueryBuilder\$contextIds
$contextIds
Definition: PKPAuthorQueryBuilder.inc.php:26