Open Journal Systems  3.3.0
ReviewAssignment.inc.php
1 <?php
2 
17 define('SUBMISSION_REVIEWER_RECOMMENDATION_ACCEPT', 1);
18 define('SUBMISSION_REVIEWER_RECOMMENDATION_PENDING_REVISIONS', 2);
19 define('SUBMISSION_REVIEWER_RECOMMENDATION_RESUBMIT_HERE', 3);
20 define('SUBMISSION_REVIEWER_RECOMMENDATION_RESUBMIT_ELSEWHERE', 4);
21 define('SUBMISSION_REVIEWER_RECOMMENDATION_DECLINE', 5);
22 define('SUBMISSION_REVIEWER_RECOMMENDATION_SEE_COMMENTS', 6);
23 
24 define('SUBMISSION_REVIEWER_RATING_VERY_GOOD', 5);
25 define('SUBMISSION_REVIEWER_RATING_GOOD', 4);
26 define('SUBMISSION_REVIEWER_RATING_AVERAGE', 3);
27 define('SUBMISSION_REVIEWER_RATING_POOR', 2);
28 define('SUBMISSION_REVIEWER_RATING_VERY_POOR', 1);
29 
30 define('SUBMISSION_REVIEW_METHOD_BLIND', 1);
31 define('SUBMISSION_REVIEW_METHOD_DOUBLEBLIND', 2);
32 define('SUBMISSION_REVIEW_METHOD_OPEN', 3);
33 
34 // A review is "unconsidered" when it is confirmed by an editor and then that
35 // confirmation is later revoked.
36 define('REVIEW_ASSIGNMENT_NOT_UNCONSIDERED', 0); // Has never been unconsidered
37 define('REVIEW_ASSIGNMENT_UNCONSIDERED', 1); // Has been unconsindered and is awaiting re-confirmation by an editor
38 define('REVIEW_ASSIGNMENT_UNCONSIDERED_READ', 2); // Has been reconfirmed by an editor
39 
40 define('REVIEW_ASSIGNMENT_STATUS_AWAITING_RESPONSE', 0); // request has been sent but reviewer has not responded
41 define('REVIEW_ASSIGNMENT_STATUS_DECLINED', 1); // reviewer declined review request
42 define('REVIEW_ASSIGNMENT_STATUS_RESPONSE_OVERDUE', 4); // review not responded within due date
43 define('REVIEW_ASSIGNMENT_STATUS_ACCEPTED', 5); // reviewer has agreed to the review
44 define('REVIEW_ASSIGNMENT_STATUS_REVIEW_OVERDUE', 6); // review not submitted within due date
45 define('REVIEW_ASSIGNMENT_STATUS_RECEIVED', 7); // review has been submitted
46 define('REVIEW_ASSIGNMENT_STATUS_COMPLETE', 8); // review has been confirmed by an editor
47 define('REVIEW_ASSIGNMENT_STATUS_THANKED', 9); // reviewer has been thanked
48 define('REVIEW_ASSIGNMENT_STATUS_CANCELLED', 10); // reviewer cancelled review request
49 
51 
52  //
53  // Get/set methods
54  //
55 
60  function getSubmissionId() {
61  return $this->getData('submissionId');
62  }
63 
68  function setSubmissionId($submissionId) {
69  $this->setData('submissionId', $submissionId);
70  }
71 
76  function getReviewerId() {
77  return $this->getData('reviewerId');
78  }
79 
84  function setReviewerId($reviewerId) {
85  $this->setData('reviewerId', $reviewerId);
86  }
87 
92  function getReviewerFullName() {
93  return $this->getData('reviewerFullName');
94  }
95 
100  function setReviewerFullName($reviewerFullName) {
101  $this->setData('reviewerFullName', $reviewerFullName);
102  }
103 
108  function getComments() {
109  return $this->getData('comments');
110  }
111 
116  function setComments($comments) {
117  $this->setData('comments', $comments);
118  }
119 
125  return $this->getData('competingInterests');
126  }
127 
132  function setCompetingInterests($competingInterests) {
133  $this->setData('competingInterests', $competingInterests);
134  }
135 
140  function getStageId() {
141  return $this->getData('stageId');
142  }
143 
148  function setStageId($stageId) {
149  $this->setData('stageId', $stageId);
150  }
151 
156  function getReviewMethod() {
157  return $this->getData('reviewMethod');
158  }
159 
164  function setReviewMethod($method) {
165  $this->setData('reviewMethod', $method);
166  }
167 
172  function getReviewRoundId() {
173  return $this->getData('reviewRoundId');
174  }
175 
180  function setReviewRoundId($reviewRoundId) {
181  $this->setData('reviewRoundId', $reviewRoundId);
182  }
183 
188  function getRecommendation() {
189  return $this->getData('recommendation');
190  }
191 
196  function setRecommendation($recommendation) {
197  $this->setData('recommendation', $recommendation);
198  }
199 
204  function getUnconsidered() {
205  return $this->getData('unconsidered');
206  }
207 
212  function setUnconsidered($unconsidered) {
213  $this->setData('unconsidered', $unconsidered);
214  }
215 
220  function getDateRated() {
221  return $this->getData('dateRated');
222  }
223 
228  function setDateRated($dateRated) {
229  $this->setData('dateRated', $dateRated);
230  }
231 
236  function getLastModified() {
237  return $this->getData('lastModified');
238  }
239 
244  function setLastModified($dateModified) {
245  $this->setData('lastModified', $dateModified);
246  }
247 
251  function stampModified() {
252  return $this->setLastModified(Core::getCurrentDate());
253  }
254 
259  function getDateAssigned() {
260  return $this->getData('dateAssigned');
261  }
262 
267  function setDateAssigned($dateAssigned) {
268  $this->setData('dateAssigned', $dateAssigned);
269  }
270 
275  function getDateNotified() {
276  return $this->getData('dateNotified');
277  }
278 
283  function setDateNotified($dateNotified) {
284  $this->setData('dateNotified', $dateNotified);
285  }
286 
291  function getDateConfirmed() {
292  return $this->getData('dateConfirmed');
293  }
294 
299  function setDateConfirmed($dateConfirmed) {
300  $this->setData('dateConfirmed', $dateConfirmed);
301  }
302 
307  function getDateCompleted() {
308  return $this->getData('dateCompleted');
309  }
310 
315  function setDateCompleted($dateCompleted) {
316  $this->setData('dateCompleted', $dateCompleted);
317  }
318 
323  function getDateAcknowledged() {
324  return $this->getData('dateAcknowledged');
325  }
326 
331  function setDateAcknowledged($dateAcknowledged) {
332  $this->setData('dateAcknowledged', $dateAcknowledged);
333  }
334 
339  function getDateReminded() {
340  return $this->getData('dateReminded');
341  }
342 
347  function setDateReminded($dateReminded) {
348  $this->setData('dateReminded', $dateReminded);
349  }
350 
355  function getDateDue() {
356  return $this->getData('dateDue');
357  }
358 
363  function setDateDue($dateDue) {
364  $this->setData('dateDue', $dateDue);
365  }
366 
371  function getDateResponseDue() {
372  return $this->getData('dateResponseDue');
373  }
374 
379  function setDateResponseDue($dateResponseDue) {
380  $this->setData('dateResponseDue', $dateResponseDue);
381  }
382 
387  function getDeclined() {
388  return $this->getData('declined');
389  }
390 
395  function setDeclined($declined) {
396  $this->setData('declined', $declined);
397  }
398 
403  function getCancelled() {
404  return $this->getData('cancelled');
405  }
406 
411  function setCancelled($cancelled) {
412  $this->setData('cancelled', $cancelled);
413  }
414 
420  return $this->getData('reminderWasAutomatic')==1?1:0;
421  }
422 
427  function setReminderWasAutomatic($wasAutomatic) {
428  $this->setData('reminderWasAutomatic', $wasAutomatic);
429  }
430 
435  function getQuality() {
436  return $this->getData('quality');
437  }
438 
443  function setQuality($quality) {
444  $this->setData('quality', $quality);
445  }
446 
451  function getRound() {
452  return $this->getData('round');
453  }
454 
459  function setRound($round) {
460  $this->setData('round', $round);
461  }
462 
467  function getReviewFormId() {
468  return $this->getData('reviewFormId');
469  }
470 
475  function setReviewFormId($reviewFormId) {
476  $this->setData('reviewFormId', $reviewFormId);
477  }
478 
483  function getStatus() {
484  if ($this->getDeclined()) return REVIEW_ASSIGNMENT_STATUS_DECLINED;
485  if ($this->getCancelled()) return REVIEW_ASSIGNMENT_STATUS_CANCELLED;
486 
487  if (!$this->getDateCompleted()) {
488  $dueTimes = array_map(function($dateTime) {
489  // If no due time, set it to the end of the day
490  if (substr($dateTime, 11) === '00:00:00') {
491  $dateTime = substr($dateTime, 0, 11) . '23:59:59';
492  }
493  return strtotime($dateTime);
494  }, array($this->getDateResponseDue(), $this->getDateDue()));
495  $responseDueTime = $dueTimes[0];
496  $reviewDueTime = $dueTimes[1];
497  if (!$this->getDateConfirmed()){ // no response
498  if($responseDueTime < time()) { // response overdue
499  return REVIEW_ASSIGNMENT_STATUS_RESPONSE_OVERDUE;
500  } elseif ($reviewDueTime < strtotime('tomorrow')) { // review overdue but not response
501  return REVIEW_ASSIGNMENT_STATUS_REVIEW_OVERDUE;
502  } else { // response not due yet
503  return REVIEW_ASSIGNMENT_STATUS_AWAITING_RESPONSE;
504  }
505  } else { // response given
506  if ($reviewDueTime < strtotime('tomorrow')) { // review due
507  return REVIEW_ASSIGNMENT_STATUS_REVIEW_OVERDUE;
508  } else {
509  return REVIEW_ASSIGNMENT_STATUS_ACCEPTED;
510  }
511  }
512  } elseif ($this->getDateAcknowledged()) { // reviewer thanked...
513  if ($this->getUnconsidered() == REVIEW_ASSIGNMENT_UNCONSIDERED) { // ...but review later unconsidered
514  return REVIEW_ASSIGNMENT_STATUS_RECEIVED;
515  }
516  return REVIEW_ASSIGNMENT_STATUS_THANKED;
517  } elseif ($this->getDateCompleted()) { // review submitted...
518  if ($this->getUnconsidered() != REVIEW_ASSIGNMENT_UNCONSIDERED && $this->isRead()) { // ...and confirmed by an editor
519  return REVIEW_ASSIGNMENT_STATUS_COMPLETE;
520  }
521  return REVIEW_ASSIGNMENT_STATUS_RECEIVED;
522  }
523 
524  return REVIEW_ASSIGNMENT_STATUS_AWAITING_RESPONSE;
525  }
526 
532  function isRead() {
533  $submissionDao = DAORegistry::getDAO('SubmissionDAO'); /* @var $submissionDao SubmissionDAO */
534  $userGroupDao = DAORegistry::getDAO('UserGroupDAO'); /* @var $userGroupDao UserGroupDAO */
535  $userStageAssignmentDao = DAORegistry::getDAO('UserStageAssignmentDAO'); /* @var $userStageAssignmentDao UserStageAssignmentDAO */
536  $viewsDao = DAORegistry::getDAO('ViewsDAO'); /* @var $viewsDao ViewsDAO */
537 
538  $submission = $submissionDao->getById($this->getSubmissionId());
539 
540  // Get the user groups for this stage
541  $userGroups = $userGroupDao->getUserGroupsByStage(
542  $submission->getContextId(),
543  $this->getStageId()
544  );
545  while ($userGroup = $userGroups->next()) {
546  $roleId = $userGroup->getRoleId();
547  if ($roleId != ROLE_ID_MANAGER && $roleId != ROLE_ID_SUB_EDITOR) {
548  continue;
549  }
550 
551  // Get the users assigned to this stage and user group
552  $stageUsers = $userStageAssignmentDao->getUsersBySubmissionAndStageId(
553  $this->getSubmissionId(),
554  $this->getStageId(),
555  $userGroup->getId()
556  );
557 
558  // Check if any of these users have viewed it
559  while ($user = $stageUsers->next()) {
560  if ($viewsDao->getLastViewDate(
561  ASSOC_TYPE_REVIEW_RESPONSE,
562  $this->getId(),
563  $user->getId()
564  )) {
565  return true;
566  }
567  }
568  }
569 
570  return false;
571  }
572 
580  public function getStatusKey($status = null) {
581 
582  if (is_null($status)) {
583  $status = $this->getStatus();
584  }
585 
586  switch ($status) {
587  case REVIEW_ASSIGNMENT_STATUS_AWAITING_RESPONSE:
588  return 'submission.review.status.awaitingResponse';
589  case REVIEW_ASSIGNMENT_STATUS_DECLINED:
590  return 'submission.review.status.declined';
591  case REVIEW_ASSIGNMENT_STATUS_RESPONSE_OVERDUE:
592  return 'submission.review.status.responseOverdue';
593  case REVIEW_ASSIGNMENT_STATUS_REVIEW_OVERDUE:
594  return 'submission.review.status.reviewOverdue';
595  case REVIEW_ASSIGNMENT_STATUS_ACCEPTED:
596  return 'submission.review.status.accepted';
597  case REVIEW_ASSIGNMENT_STATUS_RECEIVED:
598  return 'submission.review.status.received';
599  case REVIEW_ASSIGNMENT_STATUS_COMPLETE:
600  return 'submission.review.status.complete';
601  case REVIEW_ASSIGNMENT_STATUS_THANKED:
602  return 'submission.review.status.thanked';
603  }
604 
605  assert(false, 'No status key could be found for ' . get_class($this) . ' on ' . __LINE__);
606 
607  return '';
608  }
609 
617  public function getReviewMethodKey($method = null) {
618 
619  if (is_null($method)) {
620  $method = $this->getReviewMethod();
621  }
622 
623  switch ($method) {
624  case SUBMISSION_REVIEW_METHOD_OPEN:
625  return 'editor.submissionReview.open';
626  case SUBMISSION_REVIEW_METHOD_BLIND:
627  return 'editor.submissionReview.blind';
628  case SUBMISSION_REVIEW_METHOD_DOUBLEBLIND:
629  return 'editor.submissionReview.doubleBlind';
630  }
631 
632  assert(false, 'No review method key could be found for ' . get_class($this) . ' on ' . __LINE__);
633 
634  return '';
635  }
636 
637  //
638  // Files
639  //
640 
645  function getWeeksDue() {
646  $dateDue = $this->getDateDue();
647  if ($dateDue === null) return null;
648  return round((strtotime($dateDue) - time()) / (86400 * 7.0));
649  }
650 
657 
658  static $reviewerRecommendationOptions = array(
659  '' => 'common.chooseOne',
660  SUBMISSION_REVIEWER_RECOMMENDATION_ACCEPT => 'reviewer.article.decision.accept',
661  SUBMISSION_REVIEWER_RECOMMENDATION_PENDING_REVISIONS => 'reviewer.article.decision.pendingRevisions',
662  SUBMISSION_REVIEWER_RECOMMENDATION_RESUBMIT_HERE => 'reviewer.article.decision.resubmitHere',
663  SUBMISSION_REVIEWER_RECOMMENDATION_RESUBMIT_ELSEWHERE => 'reviewer.article.decision.resubmitElsewhere',
664  SUBMISSION_REVIEWER_RECOMMENDATION_DECLINE => 'reviewer.article.decision.decline',
665  SUBMISSION_REVIEWER_RECOMMENDATION_SEE_COMMENTS => 'reviewer.article.decision.seeComments'
666  );
667  return $reviewerRecommendationOptions;
668  }
669 
674 
676  if (array_key_exists($this->getRecommendation(), $options)) {
677  return __($options[$this->getRecommendation()]);
678  } else {
679  return '';
680  }
681  }
682 }
ReviewAssignment\setDateReminded
setDateReminded($dateReminded)
Definition: ReviewAssignment.inc.php:347
ReviewAssignment\getLastModified
getLastModified()
Definition: ReviewAssignment.inc.php:236
DataObject\getData
& getData($key, $locale=null)
Definition: DataObject.inc.php:100
ReviewAssignment\setDateAssigned
setDateAssigned($dateAssigned)
Definition: ReviewAssignment.inc.php:267
ReviewAssignment\getDateResponseDue
getDateResponseDue()
Definition: ReviewAssignment.inc.php:371
ReviewAssignment\setDateRated
setDateRated($dateRated)
Definition: ReviewAssignment.inc.php:228
ReviewAssignment\getStatus
getStatus()
Definition: ReviewAssignment.inc.php:483
ReviewAssignment\getReviewFormId
getReviewFormId()
Definition: ReviewAssignment.inc.php:467
ReviewAssignment\setDateConfirmed
setDateConfirmed($dateConfirmed)
Definition: ReviewAssignment.inc.php:299
ReviewAssignment\getDateReminded
getDateReminded()
Definition: ReviewAssignment.inc.php:339
DataObject
Any class with an associated DAO should extend this class.
Definition: DataObject.inc.php:18
ReviewAssignment\setDateNotified
setDateNotified($dateNotified)
Definition: ReviewAssignment.inc.php:283
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
ReviewAssignment\setCompetingInterests
setCompetingInterests($competingInterests)
Definition: ReviewAssignment.inc.php:132
ReviewAssignment\getDateConfirmed
getDateConfirmed()
Definition: ReviewAssignment.inc.php:291
ReviewAssignment\getDateAssigned
getDateAssigned()
Definition: ReviewAssignment.inc.php:259
ReviewAssignment\isRead
isRead()
Definition: ReviewAssignment.inc.php:532
ReviewAssignment\getSubmissionId
getSubmissionId()
Definition: ReviewAssignment.inc.php:60
ReviewAssignment\getStatusKey
getStatusKey($status=null)
Definition: ReviewAssignment.inc.php:580
ReviewAssignment\setQuality
setQuality($quality)
Definition: ReviewAssignment.inc.php:443
ReviewAssignment\setRecommendation
setRecommendation($recommendation)
Definition: ReviewAssignment.inc.php:196
ReviewAssignment\setDateDue
setDateDue($dateDue)
Definition: ReviewAssignment.inc.php:363
ReviewAssignment\getRecommendation
getRecommendation()
Definition: ReviewAssignment.inc.php:188
ReviewAssignment\getDeclined
getDeclined()
Definition: ReviewAssignment.inc.php:387
ReviewAssignment\getDateNotified
getDateNotified()
Definition: ReviewAssignment.inc.php:275
ReviewAssignment\getQuality
getQuality()
Definition: ReviewAssignment.inc.php:435
ReviewAssignment\getUnconsidered
getUnconsidered()
Definition: ReviewAssignment.inc.php:204
ReviewAssignment
Describes review assignment properties.
Definition: ReviewAssignment.inc.php:50
ReviewAssignment\setComments
setComments($comments)
Definition: ReviewAssignment.inc.php:116
ReviewAssignment\setRound
setRound($round)
Definition: ReviewAssignment.inc.php:459
ReviewAssignment\setLastModified
setLastModified($dateModified)
Definition: ReviewAssignment.inc.php:244
ReviewAssignment\getReviewRoundId
getReviewRoundId()
Definition: ReviewAssignment.inc.php:172
ReviewAssignment\getDateCompleted
getDateCompleted()
Definition: ReviewAssignment.inc.php:307
ReviewAssignment\getComments
getComments()
Definition: ReviewAssignment.inc.php:108
ReviewAssignment\setReviewMethod
setReviewMethod($method)
Definition: ReviewAssignment.inc.php:164
ReviewAssignment\getRound
getRound()
Definition: ReviewAssignment.inc.php:451
ReviewAssignment\getReviewerFullName
getReviewerFullName()
Definition: ReviewAssignment.inc.php:92
ReviewAssignment\setReminderWasAutomatic
setReminderWasAutomatic($wasAutomatic)
Definition: ReviewAssignment.inc.php:427
ReviewAssignment\setReviewerFullName
setReviewerFullName($reviewerFullName)
Definition: ReviewAssignment.inc.php:100
ReviewAssignment\setDeclined
setDeclined($declined)
Definition: ReviewAssignment.inc.php:395
ReviewAssignment\stampModified
stampModified()
Definition: ReviewAssignment.inc.php:251
ReviewAssignment\setReviewRoundId
setReviewRoundId($reviewRoundId)
Definition: ReviewAssignment.inc.php:180
ReviewAssignment\getDateRated
getDateRated()
Definition: ReviewAssignment.inc.php:220
ReviewAssignment\getStageId
getStageId()
Definition: ReviewAssignment.inc.php:140
ReviewAssignment\getReminderWasAutomatic
getReminderWasAutomatic()
Definition: ReviewAssignment.inc.php:419
ReviewAssignment\setCancelled
setCancelled($cancelled)
Definition: ReviewAssignment.inc.php:411
ReviewAssignment\getDateDue
getDateDue()
Definition: ReviewAssignment.inc.php:355
ReviewAssignment\setReviewFormId
setReviewFormId($reviewFormId)
Definition: ReviewAssignment.inc.php:475
ReviewAssignment\setDateAcknowledged
setDateAcknowledged($dateAcknowledged)
Definition: ReviewAssignment.inc.php:331
ReviewAssignment\getWeeksDue
getWeeksDue()
Definition: ReviewAssignment.inc.php:645
Core\getCurrentDate
static getCurrentDate($ts=null)
Definition: Core.inc.php:63
ReviewAssignment\setUnconsidered
setUnconsidered($unconsidered)
Definition: ReviewAssignment.inc.php:212
ReviewAssignment\setStageId
setStageId($stageId)
Definition: ReviewAssignment.inc.php:148
ReviewAssignment\getDateAcknowledged
getDateAcknowledged()
Definition: ReviewAssignment.inc.php:323
ReviewAssignment\getReviewerRecommendationOptions
static getReviewerRecommendationOptions()
Definition: ReviewAssignment.inc.php:656
ReviewAssignment\getReviewMethod
getReviewMethod()
Definition: ReviewAssignment.inc.php:156
ReviewAssignment\getCancelled
getCancelled()
Definition: ReviewAssignment.inc.php:403
ReviewAssignment\getReviewMethodKey
getReviewMethodKey($method=null)
Definition: ReviewAssignment.inc.php:617
ReviewAssignment\setDateCompleted
setDateCompleted($dateCompleted)
Definition: ReviewAssignment.inc.php:315
ReviewAssignment\setDateResponseDue
setDateResponseDue($dateResponseDue)
Definition: ReviewAssignment.inc.php:379
ReviewAssignment\setReviewerId
setReviewerId($reviewerId)
Definition: ReviewAssignment.inc.php:84
ReviewAssignment\getReviewerId
getReviewerId()
Definition: ReviewAssignment.inc.php:76
ReviewAssignment\getLocalizedRecommendation
getLocalizedRecommendation()
Definition: ReviewAssignment.inc.php:673
ReviewAssignment\setSubmissionId
setSubmissionId($submissionId)
Definition: ReviewAssignment.inc.php:68
DataObject\setData
setData($key, $value, $locale=null)
Definition: DataObject.inc.php:132
ReviewAssignment\getCompetingInterests
getCompetingInterests()
Definition: ReviewAssignment.inc.php:124