Merge pull request #1 from silverstripe/master
Update Govt.nz contentreview fork
This commit is contained in:
commit
dd32a6910d
12
changelog.md
12
changelog.md
|
@ -4,6 +4,16 @@ All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
This project adheres to [Semantic Versioning](http://semver.org/).
|
This project adheres to [Semantic Versioning](http://semver.org/).
|
||||||
|
|
||||||
|
## [3.0.2]
|
||||||
|
|
||||||
|
* fix(ContentReviewNotificationJob): Changed to use ->config() system so that the next_run_hour can be configured in YAML.
|
||||||
|
* BUG Prevent non-real draft changes forcing record to appear as changed when saved
|
||||||
|
|
||||||
|
## [3.0.1]
|
||||||
|
|
||||||
|
- Update documentation and configuration to supported module standard
|
||||||
|
- Fix documentation links
|
||||||
|
|
||||||
## [3.0.0]
|
## [3.0.0]
|
||||||
|
|
||||||
- Replace review page form with inline form
|
- Replace review page form with inline form
|
||||||
|
@ -22,4 +32,4 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
||||||
|
|
||||||
## [2.0.0]
|
## [2.0.0]
|
||||||
|
|
||||||
Changelog added.
|
Changelog added.
|
||||||
|
|
|
@ -120,24 +120,24 @@ class SiteTreeContentReview extends DataExtension implements PermissionProvider
|
||||||
{
|
{
|
||||||
if ($this->canBeReviewedBy(Member::currentUser())) {
|
if ($this->canBeReviewedBy(Member::currentUser())) {
|
||||||
Requirements::css("contentreview/css/contentreview.css");
|
Requirements::css("contentreview/css/contentreview.css");
|
||||||
|
|
||||||
$reviewTitle = LiteralField::create(
|
$reviewTitle = LiteralField::create(
|
||||||
"ReviewContentNotesLabel",
|
"ReviewContentNotesLabel",
|
||||||
"<label class=\"left\" for=\"Form_EditForm_ReviewNotes\">" . _t("ContentReview.CONTENTREVIEW", "Content due for review") . "</label>"
|
"<label class=\"left\" for=\"Form_EditForm_ReviewNotes\">" . _t("ContentReview.CONTENTREVIEW", "Content due for review") . "</label>"
|
||||||
);
|
);
|
||||||
|
|
||||||
$ReviewNotes = LiteralField::create("ReviewNotes", "<textarea class=\"no-change-track\" id=\"Form_EditForm_ReviewNotes\" name=\"ReviewNotes\" placeholder=\"" . _t("ContentReview.COMMENTS", "(optional) Add comments...") . "\" class=\"text\"></textarea>");
|
$ReviewNotes = LiteralField::create("ReviewNotes", "<textarea class=\"no-change-track\" id=\"Form_EditForm_ReviewNotes\" name=\"ReviewNotes\" placeholder=\"" . _t("ContentReview.COMMENTS", "(optional) Add comments...") . "\" class=\"text\"></textarea>");
|
||||||
|
|
||||||
$quickReviewAction = FormAction::create("savereview", _t("ContentReview.MARKREVIEWED", "Mark as reviewed"))
|
$quickReviewAction = FormAction::create("savereview", _t("ContentReview.MARKREVIEWED", "Mark as reviewed"))
|
||||||
->setAttribute("data-icon", "pencil")
|
->setAttribute("data-icon", "pencil")
|
||||||
->setAttribute("data-text-alternate", _t("ContentReview.MARKREVIEWED", "Mark as reviewed"));
|
->setAttribute("data-text-alternate", _t("ContentReview.MARKREVIEWED", "Mark as reviewed"));
|
||||||
|
|
||||||
$allFields = CompositeField::create($reviewTitle, $ReviewNotes, $quickReviewAction)
|
$allFields = CompositeField::create($reviewTitle, $ReviewNotes, $quickReviewAction)
|
||||||
->addExtraClass('review-notes field');
|
->addExtraClass('review-notes field');
|
||||||
|
|
||||||
$reviewTab = Tab::create('ReviewContent', $allFields);
|
$reviewTab = Tab::create('ReviewContent', $allFields);
|
||||||
$reviewTab->addExtraClass('contentreview-tab');
|
$reviewTab->addExtraClass('contentreview-tab');
|
||||||
|
|
||||||
$actions->fieldByName('ActionMenus')->insertBefore($reviewTab, 'MoreOptions');
|
$actions->fieldByName('ActionMenus')->insertBefore($reviewTab, 'MoreOptions');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -257,7 +257,7 @@ class SiteTreeContentReview extends DataExtension implements PermissionProvider
|
||||||
$member = Member::currentUser();
|
$member = Member::currentUser();
|
||||||
|
|
||||||
if ($member) {
|
if ($member) {
|
||||||
return $member->FirstName . " " . $member->Surname;
|
return $member->getTitle();
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
@ -483,8 +483,12 @@ class SiteTreeContentReview extends DataExtension implements PermissionProvider
|
||||||
*/
|
*/
|
||||||
public function onBeforeWrite()
|
public function onBeforeWrite()
|
||||||
{
|
{
|
||||||
$this->owner->LastEditedByName = $this->owner->getEditorName();
|
// Only update if DB fields have been changed
|
||||||
$this->owner->OwnerNames = $this->owner->getOwnerNames();
|
$changedFields = $this->owner->getChangedFields(true, 2);
|
||||||
|
if($changedFields) {
|
||||||
|
$this->owner->LastEditedByName = $this->owner->getEditorName();
|
||||||
|
$this->owner->OwnerNames = $this->owner->getOwnerNames();
|
||||||
|
}
|
||||||
|
|
||||||
// If the user changed the type, we need to recalculate the review date.
|
// If the user changed the type, we need to recalculate the review date.
|
||||||
if ($this->owner->isChanged("ContentReviewType", 2)) {
|
if ($this->owner->isChanged("ContentReviewType", 2)) {
|
||||||
|
@ -509,7 +513,7 @@ class SiteTreeContentReview extends DataExtension implements PermissionProvider
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// parent page change it's review period
|
// parent page change its review period
|
||||||
// && !$this->owner->isChanged('ContentReviewType', 2)
|
// && !$this->owner->isChanged('ContentReviewType', 2)
|
||||||
if ($this->owner->isChanged("ReviewPeriodDays", 2)) {
|
if ($this->owner->isChanged("ReviewPeriodDays", 2)) {
|
||||||
$nextReviewUnixSec = strtotime(" + " . $this->owner->ReviewPeriodDays . " days", SS_Datetime::now()->format("U"));
|
$nextReviewUnixSec = strtotime(" + " . $this->owner->ReviewPeriodDays . " days", SS_Datetime::now()->format("U"));
|
||||||
|
|
|
@ -90,11 +90,11 @@ class ContentReviewNotificationJob extends AbstractQueuedJob implements QueuedJo
|
||||||
$nextRun = new ContentReviewNotificationJob();
|
$nextRun = new ContentReviewNotificationJob();
|
||||||
|
|
||||||
$nextRunTime = mktime(
|
$nextRunTime = mktime(
|
||||||
self::$next_run_hour,
|
Config::inst()->get(__CLASS__, 'next_run_hour'),
|
||||||
self::$next_run_minute,
|
Config::inst()->get(__CLASS__, 'next_run_minute'),
|
||||||
0,
|
0,
|
||||||
date("m"),
|
date("m"),
|
||||||
date("d") + self::$next_run_in_days,
|
date("d") + Config::inst()->get(__CLASS__, 'next_run_in_days'),
|
||||||
date("Y")
|
date("Y")
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,9 @@ en:
|
||||||
CUSTOM: 'Custom settings'
|
CUSTOM: 'Custom settings'
|
||||||
DEFAULTSETTINGSHELP: 'These content review settings will apply to all pages that does not have specific Content Review schedule.'
|
DEFAULTSETTINGSHELP: 'These content review settings will apply to all pages that does not have specific Content Review schedule.'
|
||||||
DISABLE: 'Disable content review'
|
DISABLE: 'Disable content review'
|
||||||
|
EMAILFROM: 'From email address'
|
||||||
|
EMAILSUBJECT: 'Subject line'
|
||||||
|
EMAILTEMPLATE: 'Email template'
|
||||||
INHERIT: 'Inherit from parent page'
|
INHERIT: 'Inherit from parent page'
|
||||||
MARKREVIEWED: 'Mark as reviewed'
|
MARKREVIEWED: 'Mark as reviewed'
|
||||||
NEXTREVIEWDATADESCRIPTION: 'Leave blank for no review'
|
NEXTREVIEWDATADESCRIPTION: 'Leave blank for no review'
|
||||||
|
@ -35,6 +38,12 @@ en:
|
||||||
PLURALNAME: 'Content Review Logs'
|
PLURALNAME: 'Content Review Logs'
|
||||||
SINGULARNAME: 'Content Review Log'
|
SINGULARNAME: 'Content Review Log'
|
||||||
PagesDueForReviewReport:
|
PagesDueForReviewReport:
|
||||||
|
ONLYMYPAGES: 'Only Show pages assigned to me'
|
||||||
|
REVIEWDATEAFTER: 'Review date after or on'
|
||||||
|
REVIEWDATEBEFORE: 'Review date before or on'
|
||||||
|
SHOWVIRTUALPAGES: 'Show Virtual Pages'
|
||||||
TITLE: 'Pages due for review'
|
TITLE: 'Pages due for review'
|
||||||
PagesWithoutReviewScheduleReport:
|
PagesWithoutReviewScheduleReport:
|
||||||
TITLE: 'Pages without a scheduled review.'
|
TITLE: 'Pages without a scheduled review.'
|
||||||
|
Review:
|
||||||
|
EMAILFROM_RIGHTTITLE: 'e.g: do-not-reply@site.com'
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
[![Code Quality](http://img.shields.io/scrutinizer/g/silverstripe/silverstripe-contentreview.svg?style=flat-square)](https://scrutinizer-ci.com/g/silverstripe/silverstripe-contentreview)
|
[![Code Quality](http://img.shields.io/scrutinizer/g/silverstripe/silverstripe-contentreview.svg?style=flat-square)](https://scrutinizer-ci.com/g/silverstripe/silverstripe-contentreview)
|
||||||
[![Version](http://img.shields.io/packagist/v/silverstripe/contentreview.svg?style=flat-square)](https://packagist.org/packages/silverstripe/contentreview)
|
[![Version](http://img.shields.io/packagist/v/silverstripe/contentreview.svg?style=flat-square)](https://packagist.org/packages/silverstripe/contentreview)
|
||||||
[![License](http://img.shields.io/packagist/l/silverstripe/contentreview.svg?style=flat-square)](license.md)
|
[![License](http://img.shields.io/packagist/l/silverstripe/contentreview.svg?style=flat-square)](license.md)
|
||||||
|
![helpfulrobot](https://helpfulrobot.io/silverstripe/contentreview/badge)
|
||||||
|
|
||||||
This module helps keep your website content accurate and up-to-date, which keeps your users happy.
|
This module helps keep your website content accurate and up-to-date, which keeps your users happy.
|
||||||
|
|
||||||
|
|
|
@ -244,6 +244,38 @@ class SiteTreeContentReviewTest extends ContentReviewBaseTest
|
||||||
SS_Datetime::clear_mock_now();
|
SS_Datetime::clear_mock_now();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testUnModifiedPagesDontChangeEditor() {
|
||||||
|
SS_Datetime::set_mock_now("2013-03-01 12:00:00");
|
||||||
|
|
||||||
|
/** @var Member $author */
|
||||||
|
$author = $this->objFromFixture("Member", "author");
|
||||||
|
$this->logInAs($author);
|
||||||
|
|
||||||
|
// Page which is un-modified doesn't advance version of have an editor assigned
|
||||||
|
$contactPage = $this->objFromFixture("Page", "contact");
|
||||||
|
$contactPageVersion = $contactPage->Version;
|
||||||
|
$contactPage->write();
|
||||||
|
$this->assertEmpty($contactPage->LastEditedByName);
|
||||||
|
$this->assertEquals(
|
||||||
|
$contactPageVersion,
|
||||||
|
Versioned::get_versionnumber_by_stage('SiteTree', 'Stage', $contactPage->ID, false)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Page with modifications gets marked
|
||||||
|
$homePage = $this->objFromFixture("Page", "home");
|
||||||
|
$homePageVersion = $homePage->Version;
|
||||||
|
$homePage->Content = '<p>Welcome!</p>';
|
||||||
|
$homePage->write();
|
||||||
|
$this->assertNotEmpty($homePage->LastEditedByName);
|
||||||
|
$this->assertEquals($author->getTitle(), $homePage->LastEditedByName);
|
||||||
|
$this->assertGreaterThan(
|
||||||
|
$homePageVersion,
|
||||||
|
Versioned::get_versionnumber_by_stage('SiteTree', 'Stage', $homePage->ID, false)
|
||||||
|
);
|
||||||
|
|
||||||
|
SS_Datetime::clear_mock_now();
|
||||||
|
}
|
||||||
|
|
||||||
public function testReviewActionVisibleForAuthor()
|
public function testReviewActionVisibleForAuthor()
|
||||||
{
|
{
|
||||||
SS_Datetime::set_mock_now("2020-03-01 12:00:00");
|
SS_Datetime::set_mock_now("2020-03-01 12:00:00");
|
||||||
|
|
Loading…
Reference in New Issue