Open Journal Systems  3.3.0
PKPAnnouncementService.inc.php
1 <?php
15 namespace PKP\Services;
16 
17 use \Core;
18 use \DAOResultFactory;
19 use \DAORegistry;
20 use \DBResultRange;
21 use \Services;
22 use \PKP\Services\interfaces\EntityPropertyInterface;
23 use \PKP\Services\interfaces\EntityReadInterface;
24 use \PKP\Services\interfaces\EntityWriteInterface;
26 
27 import('lib.pkp.classes.db.DBResultRange');
28 
29 class PKPAnnouncementService implements EntityPropertyInterface, EntityReadInterface, EntityWriteInterface {
30 
34  public function get($announcementId) {
35  return DAORegistry::getDAO('AnnouncementDAO')->getById($announcementId);
36  }
37 
41  public function getCount($args = []) {
42  return $this->getQueryBuilder($args)->getCount();
43  }
44 
48  public function getIds($args = []) {
49  return $this->getQueryBuilder($args)->getIds();
50  }
51 
55  public function getMany($args = null) {
56  $range = null;
57  if (isset($args['count'])) {
58  import('lib.pkp.classes.db.DBResultRange');
59  $range = new \DBResultRange($args['count'], null, isset($args['offset']) ? $args['offset'] : 0);
60  }
61  // Pagination is handled by the DAO, so don't pass count and offset
62  // arguments to the QueryBuilder.
63  if (isset($args['count'])) unset($args['count']);
64  if (isset($args['offset'])) unset($args['offset']);
65  $announcementQO = $this->getQueryBuilder($args)->getQuery();
66  $announcementDao = DAORegistry::getDAO('AnnouncementDAO');
67  $result = $announcementDao->retrieveRange($announcementQO->toSql(), $announcementQO->getBindings(), $range);
68  $queryResults = new DAOResultFactory($result, $announcementDao, '_fromRow');
69 
70  return $queryResults->toIterator();
71 
72  }
73 
77  public function getMax($args = null) {
78  // Don't accept args to limit the results
79  if (isset($args['count'])) unset($args['count']);
80  if (isset($args['offset'])) unset($args['offset']);
81  return (int) $this->getQueryBuilder($args)->getCount();
82  }
83 
84  public function getQueryBuilder($args = []) {
85 
86  $defaultArgs = [
87  'contextIds' => null,
88  'searchPhrase' => '',
89  'typeIds' => null,
90  ];
91 
92  $args = array_merge($defaultArgs, $args);
93 
94  $announcementQB = new PKPAnnouncementQueryBuilder();
95  if (!empty($args['contextIds'])) {
96  $announcementQB->filterByContextIds($args['contextIds']);
97  }
98  if (!empty($args['searchPhrase'])) {
99  $announcementQB->searchPhrase($args['searchPhrase']);
100  }
101  if (!empty($args['typeIds'])) {
102  $announcementQB->filterByTypeIds($args['typeIds']);
103  }
104 
105  \HookRegistry::call('Announcement::getMany::queryBuilder', [$announcementQB, $args]);
106 
107  return $announcementQB;
108  }
109 
113  public function getProperties($announcement, $props, $args = null) {
114  $request = $args['request'];
115  $announcementContext = $args['announcementContext'];
116  $dispatcher = $request->getDispatcher();
117 
118  $values = [];
119 
120  foreach ($props as $prop) {
121  switch ($prop) {
122  case '_href':
123  $values[$prop] = $dispatcher->url(
124  $request,
125  ROUTE_API,
126  $announcementContext->getData('urlPath'),
127  'announcements/' . $announcement->getId()
128  );
129  break;
130  default:
131  $values[$prop] = $announcement->getData($prop);
132  break;
133  }
134  }
135 
136  $values = Services::get('schema')->addMissingMultilingualValues(SCHEMA_ANNOUNCEMENT, $values, $announcementContext->getSupportedFormLocales());
137 
138  \HookRegistry::call('Announcement::getProperties', [&$values, $announcement, $props, $args]);
139 
140  ksort($values);
141 
142  return $values;
143  }
144 
148  public function getSummaryProperties($announcement, $args = null) {
149  $props = Services::get('schema')->getSummaryProps(SCHEMA_ANNOUNCEMENT);
150 
151  return $this->getProperties($announcement, $props, $args);
152  }
153 
157  public function getFullProperties($announcement, $args = null) {
158  $props = Services::get('schema')->getFullProps(SCHEMA_ANNOUNCEMENT);
159 
160  return $this->getProperties($announcement, $props, $args);
161  }
162 
166  public function validate($action, $props, $allowedLocales, $primaryLocale) {
168  LOCALE_COMPONENT_PKP_MANAGER,
169  LOCALE_COMPONENT_APP_MANAGER
170  );
171  $schemaService = Services::get('schema');
172 
173  import('lib.pkp.classes.validation.ValidatorFactory');
174  $validator = \ValidatorFactory::make(
175  $props,
176  $schemaService->getValidationRules(SCHEMA_ANNOUNCEMENT, $allowedLocales),
177  [
178  'dateExpire.date_format' => __('stats.dateRange.invalidDate'),
179  ]
180  );
181 
182  // Check required fields if we're adding a context
184  $validator,
185  $action,
186  $schemaService->getRequiredProps(SCHEMA_ANNOUNCEMENT),
187  $schemaService->getMultilingualProps(SCHEMA_ANNOUNCEMENT),
188  $allowedLocales,
189  $primaryLocale
190  );
191 
192  // Check for input from disallowed locales
193  \ValidatorFactory::allowedLocales($validator, $schemaService->getMultilingualProps(SCHEMA_ANNOUNCEMENT), $allowedLocales);
194 
195  if ($validator->fails()) {
196  $errors = $schemaService->formatValidationErrors($validator->errors(), $schemaService->get(SCHEMA_ANNOUNCEMENT), $allowedLocales);
197  }
198 
199  \HookRegistry::call('Announcement::validate', array(&$errors, $action, $props, $allowedLocales, $primaryLocale));
200 
201  return $errors;
202  }
203 
207  public function add($announcement, $request) {
208  $announcement->setData('datePosted', Core::getCurrentDate());
209  DAORegistry::getDao('AnnouncementDAO')->insertObject($announcement);
210  \HookRegistry::call('Announcement::add', [$announcement, $request]);
211 
212  return $announcement;
213  }
214 
218  public function edit($announcement, $params, $request) {
219 
220  $newAnnouncement = DAORegistry::getDAO('AnnouncementDAO')->newDataObject();
221  $newAnnouncement->_data = array_merge($announcement->_data, $params);
222 
223  \HookRegistry::call('Announcement::edit', array($newAnnouncement, $announcement, $params, $request));
224 
225  DAORegistry::getDAO('AnnouncementDAO')->updateObject($newAnnouncement);
226  $newAnnouncement = $this->get($newAnnouncement->getId());
227 
228  return $newAnnouncement;
229  }
230 
234  public function delete($announcement) {
235  \HookRegistry::call('Announcement::delete::before', array($announcement));
236  DAORegistry::getDao('AnnouncementDAO')->deleteObject($announcement);
237  \HookRegistry::call('Announcement::delete', array($announcement));
238  }
239 }
PKP\Services
AppLocale\requireComponents
static requireComponents()
Definition: env1/MockAppLocale.inc.php:56
DAOResultFactory
Wrapper around ADORecordSet providing "factory" features for generating objects from DAOs.
Definition: DAOResultFactory.inc.php:21
PKP\Services\PKPAnnouncementService\add
add($announcement, $request)
Definition: PKPAnnouncementService.inc.php:207
PKP\Services\PKPAnnouncementService\getFullProperties
getFullProperties($announcement, $args=null)
Definition: PKPAnnouncementService.inc.php:157
PKP\Services\PKPAnnouncementService\getIds
getIds($args=[])
Definition: PKPAnnouncementService.inc.php:48
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
PKP\Services\QueryBuilders\PKPAnnouncementQueryBuilder
Definition: PKPAnnouncementQueryBuilder.inc.php:20
ValidatorFactory\allowedLocales
static allowedLocales($validator, $multilingualProps, $allowedLocales)
Definition: ValidatorFactory.inc.php:320
PKP\Services\PKPAnnouncementService\getCount
getCount($args=[])
Definition: PKPAnnouncementService.inc.php:41
ValidatorFactory\required
static required($validator, $action, $requiredProps, $multilingualProps, $allowedLocales, $primaryLocale)
Definition: ValidatorFactory.inc.php:261
PKP\Services\PKPAnnouncementService\validate
validate($action, $props, $allowedLocales, $primaryLocale)
Definition: PKPAnnouncementService.inc.php:166
ValidatorFactory\make
static make($props, $rules, $messages=[])
Definition: ValidatorFactory.inc.php:38
PKP\Services\PKPAnnouncementService\getMax
getMax($args=null)
Definition: PKPAnnouncementService.inc.php:77
PKP\Services\SCHEMA_ANNOUNCEMENT
const SCHEMA_ANNOUNCEMENT
Definition: PKPSchemaService.inc.php:17
PKP\Services\PKPAnnouncementService\getProperties
getProperties($announcement, $props, $args=null)
Definition: PKPAnnouncementService.inc.php:113
Core\getCurrentDate
static getCurrentDate($ts=null)
Definition: Core.inc.php:63
PKP\Services\PKPAnnouncementService\getQueryBuilder
getQueryBuilder($args=[])
Definition: PKPAnnouncementService.inc.php:84
PKP\Services\PKPAnnouncementService
Definition: PKPAnnouncementService.inc.php:29
HookRegistry\call
static call($hookName, $args=null)
Definition: HookRegistry.inc.php:86
PKP\Services\PKPAnnouncementService\edit
edit($announcement, $params, $request)
Definition: PKPAnnouncementService.inc.php:218
PKPServices\get
static get($service)
Definition: PKPServices.inc.php:49
PKP\Services\PKPAnnouncementService\getMany
getMany($args=null)
Definition: PKPAnnouncementService.inc.php:55
PKP\Services\PKPAnnouncementService\getSummaryProperties
getSummaryProperties($announcement, $args=null)
Definition: PKPAnnouncementService.inc.php:148