Open Journal Systems  3.3.0
PKPAuthorService.inc.php
1 <?php
2 
16 namespace PKP\Services;
17 
18 use \DBResultRange;
19 use \DAOResultFactory;
20 use \DAORegistry;
21 use \Services;
22 use \PKP\Services\interfaces\EntityPropertyInterface;
23 use \PKP\Services\interfaces\EntityReadInterface;
24 use \PKP\Services\interfaces\EntityWriteInterface;
25 use \PKP\Services\QueryBuilders\PKPAuthorQueryBuilder;
26 
27 class PKPAuthorService implements EntityReadInterface, EntityWriteInterface, EntityPropertyInterface {
28 
32  public function get($authorId) {
33  $authorDao = DAORegistry::getDAO('AuthorDAO'); /* @var $authorDao AuthorDAO */
34  return $authorDao->getById($authorId);
35  }
36 
40  public function getCount($args = []) {
41  return $this->getQueryBuilder($args)->getCount();
42  }
43 
47  public function getIds($args = []) {
48  return $this->getQueryBuilder($args)->getIds();
49  }
50 
63  public function getMany($args = array()) {
64  $authorQO = $this->getQueryBuilder($args)->getQuery();
65  $authorDao = DAORegistry::getDAO('AuthorDAO'); /* @var $authorDao AuthorDAO */
66  $result = $authorDao->retrieveRange($authorQO->toSql(), $authorQO->getBindings());
67  $queryResults = new DAOResultFactory($result, $authorDao, '_fromRow');
68 
69  return $queryResults->toIterator();
70  }
71 
75  public function getMax($args = []) {
76  // Count/offset is not supported so getMax is always
77  // the same as getCount
78  return $this->getCount();
79  }
80 
85  public function getQueryBuilder($args = []) {
86 
87  $defaultArgs = [
88  'contextIds' => [],
89  'familyName' => '',
90  'givenName' => '',
91  'publicationIds' => null,
92  ];
93 
94  $args = array_merge($defaultArgs, $args);
95 
96  $authorQB = new PKPAuthorQueryBuilder();
97  $authorQB->filterByName($args['givenName'], $args['familyName']);
98  if (!empty($args['publicationIds'])) {
99  $authorQB->filterByPublicationIds($args['publicationIds']);
100  }
101  if (!empty($args['contextIds'])) {
102  $authorQB->filterByContextIds($args['contextIds']);
103  }
104  if (!empty($args['country'])) {
105  $authorQB->filterByCountry($args['country']);
106  }
107  if (!empty($args['affiliation'])) {
108  $authorQB->filterByAffiliation($args['affiliation']);
109  }
110 
111  \HookRegistry::call('Author::getMany::queryBuilder', array($authorQB, $args));
112 
113  return $authorQB;
114  }
115 
119  public function getProperties($author, $props, $args = null) {
120  $request = $args['request'];
121 
122  $values = [];
123 
124  foreach ($props as $prop) {
125  switch ($prop) {
126  default:
127  $values[$prop] = $author->getData($prop);
128  break;
129  }
130  }
131 
132  $locales = $request->getContext()->getSupportedFormLocales();
133  $values = Services::get('schema')->addMissingMultilingualValues(SCHEMA_AUTHOR, $values, $locales);
134 
135  \HookRegistry::call('Author::getProperties::values', array(&$values, $author, $props, $args));
136 
137  ksort($values);
138 
139  return $values;
140  }
141 
145  public function getSummaryProperties($author, $args = null) {
146  $props = Services::get('schema')->getSummaryProps(SCHEMA_AUTHOR);
147 
148  return $this->getProperties($author, $props, $args);
149  }
150 
154  public function getFullProperties($author, $args = null) {
155  $props = Services::get('schema')->getFullProps(SCHEMA_AUTHOR);
156 
157  return $this->getProperties($author, $props, $args);
158  }
159 
163  public function validate($action, $props, $allowedLocales, $primaryLocale) {
164  $schemaService = Services::get('schema');
165 
166  import('lib.pkp.classes.validation.ValidatorFactory');
167  $validator = \ValidatorFactory::make(
168  $props,
169  $schemaService->getValidationRules(SCHEMA_AUTHOR, $allowedLocales)
170  );
171 
172  // Check required fields
174  $validator,
175  $action,
176  $schemaService->getRequiredProps(SCHEMA_AUTHOR),
177  $schemaService->getMultilingualProps(SCHEMA_AUTHOR),
178  $allowedLocales,
179  $primaryLocale
180  );
181 
182  // Check for input from disallowed locales
183  \ValidatorFactory::allowedLocales($validator, $schemaService->getMultilingualProps(SCHEMA_AUTHOR), $allowedLocales);
184 
185  // The publicationId must match an existing publication that is not yet published
186  $validator->after(function($validator) use ($props) {
187  if (isset($props['publicationId']) && !$validator->errors()->get('publicationId')) {
188  $publication = Services::get('publication')->get($props['publicationId']);
189  if (!$publication) {
190  $validator->errors()->add('publicationId', __('author.publicationNotFound'));
191  } else if ($publication->getData('status') === STATUS_PUBLISHED) {
192  $validator->errors()->add('publicationId', __('author.editPublishedDisabled'));
193  }
194  }
195  });
196 
197  if ($validator->fails()) {
198  $errors = $schemaService->formatValidationErrors($validator->errors(), $schemaService->get(SCHEMA_AUTHOR), $allowedLocales);
199  }
200 
201  \HookRegistry::call('Author::validate', array(&$errors, $action, $props, $allowedLocales, $primaryLocale));
202 
203  return $errors;
204  }
205 
209  public function add($author, $request) {
210  $authorDao = DAORegistry::getDAO('AuthorDAO'); /* @var $authorDao AuthorDAO */
211  $authorId = $authorDao->insertObject($author);
212  $author = $this->get($authorId);
213 
214  \HookRegistry::call('Author::add', array($author, $request));
215 
216  return $author;
217  }
218 
222  public function edit($author, $params, $request) {
223  $authorDao = DAORegistry::getDAO('AuthorDAO'); /* @var $authorDao AuthorDAO */
224 
225  $newAuthor = $authorDao->newDataObject();
226  $newAuthor->_data = array_merge($author->_data, $params);
227 
228  \HookRegistry::call('Author::edit', array($newAuthor, $author, $params, $request));
229 
230  $authorDao->updateObject($newAuthor);
231  $newAuthor = $this->get($newAuthor->getId());
232 
233  return $newAuthor;
234  }
235 
239  public function delete($author) {
240  \HookRegistry::call('Author::delete::before', [$author]);
241  $authorDao = DAORegistry::getDAO('AuthorDAO'); /* @var $authorDao AuthorDAO */
242  $authorDao->deleteObject($author);
243  \HookRegistry::call('Author::delete', [$author]);
244  }
245 }
PKP\Services
DAOResultFactory
Wrapper around ADORecordSet providing "factory" features for generating objects from DAOs.
Definition: DAOResultFactory.inc.php:21
PKP\Services\PKPAuthorService\add
add($author, $request)
Definition: PKPAuthorService.inc.php:209
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
PKP\Services\PKPAuthorService\getMax
getMax($args=[])
Definition: PKPAuthorService.inc.php:75
PKP\Services\PKPAuthorService\getIds
getIds($args=[])
Definition: PKPAuthorService.inc.php:47
PKP\Services\PKPAuthorService\getQueryBuilder
getQueryBuilder($args=[])
Definition: PKPAuthorService.inc.php:85
ValidatorFactory\allowedLocales
static allowedLocales($validator, $multilingualProps, $allowedLocales)
Definition: ValidatorFactory.inc.php:320
PKP\Services\PKPAuthorService\getSummaryProperties
getSummaryProperties($author, $args=null)
Definition: PKPAuthorService.inc.php:145
PKP\Services\PKPAuthorService\validate
validate($action, $props, $allowedLocales, $primaryLocale)
Definition: PKPAuthorService.inc.php:163
ValidatorFactory\required
static required($validator, $action, $requiredProps, $multilingualProps, $allowedLocales, $primaryLocale)
Definition: ValidatorFactory.inc.php:261
ValidatorFactory\make
static make($props, $rules, $messages=[])
Definition: ValidatorFactory.inc.php:38
PKP\Services\QueryBuilders\PKPAuthorQueryBuilder
Definition: PKPAuthorQueryBuilder.inc.php:20
PKP\Services\SCHEMA_AUTHOR
const SCHEMA_AUTHOR
Definition: PKPSchemaService.inc.php:18
PKP\Services\PKPAuthorService\getCount
getCount($args=[])
Definition: PKPAuthorService.inc.php:40
PKP\Services\PKPAuthorService\getMany
getMany($args=array())
Definition: PKPAuthorService.inc.php:63
PKP\Services\PKPAuthorService\edit
edit($author, $params, $request)
Definition: PKPAuthorService.inc.php:222
HookRegistry\call
static call($hookName, $args=null)
Definition: HookRegistry.inc.php:86
PKP\Services\PKPAuthorService\getProperties
getProperties($author, $props, $args=null)
Definition: PKPAuthorService.inc.php:119
PKP\Services\PKPAuthorService
Definition: PKPAuthorService.inc.php:27
PKPServices\get
static get($service)
Definition: PKPServices.inc.php:49
PKP\Services\PKPAuthorService\getFullProperties
getFullProperties($author, $args=null)
Definition: PKPAuthorService.inc.php:154