Skip to content

Commit 21cd771

Browse files
Fixes errors in merge request
Issue: documentacao-e-tarefas/scielo#714 Signed-off-by: Jhon <jhon@lepidus.com.br>
1 parent 17050ec commit 21cd771

2 files changed

Lines changed: 68 additions & 10 deletions

File tree

classes/tasks/SendModerationReminders.php

Lines changed: 67 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace APP\plugins\generic\scieloModerationStages\classes\tasks;
44

5+
use DateTime;
56
use PKP\scheduledTask\ScheduledTask;
67
use PKP\plugins\PluginRegistry;
78
use 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
}

scheduledTasks.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@
55
<scheduled_tasks>
66
<task class="APP\plugins\generic\scieloModerationStages\classes\tasks\SendModerationReminders">
77
<descr>Send moderation reminders to moderators whose moderation is overdue</descr>
8-
<frequency minute="47"/>
8+
<frequency dayofweek="1"/>
99
</task>
1010
</scheduled_tasks>

0 commit comments

Comments
 (0)