Open Journal Systems  3.3.0
WorkflowHandler.inc.php
1 <?php
2 
16 import('lib.pkp.pages.workflow.PKPWorkflowHandler');
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, ROLE_ID_ASSISTANT),
30  array(
31  'access', 'index', 'submission',
32  'editorDecisionActions', // Submission & review
33  'externalReview', // review
34  'editorial',
35  'production',
36  'submissionHeader',
37  'submissionProgressBar',
38  )
39  );
40  }
41 
46  function setupIndex($request) {
47  parent::setupIndex($request);
48 
49  $templateMgr = TemplateManager::getManager($request);
50  $submission = $this->getAuthorizedContextObject(ASSOC_TYPE_SUBMISSION);
51 
52  $submissionContext = $request->getContext();
53  if ($submission->getContextId() !== $submissionContext->getId()) {
54  $submissionContext = Services::get('context')->get($submission->getContextId());
55  }
56 
57  $supportedSubmissionLocales = $submissionContext->getSupportedSubmissionLocales();
58  $localeNames = AppLocale::getAllLocales();
59  $locales = array_map(function($localeKey) use ($localeNames) {
60  return ['key' => $localeKey, 'label' => $localeNames[$localeKey]];
61  }, $supportedSubmissionLocales);
62 
63  $latestPublication = $submission->getLatestPublication();
64 
65  $latestPublicationApiUrl = $request->getDispatcher()->url($request, ROUTE_API, $submissionContext->getPath(), 'submissions/' . $submission->getId() . '/publications/' . $latestPublication->getId());
66  $temporaryFileApiUrl = $request->getDispatcher()->url($request, ROUTE_API, $submissionContext->getPath(), 'temporaryFiles');
67  $issueApiUrl = $request->getDispatcher()->url($request, ROUTE_API, $submissionContext->getData('urlPath'), 'issues/__issueId__');
68 
69  import('classes.file.PublicFileManager');
70  $publicFileManager = new PublicFileManager();
71  $baseUrl = $request->getBaseUrl() . '/' . $publicFileManager->getContextFilesPath($submissionContext->getId());
72 
73  $issueEntryForm = new APP\components\forms\publication\IssueEntryForm($latestPublicationApiUrl, $locales, $latestPublication, $submissionContext, $baseUrl, $temporaryFileApiUrl);
74 
75  $sectionWordLimits = [];
76  $sectionDao = DAORegistry::getDAO('SectionDAO'); /* @var $sectionDao SectionDAO */
77  $sectionIterator = $sectionDao->getByContextId($submissionContext->getId());
78  while ($section = $sectionIterator->next()) {
79  $sectionWordLimits[$section->getId()] = (int) $section->getAbstractWordCount() ?? 0;
80  }
81 
82  import('classes.components.forms.publication.AssignToIssueForm');
83  import('classes.components.forms.publication.PublishForm');
84  $templateMgr->setConstants([
85  'FORM_ASSIGN_TO_ISSUE',
86  'FORM_ISSUE_ENTRY',
87  'FORM_PUBLISH',
88  ]);
89 
90  $components = $templateMgr->getState('components');
91  $components[FORM_ISSUE_ENTRY] = $issueEntryForm->getConfig();
92 
93  // Add the word limit to the existing title/abstract form
94  if (!empty($components[FORM_TITLE_ABSTRACT]) &&
95  array_key_exists($submission->getLatestPublication()->getData('sectionId'), $sectionWordLimits)) {
96  $limit = (int) $sectionWordLimits[$submission->getLatestPublication()->getData('sectionId')];
97  foreach ($components[FORM_TITLE_ABSTRACT]['fields'] as $key => $field) {
98  if ($field['name'] === 'abstract') {
99  $components[FORM_TITLE_ABSTRACT]['fields'][$key]['wordLimit'] = $limit;
100  break;
101  }
102  }
103  }
104 
105  $assignToIssueUrl = $request->getDispatcher()->url(
106  $request,
107  ROUTE_COMPONENT,
108  null,
109  'modals.publish.AssignToIssueHandler',
110  'assign',
111  null,
112  [
113  'submissionId' => $submission->getId(),
114  'publicationId' => '__publicationId__',
115  ]
116  );
117 
118  $publicationFormIds = $templateMgr->getState('publicationFormIds');
119  $publicationFormIds[] = FORM_ISSUE_ENTRY;
120 
121  $templateMgr->setState([
122  'assignToIssueUrl' => $assignToIssueUrl,
123  'components' => $components,
124  'publicationFormIds' => $publicationFormIds,
125  'issueApiUrl' => $issueApiUrl,
126  'sectionWordLimits' => $sectionWordLimits,
127  'selectIssueLabel' => __('publication.selectIssue'),
128  ]);
129  }
130 
131 
132  //
133  // Protected helper methods
134  //
140  protected function getEditorAssignmentNotificationTypeByStageId($stageId) {
141  switch ($stageId) {
142  case WORKFLOW_STAGE_ID_SUBMISSION:
143  return NOTIFICATION_TYPE_EDITOR_ASSIGNMENT_SUBMISSION;
144  case WORKFLOW_STAGE_ID_EXTERNAL_REVIEW:
145  return NOTIFICATION_TYPE_EDITOR_ASSIGNMENT_EXTERNAL_REVIEW;
146  case WORKFLOW_STAGE_ID_EDITING:
147  return NOTIFICATION_TYPE_EDITOR_ASSIGNMENT_EDITING;
148  case WORKFLOW_STAGE_ID_PRODUCTION:
149  return NOTIFICATION_TYPE_EDITOR_ASSIGNMENT_PRODUCTION;
150  }
151  return null;
152  }
153 
157  protected function _getRepresentationsGridUrl($request, $submission) {
158  return $request->getDispatcher()->url(
159  $request,
160  ROUTE_COMPONENT,
161  null,
162  'grid.articleGalleys.ArticleGalleyGridHandler',
163  'fetchGrid',
164  null,
165  [
166  'submissionId' => $submission->getId(),
167  'publicationId' => '__publicationId__',
168  ]
169  );
170  }
171 }
172 
173 
PKPHandler\addRoleAssignment
addRoleAssignment($roleIds, $operations)
Definition: PKPHandler.inc.php:213
APP\components\forms\publication\IssueEntryForm
Definition: IssueEntryForm.inc.php:25
PKPLocale\getAllLocales
static & getAllLocales()
Definition: PKPLocale.inc.php:537
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
WorkflowHandler\__construct
__construct()
Definition: WorkflowHandler.inc.php:25
PKPWorkflowHandler
Definition: PKPWorkflowHandler.inc.php:24
WorkflowHandler\getEditorAssignmentNotificationTypeByStageId
getEditorAssignmentNotificationTypeByStageId($stageId)
Definition: WorkflowHandler.inc.php:140
WorkflowHandler\_getRepresentationsGridUrl
_getRepresentationsGridUrl($request, $submission)
Definition: WorkflowHandler.inc.php:157
PublicFileManager
Wrapper class for uploading files to a site/journal's public directory.
Definition: PublicFileManager.inc.php:18
WorkflowHandler\setupIndex
setupIndex($request)
Definition: WorkflowHandler.inc.php:46
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
PKPHandler\getAuthorizedContextObject
& getAuthorizedContextObject($assocType)
Definition: PKPHandler.inc.php:174
WorkflowHandler
Handle requests for the submssion workflow.
Definition: WorkflowHandler.inc.php:21
PKPServices\get
static get($service)
Definition: PKPServices.inc.php:49