22
33namespace APP \plugins \generic \scieloModerationStages \classes \tasks ;
44
5+ use DateTime ;
56use PKP \scheduledTask \ScheduledTask ;
67use PKP \plugins \PluginRegistry ;
78use APP \core \Application ;
@@ -22,6 +23,20 @@ public function executeActions()
2223 $ this ->plugin = PluginRegistry::getPlugin ('generic ' , 'scielomoderationstagesplugin ' );
2324
2425 $ context = Application::get ()->getRequest ()->getContext ();
26+ $ locale = $ context ->getPrimaryLocale ();
27+ $ this ->plugin ->addLocaleData ($ locale );
28+
29+ $ preModerationTimeLimit = $ this ->plugin ->getSetting ($ context ->getId (), 'preModerationTimeLimit ' );
30+ $ this ->sendResponsiblesReminders ($ context , $ preModerationTimeLimit , $ locale );
31+
32+ $ areaModerationTimeLimit = $ this ->plugin ->getSetting ($ context ->getId (), 'areaModerationTimeLimit ' );
33+ $ this ->sendAreaModeratorsReminders ($ context , $ areaModerationTimeLimit , $ locale );
34+
35+ return true ;
36+ }
37+
38+ private function sendResponsiblesReminders ($ context , $ preModerationTimeLimit , $ locale )
39+ {
2540 $ moderationReminderHelper = new ModerationReminderHelper ();
2641 $ responsiblesUserGroup = $ moderationReminderHelper ->getResponsiblesUserGroup ($ context ->getId ());
2742
@@ -32,16 +47,12 @@ public function executeActions()
3247 );
3348
3449 if (empty ($ responsibleAssignments )) {
35- return true ;
50+ return ;
3651 }
3752
38- $ usersWithOverduePreModeration = $ this ->getUsersWithOverduePreModeration ($ context -> getId () , $ responsibleAssignments );
53+ $ usersWithOverduePreModeration = $ this ->getUsersWithOverduePreModeration ($ responsibleAssignments , $ preModerationTimeLimit );
3954 $ mapModeratorsAndOverdueSubmissions = $ moderationReminderHelper ->mapUsersAndSubmissions ($ usersWithOverduePreModeration , $ responsibleAssignments );
4055
41- $ locale = $ context ->getPrimaryLocale ();
42- $ this ->plugin ->addLocaleData ($ locale );
43- $ preModerationTimeLimit = $ this ->plugin ->getSetting ($ context ->getId (), 'preModerationTimeLimit ' );
44-
4556 foreach ($ mapModeratorsAndOverdueSubmissions as $ userId => $ submissions ) {
4657 $ moderator = Repo::user ()->get ($ userId );
4758 $ moderationReminderEmailBuilder = new ModerationReminderEmailBuilder (
@@ -56,14 +67,45 @@ public function executeActions()
5667 $ reminderEmail = $ moderationReminderEmailBuilder ->buildEmail ();
5768 Mail::send ($ reminderEmail );
5869 }
70+ }
5971
60- return true ;
72+ private function sendAreaModeratorsReminders ($ context , $ areaModerationTimeLimit , $ locale )
73+ {
74+ $ moderationReminderHelper = new ModerationReminderHelper ();
75+ $ areaModeratorsUserGroup = $ moderationReminderHelper ->getAreaModeratorsUserGroup ($ context ->getId ());
76+
77+ $ moderationStageDao = new ModerationStageDAO ();
78+ $ areaModeratorAssignments = $ moderationStageDao ->getAssignmentsByUserGroupAndModerationStage (
79+ $ areaModeratorsUserGroup ->getId (),
80+ ModerationStage::SCIELO_MODERATION_STAGE_AREA
81+ );
82+
83+ if (empty ($ areaModeratorAssignments )) {
84+ return ;
85+ }
86+
87+ $ usersWithOverdueAreaModeration = $ this ->getUsersWithOverdueAreaModeration ($ areaModeratorAssignments , $ areaModerationTimeLimit );
88+ $ mapModeratorsAndOverdueSubmissions = $ moderationReminderHelper ->mapUsersAndSubmissions ($ usersWithOverdueAreaModeration , $ areaModeratorAssignments );
89+
90+ foreach ($ mapModeratorsAndOverdueSubmissions as $ userId => $ submissions ) {
91+ $ moderator = Repo::user ()->get ($ userId );
92+ $ moderationReminderEmailBuilder = new ModerationReminderEmailBuilder (
93+ $ context ,
94+ $ moderator ,
95+ $ submissions ,
96+ $ locale ,
97+ ModerationReminderEmailBuilder::REMINDER_TYPE_AREA_MODERATION ,
98+ $ areaModerationTimeLimit
99+ );
100+
101+ $ reminderEmail = $ moderationReminderEmailBuilder ->buildEmail ();
102+ Mail::send ($ reminderEmail );
103+ }
61104 }
62105
63- private function getUsersWithOverduePreModeration ($ contextId , $ assignments ): array
106+ private function getUsersWithOverduePreModeration ($ assignments , $ preModerationTimeLimit ): array
64107 {
65108 $ usersIds = [];
66- $ preModerationTimeLimit = $ this ->plugin ->getSetting ($ contextId , 'preModerationTimeLimit ' );
67109 $ moderationStageDao = new ModerationStageDAO ();
68110
69111 foreach ($ assignments as $ assignment ) {
@@ -77,4 +119,20 @@ private function getUsersWithOverduePreModeration($contextId, $assignments): arr
77119
78120 return $ usersIds ;
79121 }
122+
123+ private function getUsersWithOverdueAreaModeration ($ assignments , $ areaModerationTimeLimit ): array
124+ {
125+ $ usersIds = [];
126+ $ limitDaysAgo = (new DateTime ())->modify ("- $ areaModerationTimeLimit days " );
127+
128+ foreach ($ assignments as $ assignment ) {
129+ $ dateAssigned = new DateTime ($ assignment ['dateAssigned ' ]);
130+
131+ if ($ dateAssigned < $ limitDaysAgo and !isset ($ usersIds [$ assignment ['userId ' ]])) {
132+ $ usersIds [$ assignment ['userId ' ]] = $ assignment ['userId ' ];
133+ }
134+ }
135+
136+ return $ usersIds ;
137+ }
80138}
0 commit comments