Open Journal Systems  3.3.0
PKPReviewerHandler.inc.php
1 <?php
2 
16 import('classes.handler.Handler');
17 import('lib.pkp.classes.core.JSONMessage');
18 import('lib.pkp.classes.submission.reviewer.ReviewerAction');
19 
20 class PKPReviewerHandler extends Handler {
21 
23  var $_isBackendPage = true;
24 
30  function submission($args, $request) {
31  $reviewAssignment = $this->getAuthorizedContextObject(ASSOC_TYPE_REVIEW_ASSIGNMENT); /* @var $reviewAssignment ReviewAssignment */
32  $reviewerSubmissionDao = DAORegistry::getDAO('ReviewerSubmissionDAO'); /* @var $reviewerSubmissionDao ReviewerSubmissionDAO */
33  $reviewerSubmission = $reviewerSubmissionDao->getReviewerSubmission($reviewAssignment->getId());
34  assert(is_a($reviewerSubmission, 'ReviewerSubmission'));
35 
36  $this->setupTemplate($request);
37 
38  $templateMgr = TemplateManager::getManager($request);
39  $reviewStep = max($reviewerSubmission->getStep(), 1);
40  $userStep = (int) $request->getUserVar('step');
41  $step = (int) (!empty($userStep) ? $userStep: $reviewStep);
42  if ($step > $reviewStep) $step = $reviewStep; // Reviewer can't go past incomplete steps
43  if ($step < 1 || $step > 4) throw new Exception('Invalid step!');
44  $templateMgr->assign([
45  'pageTitle' => __('semicolon', ['label' => __('submission.review')]) . $reviewerSubmission->getLocalizedTitle(),
46  'reviewStep' => $reviewStep,
47  'selected' => $step - 1,
48  'submission' => $reviewerSubmission,
49  ]);
50 
51  $templateMgr->display('reviewer/review/reviewStepHeader.tpl');
52  }
53 
60  function step($args, $request) {
61  $reviewAssignment = $this->getAuthorizedContextObject(ASSOC_TYPE_REVIEW_ASSIGNMENT); /* @var $reviewAssignment ReviewAssignment */
62  $reviewId = (int) $reviewAssignment->getId();
63  assert(!empty($reviewId));
64 
65  $reviewerSubmissionDao = DAORegistry::getDAO('ReviewerSubmissionDAO'); /* @var $reviewerSubmissionDao ReviewerSubmissionDAO */
66  $reviewerSubmission = $reviewerSubmissionDao->getReviewerSubmission($reviewAssignment->getId());
67  assert(is_a($reviewerSubmission, 'ReviewerSubmission'));
68 
69  $this->setupTemplate($request);
70 
71  $reviewStep = max($reviewerSubmission->getStep(), 1); // Get the current saved step from the DB
72  $userStep = (int) $request->getUserVar('step');
73  $step = (int) (!empty($userStep) ? $userStep: $reviewStep);
74  if ($step > $reviewStep) $step = $reviewStep; // Reviewer can't go past incomplete steps
75  if ($step < 1 || $step > 4) fatalError('Invalid step!');
76 
77  if ($step < 4) {
78  $reviewerForm = $this->getReviewForm($step, $request, $reviewerSubmission, $reviewAssignment);
79  $reviewerForm->initData();
80  return new JSONMessage(true, $reviewerForm->fetch($request));
81  } else {
82  $templateMgr = TemplateManager::getManager($request);
83  $templateMgr->assign([
84  'submission' => $reviewerSubmission,
85  'step' => 4,
86  'reviewAssignment' => $reviewAssignment,
87  ]);
88  return $templateMgr->fetchJson('reviewer/review/reviewCompleted.tpl');
89  }
90  }
91 
98  function saveStep($args, $request) {
99  $step = (int)$request->getUserVar('step');
100  if ($step<1 || $step>3) fatalError('Invalid step!');
101  $saveFormButton = (bool)$request->getUserVar('saveFormButton');
102 
103  $reviewAssignment = $this->getAuthorizedContextObject(ASSOC_TYPE_REVIEW_ASSIGNMENT); /* @var $reviewAssignment ReviewAssignment */
104  if ($reviewAssignment->getDateCompleted()) fatalError('Review already completed!');
105 
106  $reviewerSubmissionDao = DAORegistry::getDAO('ReviewerSubmissionDAO'); /* @var $reviewerSubmissionDao ReviewerSubmissionDAO */
107  $reviewerSubmission = $reviewerSubmissionDao->getReviewerSubmission($reviewAssignment->getId());
108  assert(is_a($reviewerSubmission, 'ReviewerSubmission'));
109 
110  $reviewerForm = $this->getReviewForm($step, $request, $reviewerSubmission, $reviewAssignment);
111  $reviewerForm->readInputData();
112 
113  // Save the available form data, but do not submit
114  if ($saveFormButton) {
115  $reviewerForm->saveForLater();
116  $notificationMgr = new NotificationManager();
117  $user = $request->getUser();
118  $notificationMgr->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_SUCCESS, array('contents' => __('common.changesSaved')));
119  return DAO::getDataChangedEvent();
120  }
121  // Submit the form data and move forward
122  else {
123  if ($reviewerForm->validate()) {
124  $reviewerForm->execute();
125  $json = new JSONMessage(true);
126  $json->setEvent('setStep', $step+1);
127  return $json;
128  } else {
129  $this->setupTemplate($request);
130  return new JSONMessage(true, $reviewerForm->fetch($request));
131  }
132  }
133  }
134 
141  function showDeclineReview($args, $request) {
142  $reviewAssignment = $this->getAuthorizedContextObject(ASSOC_TYPE_REVIEW_ASSIGNMENT); /* @var $reviewAssignment ReviewAssignment */
143 
144  $reviewerSubmissionDao = DAORegistry::getDAO('ReviewerSubmissionDAO'); /* @var $reviewerSubmissionDao ReviewerSubmissionDAO */
145  $reviewerSubmission = $reviewerSubmissionDao->getReviewerSubmission($reviewAssignment->getId());
146  assert(is_a($reviewerSubmission, 'ReviewerSubmission'));
147 
148  $this->setupTemplate($request);
149 
150  $templateMgr = TemplateManager::getManager($request);
151  $templateMgr->assign('submissionId', $reviewerSubmission->getId());
152 
153  // Provide the email body to the template
154  $reviewerAction = new ReviewerAction();
155  $email = $reviewerAction->getResponseEmail($reviewerSubmission, $reviewAssignment, $request, 1);
156  $templateMgr->assign('declineMessageBody', $email->getBody());
157 
158  return $templateMgr->fetchJson('reviewer/review/modal/regretMessage.tpl');
159  }
160 
166  function saveDeclineReview($args, $request) {
167  $reviewAssignment = $this->getAuthorizedContextObject(ASSOC_TYPE_REVIEW_ASSIGNMENT); /* @var $reviewAssignment ReviewAssignment */
168  if ($reviewAssignment->getDateCompleted()) fatalError('Review already completed!');
169 
170  $reviewId = (int) $reviewAssignment->getId();
171  $declineReviewMessage = $request->getUserVar('declineReviewMessage');
172 
173  // Decline the review
174  $reviewerAction = new ReviewerAction();
175  $submission = $this->getAuthorizedContextObject(ASSOC_TYPE_SUBMISSION);
176  $reviewerAction->confirmReview($request, $reviewAssignment, $submission, 1, $declineReviewMessage);
177 
178  $dispatcher = $request->getDispatcher();
179  return $request->redirectUrlJson($dispatcher->url($request, ROUTE_PAGE, null, 'index'));
180  }
181 
185  function setupTemplate($request) {
186  parent::setupTemplate($request);
188  LOCALE_COMPONENT_PKP_SUBMISSION,
189  LOCALE_COMPONENT_APP_SUBMISSION,
190  LOCALE_COMPONENT_APP_COMMON,
191  LOCALE_COMPONENT_PKP_GRID,
192  LOCALE_COMPONENT_PKP_REVIEWER,
193  LOCALE_COMPONENT_PKP_EDITOR,
194  LOCALE_COMPONENT_PKP_USER
195  );
196  }
197 
205  public function getReviewForm($step, $request, $reviewerSubmission, $reviewAssignment) {
206  switch ($step) {
207  case 1:
208  import("lib.pkp.classes.submission.reviewer.form.PKPReviewerReviewStep1Form");
209  return new PKPReviewerReviewStep1Form($request, $reviewerSubmission, $reviewAssignment);
210  case 2:
211  import("lib.pkp.classes.submission.reviewer.form.PKPReviewerReviewStep2Form");
212  return new PKPReviewerReviewStep2Form($request, $reviewerSubmission, $reviewAssignment);
213  case 3:
214  import("lib.pkp.classes.submission.reviewer.form.PKPReviewerReviewStep3Form");
215  return new PKPReviewerReviewStep3Form($request, $reviewerSubmission, $reviewAssignment);
216  }
217  }
218 
219  //
220  // Private helper methods
221  //
222  function _retrieveStep() {
223  $reviewAssignment = $this->getAuthorizedContextObject(ASSOC_TYPE_REVIEW_ASSIGNMENT); /* @var $reviewAssignment ReviewAssignment */
224  $reviewId = (int) $reviewAssignment->getId();
225  assert(!empty($reviewId));
226  return $reviewId;
227  }
228 }
229 
230 
PKPReviewerHandler
Handle requests for reviewer functions.
Definition: PKPReviewerHandler.inc.php:20
AppLocale\requireComponents
static requireComponents()
Definition: env1/MockAppLocale.inc.php:56
PKPReviewerHandler\$_isBackendPage
$_isBackendPage
Definition: PKPReviewerHandler.inc.php:23
PKPReviewerHandler\saveDeclineReview
saveDeclineReview($args, $request)
Definition: PKPReviewerHandler.inc.php:166
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
PKPReviewerReviewStep1Form
Form for Step 1 of a review.
Definition: PKPReviewerReviewStep1Form.inc.php:18
PKPReviewerReviewStep3Form
Form for Step 3 of a review.
Definition: PKPReviewerReviewStep3Form.inc.php:18
DAO\getDataChangedEvent
static getDataChangedEvent($elementId=null, $parentElementId=null, $content='')
Definition: DAO.inc.php:647
JSONMessage
Class to represent a JSON (Javascript Object Notation) message.
Definition: JSONMessage.inc.php:18
PKPReviewerHandler\showDeclineReview
showDeclineReview($args, $request)
Definition: PKPReviewerHandler.inc.php:141
ReviewerAction
ReviewerAction class.
Definition: ReviewerAction.inc.php:20
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
PKPHandler\getAuthorizedContextObject
& getAuthorizedContextObject($assocType)
Definition: PKPHandler.inc.php:174
PKPReviewerHandler\submission
submission($args, $request)
Definition: PKPReviewerHandler.inc.php:30
PKPReviewerHandler\setupTemplate
setupTemplate($request)
Definition: PKPReviewerHandler.inc.php:185
PKPReviewerReviewStep2Form
Form for Step 2 of a review.
Definition: PKPReviewerReviewStep2Form.inc.php:18
NotificationManager
Definition: NotificationManager.inc.php:19
PKPReviewerHandler\getReviewForm
getReviewForm($step, $request, $reviewerSubmission, $reviewAssignment)
Definition: PKPReviewerHandler.inc.php:205
PKPReviewerHandler\step
step($args, $request)
Definition: PKPReviewerHandler.inc.php:60
fatalError
if(!function_exists('import')) fatalError($reason)
Definition: functions.inc.php:32
Handler
Base request handler application class.
Definition: Handler.inc.php:18
PKPReviewerHandler\_retrieveStep
_retrieveStep()
Definition: PKPReviewerHandler.inc.php:222
PKPReviewerHandler\saveStep
saveStep($args, $request)
Definition: PKPReviewerHandler.inc.php:98