diff --git a/src/Extensions/SiteTreeContentReview.php b/src/Extensions/SiteTreeContentReview.php index 42741d1..a1ede54 100644 --- a/src/Extensions/SiteTreeContentReview.php +++ b/src/Extensions/SiteTreeContentReview.php @@ -211,7 +211,7 @@ class SiteTreeContentReview extends DataExtension implements PermissionProvider } // Failover to check on ReviewPeriodDays + LastEdited - $nextReviewUnixSec = strtotime('now + ' . $options->ReviewPeriodDays . ' days'); + $nextReviewUnixSec = strtotime(' + ' . $options->ReviewPeriodDays . ' days', DBDatetime::now()->getTimestamp()); $date = DBDate::create('NextReviewDate'); $date->setValue($nextReviewUnixSec); @@ -457,17 +457,20 @@ class SiteTreeContentReview extends DataExtension implements PermissionProvider */ public function advanceReviewDate() { - $nextDate = false; + $nextDateTimestamp = false; $options = $this->getOptions(); if ($options && $options->ReviewPeriodDays) { - $nextDateTimestamp = strtotime('now + ' . $options->ReviewPeriodDays . ' days'); + $nextDateTimestamp = strtotime( + ' + ' . $options->ReviewPeriodDays . ' days', + DBDatetime::now()->getTimestamp() + ); $this->owner->NextReviewDate = DBDate::create()->setValue($nextDateTimestamp)->Format('y-MM-dd'); $this->owner->write(); } - return (bool) $nextDate; + return (bool) $nextDateTimestamp; } /** @@ -554,7 +557,10 @@ class SiteTreeContentReview extends DataExtension implements PermissionProvider // parent page change its review period // && !$this->owner->isChanged('ContentReviewType', 2) if ($this->owner->isChanged('ReviewPeriodDays', 2)) { - $nextReviewUnixSec = strtotime('now + ' . $this->owner->ReviewPeriodDays . ' days'); + $nextReviewUnixSec = strtotime( + ' + ' . $this->owner->ReviewPeriodDays . ' days', + DBDatetime::now()->getTimestamp() + ); $this->owner->NextReviewDate = DBDate::create()->setValue($nextReviewUnixSec)->Format('y-MM-dd'); } } diff --git a/src/Reports/PagesDueForReviewReport.php b/src/Reports/PagesDueForReviewReport.php index 57b27d1..52d109f 100644 --- a/src/Reports/PagesDueForReviewReport.php +++ b/src/Reports/PagesDueForReviewReport.php @@ -161,21 +161,36 @@ class PagesDueForReviewReport extends Report if (empty($params['ReviewDateBefore']) && empty($params['ReviewDateAfter'])) { // If there's no review dates set, default to all pages due for review now - $nextReviewUnixSec = strtotime(' + 1 day', DBDatetime::now()->format('U')); - $records = $records->where(sprintf('"NextReviewDate" < \'%s\'', date('Y-m-d', $nextReviewUnixSec))); + $records = $records->where( + sprintf( + '"NextReviewDate" < \'%s\'', + DBDatetime::now()->Format('y-MM-dd') + ) + ); } else { // Review date before if (!empty($params['ReviewDateBefore'])) { // TODO Get value from DateField->dataValue() once we have access to form elements here - $nextReviewUnixSec = strtotime(' + 1 day', strtotime($params['ReviewDateBefore'])); - $records = $records->where(sprintf("\"NextReviewDate\" < '%s'", date('Y-m-d', $nextReviewUnixSec))); + $nextReviewUnixSec = strtotime( + ' + 1 day', + strtotime($params['ReviewDateBefore']) + ); + $records = $records->where( + sprintf( + "\"NextReviewDate\" < '%s'", + DBDatetime::create()->setValue($nextReviewUnixSec)->Format('y-MM-dd') + ) + ); } // Review date after if (!empty($params['ReviewDateAfter'])) { // TODO Get value from DateField->dataValue() once we have access to form elements here $records = $records->where( - sprintf("\"NextReviewDate\" >= '%s'", date('Y-m-d', strtotime($params['ReviewDateAfter']))) + sprintf( + "\"NextReviewDate\" >= '%s'", + DBDatetime::create()->setValue(strtotime($params['ReviewDateAfter']))->Format('y-MM-dd') + ) ); } } diff --git a/templates/SilverStripe/ContentReview/ContentReviewEmail.ss b/templates/SilverStripe/ContentReview/ContentReviewEmail.ss index 4ce69f2..bdfb389 100644 --- a/templates/SilverStripe/ContentReview/ContentReviewEmail.ss +++ b/templates/SilverStripe/ContentReview/ContentReviewEmail.ss @@ -9,11 +9,11 @@ $EmailBody - <% loop Pages %> + <% loop $Pages %> $Title <%t ContentReviewEmails.REVIEWPAGELINK 'Review the page in the CMS' %>
- <%t ContentReviewEmails.VIEWPUBLISHEDLINK View this page on the website' %> + <%t ContentReviewEmails.VIEWPUBLISHEDLINK 'View this page on the website' %> <% end_loop %> diff --git a/tests/ContentReviewCMSPageEditControllerTest.php b/tests/ContentReviewCMSPageEditControllerTest.php index 4e8bd88..cd0f0bc 100644 --- a/tests/ContentReviewCMSPageEditControllerTest.php +++ b/tests/ContentReviewCMSPageEditControllerTest.php @@ -9,6 +9,7 @@ use SilverStripe\ContentReview\Extensions\SiteTreeContentReview; use SilverStripe\ContentReview\Extensions\ContentReviewOwner; use SilverStripe\ContentReview\Extensions\ContentReviewCMSExtension; use SilverStripe\ContentReview\Extensions\ContentReviewDefaultSettings; +use SilverStripe\Control\HTTPRequest; use SilverStripe\Control\HTTPResponse_Exception; use SilverStripe\Forms\FieldList; use SilverStripe\Forms\Form; @@ -72,7 +73,7 @@ class ContentReviewCMSPageEditControllerTest extends ContentReviewBaseTest /** @var Member $author */ $author = $this->objFromFixture(Member::class, "author"); - $this->loginAs($author); + $this->logInAs($author); /** @var Page|SiteTreeContentReview $page */ $page = $this->objFromFixture(Page::class, "home"); @@ -83,7 +84,7 @@ class ContentReviewCMSPageEditControllerTest extends ContentReviewBaseTest ); $this->get('admin/pages/edit/show/' . $page->ID); - $response = $this->post(singleton(CMSPageEditController::class)->getEditForm($page->ID)->FormAction(), $data); + $response = $this->post($this->getFormAction($page), $data); $this->assertEquals("OK", $response->getStatusDescription()); $this->assertEquals(200, $response->getStatusCode()); @@ -106,7 +107,7 @@ class ContentReviewCMSPageEditControllerTest extends ContentReviewBaseTest ); $this->get('admin/pages/edit/show/' . $page->ID); - $response = $this->post(singleton(CMSPageEditController::class)->getEditForm($page->ID)->FormAction(), $data); + $response = $this->post($this->getFormAction($page), $data); $this->assertEquals("OK", $response->getStatusDescription()); $this->assertEquals(200, $response->getStatusCode()); @@ -116,4 +117,19 @@ class ContentReviewCMSPageEditControllerTest extends ContentReviewBaseTest $this->assertEquals($data["ReviewNotes"], $reviewLog->Note); } + + /** + * Return a CMS page edit form action via using a dummy request and session + * + * @param Page $page + * @return string + */ + protected function getFormAction(Page $page) + { + $controller = singleton(CMSPageEditController::class); + $controller->setRequest(new HTTPRequest('GET', '/')); + $controller->getRequest()->setSession($this->session()); + + return $controller->getEditForm($page->ID)->FormAction(); + } } diff --git a/tests/ContentReviewNotificationTest.php b/tests/ContentReviewNotificationTest.php index 28cbd6b..4b90852 100644 --- a/tests/ContentReviewNotificationTest.php +++ b/tests/ContentReviewNotificationTest.php @@ -4,6 +4,7 @@ namespace SilverStripe\ContentReview\Tests; use Page; use SilverStripe\CMS\Model\SiteTree; +use SilverStripe\CMS\Controllers\CMSPageEditController; use SilverStripe\ContentReview\Extensions\ContentReviewCMSExtension; use SilverStripe\ContentReview\Extensions\ContentReviewDefaultSettings; use SilverStripe\ContentReview\Extensions\ContentReviewOwner; @@ -12,6 +13,8 @@ use SilverStripe\ContentReview\Tasks\ContentReviewEmails; use SilverStripe\Control\HTTPRequest; use SilverStripe\Dev\SapphireTest; use SilverStripe\ORM\FieldType\DBDatetime; +use SilverStripe\Security\Group; +use SilverStripe\Security\Member; use SilverStripe\SiteConfig\SiteConfig; /** @@ -68,11 +71,11 @@ class ContentReviewNotificationTest extends SapphireTest $this->assertNotNull($email, "Email haven't been sent."); $this->assertContains( "

$Subject

There are $PagesCount pages that are due for review today by you, $ToFirstName.

This email was sent to $ToEmail

", - $email['htmlContent'] + $email['HtmlContent'] ); - $this->assertContains('Staff', $email['htmlContent']); - $this->assertContains('Contact Us', $email['htmlContent']); - $this->assertContains('Contact Us Child', $email['htmlContent']); + $this->assertContains('Staff', $email['HtmlContent']); + $this->assertContains('Contact Us', $email['HtmlContent']); + $this->assertContains('Contact Us Child', $email['HtmlContent']); DBDatetime::clear_mock_now(); } diff --git a/tests/ContentReviewReportTest.php b/tests/ContentReviewReportTest.php index 571c554..81c5d21 100644 --- a/tests/ContentReviewReportTest.php +++ b/tests/ContentReviewReportTest.php @@ -48,8 +48,8 @@ class ContentReviewReportTest extends FunctionalTest $report->title(); $results = $report->sourceRecords(array( - "ReviewDateAfter" => "01/01/2010", - "ReviewDateBefore" => "12/12/2010", + "ReviewDateAfter" => "2010-01-01", + "ReviewDateBefore" => "2010-12-12", )); $this->assertEquals(array( diff --git a/tests/ContentReviewSettingsTest.php b/tests/ContentReviewSettingsTest.php index 062d7f7..dd3c5eb 100644 --- a/tests/ContentReviewSettingsTest.php +++ b/tests/ContentReviewSettingsTest.php @@ -170,7 +170,7 @@ class ContentReviewSettingsTest extends SapphireTest $page = $this->objFromFixture(Page::class, "inherit"); $this->assertEquals("Inherit", $page->ContentReviewType); - $this->assertEquals($this->objFromFixture(SiteConfig::class, "default"), $page->getOptions()); + $this->assertEquals($this->objFromFixture(SiteConfig::class, "default")->ID, $page->getOptions()->ID); } public function testGetNextReviewDateFromCustomSettings()