Open Journal Systems  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  'externalReview', 'saveExternalReview',
32  'sendReviews', 'saveSendReviews',
33  'promote', 'savePromote',
34  ), $this->_getReviewRoundOps())
35  );
36  }
37 
38 
39  //
40  // Implement template methods from PKPHandler
41  //
45  function authorize($request, &$args, $roleAssignments) {
46  $stageId = (int) $request->getUserVar('stageId');
47  import('lib.pkp.classes.security.authorization.EditorDecisionAccessPolicy');
48  $this->addPolicy(new EditorDecisionAccessPolicy($request, $args, $roleAssignments, 'submissionId', $stageId));
49  return parent::authorize($request, $args, $roleAssignments);
50  }
51 
52 
53  //
54  // Public handler actions
55  //
62  function saveNewReviewRound($args, $request) {
63  // FIXME: this can probably all be managed somewhere.
64  $stageId = $this->getAuthorizedContextObject(ASSOC_TYPE_WORKFLOW_STAGE);
65  if ($stageId == WORKFLOW_STAGE_ID_EXTERNAL_REVIEW) {
66  $redirectOp = WORKFLOW_STAGE_PATH_EXTERNAL_REVIEW;
67  } else {
68  $redirectOp = null; // Suppress scrutinizer warn
69  assert(false);
70  }
71 
72  return $this->_saveEditorDecision($args, $request, 'NewReviewRoundForm', $redirectOp, SUBMISSION_EDITOR_DECISION_NEW_ROUND);
73  }
74 
75 
76  //
77  // Private helper methods
78  //
79  protected function _saveGeneralPromote($args, $request) {
80  // Redirect to the next workflow page after
81  // promoting the submission.
82  $decision = (int)$request->getUserVar('decision');
83 
84  $redirectOp = null;
85 
86  if ($decision == SUBMISSION_EDITOR_DECISION_ACCEPT) {
87  $redirectOp = WORKFLOW_STAGE_PATH_EDITING;
88  } elseif ($decision == SUBMISSION_EDITOR_DECISION_EXTERNAL_REVIEW) {
89  $redirectOp = WORKFLOW_STAGE_PATH_EXTERNAL_REVIEW;
90  } elseif ($decision == SUBMISSION_EDITOR_DECISION_SEND_TO_PRODUCTION) {
91  $redirectOp = WORKFLOW_STAGE_PATH_PRODUCTION;
92  }
93 
94  // Make sure user has access to the workflow stage.
95  import('lib.pkp.classes.workflow.WorkflowStageDAO');
96  $redirectWorkflowStage = WorkflowStageDAO::getIdFromPath($redirectOp);
97  $userAccessibleWorkflowStages = $this->getAuthorizedContextObject(ASSOC_TYPE_ACCESSIBLE_WORKFLOW_STAGES);
98  if (!array_key_exists($redirectWorkflowStage, $userAccessibleWorkflowStages)) {
99  $redirectOp = null;
100  }
101 
102  return $this->_saveEditorDecision($args, $request, 'PromoteForm', $redirectOp);
103  }
104 
110  protected function _getNotificationTypeByEditorDecision($decision) {
111  switch ($decision) {
112  case SUBMISSION_EDITOR_DECISION_ACCEPT:
113  return NOTIFICATION_TYPE_EDITOR_DECISION_ACCEPT;
114  case SUBMISSION_EDITOR_DECISION_EXTERNAL_REVIEW:
115  return NOTIFICATION_TYPE_EDITOR_DECISION_EXTERNAL_REVIEW;
116  case SUBMISSION_EDITOR_DECISION_PENDING_REVISIONS:
117  return NOTIFICATION_TYPE_EDITOR_DECISION_PENDING_REVISIONS;
118  case SUBMISSION_EDITOR_DECISION_RESUBMIT:
119  return NOTIFICATION_TYPE_EDITOR_DECISION_RESUBMIT;
120  case SUBMISSION_EDITOR_DECISION_NEW_ROUND:
121  return NOTIFICATION_TYPE_EDITOR_DECISION_NEW_ROUND;
122  case SUBMISSION_EDITOR_DECISION_DECLINE:
123  case SUBMISSION_EDITOR_DECISION_INITIAL_DECLINE:
124  return NOTIFICATION_TYPE_EDITOR_DECISION_DECLINE;
125  case SUBMISSION_EDITOR_DECISION_SEND_TO_PRODUCTION:
126  return NOTIFICATION_TYPE_EDITOR_DECISION_SEND_TO_PRODUCTION;
127  }
128  throw new Exception('Unknown editor decision.');
129  }
130 
135  protected function _getReviewStages() {
136  return array(WORKFLOW_STAGE_ID_INTERNAL_REVIEW, WORKFLOW_STAGE_ID_EXTERNAL_REVIEW);
137  }
138 
142  protected function _getReviewNotificationTypes() {
143  return array(NOTIFICATION_TYPE_PENDING_EXTERNAL_REVISIONS);
144  }
145 
151  protected function _resolveEditorDecisionForm($formName) {
152  switch($formName) {
153  case 'InitiateExternalReviewForm':
154  return "controllers.modals.editorDecision.form.$formName";
155  default:
156  return parent::_resolveEditorDecisionForm($formName);
157  }
158  }
159 }
160 
161 
PKPHandler\addRoleAssignment
addRoleAssignment($roleIds, $operations)
Definition: PKPHandler.inc.php:213
EditorDecisionHandler\saveNewReviewRound
saveNewReviewRound($args, $request)
Definition: EditorDecisionHandler.inc.php:62
EditorDecisionHandler
Handle requests for editors to make a decision.
Definition: EditorDecisionHandler.inc.php:21
PKPEditorDecisionHandler\_getReviewRoundOps
_getReviewRoundOps()
Definition: PKPEditorDecisionHandler.inc.php:352
EditorDecisionHandler\__construct
__construct()
Definition: EditorDecisionHandler.inc.php:25
PKPEditorDecisionHandler\_saveEditorDecision
_saveEditorDecision($args, $request, $formName, $redirectOp=null, $decision=null)
Definition: PKPEditorDecisionHandler.inc.php:435
EditorDecisionHandler\authorize
authorize($request, &$args, $roleAssignments)
Definition: EditorDecisionHandler.inc.php:45
WorkflowStageDAO\getIdFromPath
static getIdFromPath($stagePath)
Definition: WorkflowStageDAO.inc.php:43
EditorDecisionHandler\_getReviewStages
_getReviewStages()
Definition: EditorDecisionHandler.inc.php:135
EditorDecisionHandler\_getNotificationTypeByEditorDecision
_getNotificationTypeByEditorDecision($decision)
Definition: EditorDecisionHandler.inc.php:110
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:151
PKPHandler\addPolicy
addPolicy($authorizationPolicy, $addToTop=false)
Definition: PKPHandler.inc.php:157
EditorDecisionHandler\_saveGeneralPromote
_saveGeneralPromote($args, $request)
Definition: EditorDecisionHandler.inc.php:79
EditorDecisionHandler\_getReviewNotificationTypes
_getReviewNotificationTypes()
Definition: EditorDecisionHandler.inc.php:142