17 import(
'classes.handler.Handler');
18 import(
'lib.pkp.classes.submission.SubmissionFile');
29 parent::__construct();
31 array(ROLE_ID_AUTHOR),
34 'readSubmissionEmail',
46 function authorize($request, &$args, $roleAssignments) {
48 import(
'lib.pkp.classes.security.authorization.AuthorDashboardAccessPolicy');
51 return parent::authorize($request, $args, $roleAssignments);
68 return $templateMgr->display(
'authorDashboard/authorDashboard.tpl');
80 $user = $request->getUser();
82 $submissionEmailId = $request->getUserVar(
'submissionEmailId');
84 $submissionEmailFactory = $submissionEmailLogDao->getByEventType($submission->getId(), SUBMISSION_EMAIL_EDITOR_NOTIFY_AUTHOR, $user->getId());
85 while ($email = $submissionEmailFactory->next()) {
86 if ($email->getId() == $submissionEmailId) {
88 $templateMgr->assign(
'submissionEmail', $email);
89 return $templateMgr->fetchJson(
'authorDashboard/submissionEmail.tpl');
101 switch ($currentStage) {
102 case WORKFLOW_STAGE_ID_SUBMISSION:
103 return SUBMISSION_FILE_SUBMISSION;
104 case WORKFLOW_STAGE_ID_EXTERNAL_REVIEW:
105 return SUBMISSION_FILE_REVIEW_REVISION;
106 case WORKFLOW_STAGE_ID_EDITING:
107 return SUBMISSION_FILE_FINAL;
121 parent::setupTemplate($request);
123 LOCALE_COMPONENT_PKP_ADMIN,
124 LOCALE_COMPONENT_PKP_MANAGER,
125 LOCALE_COMPONENT_PKP_SUBMISSION,
126 LOCALE_COMPONENT_APP_SUBMISSION,
127 LOCALE_COMPONENT_PKP_EDITOR,
128 LOCALE_COMPONENT_APP_EDITOR,
129 LOCALE_COMPONENT_PKP_GRID
134 $user = $request->getUser();
135 $submissionContext = $request->getContext();
136 if ($submission->getContextId() !== $submissionContext->getId()) {
137 $submissionContext =
Services::get(
'context')->get($submission->getContextId());
141 $contextUserGroups = $userGroupDao->getByRoleId($submission->getData(
'contextId'), ROLE_ID_AUTHOR)->toArray();
144 $stageNotifications = array();
145 foreach (array_keys($workflowStages) as $stageId) {
146 $stageNotifications[$stageId] =
false;
150 $stageDecisions = $editDecisionDao->getEditorDecisions($submission->getId());
155 if (in_array($submission->getData(
'stageId'), [WORKFLOW_STAGE_ID_INTERNAL_REVIEW, WORKFLOW_STAGE_ID_EXTERNAL_REVIEW])) {
158 $lastReviewRound = $reviewRoundDao->getLastReviewRoundBySubmissionId($submission->getId(), $submission->getData(
'stageId'));
159 if ($fileStage && is_a($lastReviewRound,
'ReviewRound')) {
161 $editorDecisions = $editDecisionDao->getEditorDecisions($submission->getId(), $submission->getData(
'stageId'), $lastReviewRound->getRound());
162 $lastDecision = array_last($editorDecisions)[
'decision'];
163 $revisionDecisions = [SUBMISSION_EDITOR_DECISION_PENDING_REVISIONS, SUBMISSION_EDITOR_DECISION_RESUBMIT];
164 if (!empty($editorDecisions) && in_array($lastDecision, $revisionDecisions)) {
165 $actionArgs[
'submissionId'] = $submission->getId();
166 $actionArgs[
'stageId'] = $submission->getData(
'stageId');
167 $actionArgs[
'uploaderRoles'] = ROLE_ID_AUTHOR;
168 $actionArgs[
'fileStage'] = $fileStage;
169 $actionArgs[
'reviewRoundId'] = $lastReviewRound->getId();
170 $uploadFileUrl = $request->getDispatcher()->url(
174 'wizard.fileUpload.FileUploadWizardHandler',
183 $supportedFormLocales = $submissionContext->getSupportedFormLocales();
185 $locales = array_map(
function($localeKey) use ($localeNames) {
186 return [
'key' => $localeKey,
'label' => $localeNames[$localeKey]];
187 }, $supportedFormLocales);
189 $latestPublication = $submission->getLatestPublication();
191 $submissionApiUrl = $request->getDispatcher()->url($request, ROUTE_API, $submissionContext->getData(
'urlPath'),
'submissions/' . $submission->getId());
192 $latestPublicationApiUrl = $request->getDispatcher()->url($request, ROUTE_API, $submissionContext->getData(
'urlPath'),
'submissions/' . $submission->getId() .
'/publications/' . $latestPublication->getId());
194 $contributorsGridUrl = $request->getDispatcher()->url(
198 'grid.users.author.AuthorGridHandler',
202 'submissionId' => $submission->getId(),
203 'publicationId' =>
'__publicationId__',
207 $submissionLibraryUrl = $request->getDispatcher()->url(
211 'modals.documentLibrary.DocumentLibraryHandler',
214 array(
'submissionId' => $submission->getId())
221 import(
'classes.submission.Submission');
222 import(
'classes.components.forms.publication.PublishForm');
224 $templateMgr->setConstants([
229 'FORM_TITLE_ABSTRACT',
236 $propNames =
Services::get(
'schema')->getSummaryProps(SCHEMA_SUBMISSION);
237 $propNames = array_filter($propNames,
function($propName) {
return $propName !==
'publications'; });
238 $submissionProps =
Services::get(
'submission')->getProperties(
242 'request' => $request,
243 'userGroups' => $contextUserGroups,
248 $publicationList = [];
249 foreach ($submission->getData(
'publications') as $publication) {
250 $publicationList[] =
Services::get(
'publication')->getProperties(
252 [
'id',
'datePublished',
'status',
'version'],
254 'context' => $submissionContext,
255 'submission' => $submission,
256 'request' => $request,
262 $workingPublicationProps =
Services::get(
'publication')->getFullProperties(
263 $submission->getLatestPublication(),
265 'context' => $submissionContext,
266 'submission' => $submission,
267 'request' => $request,
268 'userGroups' => $contextUserGroups,
271 if ($submission->getLatestPublication()->getId() === $submission->getCurrentPublication()->getId()) {
272 $currentPublicationProps = $workingPublicationProps;
274 $currentPublicationProps =
Services::get(
'publication')->getFullProperties(
275 $submission->getCurrentPublication(),
277 'context' => $submissionContext,
278 'submission' => $submission,
279 'request' => $request,
280 'userGroups' => $contextUserGroups,
287 $canEditPublication =
true;
288 if (!in_array(ROLE_ID_SITE_ADMIN, $userRoles) && !
Services::get(
'submission')->canEditPublication($submission->getId(), $user->getId())) {
289 $canEditPublication =
false;
293 $canAccessProductionStage =
true;
295 if(!array_key_exists(WORKFLOW_STAGE_ID_PRODUCTION, $userAllowedStages)) {
296 $canAccessProductionStage =
false;
300 'canEditPublication' => $canEditPublication,
302 FORM_TITLE_ABSTRACT => $titleAbstractForm->getConfig(),
303 FORM_CITATIONS => $citationsForm->getConfig(),
305 'contributorsGridUrl' => $contributorsGridUrl,
306 'currentPublication' => $currentPublicationProps,
307 'publicationFormIds' => [
312 'submission' => $submissionProps,
313 'publicationList' => $publicationList,
314 'workingPublication' => $workingPublicationProps,
315 'submissionApiUrl' => $submissionApiUrl,
316 'submissionLibraryLabel' => __(
'grid.libraryFiles.submission.title'),
317 'submissionLibraryUrl' => $submissionLibraryUrl,
318 'supportsReferences' => !!$submissionContext->getData(
'citations'),
319 'statusLabel' => __(
'semicolon', [
'label' => __(
'common.status')]),
320 'uploadFileModalLabel' => __(
'editor.submissionReview.uploadFile'),
321 'uploadFileUrl' => $uploadFileUrl,
322 'versionLabel' => __(
'semicolon', [
'label' => __(
'admin.version')]),
326 $metadataFields = [
'coverage',
'disciplines',
'keywords',
'languages',
'rights',
'source',
'subjects',
'agencies',
'type'];
327 $metadataEnabled =
false;
328 foreach ($metadataFields as $metadataField) {
329 if ($submissionContext->getData($metadataField)) {
330 $metadataEnabled =
true;
334 if ($metadataEnabled) {
335 $vocabSuggestionUrlBase =$request->getDispatcher()->url($request, ROUTE_API, $submissionContext->getData(
'urlPath'),
'vocabs',
null,
null, [
'vocab' =>
'__vocab__']);
337 $templateMgr->setConstants([
'FORM_METADATA']);
338 $state[
'components'][FORM_METADATA] = $metadataForm->getConfig();
339 $state[
'publicationFormIds'][] = FORM_METADATA;
342 $templateMgr->setState($state);
344 $templateMgr->assign([
345 'metadataEnabled' => $metadataEnabled,
346 'pageComponent' =>
'WorkflowPage',
347 'pageTitle' => join(__(
'common.titleSeparator'), [
348 $submission->getShortAuthorString(),
349 $submission->getLocalizedTitle()
351 'submission' => $submission,
352 'workflowStages' => $workflowStages,
353 'canAccessProductionStage' => $canAccessProductionStage,