Skip to content

Commit 924e208

Browse files
committed
#4789 refactored cauculating due dates to traits with added validations
1 parent bb5b711 commit 924e208

File tree

4 files changed

+83
-23
lines changed

4 files changed

+83
-23
lines changed

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

+14-1
Original file line numberDiff line numberDiff line change
@@ -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,6 +34,8 @@
3334

3435
class ResendRequestReviewerForm extends ReviewerNotifyActionForm
3536
{
37+
use HasReviewDueDate;
38+
3639
/**
3740
* Constructor
3841
*/
@@ -48,6 +51,16 @@ public function __construct(ReviewAssignment $reviewAssignment, ReviewRound $rev
4851
// Validation checks for this form
4952
$this->addCheck(new \PKP\form\validation\FormValidator($this, 'responseDueDate', 'required', 'editor.review.errorAddingReviewer'));
5053
$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+
);
5164
}
5265

5366
/**
@@ -73,7 +86,7 @@ public function initData()
7386
{
7487
parent::initData();
7588

76-
[$reviewDueDate, $responseDueDate] = ReviewerForm::getDueDates(Application::get()->getRequest()->getContext());
89+
[$reviewDueDate, $responseDueDate] = $this->getDueDates(Application::get()->getRequest()->getContext());
7790

7891
$this->setData('responseDueDate', $responseDueDate);
7992
$this->setData('reviewDueDate', $reviewDueDate);

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

+5-22
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

@@ -88,26 +91,6 @@ public function __construct($submission, $reviewRound)
8891
$this->addCheck(new \PKP\form\validation\FormValidatorCSRF($this));
8992
}
9093

91-
/**
92-
* Get the review submit and response due dates
93-
*/
94-
public static function getDueDates(Context $context): array
95-
{
96-
$numWeeks = (int) $context->getData('numWeeksPerReview');
97-
if ($numWeeks <= 0) {
98-
$numWeeks = 4;
99-
}
100-
$reviewDueDate = strtotime('+' . $numWeeks . ' week');
101-
102-
$numWeeks = (int) $context->getData('numWeeksPerResponse');
103-
if ($numWeeks <= 0) {
104-
$numWeeks = 3;
105-
}
106-
$responseDueDate = strtotime('+' . $numWeeks . ' week');
107-
108-
return [$reviewDueDate, $responseDueDate];
109-
}
110-
11194
//
11295
// Getters and Setters
11396
//
@@ -231,7 +214,7 @@ public function initData()
231214
$reviewFormId = null;
232215
}
233216

234-
[$reviewDueDate, $responseDueDate] = static::getDueDates($context);
217+
[$reviewDueDate, $responseDueDate] = $this->getDueDates($context);
235218

236219
// Get the currently selected reviewer selection type to show the correct tab if we're re-displaying the form
237220
$selectionType = (int) $request->getUserVar('selectionType');
@@ -267,7 +250,7 @@ public function fetch($request, $template = null, $display = false)
267250
$reviewFormDao = DAORegistry::getDAO('ReviewFormDAO'); /** @var ReviewFormDAO $reviewFormDao */
268251
$reviewFormsIterator = $reviewFormDao->getActiveByAssocId(Application::getContextAssocType(), $context->getId());
269252
$reviewForms = [];
270-
while ($reviewForm = $reviewFormsIterator->next()) {
253+
while ($reviewForm = $reviewFormsIterator->next()) { /** @var \PKP\reviewForm\ReviewForm $reviewForm */
271254
$reviewForms[$reviewForm->getId()] = $reviewForm->getLocalizedTitle();
272255
}
273256

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 RESPONSE_RESPONSE_DEFAULT_DUE_WEEKS = 4;
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::RESPONSE_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+
}

0 commit comments

Comments
 (0)