diff --git a/classes/components/forms/context/PKPReviewSetupForm.php b/classes/components/forms/context/PKPReviewSetupForm.php
index c98ba682a3d..395ed468cf1 100644
--- a/classes/components/forms/context/PKPReviewSetupForm.php
+++ b/classes/components/forms/context/PKPReviewSetupForm.php
@@ -98,11 +98,23 @@ public function __construct($action, $locales, $context)
'value' => $context->getData('numDaysBeforeInviteReminder'),
'size' => 'small',
]))
+ ->addField(new FieldText('numOccurrencesForInviteReminder', [
+ 'label' => __('manager.setup.reviewOptions.occurrencesForInvite'),
+ 'description' => __('manager.setup.reviewOptions.occurrencesForInvite.description'),
+ 'value' => $context->getData('numOccurrencesForInviteReminder'),
+ 'size' => 'small',
+ ]))
->addField(new FieldText('numDaysBeforeSubmitReminder', [
'label' => __('manager.setup.reviewOptions.reminders.submit'),
'description' => __('manager.setup.reviewOptions.reminders.submit.description'),
'value' => $context->getData('numDaysBeforeSubmitReminder'),
'size' => 'small',
+ ]))
+ ->addField(new FieldText('numOccurrencesForSubmitReminder', [
+ 'label' => __('manager.setup.reviewOptions.occurrencesForSubmit'),
+ 'description' => __('manager.setup.reviewOptions.occurrencesForSubmit.description'),
+ 'value' => $context->getData('numOccurrencesForSubmitReminder'),
+ 'size' => 'small',
]));
} else {
$this->addField(new FieldHTML('reviewRemindersDisabled', [
diff --git a/classes/controllers/grid/users/reviewer/PKPReviewerGridHandler.php b/classes/controllers/grid/users/reviewer/PKPReviewerGridHandler.php
index 31cb644e837..ff297bf6bce 100644
--- a/classes/controllers/grid/users/reviewer/PKPReviewerGridHandler.php
+++ b/classes/controllers/grid/users/reviewer/PKPReviewerGridHandler.php
@@ -50,6 +50,7 @@
use PKP\mail\mailables\ReviewerReinstate;
use PKP\mail\mailables\ReviewerResendRequest;
use PKP\mail\mailables\ReviewerUnassign;
+use PKP\mail\mailables\ReviewRemindAuto;
use PKP\mail\traits\Sender;
use PKP\notification\NotificationDAO;
use PKP\notification\PKPNotification;
@@ -979,7 +980,8 @@ public function reviewHistory($args, $request)
$dates = [
'common.assigned' => $reviewAssignment->getDateAssigned(),
'common.notified' => $reviewAssignment->getDateNotified(),
- 'common.reminder' => $reviewAssignment->getDateReminded(),
+ 'common.invite.reminder' => $reviewAssignment->getDateInviteReminded(),
+ 'common.submit.reminder' => $reviewAssignment->getDateSubmitReminded(),
'common.confirm' => $reviewAssignment->getDateConfirmed(),
'common.completed' => $reviewAssignment->getDateCompleted(),
'common.acknowledged' => $reviewAssignment->getDateAcknowledged(),
@@ -1045,11 +1047,20 @@ public function fetchTemplateBody(array $args, PKPRequest $request): ?JSONMessag
return null;
}
+ $reviewAssignment = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_REVIEW_ASSIGNMENT);
+ if ($mailable instanceof ReviewRemindAuto) {
+ $occurrence = $reviewAssignment->getCountSubmitReminder();
+ }
+ else {
+ $occurrence = $reviewAssignment->getCountInviteReminder();
+ }
+
$user = $request->getUser();
$mailable->sender($user);
$mailable->addData([
'messageToReviewer' => __('reviewer.step1.requestBoilerplate'),
'abstractTermIfEnabled' => ($this->getSubmission()->getLocalizedAbstract() == '' ? '' : __('common.abstract')), // Deprecated; for OJS 2.x templates
+ 'occurrence' => $occurrence,
]);
$body = Mail::compileParams($template->getLocalizedData('body'), $mailable->getData(Locale::getLocale()));
diff --git a/classes/migration/install/ReviewsMigration.php b/classes/migration/install/ReviewsMigration.php
index 69b3434b44c..e3f0a73eb0a 100644
--- a/classes/migration/install/ReviewsMigration.php
+++ b/classes/migration/install/ReviewsMigration.php
@@ -71,7 +71,10 @@ public function up(): void
$table->smallInteger('declined')->default(0);
$table->smallInteger('cancelled')->default(0);
$table->datetime('date_rated')->nullable();
- $table->datetime('date_reminded')->nullable();
+ $table->datetime('date_invite_reminded')->nullable();
+ $table->smallInteger('count_invite_reminder')->default(0);
+ $table->datetime('date_submit_reminded')->nullable();
+ $table->smallInteger('count_submit_reminder')->default(0);
$table->smallInteger('quality')->nullable();
$table->bigInteger('review_round_id');
diff --git a/classes/migration/upgrade/v3_5_0/I9455_ReviewRemindersOccurrences.php b/classes/migration/upgrade/v3_5_0/I9455_ReviewRemindersOccurrences.php
new file mode 100644
index 00000000000..de89e8bb419
--- /dev/null
+++ b/classes/migration/upgrade/v3_5_0/I9455_ReviewRemindersOccurrences.php
@@ -0,0 +1,53 @@
+after('date_rated', function (Blueprint $table) {
+ $table->dateTime('date_invite_reminded')->nullable();
+ $table->smallInteger('count_invite_reminder')->default(0);
+ });
+
+ // Rename date_reminded to date_submit_reminded to avoid confusion with another column with a similar name
+ $table->renameColumn('date_reminded', 'date_submit_reminded');
+
+ $table->after('date_reminded', function (Blueprint $table) {
+ $table->smallInteger('count_submit_reminder')->default(0);
+ });
+ });
+ }
+
+ /**
+ * Reverse the migration.
+ */
+ public function down(): void
+ {
+ Schema::table('review_assignments', function (Blueprint $table) {
+ $table->dropColumn('date_invite_reminded');
+ $table->dropColumn('count_invite_reminder');
+ $table->renameColumn('date_submit_reminded', 'date_reminded');
+ $table->dropColumn('count_submit_reminder');
+ });
+ }
+}
diff --git a/classes/submission/reviewAssignment/DAO.php b/classes/submission/reviewAssignment/DAO.php
index 54a5f029d4e..a7053896659 100644
--- a/classes/submission/reviewAssignment/DAO.php
+++ b/classes/submission/reviewAssignment/DAO.php
@@ -54,7 +54,10 @@ class DAO extends EntityDAO
'declined' => 'declined',
'cancelled' => 'cancelled',
'dateRated' => 'date_rated',
- 'dateReminded' => 'date_reminded',
+ 'dateInviteReminded' => 'date_invite_reminded',
+ 'countInviteReminder' => 'count_invite_reminder',
+ 'dateSubmitReminded' => 'date_submit_reminded',
+ 'countSubmitReminder' => 'count_submit_reminder',
'quality' => 'quality',
'reviewRoundId' => 'review_round_id',
'stageId' => 'stage_id',
diff --git a/classes/submission/reviewAssignment/ReviewAssignment.php b/classes/submission/reviewAssignment/ReviewAssignment.php
index d87ee2de57e..6aba74db83a 100644
--- a/classes/submission/reviewAssignment/ReviewAssignment.php
+++ b/classes/submission/reviewAssignment/ReviewAssignment.php
@@ -418,23 +418,83 @@ public function setDateAcknowledged($dateAcknowledged)
}
/**
- * Get the reviewer's last reminder date.
+ * Get the reviewer's last invite reminder date.
*
* @return string
*/
- public function getDateReminded()
+ public function getDateInviteReminded()
{
- return $this->getData('dateReminded');
+ return $this->getData('dateInviteReminded');
}
/**
- * Set the reviewer's last reminder date.
+ * Set the reviewer's last invite reminder date.
*
- * @param string $dateReminded
+ * @param string $dateInviteReminded
*/
- public function setDateReminded($dateReminded)
+ public function setDateInviteReminded($dateInviteReminded)
{
- $this->setData('dateReminded', $dateReminded);
+ $this->setData('dateInviteReminded', $dateInviteReminded);
+ }
+
+ /**
+ * Get the reviewer's invite reminder count.
+ *
+ * @return int
+ */
+ function getCountInviteReminder()
+ {
+ return $this->getData('countInviteReminder');
+ }
+
+ /**
+ * Set the reviewer's invite reminder count.
+ *
+ * @param $countInviteReminder int
+ */
+ function setCountInviteReminder($countInviteReminder)
+ {
+ $this->setData('countInviteReminder', $countInviteReminder);
+ }
+
+ /**
+ * Get the reviewer's last submit reminder date.
+ *
+ * @return string
+ */
+ function getDateSubmitReminded()
+ {
+ return $this->getData('dateSubmitReminded');
+ }
+
+ /**
+ * Set the reviewer's last submit reminder date.
+ *
+ * @param $dateSubmitReminded string
+ */
+ function setDateSubmitReminded($dateSubmitReminded)
+ {
+ $this->setData('dateSubmitReminded', $dateSubmitReminded);
+ }
+
+ /**
+ * Get the reviewer's submit reminder count.
+ *
+ * @return int
+ */
+ function getCountSubmitReminder()
+ {
+ return $this->getData('countSubmitReminder');
+ }
+
+ /**
+ * Set the reviewer's submit reminder count.
+ *
+ * @param $countSubmitReminder int
+ */
+ function setCountSubmitReminder($countSubmitReminder)
+ {
+ $this->setData('countSubmitReminder', $countSubmitReminder);
}
/**
diff --git a/classes/submission/reviewer/ReviewerAction.php b/classes/submission/reviewer/ReviewerAction.php
index e984cf8b94d..fbfa06ce452 100644
--- a/classes/submission/reviewer/ReviewerAction.php
+++ b/classes/submission/reviewer/ReviewerAction.php
@@ -90,7 +90,7 @@ public function confirmReview(
}
Repo::reviewAssignment()->edit($reviewAssignment, [
- 'dateReminded' => null,
+ 'dateSubmitReminded' => null,
'reminderWasAutomatic' => 0,
'declined' => $decline,
'dateConfirmed' => Core::getCurrentDate(),
diff --git a/classes/task/ReviewReminder.php b/classes/task/ReviewReminder.php
index e5523526b25..526407ecbee 100644
--- a/classes/task/ReviewReminder.php
+++ b/classes/task/ReviewReminder.php
@@ -75,16 +75,33 @@ public function sendReminder(
$reviewInvitation->dispatch();
}
+ if ($mailable instanceof ReviewRemindAuto) {
+ $occurrence = $reviewAssignment->getCountSubmitReminder() + 1;
+ }
+ else {
+ $occurrence = $reviewAssignment->getCountInviteReminder() + 1;
+ }
+
// deprecated template variables OJS 2.x
$mailable->addData([
'messageToReviewer' => __('reviewer.step1.requestBoilerplate'),
'abstractTermIfEnabled' => ($submission->getLocalizedAbstract() == '' ? '' : __('common.abstract')),
+ 'occurrence' => $occurrence,
]);
Mail::send($mailable);
+ if ($mailable instanceof ReviewRemindAuto) {
+ $dateFieldToUpdate = 'dateSubmitReminded';
+ $countFieldToUpdate = 'countSubmitReminder';
+ }
+ else {
+ $dateFieldToUpdate = 'dateInviteReminded';
+ $countFieldToUpdate = 'countInviteReminder';
+ }
Repo::reviewAssignment()->edit($reviewAssignment, [
- 'dateReminded' => Core::getCurrentDate(),
+ $dateFieldToUpdate => Core::getCurrentDate(),
+ $countFieldToUpdate => $occurrence,
'reminderWasAutomatic' => 1
]);
@@ -114,12 +131,8 @@ public function executeActions()
$incompleteAssignments = Repo::reviewAssignment()->getCollector()->filterByIsIncomplete(true)->getMany();
$inviteReminderDays = $submitReminderDays = null;
+ $occurrencesInviteReminder = $occurrencesSubmitReminder = null;
foreach ($incompleteAssignments as $reviewAssignment) {
- // Avoid review assignments that a reminder exists for.
- if ($reviewAssignment->getDateReminded() !== null) {
- continue;
- }
-
// Fetch the submission
if ($submission == null || $submission->getId() != $reviewAssignment->getSubmissionId()) {
unset($submission);
@@ -141,19 +154,36 @@ public function executeActions()
$inviteReminderDays = $context->getData('numDaysBeforeInviteReminder');
$submitReminderDays = $context->getData('numDaysBeforeSubmitReminder');
+ $occurrencesInviteReminder = $context->getData('numOccurrencesForInviteReminder');
+ $occurrencesSubmitReminder = $context->getData('numOccurrencesForSubmitReminder');
}
$mailable = null;
- if ($submitReminderDays >= 1 && $reviewAssignment->getDateDue() != null) {
- $checkDate = strtotime($reviewAssignment->getDateDue());
- if (time() - $checkDate > 60 * 60 * 24 * $submitReminderDays) {
- $mailable = new ReviewRemindAuto($context, $submission, $reviewAssignment);
+
+ $countSubmitReminder = $reviewAssignment->getCountSubmitReminder();
+ if ($countSubmitReminder == 0 || !$occurrencesSubmitReminder || $countSubmitReminder < $occurrencesSubmitReminder) {
+ $dateDue = $reviewAssignment->getDateDue();
+ if ($submitReminderDays >= 1 && $dateDue) {
+ $dateSubmitReminded = $reviewAssignment->getDateSubmitReminded();
+ $time = $dateSubmitReminded ? strtotime($dateSubmitReminded) : strtotime($dateDue);
+ $checkDate = $time + (60 * 60 * 24 * $submitReminderDays);
+ if (time() > $checkDate) {
+ $mailable = new ReviewRemindAuto($context, $submission, $reviewAssignment);
+ }
}
}
- if ($inviteReminderDays >= 1 && $reviewAssignment->getDateConfirmed() == null) {
- $checkDate = strtotime($reviewAssignment->getDateResponseDue());
- if (time() - $checkDate > 60 * 60 * 24 * $inviteReminderDays) {
- $mailable = new ReviewResponseRemindAuto($context, $submission, $reviewAssignment);
+
+ $countInviteReminder = $reviewAssignment->getCountInviteReminder();
+ if ($countInviteReminder == 0 || !$occurrencesInviteReminder || $countInviteReminder < $occurrencesInviteReminder) {
+ $dateConfirmed = $reviewAssignment->getDateConfirmed();
+ if ($inviteReminderDays >= 1 && !$dateConfirmed) {
+ $dateResponseDue = $reviewAssignment->getDateResponseDue();
+ $dateInviteReminded = $reviewAssignment->getDateInviteReminded();
+ $time = $dateInviteReminded ? strtotime($dateInviteReminded) : strtotime($dateResponseDue);
+ $checkDate = $time + (60 * 60 * 24 * $inviteReminderDays);
+ if (time() > $checkDate) {
+ $mailable = new ReviewResponseRemindAuto($context, $submission, $reviewAssignment);
+ }
}
}
diff --git a/controllers/grid/users/reviewer/form/ReviewReminderForm.php b/controllers/grid/users/reviewer/form/ReviewReminderForm.php
index 8ed411b6b55..df5a5f6c10d 100644
--- a/controllers/grid/users/reviewer/form/ReviewReminderForm.php
+++ b/controllers/grid/users/reviewer/form/ReviewReminderForm.php
@@ -168,7 +168,7 @@ public function execute(...$functionArgs)
Repo::eventLog()->add($eventLog);
Repo::reviewAssignment()->edit($reviewAssignment, [
- 'dateReminded' => Core::getCurrentDate(),
+ 'dateSubmitReminded' => Core::getCurrentDate(),
]);
} catch (TransportException $e) {
$notificationMgr = new NotificationManager();
diff --git a/controllers/grid/users/reviewer/form/ReviewerForm.php b/controllers/grid/users/reviewer/form/ReviewerForm.php
index 28179853488..9a1c6f192d4 100644
--- a/controllers/grid/users/reviewer/form/ReviewerForm.php
+++ b/controllers/grid/users/reviewer/form/ReviewerForm.php
@@ -464,6 +464,7 @@ protected function getMailable(): ReviewRequest
$mailable->addData([
'messageToReviewer' => __('reviewer.step1.requestBoilerplate'),
'abstractTermIfEnabled' => ($submission->getLocalizedAbstract() == '' ? '' : __('common.abstract')), // Deprecated; for OJS 2.x templates
+ 'occurrence' => 0,
]);
// Remove template variables that haven't been set yet during form initialization
diff --git a/locale/ar/common.po b/locale/ar/common.po
index 3075ef66364..fc0603068cf 100644
--- a/locale/ar/common.po
+++ b/locale/ar/common.po
@@ -744,10 +744,10 @@ msgstr "تحديث"
msgid "common.related"
msgstr "ذو صلة"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "تذكير"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "مذكَّر بتاريخ: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/az/common.po b/locale/az/common.po
index 622b4ddcc4f..2cf4ead456f 100644
--- a/locale/az/common.po
+++ b/locale/az/common.po
@@ -1047,10 +1047,10 @@ msgstr "Yenilə"
msgid "common.related"
msgstr "Əlaqəli"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Xatırlatma"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Xatırladıldı: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/bg/common.po b/locale/bg/common.po
index e1e5f94ef17..fce6074e57e 100644
--- a/locale/bg/common.po
+++ b/locale/bg/common.po
@@ -742,10 +742,10 @@ msgstr "Обновяване"
msgid "common.related"
msgstr "Свързани"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Напомняне"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Напомняне на дата: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/bs/common.po b/locale/bs/common.po
index 8d01c9d5697..6b38660f1e1 100644
--- a/locale/bs/common.po
+++ b/locale/bs/common.po
@@ -711,10 +711,10 @@ msgstr ""
msgid "common.related"
msgstr "Povezano"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr ""
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr ""
msgid "common.remote"
diff --git a/locale/ca/common.po b/locale/ca/common.po
index f4098aa21d6..bfe4b0a64e7 100644
--- a/locale/ca/common.po
+++ b/locale/ca/common.po
@@ -743,10 +743,10 @@ msgstr "Actualitza"
msgid "common.related"
msgstr "Relacionat"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Recordatori"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Recordatori: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/ckb/common.po b/locale/ckb/common.po
index 907cad3a52c..d60eef2253d 100644
--- a/locale/ckb/common.po
+++ b/locale/ckb/common.po
@@ -706,10 +706,10 @@ msgstr ""
msgid "common.related"
msgstr ""
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr ""
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr ""
msgid "common.remote"
diff --git a/locale/cs/common.po b/locale/cs/common.po
index 523c9809534..50b68358d04 100644
--- a/locale/cs/common.po
+++ b/locale/cs/common.po
@@ -747,10 +747,10 @@ msgstr "Obnovit"
msgid "common.related"
msgstr "Související"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Připomenutí"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Připomenuto: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/da/common.po b/locale/da/common.po
index 23655990c49..43e0d39c5c6 100644
--- a/locale/da/common.po
+++ b/locale/da/common.po
@@ -746,10 +746,10 @@ msgstr "Opdatér"
msgid "common.related"
msgstr "Relateret"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Påmindelse"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Påmindet: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/de/common.po b/locale/de/common.po
index 8e189b92c84..78409671738 100644
--- a/locale/de/common.po
+++ b/locale/de/common.po
@@ -747,10 +747,10 @@ msgstr "Aktualisieren"
msgid "common.related"
msgstr "Verbunden"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Erinnerung"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Erinnert: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/el/common.po b/locale/el/common.po
index 9e35f01d0f4..0a39b646f36 100644
--- a/locale/el/common.po
+++ b/locale/el/common.po
@@ -753,10 +753,10 @@ msgstr "Ανανέωση"
msgid "common.related"
msgstr "Σχετικό"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Υπενθύμιση"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Έγινε υπενθύμιση στις: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/en/common.po b/locale/en/common.po
index e58901fc57b..155bb3d5aa7 100644
--- a/locale/en/common.po
+++ b/locale/en/common.po
@@ -751,11 +751,17 @@ msgstr "Refresh"
msgid "common.related"
msgstr "Related"
-msgid "common.reminder"
-msgstr "Reminder"
+msgid "common.submit.reminder"
+msgstr "Review Reminder"
-msgid "common.reminded.date"
-msgstr "Reminded: {$dateReminded}"
+msgid "common.invite.reminder"
+msgstr "Invite Reminder"
+
+msgid "common.invite.reminded.date"
+msgstr "Invite Reminded: {$dateReminded}"
+
+msgid "common.submit.reminded.date"
+msgstr "Submit Reminded: {$dateReminded}"
msgid "common.remote"
msgstr "Remote"
diff --git a/locale/es/common.po b/locale/es/common.po
index 3ca481b426c..07c8ddcca89 100644
--- a/locale/es/common.po
+++ b/locale/es/common.po
@@ -748,10 +748,10 @@ msgstr "Recargar"
msgid "common.related"
msgstr "Relacionado"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Recordatorio"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Recordado: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/eu/common.po b/locale/eu/common.po
index 9318c6a315b..f156cdc5319 100644
--- a/locale/eu/common.po
+++ b/locale/eu/common.po
@@ -727,10 +727,10 @@ msgstr "Freskatu"
msgid "common.related"
msgstr "Erlazionatua"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Gogorarazlea"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr ""
msgid "common.remote"
diff --git a/locale/fa/common.po b/locale/fa/common.po
index d193ff3e905..0726a3e4941 100644
--- a/locale/fa/common.po
+++ b/locale/fa/common.po
@@ -728,10 +728,10 @@ msgstr "بارگذاری مجدد صفحه"
msgid "common.related"
msgstr "موارد مربوطه"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "یادآوری"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "یادآوری شده در تاریخ: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/fi/common.po b/locale/fi/common.po
index edd7cc60f44..bbfa34b5a3d 100644
--- a/locale/fi/common.po
+++ b/locale/fi/common.po
@@ -743,10 +743,10 @@ msgstr "Päivitä"
msgid "common.related"
msgstr "Liittyvä"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Muistutus"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Muistutettu: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/fr_CA/common.po b/locale/fr_CA/common.po
index 2505d3da52c..b06f58d8d04 100644
--- a/locale/fr_CA/common.po
+++ b/locale/fr_CA/common.po
@@ -757,11 +757,17 @@ msgstr "Rafraîchir"
msgid "common.related"
msgstr "Connexe"
-msgid "common.reminder"
-msgstr "Rappel"
+msgid "common.submit.reminder"
+msgstr "Rappel de l'évaluation"
-msgid "common.reminded.date"
-msgstr "Rappel fait le : {$dateReminded}"
+msgid "common.invite.reminder"
+msgstr "Rappel de l'invitation"
+
+msgid "common.invite.reminded.date"
+msgstr "Rappel de l'invitation fait le : {$dateReminded}"
+
+msgid "common.submit.reminded.date"
+msgstr "Rappel de l'évaluation fait le : {$dateReminded}"
msgid "common.remote"
msgstr "À distance"
diff --git a/locale/fr_FR/common.po b/locale/fr_FR/common.po
index 6e554b60f2d..474e3787ff9 100644
--- a/locale/fr_FR/common.po
+++ b/locale/fr_FR/common.po
@@ -752,10 +752,10 @@ msgstr "Rafraîchir"
msgid "common.related"
msgstr "Connexe"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Rappel"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Rappelé : {$dateReminded}"
msgid "common.remote"
diff --git a/locale/gd/common.po b/locale/gd/common.po
index d8fc2260cc0..ce3ab9a9b11 100644
--- a/locale/gd/common.po
+++ b/locale/gd/common.po
@@ -715,10 +715,10 @@ msgstr "Ath-nuadhaich"
msgid "common.related"
msgstr "Co-cheangailte"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Cuimhneachan"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Cuimhneachan: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/gl/common.po b/locale/gl/common.po
index 13c3cd3dead..4afc45fa094 100644
--- a/locale/gl/common.po
+++ b/locale/gl/common.po
@@ -736,10 +736,10 @@ msgstr "Recargar"
msgid "common.related"
msgstr "Relacionado"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Recordatorio"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Lembrado: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/hr/common.po b/locale/hr/common.po
index 7bc3ed312c2..6ab7dbdd3c2 100644
--- a/locale/hr/common.po
+++ b/locale/hr/common.po
@@ -745,10 +745,10 @@ msgstr "Ažurirati"
msgid "common.related"
msgstr "Povezano"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Podsjetnik"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Podsjetnik: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/hu/common.po b/locale/hu/common.po
index 2025c8b5b39..c10a022ecaf 100644
--- a/locale/hu/common.po
+++ b/locale/hu/common.po
@@ -747,10 +747,10 @@ msgstr "Frissítés"
msgid "common.related"
msgstr "Összefüggő"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Emlékeztető"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Emlékeztető: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/hy/common.po b/locale/hy/common.po
index 5df678cf0c4..adfb49d3168 100644
--- a/locale/hy/common.po
+++ b/locale/hy/common.po
@@ -745,10 +745,10 @@ msgstr "Թարմացնել"
msgid "common.related"
msgstr "Կապ ունեցող"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Հիշեցնող"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Հիշեցում: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/id/common.po b/locale/id/common.po
index 2ba9f6e6422..97a8bcc5734 100644
--- a/locale/id/common.po
+++ b/locale/id/common.po
@@ -742,10 +742,10 @@ msgstr "Segarkan"
msgid "common.related"
msgstr "Terkait"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Pengingat"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Diingatkan: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/is/common.po b/locale/is/common.po
index 619a978ae98..f4390e7606b 100644
--- a/locale/is/common.po
+++ b/locale/is/common.po
@@ -741,10 +741,10 @@ msgstr "Endurnýja"
msgid "common.related"
msgstr "Tengt"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Áminning"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Minnt á: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/it/common.po b/locale/it/common.po
index 18f6df082de..18521a010bc 100644
--- a/locale/it/common.po
+++ b/locale/it/common.po
@@ -747,10 +747,10 @@ msgstr "Aggiorna"
msgid "common.related"
msgstr "Collegato"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Promemoria"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Data invio promemoria: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/ja/common.po b/locale/ja/common.po
index 8a76040b67a..acd0305aafd 100644
--- a/locale/ja/common.po
+++ b/locale/ja/common.po
@@ -738,10 +738,10 @@ msgstr "再読込"
msgid "common.related"
msgstr "関連"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "リマインド"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "リマインド日: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/ka/common.po b/locale/ka/common.po
index 50e8b513ffa..e0c59d1aaa2 100644
--- a/locale/ka/common.po
+++ b/locale/ka/common.po
@@ -742,10 +742,10 @@ msgstr "განახლება"
msgid "common.related"
msgstr "მსგავსი"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "შემხსენებელი"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "შეხსენებული: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/kk/common.po b/locale/kk/common.po
index b6beada36b3..b349e303a52 100644
--- a/locale/kk/common.po
+++ b/locale/kk/common.po
@@ -741,10 +741,10 @@ msgstr "Жаңарту"
msgid "common.related"
msgstr "Байланысты"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Еске салу"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Ескертілді: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/lv/common.po b/locale/lv/common.po
index 659b026d8ca..1b3d9a0f352 100644
--- a/locale/lv/common.po
+++ b/locale/lv/common.po
@@ -610,10 +610,10 @@ msgstr "Atsvaidzināt"
msgid "common.related"
msgstr "Saistītais"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Atgādinājums"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Atgādināts: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/mk/common.po b/locale/mk/common.po
index 522ccea21fd..83961d841f6 100644
--- a/locale/mk/common.po
+++ b/locale/mk/common.po
@@ -746,10 +746,10 @@ msgstr "Освежи"
msgid "common.related"
msgstr "Поверано"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Потсетник"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Подсетен: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/ms/common.po b/locale/ms/common.po
index 85f250956bf..75d761b49f1 100644
--- a/locale/ms/common.po
+++ b/locale/ms/common.po
@@ -741,10 +741,10 @@ msgstr "Segarkan semula"
msgid "common.related"
msgstr "Berkaitan"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Peringatan"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Diingatkan: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/nb/common.po b/locale/nb/common.po
index 30432e94214..c80787afe1e 100644
--- a/locale/nb/common.po
+++ b/locale/nb/common.po
@@ -742,10 +742,10 @@ msgstr "Oppdater"
msgid "common.related"
msgstr "Relaterte"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Påminnelse"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Påminnet: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/nl/common.po b/locale/nl/common.po
index df1e605d877..6e1a8246079 100644
--- a/locale/nl/common.po
+++ b/locale/nl/common.po
@@ -745,10 +745,10 @@ msgstr "Verversen"
msgid "common.related"
msgstr "Verwant"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Herinnering"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Datum van herinnering: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/pl/common.po b/locale/pl/common.po
index 8780993d05b..fb473cb352d 100644
--- a/locale/pl/common.po
+++ b/locale/pl/common.po
@@ -742,10 +742,10 @@ msgstr "Odśwież"
msgid "common.related"
msgstr "Powiązane"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Przypomnienie"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Powiadomiony: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/pt_BR/common.po b/locale/pt_BR/common.po
index 22011d577ee..cddc93cb1e9 100644
--- a/locale/pt_BR/common.po
+++ b/locale/pt_BR/common.po
@@ -745,10 +745,10 @@ msgstr "Atualizar"
msgid "common.related"
msgstr "Relacionado"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Lembrete"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Lembrado: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/pt_PT/common.po b/locale/pt_PT/common.po
index c2dac9543b9..747d8044fe7 100644
--- a/locale/pt_PT/common.po
+++ b/locale/pt_PT/common.po
@@ -745,10 +745,10 @@ msgstr "Atualizar"
msgid "common.related"
msgstr "Relacionado"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Lembrete"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Data lembrete: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/ro/common.po b/locale/ro/common.po
index e33732b6733..2d5888ff11c 100644
--- a/locale/ro/common.po
+++ b/locale/ro/common.po
@@ -743,10 +743,10 @@ msgstr "Reîmprospătare"
msgid "common.related"
msgstr "Legat de"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Reamintire"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Reamintire: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/ru/common.po b/locale/ru/common.po
index 7b464298794..c5555989abd 100644
--- a/locale/ru/common.po
+++ b/locale/ru/common.po
@@ -745,10 +745,10 @@ msgstr "Обновить"
msgid "common.related"
msgstr "Связанные"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Напоминание"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Отправлено напоминание: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/sl/common.po b/locale/sl/common.po
index df072f535df..5808d4fa6d5 100644
--- a/locale/sl/common.po
+++ b/locale/sl/common.po
@@ -743,10 +743,10 @@ msgstr "Osveži"
msgid "common.related"
msgstr "Soroden"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Opomnik"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Opomnik: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/sr@cyrillic/common.po b/locale/sr@cyrillic/common.po
index 9c744c8557f..c93ad6b592f 100644
--- a/locale/sr@cyrillic/common.po
+++ b/locale/sr@cyrillic/common.po
@@ -732,10 +732,10 @@ msgstr "Освежи"
msgid "common.related"
msgstr "Повезано"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Подсетник"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Подсећен: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/sr@latin/common.po b/locale/sr@latin/common.po
index 6b0fb67a0b4..052484accb9 100644
--- a/locale/sr@latin/common.po
+++ b/locale/sr@latin/common.po
@@ -731,10 +731,10 @@ msgstr "Osveži"
msgid "common.related"
msgstr "Povezano"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Podsetnik"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Podsećen: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/sv/common.po b/locale/sv/common.po
index b3e1291f36f..65d18ae6c00 100644
--- a/locale/sv/common.po
+++ b/locale/sv/common.po
@@ -744,10 +744,10 @@ msgstr "Uppdatera"
msgid "common.related"
msgstr "Relaterad"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Påminnelse"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Påmind: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/tr/common.po b/locale/tr/common.po
index bc73bd9ba50..f4f5b63136a 100644
--- a/locale/tr/common.po
+++ b/locale/tr/common.po
@@ -740,10 +740,10 @@ msgstr "Yenile"
msgid "common.related"
msgstr "İlgili"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Hatırlatma"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Hatırlatıldı: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/uk/common.po b/locale/uk/common.po
index d25f2b565cc..5cae6b1c336 100644
--- a/locale/uk/common.po
+++ b/locale/uk/common.po
@@ -744,10 +744,10 @@ msgstr "Оновити"
msgid "common.related"
msgstr "Пов'язані"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Нагадування"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Нагадування: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/vi/common.po b/locale/vi/common.po
index faecbf1db4e..492a6a3cd37 100644
--- a/locale/vi/common.po
+++ b/locale/vi/common.po
@@ -742,10 +742,10 @@ msgstr "Làm tươi"
msgid "common.related"
msgstr "Liên quan với"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "Nhắc nhở"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "Ngày nhắc nhở: {$dateReminded}"
msgid "common.remote"
diff --git a/locale/zh_CN/common.po b/locale/zh_CN/common.po
index ff1e4699a4e..a98b1adc9f1 100644
--- a/locale/zh_CN/common.po
+++ b/locale/zh_CN/common.po
@@ -734,10 +734,10 @@ msgstr "刷新"
msgid "common.related"
msgstr "相关"
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr "提醒"
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr "已提醒:{$dateReminded}"
msgid "common.remote"
diff --git a/locale/zh_Hant/common.po b/locale/zh_Hant/common.po
index cb4fd0d3a41..07f9f7088ef 100644
--- a/locale/zh_Hant/common.po
+++ b/locale/zh_Hant/common.po
@@ -704,10 +704,10 @@ msgstr ""
msgid "common.related"
msgstr ""
-msgid "common.reminder"
+msgid "common.submit.reminder"
msgstr ""
-msgid "common.reminded.date"
+msgid "common.submit.reminded.date"
msgstr ""
msgid "common.remote"
diff --git a/schemas/context.json b/schemas/context.json
index 979283a531f..21c48e7b89b 100644
--- a/schemas/context.json
+++ b/schemas/context.json
@@ -512,6 +512,14 @@
"min:0"
]
},
+ "numOccurrencesForInviteReminder": {
+ "type": "integer",
+ "default": 1,
+ "validation": [
+ "nullable",
+ "min:1"
+ ]
+ },
"numDaysBeforeSubmitReminder": {
"type": "integer",
"validation": [
@@ -519,6 +527,14 @@
"min:0"
]
},
+ "numOccurrencesForSubmitReminder": {
+ "type": "integer",
+ "default": 1,
+ "validation": [
+ "nullable",
+ "min:1"
+ ]
+ },
"numPageLinks": {
"type": "integer",
"default": 10,
diff --git a/schemas/reviewAssignment.json b/schemas/reviewAssignment.json
index 607d44b00bf..6659aefd039 100644
--- a/schemas/reviewAssignment.json
+++ b/schemas/reviewAssignment.json
@@ -106,15 +106,36 @@
],
"apiSummary": true
},
- "dateReminded": {
+ "dateInviteReminded": {
"type": "string",
- "description": "Date the reviewer was reminded about the assignment",
+ "description": "Date the reviewer was reminded about the response",
"validation": [
"date:Y-m-d H:i:s",
"nullable"
],
"apiSummary": true
},
+ "countInviteReminder": {
+ "type": "integer",
+ "default": 0,
+ "description": "Number of times the reviewer was reminded for the response",
+ "apiSummary": true
+ },
+ "dateSubmitReminded": {
+ "type": "string",
+ "description": "Date the reviewer was reminded about the review",
+ "validation": [
+ "date:Y-m-d H:i:s",
+ "nullable"
+ ],
+ "apiSummary": true
+ },
+ "countSubmitReminder": {
+ "type": "integer",
+ "default": 0,
+ "description": "Number of times the reviewer was reminded for the review",
+ "apiSummary": true
+ },
"dateResponseDue": {
"type": "string",
"description": "Date until which the response from reviewer is expected",
diff --git a/templates/controllers/grid/users/reviewer/readReview.tpl b/templates/controllers/grid/users/reviewer/readReview.tpl
index 5a19a8e0ac5..c0342be53b8 100644
--- a/templates/controllers/grid/users/reviewer/readReview.tpl
+++ b/templates/controllers/grid/users/reviewer/readReview.tpl
@@ -66,8 +66,10 @@
{translate key="common.completed.date" dateCompleted=$reviewAssignment->getDateCompleted()|date_format:$datetimeFormatShort}
{elseif $reviewAssignment->getDateConfirmed()}
{translate key="common.confirmed.date" dateConfirmed=$reviewAssignment->getDateConfirmed()|date_format:$datetimeFormatShort}
- {elseif $reviewAssignment->getDateReminded()}
- {translate key="common.reminded.date" dateReminded=$reviewAssignment->getDateReminded()|date_format:$datetimeFormatShort}
+ {elseif $reviewAssignment->getDateInviteReminded()}
+ {translate key="common.invite.reminded.date" dateReminded=$reviewAssignment->getDateInviteReminded()|date_format:$datetimeFormatShort}
+ {elseif $reviewAssignment->getDateSubmitReminded()}
+ {translate key="common.submit.reminded.date" dateReminded=$reviewAssignment->getDateSubmitReminded()|date_format:$datetimeFormatShort}
{elseif $reviewAssignment->getDateNotified()}
{translate key="common.notified.date" dateNotified=$reviewAssignment->getDateNotified()|date_format:$datetimeFormatShort}
{elseif $reviewAssignment->getDateAssigned()}
diff --git a/xml/schema/reviews.xml b/xml/schema/reviews.xml
index 40707c1ae7a..3381956fd3b 100644
--- a/xml/schema/reviews.xml
+++ b/xml/schema/reviews.xml
@@ -53,7 +53,7 @@
-
+