Open Monograph Press  3.3.0
EditorDecisionHandler.inc.php
1 <?php
2 
16 import('lib.pkp.classes.controllers.modals.editorDecision.PKPEditorDecisionHandler');
17 
18 // Access decision actions constants.
19 import('classes.workflow.EditorDecisionActionsManager');
20 
25  function __construct() {
26  parent::__construct();
27 
28  $this->addRoleAssignment(
29  array(ROLE_ID_SUB_EDITOR, ROLE_ID_MANAGER),
30  array_merge(array(
31  'internalReview', 'saveInternalReview',
32  'externalReview', 'saveExternalReview',
33  'sendReviews', 'saveSendReviews',
34  'promote', 'savePromote',
35  ), $this->_getReviewRoundOps())
36  );
37  }
38 
39 
40  //
41  // Implement template methods from PKPHandler
42  //
46  function authorize($request, &$args, $roleAssignments) {
47  $stageId = (int) $request->getUserVar('stageId');
48  import('lib.pkp.classes.security.authorization.EditorDecisionAccessPolicy');
49  $this->addPolicy(new EditorDecisionAccessPolicy($request, $args, $roleAssignments, 'submissionId', $stageId));
50 
51  return parent::authorize($request, $args, $roleAssignments);
52  }
53 
54 
55  //
56  // Public handler actions
57  //
64  function saveNewReviewRound($args, $request) {
65  // FIXME: this can probably all be managed somewhere.
66  $stageId = $this->getAuthorizedContextObject(ASSOC_TYPE_WORKFLOW_STAGE);
67  if ($stageId == WORKFLOW_STAGE_ID_INTERNAL_REVIEW) {
68  $redirectOp = WORKFLOW_STAGE_PATH_INTERNAL_REVIEW;
69  } elseif ($stageId == WORKFLOW_STAGE_ID_EXTERNAL_REVIEW) {
70  $redirectOp = WORKFLOW_STAGE_PATH_EXTERNAL_REVIEW;
71  } else {
72  $redirectOp = null; // Suppress warn
73  assert(false);
74  }
75 
76  return $this->_saveEditorDecision($args, $request, 'NewReviewRoundForm', $redirectOp, SUBMISSION_EDITOR_DECISION_NEW_ROUND);
77  }
78 
85  function internalReview($args, $request) {
86  return $this->_initiateEditorDecision($args, $request, 'InitiateInternalReviewForm');
87  }
88 
95  function saveInternalReview($args, $request) {
96  assert($this->getAuthorizedContextObject(ASSOC_TYPE_WORKFLOW_STAGE) == WORKFLOW_STAGE_ID_SUBMISSION);
97  return $this->_saveEditorDecision(
98  $args, $request, 'InitiateInternalReviewForm',
99  WORKFLOW_STAGE_PATH_INTERNAL_REVIEW,
100  SUBMISSION_EDITOR_DECISION_INTERNAL_REVIEW
101  );
102  }
103 
104 
105  //
106  // Protected helper methods
107  //
113  protected function _saveGeneralPromote($args, $request) {
114  // Redirect to the next workflow page after
115  // promoting the submission.
116  $decision = (int)$request->getUserVar('decision');
117 
118  $redirectOp = null;
119 
120  if ($decision == SUBMISSION_EDITOR_DECISION_ACCEPT) {
121  $redirectOp = WORKFLOW_STAGE_PATH_EDITING;
122  } elseif ($decision == SUBMISSION_EDITOR_DECISION_EXTERNAL_REVIEW) {
123  $redirectOp = WORKFLOW_STAGE_PATH_EXTERNAL_REVIEW;
124  } elseif ($decision == SUBMISSION_EDITOR_DECISION_SEND_TO_PRODUCTION) {
125  $redirectOp = WORKFLOW_STAGE_PATH_PRODUCTION;
126  }
127 
128  // Make sure user has access to the workflow stage.
129  import('lib.pkp.classes.workflow.WorkflowStageDAO');
130  $redirectWorkflowStage = WorkflowStageDAO::getIdFromPath($redirectOp);
131  $userAccessibleWorkflowStages = $this->getAuthorizedContextObject(ASSOC_TYPE_ACCESSIBLE_WORKFLOW_STAGES);
132  if (!array_key_exists($redirectWorkflowStage, $userAccessibleWorkflowStages)) {
133  $redirectOp = null;
134  }
135 
136  return $this->_saveEditorDecision($args, $request, 'PromoteForm', $redirectOp);
137  }
138 
144  protected function _getNotificationTypeByEditorDecision($decision) {
145  switch ($decision) {
146  case SUBMISSION_EDITOR_DECISION_INTERNAL_REVIEW:
147  return NOTIFICATION_TYPE_EDITOR_DECISION_INTERNAL_REVIEW;
148  case SUBMISSION_EDITOR_DECISION_ACCEPT:
149  return NOTIFICATION_TYPE_EDITOR_DECISION_ACCEPT;
150  case SUBMISSION_EDITOR_DECISION_EXTERNAL_REVIEW:
151  return NOTIFICATION_TYPE_EDITOR_DECISION_EXTERNAL_REVIEW;
152  case SUBMISSION_EDITOR_DECISION_PENDING_REVISIONS:
153  return NOTIFICATION_TYPE_EDITOR_DECISION_PENDING_REVISIONS;
154  case SUBMISSION_EDITOR_DECISION_RESUBMIT:
155  return NOTIFICATION_TYPE_EDITOR_DECISION_RESUBMIT;
156  case SUBMISSION_EDITOR_DECISION_NEW_ROUND:
157  return NOTIFICATION_TYPE_EDITOR_DECISION_NEW_ROUND;
158  case SUBMISSION_EDITOR_DECISION_DECLINE:
159  case SUBMISSION_EDITOR_DECISION_INITIAL_DECLINE:
160  return NOTIFICATION_TYPE_EDITOR_DECISION_DECLINE;
161  case SUBMISSION_EDITOR_DECISION_SEND_TO_PRODUCTION:
162  return NOTIFICATION_TYPE_EDITOR_DECISION_SEND_TO_PRODUCTION;
163  }
164  throw new Exception('Unknown editor decision.');
165  }
166 
171  protected function _getReviewStages() {
172  return array(WORKFLOW_STAGE_ID_INTERNAL_REVIEW, WORKFLOW_STAGE_ID_EXTERNAL_REVIEW);
173  }
174 
178  protected function _getReviewNotificationTypes() {
179  return array(NOTIFICATION_TYPE_PENDING_INTERNAL_REVISIONS, NOTIFICATION_TYPE_PENDING_EXTERNAL_REVISIONS);
180  }
181 
187  protected function _resolveEditorDecisionForm($formName) {
188  switch($formName) {
189  case 'InitiateInternalReviewForm':
190  case 'InitiateExternalReviewForm':
191  return "controllers.modals.editorDecision.form.$formName";
192  default:
193  return parent::_resolveEditorDecisionForm($formName);
194  }
195  }
196 }
197 
198 
PKPHandler\addRoleAssignment
addRoleAssignment($roleIds, $operations)
Definition: PKPHandler.inc.php:213
EditorDecisionHandler\saveNewReviewRound
saveNewReviewRound($args, $request)
Definition: EditorDecisionHandler.inc.php:64
EditorDecisionHandler
Handle requests for editors to make a decision.
Definition: EditorDecisionHandler.inc.php:21
PKPEditorDecisionHandler\_getReviewRoundOps
_getReviewRoundOps()
Definition: PKPEditorDecisionHandler.inc.php:352
EditorDecisionHandler\internalReview
internalReview($args, $request)
Definition: EditorDecisionHandler.inc.php:85
EditorDecisionHandler\__construct
__construct()
Definition: EditorDecisionHandler.inc.php:25
PKPEditorDecisionHandler\_saveEditorDecision
_saveEditorDecision($args, $request, $formName, $redirectOp=null, $decision=null)
Definition: PKPEditorDecisionHandler.inc.php:435
PKPEditorDecisionHandler\_initiateEditorDecision
_initiateEditorDecision($args, $request, $formName)
Definition: PKPEditorDecisionHandler.inc.php:415
EditorDecisionHandler\authorize
authorize($request, &$args, $roleAssignments)
Definition: EditorDecisionHandler.inc.php:46
WorkflowStageDAO\getIdFromPath
static getIdFromPath($stagePath)
Definition: WorkflowStageDAO.inc.php:43
EditorDecisionHandler\_getReviewStages
_getReviewStages()
Definition: EditorDecisionHandler.inc.php:171
EditorDecisionHandler\_getNotificationTypeByEditorDecision
_getNotificationTypeByEditorDecision($decision)
Definition: EditorDecisionHandler.inc.php:144
PKPHandler\getAuthorizedContextObject
& getAuthorizedContextObject($assocType)
Definition: PKPHandler.inc.php:174
EditorDecisionAccessPolicy
Class to control access to submission workflow stage components.
Definition: EditorDecisionAccessPolicy.inc.php:17
PKPEditorDecisionHandler
Definition: PKPEditorDecisionHandler.inc.php:21
EditorDecisionHandler\_resolveEditorDecisionForm
_resolveEditorDecisionForm($formName)
Definition: EditorDecisionHandler.inc.php:187
EditorDecisionHandler\saveInternalReview
saveInternalReview($args, $request)
Definition: EditorDecisionHandler.inc.php:95
PKPHandler\addPolicy
addPolicy($authorizationPolicy, $addToTop=false)
Definition: PKPHandler.inc.php:157
EditorDecisionHandler\_saveGeneralPromote
_saveGeneralPromote($args, $request)
Definition: EditorDecisionHandler.inc.php:113
EditorDecisionHandler\_getReviewNotificationTypes
_getReviewNotificationTypes()
Definition: EditorDecisionHandler.inc.php:178