Open Journal Systems  3.3.0
PKPReviewerReviewStep3Form.inc.php
1 <?php
2 
16 import('lib.pkp.classes.submission.reviewer.form.ReviewerReviewForm');
17 
24  function __construct($request, $reviewerSubmission, $reviewAssignment) {
25  parent::__construct($request, $reviewerSubmission, $reviewAssignment, 3);
26 
27  // Validation checks for this form
28  $reviewFormElementDao = DAORegistry::getDAO('ReviewFormElementDAO'); /* @var $reviewFormElementDao ReviewFormElementDAO */
29  $requiredReviewFormElementIds = $reviewFormElementDao->getRequiredReviewFormElementIds($reviewAssignment->getReviewFormId());
30  $this->addCheck(new FormValidatorCustom($this, 'reviewFormResponses', 'required', 'reviewer.submission.reviewFormResponse.form.responseRequired', function($reviewFormResponses) use ($requiredReviewFormElementIds) {
31  foreach ($requiredReviewFormElementIds as $requiredReviewFormElementId) {
32  if (!isset($reviewFormResponses[$requiredReviewFormElementId]) || $reviewFormResponses[$requiredReviewFormElementId] == '') return false;
33  }
34  return true;
35  }));
36 
37  $this->addCheck(new FormValidatorPost($this));
38  $this->addCheck(new FormValidatorCSRF($this));
39 
40  }
41 
45  function initData() {
46  $reviewAssignment = $this->getReviewAssignment();
47 
48  // Retrieve most recent reviewer comments, one private, one public.
49  $submissionCommentDao = DAORegistry::getDAO('SubmissionCommentDAO'); /* @var $submissionCommentDao SubmissionCommentDAO */
50 
51  $submissionComments = $submissionCommentDao->getReviewerCommentsByReviewerId($reviewAssignment->getSubmissionId(), $reviewAssignment->getReviewerId(), $reviewAssignment->getId(), true);
52  $submissionComment = $submissionComments->next();
53  $this->setData('comments', $submissionComment?$submissionComment->getComments():'');
54 
55  $submissionCommentsPrivate = $submissionCommentDao->getReviewerCommentsByReviewerId($reviewAssignment->getSubmissionId(), $reviewAssignment->getReviewerId(), $reviewAssignment->getId(), false);
56  $submissionCommentPrivate = $submissionCommentsPrivate->next();
57  $this->setData('commentsPrivate', $submissionCommentPrivate?$submissionCommentPrivate->getComments():'');
58  }
59 
60  //
61  // Implement protected template methods from Form
62  //
66  function readInputData() {
67  $this->readUserVars(
68  array('reviewFormResponses', 'comments', 'recommendation', 'commentsPrivate')
69  );
70  }
71 
75  function fetch($request, $template = null, $display = false) {
76  $templateMgr = TemplateManager::getManager($request);
77  $reviewAssignment = $this->getReviewAssignment();
78 
79  // Assign the objects and data to the template.
80  $context = $this->request->getContext();
81  $templateMgr->assign(array(
82  'reviewAssignment' => $reviewAssignment,
83  'reviewRoundId' => $reviewAssignment->getReviewRoundId(),
84  'reviewerRecommendationOptions' => ReviewAssignment::getReviewerRecommendationOptions(),
85  ));
86 
87  if ($reviewAssignment->getReviewFormId()) {
88 
89  // Get the review form components
90  $reviewFormElementDao = DAORegistry::getDAO('ReviewFormElementDAO'); /* @var $reviewFormElementDao ReviewFormElementDAO */
91  $reviewFormResponseDao = DAORegistry::getDAO('ReviewFormResponseDAO'); /* @var $reviewFormResponseDao ReviewFormResponseDAO */
92  $reviewFormDao = DAORegistry::getDAO('ReviewFormDAO'); /* @var $reviewFormDao ReviewFormDAO */
93  $templateMgr->assign(array(
94  'reviewForm' => $reviewFormDao->getById($reviewAssignment->getReviewFormId(), Application::getContextAssocType(), $context->getId()),
95  'reviewFormElements' => $reviewFormElementDao->getByReviewFormId($reviewAssignment->getReviewFormId()),
96  'reviewFormResponses' => $reviewFormResponseDao->getReviewReviewFormResponseValues($reviewAssignment->getId()),
97  'disabled' => isset($reviewAssignment) && $reviewAssignment->getDateCompleted() != null,
98  ));
99  }
100 
101  //
102  // Assign the link actions
103  //
104  import('lib.pkp.controllers.confirmationModal.linkAction.ViewReviewGuidelinesLinkAction');
105  $viewReviewGuidelinesAction = new ViewReviewGuidelinesLinkAction($request, $reviewAssignment->getStageId());
106  if ($viewReviewGuidelinesAction->getGuidelines()) {
107  $templateMgr->assign('viewGuidelinesAction', $viewReviewGuidelinesAction);
108  }
109 
110  return parent::fetch($request, $template, $display);
111  }
112 
116  function execute(...$functionParams) {
117  $reviewAssignment = $this->getReviewAssignment();
118  $notificationMgr = new NotificationManager();
119 
120  // Save the answers to the review form
121  $this->saveReviewForm($reviewAssignment);
122 
123  // Send notification
124  $submissionDao = DAORegistry::getDAO('SubmissionDAO'); /* @var $submissionDao SubmissionDAO */
125  $submission = $submissionDao->getById($reviewAssignment->getSubmissionId());
126 
127  $stageAssignmentDao = DAORegistry::getDAO('StageAssignmentDAO'); /* @var $stageAssignmentDao StageAssignmentDAO */
128  $stageAssignments = $stageAssignmentDao->getBySubmissionAndStageId($submission->getId(), $submission->getStageId());
129  $userGroupDao = DAORegistry::getDAO('UserGroupDAO'); /* @var $userGroupDao UserGroupDAO */
130  $receivedList = array(); // Avoid sending twice to the same user.
131 
132  while ($stageAssignment = $stageAssignments->next()) {
133  $userId = $stageAssignment->getUserId();
134  $userGroup = $userGroupDao->getById($stageAssignment->getUserGroupId(), $submission->getContextId());
135 
136  // Never send reviewer comment notification to users other than mangers and editors.
137  if (!in_array($userGroup->getRoleId(), array(ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR)) || in_array($userId, $receivedList)) continue;
138 
139  $notificationMgr->createNotification(
140  Application::get()->getRequest(), $userId, NOTIFICATION_TYPE_REVIEWER_COMMENT,
141  $submission->getContextId(), ASSOC_TYPE_REVIEW_ASSIGNMENT, $reviewAssignment->getId()
142  );
143 
144  $receivedList[] = $userId;
145  }
146 
147  // Set review to next step.
149 
150  // Mark the review assignment as completed.
151  $reviewAssignment->setDateCompleted(Core::getCurrentDate());
152  $reviewAssignment->stampModified();
153 
154  // assign the recommendation to the review assignment, if there was one.
155  $reviewAssignment->setRecommendation((int) $this->getData('recommendation'));
156 
157  // Persist the updated review assignment.
158  $reviewAssignmentDao = DAORegistry::getDAO('ReviewAssignmentDAO'); /* @var $reviewAssignmentDao ReviewAssignmentDAO */
159  $reviewAssignmentDao->updateObject($reviewAssignment);
160 
161  // Remove the task
162  $notificationDao = DAORegistry::getDAO('NotificationDAO'); /* @var $notificationDao NotificationDAO */
163  $notificationDao->deleteByAssoc(
164  ASSOC_TYPE_REVIEW_ASSIGNMENT,
165  $reviewAssignment->getId(),
166  $reviewAssignment->getReviewerId(),
167  NOTIFICATION_TYPE_REVIEW_ASSIGNMENT
168  );
169 
170  // Add log
171  import('lib.pkp.classes.log.SubmissionLog');
172  import('classes.log.SubmissionEventLogEntry');
173 
174  $userDao = DAORegistry::getDAO('UserDAO'); /* @var $userDao UserDAO */
175  $reviewer = $userDao->getById($reviewAssignment->getReviewerId());
176  $request = Application::get()->getRequest();
178  $request,
179  $submission,
180  SUBMISSION_LOG_REVIEW_READY,
181  'log.review.reviewReady',
182  array(
183  'reviewAssignmentId' => $reviewAssignment->getId(),
184  'reviewerName' => $reviewer->getFullName(),
185  'submissionId' => $reviewAssignment->getSubmissionId(),
186  'round' => $reviewAssignment->getRound()
187  )
188  );
189 
190  parent::execute(...$functionParams);
191  }
192 
196  function saveForLater() {
197  $reviewAssignment = $this->getReviewAssignment();
198  $notificationMgr = new NotificationManager();
199 
200  // Save the answers to the review form
201  $this->saveReviewForm($reviewAssignment);
202 
203  // Mark the review assignment as modified.
204  $reviewAssignment->stampModified();
205 
206  // save the recommendation to the review assignment
207  $reviewAssignment->setRecommendation((int) $this->getData('recommendation'));
208 
209  // Persist the updated review assignment.
210  $reviewAssignmentDao = DAORegistry::getDAO('ReviewAssignmentDAO'); /* @var $reviewAssignmentDao ReviewAssignmentDAO */
211  $reviewAssignmentDao->updateObject($reviewAssignment);
212 
213  return true;
214  }
215 
220  function saveReviewForm($reviewAssignment) {
221  if ($reviewAssignment->getReviewFormId()) {
222  $reviewFormResponseDao = DAORegistry::getDAO('ReviewFormResponseDAO'); /* @var $reviewFormResponseDao ReviewFormResponseDAO */
223  $reviewFormResponses = $this->getData('reviewFormResponses');
224  if (is_array($reviewFormResponses)) foreach ($reviewFormResponses as $reviewFormElementId => $reviewFormResponseValue) {
225  $reviewFormResponse = $reviewFormResponseDao->getReviewFormResponse($reviewAssignment->getId(), $reviewFormElementId);
226  if (!isset($reviewFormResponse)) {
227  $reviewFormResponse = new ReviewFormResponse();
228  }
229  $reviewFormElementDao = DAORegistry::getDAO('ReviewFormElementDAO'); /* @var $reviewFormElementDao ReviewFormElementDAO */
230  $reviewFormElement = $reviewFormElementDao->getById($reviewFormElementId);
231  $elementType = $reviewFormElement->getElementType();
232  switch ($elementType) {
233  case REVIEW_FORM_ELEMENT_TYPE_SMALL_TEXT_FIELD:
234  case REVIEW_FORM_ELEMENT_TYPE_TEXT_FIELD:
235  case REVIEW_FORM_ELEMENT_TYPE_TEXTAREA:
236  $reviewFormResponse->setResponseType('string');
237  $reviewFormResponse->setValue($reviewFormResponseValue);
238  break;
239  case REVIEW_FORM_ELEMENT_TYPE_RADIO_BUTTONS:
240  case REVIEW_FORM_ELEMENT_TYPE_DROP_DOWN_BOX:
241  $reviewFormResponse->setResponseType('int');
242  $reviewFormResponse->setValue($reviewFormResponseValue);
243  break;
244  case REVIEW_FORM_ELEMENT_TYPE_CHECKBOXES:
245  $reviewFormResponse->setResponseType('object');
246  $reviewFormResponse->setValue($reviewFormResponseValue);
247  break;
248  }
249  if ($reviewFormResponse->getReviewFormElementId() != null && $reviewFormResponse->getReviewId() != null) {
250  $reviewFormResponseDao->updateObject($reviewFormResponse);
251  } else {
252  $reviewFormResponse->setReviewFormElementId($reviewFormElementId);
253  $reviewFormResponse->setReviewId($reviewAssignment->getId());
254  $reviewFormResponseDao->insertObject($reviewFormResponse);
255  }
256  }
257  } else {
258  // No review form configured. Use the default form.
259  if (strlen($comments = $this->getData('comments'))>0) {
260  // Create a comment with the review.
261  $submissionCommentDao = DAORegistry::getDAO('SubmissionCommentDAO'); /* @var $submissionCommentDao SubmissionCommentDAO */
262  $submissionComments = $submissionCommentDao->getReviewerCommentsByReviewerId($reviewAssignment->getSubmissionId(), $reviewAssignment->getReviewerId(), $reviewAssignment->getId(), true);
263  $comment = $submissionComments->next();
264 
265  if (!isset($comment)) {
266  $comment = $submissionCommentDao->newDataObject();
267  }
268 
269  $comment->setCommentType(COMMENT_TYPE_PEER_REVIEW);
270  $comment->setRoleId(ROLE_ID_REVIEWER);
271  $comment->setAssocId($reviewAssignment->getId());
272  $comment->setSubmissionId($reviewAssignment->getSubmissionId());
273  $comment->setAuthorId($reviewAssignment->getReviewerId());
274  $comment->setComments($comments);
275  $comment->setCommentTitle('');
276  $comment->setViewable(true);
277  $comment->setDatePosted(Core::getCurrentDate());
278 
279  // Save or update
280  if ($comment->getId() != null) {
281  $submissionCommentDao->updateObject($comment);
282  } else {
283  $submissionCommentDao->insertObject($comment);
284  }
285 
286  }
287  unset($comment);
288 
289  if (strlen($commentsPrivate = $this->getData('commentsPrivate'))>0) {
290  // Create a comment with the review.
291  $submissionCommentDao = DAORegistry::getDAO('SubmissionCommentDAO'); /* @var $submissionCommentDao SubmissionCommentDAO */
292  $submissionCommentsPrivate = $submissionCommentDao->getReviewerCommentsByReviewerId($reviewAssignment->getSubmissionId(), $reviewAssignment->getReviewerId(), $reviewAssignment->getId(), false);
293  $comment = $submissionCommentsPrivate->next();
294 
295  if (!isset($comment)) {
296  $comment = $submissionCommentDao->newDataObject();
297  }
298 
299  $comment->setCommentType(COMMENT_TYPE_PEER_REVIEW);
300  $comment->setRoleId(ROLE_ID_REVIEWER);
301  $comment->setAssocId($reviewAssignment->getId());
302  $comment->setSubmissionId($reviewAssignment->getSubmissionId());
303  $comment->setAuthorId($reviewAssignment->getReviewerId());
304  $comment->setComments($commentsPrivate);
305  $comment->setCommentTitle('');
306  $comment->setViewable(false);
307  $comment->setDatePosted(Core::getCurrentDate());
308 
309  // Save or update
310  if ($comment->getId() != null) {
311  $submissionCommentDao->updateObject($comment);
312  } else {
313  $submissionCommentDao->insertObject($comment);
314  }
315 
316  }
317  unset($comment);
318  }
319  }
320 }
321 
322 
ReviewerReviewForm\getReviewerSubmission
getReviewerSubmission()
Definition: ReviewerReviewForm.inc.php:67
ReviewerReviewForm
Base class for reviewer forms.
Definition: ReviewerReviewForm.inc.php:17
PKPReviewerReviewStep3Form\saveForLater
saveForLater()
Definition: PKPReviewerReviewStep3Form.inc.php:196
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
Form\setData
setData($key, $value=null)
Definition: Form.inc.php:229
Form\readUserVars
readUserVars($vars)
Definition: Form.inc.php:378
Form\getData
getData($key)
Definition: Form.inc.php:220
FormValidatorPost
Form validation check to make sure the form is POSTed.
Definition: FormValidatorPost.inc.php:18
SubmissionLog\logEvent
static logEvent($request, $submission, $eventType, $messageKey, $params=array())
Definition: SubmissionLog.inc.php:34
PKPReviewerReviewStep3Form
Form for Step 3 of a review.
Definition: PKPReviewerReviewStep3Form.inc.php:18
PKPReviewerReviewStep3Form\fetch
fetch($request, $template=null, $display=false)
Definition: PKPReviewerReviewStep3Form.inc.php:75
PKPReviewerReviewStep3Form\initData
initData()
Definition: PKPReviewerReviewStep3Form.inc.php:45
Application\getContextAssocType
static getContextAssocType()
Definition: Application.inc.php:199
ReviewFormResponse
Basic class describing a review form response.
Definition: ReviewFormResponse.inc.php:18
ReviewerReviewForm\updateReviewStepAndSaveSubmission
updateReviewStepAndSaveSubmission($reviewerSubmission)
Definition: ReviewerReviewForm.inc.php:114
PKPReviewerReviewStep3Form\readInputData
readInputData()
Definition: PKPReviewerReviewStep3Form.inc.php:66
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
ReviewerReviewForm\getReviewAssignment
getReviewAssignment()
Definition: ReviewerReviewForm.inc.php:75
PKPReviewerReviewStep3Form\execute
execute(... $functionParams)
Definition: PKPReviewerReviewStep3Form.inc.php:116
ViewReviewGuidelinesLinkAction
An action to open the review guidelines confirmation modal.
Definition: ViewReviewGuidelinesLinkAction.inc.php:21
ReviewerReviewForm\$request
$request
Definition: ReviewerReviewForm.inc.php:41
Core\getCurrentDate
static getCurrentDate($ts=null)
Definition: Core.inc.php:63
Form\addCheck
addCheck($formValidator)
Definition: Form.inc.php:395
NotificationManager
Definition: NotificationManager.inc.php:19
FormValidatorCSRF
Form validation check to make sure the CSRF token is correct.
Definition: FormValidatorCSRF.inc.php:18
ReviewAssignment\getReviewerRecommendationOptions
static getReviewerRecommendationOptions()
Definition: ReviewAssignment.inc.php:656
PKPApplication\get
static get()
Definition: PKPApplication.inc.php:235
FormValidatorCustom
Form validation check with a custom user function performing the validation check.
Definition: FormValidatorCustom.inc.php:18
PKPReviewerReviewStep3Form\saveReviewForm
saveReviewForm($reviewAssignment)
Definition: PKPReviewerReviewStep3Form.inc.php:220
PKPReviewerReviewStep3Form\__construct
__construct($request, $reviewerSubmission, $reviewAssignment)
Definition: PKPReviewerReviewStep3Form.inc.php:24