Open Journal Systems  3.3.0
EditorAction.inc.php
1 <?php
2 
16 // Access decision actions constants.
17 import('classes.workflow.EditorDecisionActionsManager');
18 
19 class EditorAction {
23  function __construct() {
24  }
25 
26  //
27  // Actions.
28  //
39  function recordDecision($request, $submission, $decision, $decisionLabels, $reviewRound = null, $stageId = null, $recommendation = false) {
40  $stageAssignmentDao = DAORegistry::getDAO('StageAssignmentDAO'); /* @var $stageAssignmentDao StageAssignmentDAO */
41 
42  // Define the stage and round data.
43  if (!is_null($reviewRound)) {
44  $stageId = $reviewRound->getStageId();
45  } else {
46  if ($stageId == null) {
47  // We consider that the decision is being made for the current
48  // submission stage.
49  $stageId = $submission->getStageId();
50  }
51  }
52 
53  $editorAssigned = $stageAssignmentDao->editorAssignedToStage(
54  $submission->getId(),
55  $stageId
56  );
57 
58  // Sanity checks
59  if (!$editorAssigned || !isset($decisionLabels[$decision])) return false;
60 
61  $user = $request->getUser();
62  $editorDecision = array(
63  'editDecisionId' => null,
64  'editorId' => $user->getId(),
65  'decision' => $decision,
66  'dateDecided' => date(Core::getCurrentDate())
67  );
68 
69  $result = $editorDecision;
70  if (!HookRegistry::call('EditorAction::recordDecision', array(&$submission, &$editorDecision, &$result, &$recommendation))) {
71  // Record the new decision
72  $editDecisionDao = DAORegistry::getDAO('EditDecisionDAO'); /* @var $editDecisionDao EditDecisionDAO */
73  $editDecisionDao->updateEditorDecision($submission->getId(), $editorDecision, $stageId, $reviewRound);
74 
75  // Set a new submission status if necessary
76  $submissionDao = DAORegistry::getDAO('SubmissionDAO'); /* @var $submissionDao SubmissionDAO */
77  if ($decision == SUBMISSION_EDITOR_DECISION_DECLINE || $decision == SUBMISSION_EDITOR_DECISION_INITIAL_DECLINE) {
78  $submission->setStatus(STATUS_DECLINED);
79  $submissionDao->updateObject($submission);
80  } elseif ($submission->getStatus() == STATUS_DECLINED) {
81  $submission->setStatus(STATUS_QUEUED);
82  $submissionDao->updateObject($submission);
83  }
84 
85  // Add log entry
86  import('lib.pkp.classes.log.SubmissionLog');
87  import('lib.pkp.classes.log.PKPSubmissionEventLogEntry');
88  AppLocale::requireComponents(LOCALE_COMPONENT_APP_COMMON, LOCALE_COMPONENT_APP_EDITOR);
89  $eventType = $recommendation ? SUBMISSION_LOG_EDITOR_RECOMMENDATION : SUBMISSION_LOG_EDITOR_DECISION;
90  $logKey = $recommendation ? 'log.editor.recommendation' : 'log.editor.decision';
91  SubmissionLog::logEvent($request, $submission, $eventType, $logKey, array('editorName' => $user->getFullName(), 'submissionId' => $submission->getId(), 'decision' => __($decisionLabels[$decision])));
92  }
93  return $result;
94  }
95 
96 
106  function addReviewer($request, $submission, $reviewerId, &$reviewRound, $reviewDueDate, $responseDueDate, $reviewMethod = null) {
107  $reviewAssignmentDao = DAORegistry::getDAO('ReviewAssignmentDAO'); /* @var $reviewAssignmentDao ReviewAssignmentDAO */
108  $userDao = DAORegistry::getDAO('UserDAO'); /* @var $userDao UserDAO */
109 
110  $reviewer = $userDao->getById($reviewerId);
111 
112  // Check to see if the requested reviewer is not already
113  // assigned to review this submission.
114 
115  $assigned = $reviewAssignmentDao->reviewerExists($reviewRound->getId(), $reviewerId);
116 
117  // Only add the reviewer if he has not already
118  // been assigned to review this submission.
119  $stageId = $reviewRound->getStageId();
120  $round = $reviewRound->getRound();
121  if (!$assigned && isset($reviewer) && !HookRegistry::call('EditorAction::addReviewer', array(&$submission, $reviewerId))) {
122  $reviewAssignment = $reviewAssignmentDao->newDataObject();
123  $reviewAssignment->setSubmissionId($submission->getId());
124  $reviewAssignment->setReviewerId($reviewerId);
125  $reviewAssignment->setDateAssigned(Core::getCurrentDate());
126  $reviewAssignment->setStageId($stageId);
127  $reviewAssignment->setRound($round);
128  $reviewAssignment->setReviewRoundId($reviewRound->getId());
129  if (isset($reviewMethod)) {
130  $reviewAssignment->setReviewMethod($reviewMethod);
131  }
132  $reviewAssignmentDao->insertObject($reviewAssignment);
133 
134  $this->setDueDates($request, $submission, $reviewAssignment, $reviewDueDate, $responseDueDate);
135  // Add notification
136  $notificationMgr = new NotificationManager();
137  $notificationMgr->createNotification(
138  $request,
139  $reviewerId,
140  NOTIFICATION_TYPE_REVIEW_ASSIGNMENT,
141  $submission->getContextId(),
142  ASSOC_TYPE_REVIEW_ASSIGNMENT,
143  $reviewAssignment->getId(),
144  NOTIFICATION_LEVEL_TASK,
145  null,
146  true
147  );
148 
149  // Add log
150  import('lib.pkp.classes.log.SubmissionLog');
151  import('lib.pkp.classes.log.PKPSubmissionEventLogEntry');
152  SubmissionLog::logEvent($request, $submission, SUBMISSION_LOG_REVIEW_ASSIGN, 'log.review.reviewerAssigned', array('reviewAssignmentId' => $reviewAssignment->getId(), 'reviewerName' => $reviewer->getFullName(), 'submissionId' => $submission->getId(), 'stageId' => $stageId, 'round' => $round));
153  }
154  }
155 
165  function setDueDates($request, $submission, $reviewAssignment, $reviewDueDate, $responseDueDate, $logEntry = false) {
166  $userDao = DAORegistry::getDAO('UserDAO'); /* @var $userDao UserDAO */
167  $context = $request->getContext();
168 
169  $reviewer = $userDao->getById($reviewAssignment->getReviewerId());
170  if (!isset($reviewer)) return false;
171 
172  if ($reviewAssignment->getSubmissionId() == $submission->getId() && !HookRegistry::call('EditorAction::setDueDates', array(&$reviewAssignment, &$reviewer, &$reviewDueDate, &$responseDueDate))) {
173 
174  // Set the review due date
175  $defaultNumWeeks = $context->getData('numWeeksPerReview');
176  $reviewAssignment->setDateDue($reviewDueDate);
177 
178  // Set the response due date
179  $defaultNumWeeks = $context->getData('numWeeksPerReponse');
180  $reviewAssignment->setDateResponseDue($responseDueDate);
181 
182  // update the assignment (with both the new dates)
183  $reviewAssignment->stampModified();
184  $reviewAssignmentDao = DAORegistry::getDAO('ReviewAssignmentDAO'); /* @var $reviewAssignmentDao ReviewAssignmentDAO */
185  $reviewAssignmentDao->updateObject($reviewAssignment);
186 
187  // N.B. Only logging Date Due
188  if ($logEntry) {
189  // Add log
190  import('lib.pkp.classes.log.SubmissionLog');
191  import('classes.log.SubmissionEventLogEntry');
193  $request,
194  $submission,
195  SUBMISSION_LOG_REVIEW_SET_DUE_DATE,
196  'log.review.reviewDueDateSet',
197  array(
198  'reviewAssignmentId' => $reviewAssignment->getId(),
199  'reviewerName' => $reviewer->getFullName(),
200  'dueDate' => strftime(
201  $context->getLocalizedDateFormatShort(),
202  strtotime($reviewAssignment->getDateDue())
203  ),
204  'submissionId' => $submission->getId(),
205  'stageId' => $reviewAssignment->getStageId(),
206  'round' => $reviewAssignment->getRound()
207  )
208  );
209  }
210  }
211  }
212 
219  function incrementWorkflowStage($submission, $newStage, $request) {
220  // Change the submission's workflow stage.
221  $submission->setStageId($newStage);
222  $submissionDao = DAORegistry::getDAO('SubmissionDAO'); /* @var $submissionDao SubmissionDAO */
223  $submissionDao->updateObject($submission);
224  }
225 }
226 
227 
EditorAction\recordDecision
recordDecision($request, $submission, $decision, $decisionLabels, $reviewRound=null, $stageId=null, $recommendation=false)
Definition: EditorAction.inc.php:39
AppLocale\requireComponents
static requireComponents()
Definition: env1/MockAppLocale.inc.php:56
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
EditorAction\__construct
__construct()
Definition: EditorAction.inc.php:23
SubmissionLog\logEvent
static logEvent($request, $submission, $eventType, $messageKey, $params=array())
Definition: SubmissionLog.inc.php:34
EditorAction\addReviewer
addReviewer($request, $submission, $reviewerId, &$reviewRound, $reviewDueDate, $responseDueDate, $reviewMethod=null)
Definition: EditorAction.inc.php:106
EditorAction\incrementWorkflowStage
incrementWorkflowStage($submission, $newStage, $request)
Definition: EditorAction.inc.php:219
Core\getCurrentDate
static getCurrentDate($ts=null)
Definition: Core.inc.php:63
NotificationManager
Definition: NotificationManager.inc.php:19
EditorAction
Editor actions.
Definition: EditorAction.inc.php:19
HookRegistry\call
static call($hookName, $args=null)
Definition: HookRegistry.inc.php:86
EditorAction\setDueDates
setDueDates($request, $submission, $reviewAssignment, $reviewDueDate, $responseDueDate, $logEntry=false)
Definition: EditorAction.inc.php:165