Skip to content

Commit ba75bb8

Browse files
authored
Merge pull request #9896 from touhidurabir/i4789_main_update
#4789 Due date fields added for declined review request resending
2 parents 0476029 + 1f6591c commit ba75bb8

File tree

5 files changed

+125
-16
lines changed

5 files changed

+125
-16
lines changed

controllers/grid/users/reviewer/form/ResendRequestReviewerForm.php

+51-4
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
/**
33
* @file controllers/grid/users/reviewer/form/ResendRequestReviewerForm.php
44
*
5-
* Copyright (c) 2014-2022 Simon Fraser University
6-
* Copyright (c) 2003-2022 John Willinsky
5+
* Copyright (c) 2014-2024 Simon Fraser University
6+
* Copyright (c) 2003-2024 John Willinsky
77
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
88
*
99
* @class ResendRequestReviewerForm
@@ -21,6 +21,7 @@
2121
use APP\notification\NotificationManager;
2222
use APP\submission\Submission;
2323
use PKP\context\Context;
24+
use PKP\controllers\grid\users\reviewer\form\traits\HasReviewDueDate;
2425
use PKP\core\Core;
2526
use PKP\core\PKPApplication;
2627
use PKP\log\event\PKPSubmissionEventLogEntry;
@@ -33,9 +34,10 @@
3334

3435
class ResendRequestReviewerForm extends ReviewerNotifyActionForm
3536
{
37+
use HasReviewDueDate;
38+
3639
/**
3740
* Constructor
38-
*
3941
*/
4042
public function __construct(ReviewAssignment $reviewAssignment, ReviewRound $reviewRound, Submission $submission)
4143
{
@@ -45,21 +47,64 @@ public function __construct(ReviewAssignment $reviewAssignment, ReviewRound $rev
4547
$submission,
4648
'controllers/grid/users/reviewer/form/resendRequestReviewerForm.tpl'
4749
);
50+
51+
// Validation checks for this form
52+
$this->addCheck(new \PKP\form\validation\FormValidator($this, 'responseDueDate', 'required', 'editor.review.errorAddingReviewer'));
53+
$this->addCheck(new \PKP\form\validation\FormValidator($this, 'reviewDueDate', 'required', 'editor.review.errorAddingReviewer'));
54+
$this->addCheck(
55+
new \PKP\form\validation\FormValidatorDateCompare(
56+
$this,
57+
'reviewDueDate',
58+
\Carbon\Carbon::parse(Application::get()->getRequest()->getUserVar('responseDueDate')),
59+
\PKP\validation\enums\DateComparisonRule::GREATER_OR_EQUAL,
60+
'required',
61+
'editor.review.errorAddingReviewer.dateValidationFailed'
62+
)
63+
);
4864
}
4965

66+
/**
67+
* @copydoc \PKP\controllers\grid\users\reviewer\form\ReviewerNotifyActionForm::getMailable()
68+
*/
5069
protected function getMailable(Context $context, Submission $submission, ReviewAssignment $reviewAssignment): Mailable
5170
{
5271
return new ReviewerResendRequest($context, $submission, $reviewAssignment);
5372
}
5473

5574
/**
56-
* @copydoc ReviewerNotifyActionForm::getEmailKey()
75+
* @copydoc \PKP\controllers\grid\users\reviewer\form\ReviewerNotifyActionForm::getEmailKey()
5776
*/
5877
protected function getEmailKey()
5978
{
6079
return 'REVIEW_RESEND_REQUEST';
6180
}
6281

82+
/**
83+
* @copydoc \PKP\controllers\grid\users\reviewer\form\ReviewerNotifyActionForm::initData()
84+
*/
85+
public function initData()
86+
{
87+
parent::initData();
88+
89+
[$reviewDueDate, $responseDueDate] = $this->getDueDates(Application::get()->getRequest()->getContext());
90+
91+
$this->setData('responseDueDate', $responseDueDate);
92+
$this->setData('reviewDueDate', $reviewDueDate);
93+
}
94+
95+
/**
96+
* @copydoc \PKP\controllers\grid\users\reviewer\form\ReviewerNotifyActionForm::readInputData()
97+
*/
98+
public function readInputData()
99+
{
100+
parent::readInputData();
101+
102+
$this->readUserVars([
103+
'responseDueDate',
104+
'reviewDueDate',
105+
]);
106+
}
107+
63108
/**
64109
* @copydoc Form::execute()
65110
*
@@ -84,6 +129,8 @@ public function execute(...$functionArgs)
84129
'declined' => false,
85130
'requestResent' => true,
86131
'dateConfirmed' => null,
132+
'dateDue' => $this->getData('reviewDueDate'), // Set the review due date
133+
'dateResponseDue' => $this->getData('responseDueDate'), // Set the response due date
87134
]);
88135

89136
// Stamp the modification date

controllers/grid/users/reviewer/form/ReviewerForm.php

+5-12
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
use APP\submission\Submission;
2525
use APP\template\TemplateManager;
2626
use PKP\context\Context;
27+
use PKP\controllers\grid\users\reviewer\form\traits\HasReviewDueDate;
2728
use PKP\controllers\grid\users\reviewer\PKPReviewerGridHandler;
2829
use PKP\core\Core;
2930
use PKP\db\DAORegistry;
@@ -45,6 +46,8 @@
4546

4647
class ReviewerForm extends Form
4748
{
49+
use HasReviewDueDate;
50+
4851
/** @var Submission The submission associated with the review assignment */
4952
public $_submission;
5053

@@ -211,17 +214,7 @@ public function initData()
211214
$reviewFormId = null;
212215
}
213216

214-
$numWeeks = (int) $context->getData('numWeeksPerReview');
215-
if ($numWeeks <= 0) {
216-
$numWeeks = 4;
217-
}
218-
$reviewDueDate = strtotime('+' . $numWeeks . ' week');
219-
220-
$numWeeks = (int) $context->getData('numWeeksPerResponse');
221-
if ($numWeeks <= 0) {
222-
$numWeeks = 3;
223-
}
224-
$responseDueDate = strtotime('+' . $numWeeks . ' week');
217+
[$reviewDueDate, $responseDueDate] = $this->getDueDates($context);
225218

226219
// Get the currently selected reviewer selection type to show the correct tab if we're re-displaying the form
227220
$selectionType = (int) $request->getUserVar('selectionType');
@@ -257,7 +250,7 @@ public function fetch($request, $template = null, $display = false)
257250
$reviewFormDao = DAORegistry::getDAO('ReviewFormDAO'); /** @var ReviewFormDAO $reviewFormDao */
258251
$reviewFormsIterator = $reviewFormDao->getActiveByAssocId(Application::getContextAssocType(), $context->getId());
259252
$reviewForms = [];
260-
while ($reviewForm = $reviewFormsIterator->next()) {
253+
while ($reviewForm = $reviewFormsIterator->next()) { /** @var \PKP\reviewForm\ReviewForm $reviewForm */
261254
$reviewForms[$reviewForm->getId()] = $reviewForm->getLocalizedTitle();
262255
}
263256

controllers/grid/users/reviewer/form/ReviewerNotifyActionForm.php

+1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public function __construct($reviewAssignment, $reviewRound, $submission, $templ
5050
$this->setReviewRound($reviewRound);
5151
$this->setSubmission($submission);
5252

53+
$this->addCheck(new \PKP\form\validation\FormValidatorPost($this));
5354
$this->addCheck(new \PKP\form\validation\FormValidatorCSRF($this));
5455

5556
parent::__construct($template);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<?php
2+
3+
/**
4+
* @file controllers/grid/users/reviewer/form/traits/HasReviewDueDate.php
5+
*
6+
* Copyright (c) 2024 Simon Fraser University
7+
* Copyright (c) 2024 John Willinsky
8+
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
9+
*
10+
* @class HasReviewDueDate
11+
*
12+
* @brief Helper trait to get the review submit and/or response due dates
13+
*/
14+
15+
namespace PKP\controllers\grid\users\reviewer\form\traits;
16+
17+
use Carbon\Carbon;
18+
use PKP\context\Context;
19+
20+
trait HasReviewDueDate
21+
{
22+
public const REVIEW_SUBMIT_DEFAULT_DUE_WEEKS = 4;
23+
public const REVIEW_RESPONSE_DEFAULT_DUE_WEEKS = 3;
24+
25+
/**
26+
* Get the review submit due dates
27+
*/
28+
public function getReviewSubmitDueDate(Context $context): Carbon
29+
{
30+
$numWeeks = (int) $context->getData('numWeeksPerReview');
31+
32+
if ($numWeeks <= 0) {
33+
$numWeeks = static::REVIEW_SUBMIT_DEFAULT_DUE_WEEKS;
34+
}
35+
36+
return Carbon::today()->endOfDay()->addWeeks($numWeeks);
37+
}
38+
39+
/**
40+
* Get the review response due dates
41+
*/
42+
public function getReviewResponseDueDate(Context $context): Carbon
43+
{
44+
$numWeeks = (int) $context->getData('numWeeksPerResponse');
45+
46+
if ($numWeeks <= 0) {
47+
$numWeeks = static::REVIEW_RESPONSE_DEFAULT_DUE_WEEKS;
48+
}
49+
50+
return Carbon::today()->endOfDay()->addWeeks($numWeeks);
51+
}
52+
53+
/**
54+
* Get the review submit and response due dates
55+
*/
56+
public function getDueDates(Context $context): array
57+
{
58+
return [
59+
$this->getReviewSubmitDueDate($context)->getTimestamp(),
60+
$this->getReviewResponseDueDate($context)->getTimestamp(),
61+
];
62+
}
63+
}

templates/controllers/grid/users/reviewer/form/resendRequestReviewerForm.tpl

+5
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@
3434
{fbvElement type="checkbox" id="skipEmail" name="skipEmail" label="editor.review.skipEmail"}
3535
{/fbvFormSection}
3636

37+
{fbvFormSection title="editor.review.importantDates"}
38+
{fbvElement type="text" id="responseDueDate" name="responseDueDate" label="submission.task.responseDueDate" value=$responseDueDate inline=true size=$fbvStyles.size.MEDIUM class="datepicker"}
39+
{fbvElement type="text" id="reviewDueDate" name="reviewDueDate" label="editor.review.reviewDueDate" value=$reviewDueDate inline=true size=$fbvStyles.size.MEDIUM class="datepicker"}
40+
{/fbvFormSection}
41+
3742
{fbvFormButtons submitText="editor.review.resendRequestReviewer"}
3843
</form>
3944

0 commit comments

Comments
 (0)