88use PKP \facades \Locale ;
99use APP \facades \Repo ;
1010use PKP \security \Role ;
11+ use PKP \security \authorization \ContextAccessPolicy ;
1112use PKP \db \DAORegistry ;
1213use APP \submission \Submission ;
1314use APP \decision \Decision ;
@@ -22,6 +23,25 @@ class ScieloModerationStagesHandler extends Handler
2223 private const SUBMISSION_STAGE_ID = 5 ;
2324 private const THRESHOLD_TIME_EXHIBITORS = 2 ;
2425
26+ public function __construct ()
27+ {
28+ parent ::__construct ();
29+ $ this ->addRoleAssignment (
30+ [Role::ROLE_ID_SITE_ADMIN , Role::ROLE_ID_MANAGER , Role::ROLE_ID_SUB_EDITOR , Role::ROLE_ID_ASSISTANT ],
31+ ['getReminderBody ' , 'updateSubmissionStageData ' , 'getSubmissionExhibitData ' , 'getUserIsAuthor ' ]
32+ );
33+ $ this ->addRoleAssignment (
34+ [Role::ROLE_ID_AUTHOR ],
35+ ['getSubmissionExhibitData ' , 'getUserIsAuthor ' ]
36+ );
37+ }
38+
39+ public function authorize ($ request , &$ args , $ roleAssignments )
40+ {
41+ $ this ->addPolicy (new ContextAccessPolicy ($ request , $ roleAssignments ));
42+ return parent ::authorize ($ request , $ args , $ roleAssignments );
43+ }
44+
2545 public function getReminderBody ($ args , $ request )
2646 {
2747 $ userGroupId = (int ) $ args ['userGroup ' ];
@@ -86,24 +106,39 @@ public function updateSubmissionStageData($args, $request)
86106 $ submission ->setData ('areaStageEntryDate ' , $ args ['areaStageEntryDate ' ]);
87107 }
88108
89- $ userSelectedAdvanceStage = ($ args ['sendNextStage ' ] == 1 );
90- if ($ userSelectedAdvanceStage and $ moderationStage ->canAdvanceStage ()) {
109+ $ stageChangeAction = $ args ['stageChangeAction ' ] ?? null ;
110+
111+ if ($ stageChangeAction === 'advance ' and $ moderationStage ->canAdvanceStage ()) {
91112 $ moderationStage ->sendNextStage ();
92- $ moderationStageRegister = new ModerationStageRegister ();
93- $ moderationStageRegister ->registerModerationStageOnDatabase ($ moderationStage );
94- $ moderationStageRegister ->registerModerationStageOnSubmissionLog ($ moderationStage );
113+ $ this ->registerStageChange (
114+ $ moderationStage ,
115+ 'plugins.generic.scieloModerationStages.log.submissionSentToModerationStage '
116+ );
95117
96- $ emailBuilder = new StageAdvancementEmailBuilder ();
97- $ email = $ emailBuilder ->setSubmission ($ submission )
118+ $ email = ( new StageAdvancementEmailBuilder ())
119+ ->setSubmission ($ submission )
98120 ->buildEmailParams ()
99121 ->build ();
100122 Mail::send ($ email );
123+ } elseif ($ stageChangeAction === 'regress ' and $ moderationStage ->canRegressStage ()) {
124+ $ moderationStage ->sendPreviousStage ();
125+ $ this ->registerStageChange (
126+ $ moderationStage ,
127+ 'plugins.generic.scieloModerationStages.log.submissionReturnedToModerationStage '
128+ );
101129 }
102130
103131 Repo::submission ()->edit ($ submission , []);
104132 return http_response_code (200 );
105133 }
106134
135+ private function registerStageChange (ModerationStage $ moderationStage , string $ logMessageKey ): void
136+ {
137+ $ moderationStageRegister = new ModerationStageRegister ();
138+ $ moderationStageRegister ->registerModerationStageOnDatabase ($ moderationStage );
139+ $ moderationStageRegister ->registerModerationStageOnSubmissionLog ($ moderationStage , $ logMessageKey );
140+ }
141+
107142 public function getSubmissionExhibitData ($ args , $ request )
108143 {
109144 $ submissionId = (int ) $ args ['submissionId ' ];
0 commit comments