Open Monograph Press  3.3.0
BackendSubmissionsHandler.inc.php
1 <?php
2 
17 import('lib.pkp.api.v1._submissions.PKPBackendSubmissionsHandler');
18 
20 
24  public function __construct() {
25 
26  \HookRegistry::register('API::_submissions::params', array($this, 'addAppSubmissionsParams'));
27 
28  $rootPattern = '/{contextPath}/api/{version}/_submissions';
29  $this->_endpoints = array(
30  'POST' => array(
31  array(
32  'pattern' => "{$rootPattern}/saveDisplayFlags",
33  'handler' => array($this, 'saveDisplayFlags'),
34  'roles' => array(
35  ROLE_ID_SITE_ADMIN,
36  ROLE_ID_MANAGER,
37  ),
38  ),
39  array(
40  'pattern' => "{$rootPattern}/saveFeaturedOrder",
41  'handler' => array($this, 'saveFeaturedOrder'),
42  'roles' => array(
43  ROLE_ID_SITE_ADMIN,
44  ROLE_ID_MANAGER,
45  ),
46  ),
47  ),
48  'PUT' => [
49  [
50  'pattern' => "{$rootPattern}/addToCatalog",
51  'handler' => [$this, 'addToCatalog'],
52  'roles' => [
53  ROLE_ID_SITE_ADMIN,
54  ROLE_ID_MANAGER,
55  ],
56  ],
57  ],
58  );
59  parent::__construct();
60  }
61 
72  public function addAppSubmissionsParams($hookName, $args) {
73  $params =& $args[0];
74  $slimRequest = $args[1];
75  $response = $args[2];
76 
77  $originalParams = $slimRequest->getQueryParams();
78 
79  // Bring in orderby constants
80  import('lib.pkp.classes.submission.PKPSubmissionDAO');
81  import('classes.submission.SubmissionDAO');
82 
83  // Add allowed order by options for OMP
84  if (isset($originalParams['orderBy']) && in_array($originalParams['orderBy'], array(ORDERBY_DATE_PUBLISHED, ORDERBY_SERIES_POSITION))) {
85  $params['orderBy'] = $originalParams['orderBy'];
86  }
87 
88  // Add allowed order by option for featured/new releases
89  if (isset($originalParams['orderByFeatured'])) {
90  $params['orderByFeatured'] = true;
91  }
92 
93  if (!empty($originalParams['categoryIds'])) {
94  if (is_array($originalParams['categoryIds'])) {
95  $params['categoryIds'] = array_map('intval', $originalParams['categoryIds']);
96  } else {
97  $params['categoryIds'] = array((int) $originalParams['categoryIds']);
98  }
99  }
100 
101  if (!empty($originalParams['seriesIds'])) {
102  if (is_array($originalParams['seriesIds'])) {
103  $params['seriesIds'] = array_map('intval', $originalParams['seriesIds']);
104  } else {
105  $params['seriesIds'] = array((int) $originalParams['seriesIds']);
106  }
107  }
108  }
109 
124  public function saveDisplayFlags($slimRequest, $response, $args) {
125  $params = $slimRequest->getParsedBody();
126 
127  $submissionId = isset($params['submissionId']) ? (int) $params['submissionId'] : null;
128 
129  if (empty($submissionId)) {
130  return $response->withStatus(400)->withJsonError('api.submissions.400.missingRequired');
131  }
132 
133  $featureDao = \DAORegistry::getDAO('FeatureDAO');
134  $featureDao->deleteByMonographId($submissionId);
135  if (!empty($params['featured'])) {
136  foreach($params['featured'] as $feature) {
137  $featureDao->insertFeature($submissionId, $feature['assoc_type'], $feature['assoc_id'], $feature['seq']);
138  }
139  }
140 
141  $newReleaseDao = \DAORegistry::getDAO('NewReleaseDAO');
142  $newReleaseDao->deleteByMonographId($submissionId);
143  if (!empty($params['newRelease'])) {
144  foreach($params['newRelease'] as $newRelease) {
145  $newReleaseDao->insertNewRelease($submissionId, $newRelease['assoc_type'], $newRelease['assoc_id']);
146  }
147  }
148 
149  $output = array(
150  'featured' => $featureDao->getFeaturedAll($submissionId),
151  'newRelease' => $newReleaseDao->getNewReleaseAll($submissionId),
152  );
153 
154  return $response->withJson($output);
155  }
156 
175  public function saveFeaturedOrder($slimRequest, $response, $args) {
176  $params = $slimRequest->getParsedBody();
177 
178  $assocType = isset($params['assocType']) && in_array($params['assocType'], array(ASSOC_TYPE_PRESS, ASSOC_TYPE_CATEGORY, ASSOC_TYPE_SERIES)) ? (int) $params['assocType'] : null;
179  $assocId = isset($params['assocId']) ? (int) $params['assocId'] : null;
180 
181  if (empty($assocType) || empty($assocId)) {
182  return $response->withStatus(400)->withJsonError('api.submissions.400.missingRequired');
183  }
184 
185  $featureDao = \DAORegistry::getDAO('FeatureDAO');
186  $featureDao->deleteByAssoc($assocType, $assocId);
187  if (!empty($params['featured'])) {
188  foreach($params['featured'] as $feature) {
189  $featureDao->insertFeature($feature['id'], $assocType, $assocId, $feature['seq']);
190  }
191  }
192 
193  return $response->withJson(true);
194  }
195 
204  public function addToCatalog($slimRequest, $response, $args) {
205  $params = $slimRequest->getParsedBody();
206 
207  if (empty($params['submissionIds'])) {
208  return $response->withStatus(400)->withJsonError('api.submissions.400.submissionIdsRequired');
209  }
210 
211  $submissionIds = array_map('intval', (array) $params['submissionIds']);
212 
213  if (empty($submissionIds)) {
214  return $response->withStatus(400)->withJsonError('api.submissions.400.submissionIdsRequired');
215  }
216 
217 
218  $primaryLocale = $this->getRequest()->getContext()->getPrimaryLocale();
219  $allowedLocales = $this->getRequest()->getContext()->getSupportedFormLocales();
220 
221  $validPublications = [];
222  foreach ($submissionIds as $submissionId) {
223  $submission = Services::get('submission')->get($submissionId);
224  if (!$submission) {
225  return $response->withStatus(400)->withJsonError('api.submissions.400.submissionsNotFound');
226  }
227  $publication = $submission->getCurrentPublication();
228  if ($publication->getData('status') === STATUS_PUBLISHED) {
229  continue;
230  }
231  $errors = Services::get('publication')->validatePublish($publication, $submission, $allowedLocales, $primaryLocale);
232  if (!empty($errors)) {
233  return $response->withStatus(400)->withJson($errors);
234  }
235  $validPublications[] = $publication;
236  }
237 
238  foreach($validPublications as $validPublication) {
239  Services::get('publication')->publish($validPublication);
240  }
241 
242  return $response->withJson(true);
243  }
244 }
BackendSubmissionsHandler\addToCatalog
addToCatalog($slimRequest, $response, $args)
Definition: BackendSubmissionsHandler.inc.php:204
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
BackendSubmissionsHandler\__construct
__construct()
Definition: BackendSubmissionsHandler.inc.php:24
BackendSubmissionsHandler\saveDisplayFlags
saveDisplayFlags($slimRequest, $response, $args)
Definition: BackendSubmissionsHandler.inc.php:124
PKPBackendSubmissionsHandler
Handle API requests for backend operations.
Definition: PKPBackendSubmissionsHandler.inc.php:21
BackendSubmissionsHandler
Handle API requests for backend operations.
Definition: BackendSubmissionsHandler.inc.php:19
HookRegistry\register
static register($hookName, $callback, $hookSequence=HOOK_SEQUENCE_NORMAL)
Definition: HookRegistry.inc.php:70
BackendSubmissionsHandler\saveFeaturedOrder
saveFeaturedOrder($slimRequest, $response, $args)
Definition: BackendSubmissionsHandler.inc.php:175
APIHandler\getRequest
getRequest()
Definition: APIHandler.inc.php:149
BackendSubmissionsHandler\addAppSubmissionsParams
addAppSubmissionsParams($hookName, $args)
Definition: BackendSubmissionsHandler.inc.php:72
PKPServices\get
static get($service)
Definition: PKPServices.inc.php:49