From 3b0796e49987e1208a14ee8c5aabba653ee46ee7 Mon Sep 17 00:00:00 2001 From: Julian Date: Wed, 24 Aug 2016 10:59:05 +1200 Subject: [PATCH] functions to check if reminder should go ahead --- code/extensions/SiteTreeContentReview.php | 77 +++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/code/extensions/SiteTreeContentReview.php b/code/extensions/SiteTreeContentReview.php index 472b543..f8f209b 100644 --- a/code/extensions/SiteTreeContentReview.php +++ b/code/extensions/SiteTreeContentReview.php @@ -450,6 +450,83 @@ class SiteTreeContentReview extends DataExtension implements PermissionProvider return (bool) $nextDate; } + + public function canRemind(Member $member = null) { + if (!$this->owner->obj("NextReviewDate")->exists()) { + return false; + } + + // If today is not the date of the first reminder, return false + $config = SiteConfig::current_site_config(); + $firstReview = $config->FirstReviewDaysBefore; + $now = SS_Datetime::now(); + $notifyDate1 = date('Y-m-d', strtotime($this->owner->NextReviewDate . ' -' . $firstReview . ' days')); + + // If today is not the first reminder date + if (!$notifyDate1 == $now->URLDate()) { + return false; + } + + $options = $this->getOptions(); + + if (!$options) { + return false; + } elseif ($options->OwnerGroups()->count() == 0 && $options->OwnerUsers()->count() == 0) { + return false; + } + + if (!$member) { + return true; + } + + if ($member->inGroups($options->OwnerGroups())) { + return true; + } + + if ($options->OwnerUsers()->find("ID", $member->ID)) { + return true; + } + + return false; + } + + public function canRemindAgain(Member $member = null) { + if (!$this->owner->obj("NextReviewDate")->exists()) { + return false; + } + + // If today is not the date of the second reminder, return false + $config = SiteConfig::current_site_config(); + $secondReview = $config->SecondReviewDaysBefore; + $now = SS_Datetime::now(); + $notifyDate2 = date('Y-m-d', strtotime($this->owner->NextReviewDate . ' -' . $secondReview . ' days')); + + if (!$notifyDate2 == $now->URLDate()) { + return false; + } + + $options = $this->getOptions(); + + if (!$options) { + return false; + } elseif ($options->OwnerGroups()->count() == 0 && $options->OwnerUsers()->count() == 0) { + return false; + } + + if (!$member) { + return true; + } + + if ($member->inGroups($options->OwnerGroups())) { + return true; + } + + if ($options->OwnerUsers()->find("ID", $member->ID)) { + return true; + } + + return false; + } /** * Check if a review is due by a member for this owner.