Open Journal Systems  3.3.0
ReviewerAction.inc.php
1 <?php
2 
17 // Access decision actions constants.
18 import('classes.workflow.EditorDecisionActionsManager');
19 
21 
25  function __construct() {
26  }
27 
28  //
29  // Actions.
30  //
39  function confirmReview($request, $reviewAssignment, $submission, $decline, $emailText = null) {
40  $reviewAssignmentDao = DAORegistry::getDAO('ReviewAssignmentDAO'); /* @var $reviewAssignmentDao ReviewAssignmentDAO */
41  $userDao = DAORegistry::getDAO('UserDAO'); /* @var $userDao UserDAO */
42 
43  $reviewer = $userDao->getById($reviewAssignment->getReviewerId());
44  if (!isset($reviewer)) return true;
45 
46  // Only confirm the review for the reviewer if
47  // he has not previously done so.
48  if ($reviewAssignment->getDateConfirmed() == null) {
49  $email = $this->getResponseEmail($submission, $reviewAssignment, $request, $decline);
50  // Must explicitly set sender because we may be here on an access
51  // key, in which case the user is not technically logged in
52  $email->setReplyTo($reviewer->getEmail(), $reviewer->getFullName());
53  HookRegistry::call('ReviewerAction::confirmReview', array($request, &$submission, &$email, $decline));
54  import('lib.pkp.classes.log.SubmissionEmailLogEntry'); // Import email event constants
55  $email->setEventType($decline?SUBMISSION_EMAIL_REVIEW_DECLINE:SUBMISSION_EMAIL_REVIEW_CONFIRM);
56  if ($emailText) $email->setBody($emailText);
57  if (!$email->send($request)) {
58  import('classes.notification.NotificationManager');
59  $notificationMgr = new NotificationManager();
60  $notificationMgr->createTrivialNotification($request->getUser()->getId(), NOTIFICATION_TYPE_ERROR, array('contents' => __('email.compose.error')));
61  }
62 
63  $reviewAssignment->setDeclined($decline);
64  $reviewAssignment->setDateConfirmed(Core::getCurrentDate());
65  $reviewAssignment->stampModified();
66  $reviewAssignmentDao->updateObject($reviewAssignment);
67 
68  // Add log
69  import('lib.pkp.classes.log.SubmissionLog');
70  import('classes.log.SubmissionEventLogEntry');
71 
73  $request,
74  $submission,
75  $decline?SUBMISSION_LOG_REVIEW_DECLINE:SUBMISSION_LOG_REVIEW_ACCEPT,
76  $decline?'log.review.reviewDeclined':'log.review.reviewAccepted',
77  array(
78  'reviewAssignmentId' => $reviewAssignment->getId(),
79  'reviewerName' => $reviewer->getFullName(),
80  'submissionId' => $reviewAssignment->getSubmissionId(),
81  'round' => $reviewAssignment->getRound()
82  )
83  );
84  }
85  }
86 
90  function getResponseEmail($submission, $reviewAssignment, $request, $decline) {
91  import('lib.pkp.classes.mail.SubmissionMailTemplate');
92  $email = new SubmissionMailTemplate($submission, $decline?'REVIEW_DECLINE':'REVIEW_CONFIRM');
93 
94  // Get reviewer
95  $userDao = DAORegistry::getDAO('UserDAO'); /* @var $userDao UserDAO */
96  $reviewer = $userDao->getById($reviewAssignment->getReviewerId());
97 
98  // Get editorial contact name
99  $stageAssignmentDao = DAORegistry::getDAO('StageAssignmentDAO'); /* @var $stageAssignmentDao StageAssignmentDAO */
100  $userGroupDao = DAORegistry::getDAO('UserGroupDAO'); /* @var $userGroupDao UserGroupDAO */
101  $userDao = DAORegistry::getDAO('UserDAO'); /* @var $userDao UserDAO */
102  $stageAssignments = $stageAssignmentDao->getBySubmissionAndStageId($submission->getId(), $reviewAssignment->getStageId());
103  $recipient = null;
104  $context = $request->getContext();
105  while ($stageAssignment = $stageAssignments->next()) {
106  $userGroup = $userGroupDao->getById($stageAssignment->getUserGroupId());
107  if (!in_array($userGroup->getRoleId(), array(ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR))) continue;
108 
109  $recipient = $userDao->getById($stageAssignment->getUserId());
110  $email->addRecipient($recipient->getEmail(), $recipient->getFullName());
111  }
112  if (!$recipient) {
113  $email->addRecipient($context->getData('contactEmail'), $context->getData('contactName'));
114  }
115 
116  // Get due date
117  $reviewDueDate = strtotime($reviewAssignment->getDateDue());
118  $dateFormatShort = $context->getLocalizedDateFormatShort();
119  if ($reviewDueDate == -1) $reviewDueDate = $dateFormatShort; // Default to something human-readable if no date specified
120  else $reviewDueDate = strftime($dateFormatShort, $reviewDueDate);
121 
122  $email->setReplyTo($reviewer->getEmail(), $reviewer->getFullName());
123 
124  $email->assignParams(array(
125  'reviewerName' => $reviewer->getFullName(),
126  'reviewDueDate' => $reviewDueDate
127  ));
128  $email->replaceParams();
129 
130  return $email;
131  }
132 }
133 
134 
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
SubmissionMailTemplate
Subclass of MailTemplate for sending emails related to submissions.
Definition: SubmissionMailTemplate.inc.php:20
SubmissionLog\logEvent
static logEvent($request, $submission, $eventType, $messageKey, $params=array())
Definition: SubmissionLog.inc.php:34
ReviewerAction
ReviewerAction class.
Definition: ReviewerAction.inc.php:20
ReviewerAction\__construct
__construct()
Definition: ReviewerAction.inc.php:25
ReviewerAction\getResponseEmail
getResponseEmail($submission, $reviewAssignment, $request, $decline)
Definition: ReviewerAction.inc.php:90
Core\getCurrentDate
static getCurrentDate($ts=null)
Definition: Core.inc.php:63
NotificationManager
Definition: NotificationManager.inc.php:19
ReviewerAction\confirmReview
confirmReview($request, $reviewAssignment, $submission, $decline, $emailText=null)
Definition: ReviewerAction.inc.php:39
HookRegistry\call
static call($hookName, $args=null)
Definition: HookRegistry.inc.php:86