Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
a821edf
FIX Allow users with the CMS_ACCESS_LeftAndMain permission to be added
emteknetnz Sep 14, 2021
566a9e7
DOC Correct title for userhelp
Aug 20, 2022
1123d26
Merge pull request #169 from creative-commoners/pulls/4/userhelp-fix
GuySartorelli Aug 21, 2022
6f5edab
MNT Fix github action for deploying userdocs
GuySartorelli Aug 23, 2022
dbd9099
Merge pull request #170 from creative-commoners/pulls/4/fix-userdoc-d…
Aug 23, 2022
55d52cb
Merge pull request #155 from creative-commoners/pulls/4.3/all-sections
sabina-talipova Sep 15, 2022
495e746
ENH Replace ADMIN permissions with less permissions in Behat test
Sep 2, 2022
7eb81fd
Merge pull request #172 from creative-commoners/pulls/4/review-behat-…
GuySartorelli Sep 15, 2022
6f18e92
API Stop using deprecated API
emteknetnz Nov 24, 2022
a6c7030
Merge pull request #174 from creative-commoners/pulls/4/stop-using-depr
sabina-talipova Dec 5, 2022
63024cb
Bump qs from 6.5.2 to 6.5.3
dependabot[bot] Dec 9, 2022
fad0c2b
Merge pull request #176 from silverstripe/dependabot/npm_and_yarn/qs-…
dependabot[bot] Dec 9, 2022
013a5c3
Bump minimatch from 3.0.4 to 3.0.8
dependabot[bot] Dec 9, 2022
0b32166
Merge pull request #177 from silverstripe/dependabot/npm_and_yarn/min…
dependabot[bot] Dec 9, 2022
48c40a5
Bump debug from 2.6.8 to 2.6.9
dependabot[bot] Jan 12, 2023
179e9d0
Merge pull request #180 from silverstripe/dependabot/npm_and_yarn/deb…
dependabot[bot] Jan 12, 2023
e8a41d9
ENH Update translations
emteknetnz Mar 6, 2023
18828ed
Merge pull request #187 from creative-commoners/pulls/4/tx-1678079773
GuySartorelli Mar 7, 2023
ff723b5
MNT Update development dependencies
GuySartorelli Mar 9, 2023
884a846
MNT Update release dependencies
GuySartorelli Mar 10, 2023
4776976
MNT Update development dependencies
GuySartorelli Mar 10, 2023
4324836
MNT Add additional keywords to composer.json
sunnysideup Jan 26, 2023
f1f6abc
MNT Use gha-dispatch-ci
emteknetnz Mar 20, 2023
b5e468a
Merge pull request #190 from creative-commoners/pulls/4/dispatch-ci
Mar 23, 2023
77bb69f
MNT Revert erroneous dependency changes (#191)
GuySartorelli Mar 28, 2023
24766e4
FIX Notification job marked as broken
Mar 31, 2023
36d3718
ENH Add Exception with list of invilid emails
Apr 11, 2023
f9dc2e5
Merge pull request #192 from creative-commoners/pulls/4/fix-broken-jo…
GuySartorelli Apr 13, 2023
c39e588
FIX Notification job marked as broken
Apr 14, 2023
ad33d32
Merge pull request #195 from creative-commoners/pulls/4.7/fix-broken-…
GuySartorelli Apr 14, 2023
d13bebf
Merge branch '4.7' into 4
GuySartorelli Apr 26, 2023
b6e00e9
ENH Update translations
emteknetnz Jun 14, 2023
72e4321
Merge pull request #199 from creative-commoners/pulls/4.7/tx-1686724607
GuySartorelli Jun 14, 2023
27e0f8f
Merge pull request #183 from sunnysideup/patch-1
michalkleiner Jun 15, 2023
32e7929
Merge branch '4.7' into 4
Jun 15, 2023
2e22bd4
MNT Use ::create to allow Injector to replace content review emails s…
Jun 15, 2023
9fe83e9
Merge pull request #201 from silverstripe/pulls/200-use-injector-for-…
michalkleiner Jun 16, 2023
b6ce505
Merge branch '4.7' into 4
Jun 16, 2023
20d61d7
ENH Update translations (#208)
GuySartorelli Aug 21, 2023
5f04e46
Merge branch '4.7' into 4
github-actions[bot] Aug 27, 2023
bb3eec1
TLN Update translations (#223)
GuySartorelli Feb 7, 2024
9b79699
Merge branch '4.7' into 4
github-actions[bot] Feb 11, 2024
4ea50b3
DEP Bump minimum version of framework
emteknetnz Jul 9, 2024
096f587
Merge pull request #244 from creative-commoners/pulls/4.7/composer
GuySartorelli Jul 10, 2024
1b792b2
Merge branch '4.7' into 4
emteknetnz Jul 11, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,8 @@ on:
push:
pull_request:
workflow_dispatch:
# Every Wednesday at 11:30am UTC
schedule:
- cron: '30 11 * * 3'

jobs:
ci:
name: CI
# Only run cron on the silverstripe account
if: (github.event_name == 'schedule' && github.repository_owner == 'silverstripe') || (github.event_name != 'schedule')
uses: silverstripe/gha-ci/.github/workflows/ci.yml@v1
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
name: Build Docs
name: Deploy Userhelp Docs
on:
push:
branches:
- 'master'
- '5'
- '4'
paths:
- 'docs/en/userguide/**'
jobs:
build:
name: build-docs
deploy:
name: deploy-userhelp-docs
runs-on: ubuntu-latest
steps:
- name: Run build hook
Expand Down
16 changes: 16 additions & 0 deletions .github/workflows/dispatch-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
name: Dispatch CI

on:
# At 11:30 AM UTC, only on Wednesday and Thursday
schedule:
- cron: '30 11 * * 3,4'

jobs:
dispatch-ci:
name: Dispatch CI
# Only run cron on the silverstripe account
if: (github.event_name == 'schedule' && github.repository_owner == 'silverstripe') || (github.event_name != 'schedule')
runs-on: ubuntu-latest
steps:
- name: Dispatch CI
uses: silverstripe/gha-dispatch-ci@v1
9 changes: 5 additions & 4 deletions .tx/config
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
[main]
host = https://www.transifex.com

[silverstripe-contentreview.master]
[o:silverstripe:p:silverstripe-contentreview:r:master]
file_filter = lang/<lang>.yml
source_file = lang/en.yml
source_lang = en
type = YML
type = YML

[silverstripe-contentreview.master-js]
[o:silverstripe:p:silverstripe-contentreview:r:master-js]
file_filter = client/lang/src/<lang>.json
source_file = client/lang/src/en.json
source_lang = en
type = KEYVALUEJSON
type = KEYVALUEJSON

4 changes: 2 additions & 2 deletions client/lang/en.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// This file was generated by silverstripe/cow from client/lang/src/en.json.
// See https://github.com/silverstripe/cow for details
// This file was generated by silverstripe/tx-translator from client/lang/src/en.json.
// See https://github.com/silverstripe/silverstripe-tx-translator for details
if (typeof(ss) === 'undefined' || typeof(ss.i18n) === 'undefined') {
if (typeof(console) !== 'undefined') { // eslint-disable-line no-console
console.error('Class ss.i18n not defined'); // eslint-disable-line no-console
Expand Down
11 changes: 11 additions & 0 deletions client/lang/sk.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// This file was generated by silverstripe/tx-translator from client/lang/src/sk.json.
// See https://github.com/silverstripe/silverstripe-tx-translator for details
if (typeof(ss) === 'undefined' || typeof(ss.i18n) === 'undefined') {
if (typeof(console) !== 'undefined') { // eslint-disable-line no-console
console.error('Class ss.i18n not defined'); // eslint-disable-line no-console
}
} else {
ss.i18n.addDictionary('sk', {
"ContentReview.CONTENT_DUE_FOR_REVIEW": "Obsah určený na kontrolu"
});
}
3 changes: 3 additions & 0 deletions client/lang/src/sk.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"ContentReview.CONTENT_DUE_FOR_REVIEW": "Obsah určený na kontrolu"
}
9 changes: 6 additions & 3 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@
"keywords": [
"silverstripe",
"cms",
"workflow"
"workflow",
"content review",
"review",
"permissions"
],
"authors": [
{
Expand All @@ -22,7 +25,7 @@
"require": {
"php": "^7.4 || ^8.0",
"silverstripe/vendor-plugin": "^1",
"silverstripe/framework": "^4.10",
"silverstripe/framework": "^4.11",
"silverstripe/cms": "^4.2",
"silverstripe/reports": "^4.2",
"silverstripe/siteconfig": "^4.2"
Expand All @@ -49,4 +52,4 @@
},
"minimum-stability": "dev",
"prefer-stable": true
}
}
2 changes: 2 additions & 0 deletions docs/en/userguide/index.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
---
title: Content review
summary: Mark pages in the CMS with a date and an owner for future reviews.
---

## Content review

Expand Down
19 changes: 19 additions & 0 deletions lang/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,14 @@ en:
PAGEOWNERUSERS: Users
REVIEWFREQUENCY: 'Review frequency'
REVIEWFREQUENCYDESCRIPTION: 'The review date will be set to this far in the future, whenever the page is published.'
db_ReviewBody: 'Review body'
db_ReviewFrom: 'Review from'
db_ReviewPeriodDays: 'Review period days'
db_ReviewSubject: 'Review subject'
many_many_ContentReviewGroups: 'Content review groups'
many_many_ContentReviewUsers: 'Content review users'
SilverStripe\ContentReview\Extensions\ContentReviewOwner:
many_many_SiteTreeContentReview: 'Site tree content review'
SilverStripe\ContentReview\Extensions\SiteTreeContentReview:
ADDGROUP: 'Add groups'
ADDUSERS: 'Add users'
Expand All @@ -34,6 +42,14 @@ en:
REVIEWFREQUENCYDESCRIPTION: 'The review date will be set to this far in the future whenever the page is published'
REVIEWHEADER: 'Content review'
SETTINGSFROM: 'Options are'
belongs_many_many_ContentReviewGroups: 'Content review groups'
belongs_many_many_ContentReviewUsers: 'Content review users'
db_ContentReviewType: 'Content review type'
db_LastEditedByName: 'Last edited by name'
db_NextReviewDate: 'Next review date'
db_OwnerNames: 'Owner names'
db_ReviewPeriodDays: 'Review period days'
has_many_ReviewLogs: 'Review logs'
SilverStripe\ContentReview\Forms\ReviewContentHandler:
ErrorReviewPermissionDenied: 'It seems you don''t have the necessary permissions to submit a content review'
MarkAsReviewedAction: 'Mark as reviewed'
Expand All @@ -46,6 +62,9 @@ en:
one: 'A Content Review Log'
other: '{count} Content Review Logs'
SINGULARNAME: 'Content Review Log'
db_Note: Note
has_one_Reviewer: Reviewer
has_one_SiteTree: 'Site tree'
SilverStripe\ContentReview\Reports\PagesDueForReviewReport:
ONLYMYPAGES: 'Only Show pages assigned to me'
REVIEWDATEAFTER: 'Review date after or on'
Expand Down
80 changes: 80 additions & 0 deletions lang/sk.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
sk:
SilverStripe\ContentReview\Extensions\ContentReviewCMSExtension:
ErrorItemPermissionDenied: 'Zdá sa, že nemáte potrebné oprávnenia na kontrolu tohto obsahu'
SilverStripe\ContentReview\Extensions\ContentReviewDefaultSettings:
ADDGROUP: 'Pridať skupiny'
ADDUSERS: 'Pridať používateľov'
DEFAULTSETTINGSHELP: 'Tieto nastavenia sa použijú na všetky stránky, ktoré nemajú špecifický plán kontroly obsahu.'
EMAILFROM: 'Z e-mailovej adresy'
EMAILFROM_RIGHTTITLE: 'napr.: do-not-reply@site.com'
EMAILSUBJECT: Predmet
EMAILTEMPLATE: 'Šablóna e-mailu'
OWNERGROUPSDESCRIPTION: 'Vlastníci stránok, ktorí sú zodpovední za kontrolu'
OWNERUSERSDESCRIPTION: 'Vlastníci stránok, ktorí sú zodpovední za kontrolu'
PAGEOWNERGROUPS: Skupiny
PAGEOWNERUSERS: Používatelia
REVIEWFREQUENCY: 'Frekvencia kontroly'
REVIEWFREQUENCYDESCRIPTION: 'Dátum kontroly bude nastavený na tento dátum v budúcnosti, bez ohľadu na to, kedy bude stránka zverejnená.'
db_ReviewBody: 'Revízny orgán'
db_ReviewFrom: 'Kontrola od'
db_ReviewPeriodDays: 'Dni periódy kontroly'
db_ReviewSubject: 'Predmet kontroly'
many_many_ContentReviewGroups: 'Skupiny kontroly obsahu'
many_many_ContentReviewUsers: 'Používatelia kontroly obsahu'
SilverStripe\ContentReview\Extensions\ContentReviewOwner:
many_many_SiteTreeContentReview: 'Kontrola obsahu stromu stránok'
SilverStripe\ContentReview\Extensions\SiteTreeContentReview:
ADDGROUP: 'Pridať skupiny'
ADDUSERS: 'Pridať používateľov'
CONTENTOWNERS: 'Vlastníci obsahu'
CONTENTREVIEW: 'Obsah určený na kontrolu'
CUSTOM: 'Vlastné nastavenia'
DISABLE: 'Zakázať kontrolu obsahu'
INHERIT: 'Zdediť z nadradenej stránky'
NEXTREVIEWDATADESCRIPTION: 'Ak nechcete vyplniť kontrolu, ponechajte pole prázdne'
NEXTREVIEWDATE: 'Dátum ďalšej kontroly'
OPTIONS: Možnosti
OWNERGROUPSDESCRIPTION: 'Vlastníci stránok, ktorí sú zodpovední za kontrolu'
OWNERUSERSDESCRIPTION: 'Vlastníci stránok, ktorí sú zodpovední za kontrolu'
PAGEOWNERGROUPS: Skupiny
PAGEOWNERUSERS: Používatelia
REVIEWFREQUENCY: 'Frekvencia kontroly'
REVIEWFREQUENCYDESCRIPTION: 'Dátum kontroly bude nastavený na tento dátum v budúcnosti, bez ohľadu na to, kedy bude stránka zverejnená.'
REVIEWHEADER: 'Kontrola obsahu'
SETTINGSFROM: 'Možnosti sú'
belongs_many_many_ContentReviewGroups: 'Skupiny kontroly obsahu'
belongs_many_many_ContentReviewUsers: 'Používatelia kontroly obsahu'
db_ContentReviewType: 'Typ kontroly obsahu'
db_LastEditedByName: 'Naposledy upravené podľa mena'
db_NextReviewDate: 'Dátum ďalšej kontroly'
db_OwnerNames: 'Mená vlastníkov'
db_ReviewPeriodDays: 'Dni periódy kontroly'
has_many_ReviewLogs: 'Záznamy z kontroly'
SilverStripe\ContentReview\Forms\ReviewContentHandler:
ErrorReviewPermissionDenied: 'Zdá sa, že nemáte potrebné oprávnenia na odoslanie kontroly obsahu'
MarkAsReviewedAction: 'Označiť ako skontrolované'
NoComments: '(bez komentára)'
Placeholder: 'Pridať komentáre (voliteľné)'
Success: 'Kontrola bola úspešne pridaná'
SilverStripe\ContentReview\Models\ContentReviewLog:
PLURALNAME: 'Záznamy z kontroly obsahu'
PLURALS:
few: '{count} záznamy z kontroly obsahu'
many: '{count} záznamov z kontroly obsahu'
one: 'Záznam z kontroly obsahu'
other: '{count} záznamov z kontroly obsahu'
SINGULARNAME: 'Záznam z kontroly obsahu'
db_Note: Poznámka
has_one_Reviewer: Kontrolór
has_one_SiteTree: 'Strom stránok'
SilverStripe\ContentReview\Reports\PagesDueForReviewReport:
ONLYMYPAGES: 'Zobraziť iba mne priradené stránky'
REVIEWDATEAFTER: 'Dátum kontroly po'
REVIEWDATEBEFORE: 'Dátum kontroly pred'
SHOWVIRTUALPAGES: 'Zobraziť virtuálne stránky'
TITLE: 'Stránky určené na kontrolu'
SilverStripe\ContentReview\Reports\PagesWithoutReviewScheduleReport:
TITLE: 'Stránky bez naplánovanej kontroly.'
SilverStripe\ContentReview\Tasks\ContentReviewEmails:
REVIEWPAGELINK: 'Skontrolujte stránku v CMS'
VIEWPUBLISHEDLINK: 'Pozrite si túto stránku na webe'
1 change: 1 addition & 0 deletions src/Extensions/ContentReviewDefaultSettings.php
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ public function updateCMSFields(FieldList $fields)

$users = Permission::get_members_by_permission([
'CMS_ACCESS_CMSMain',
'CMS_ACCESS_LeftAndMain',
'ADMIN',
]);

Expand Down
2 changes: 1 addition & 1 deletion src/Extensions/SiteTreeContentReview.php
Original file line number Diff line number Diff line change
Expand Up @@ -397,7 +397,7 @@ public function updateSettingsFields(FieldList $fields)
$options
);

$users = Permission::get_members_by_permission(["CMS_ACCESS_CMSMain", "ADMIN"]);
$users = Permission::get_members_by_permission(['CMS_ACCESS_CMSMain', 'CMS_ACCESS_LeftAndMain', 'ADMIN']);

$usersMap = $users->map("ID", "Title")->toArray();

Expand Down
2 changes: 1 addition & 1 deletion src/Jobs/ContentReviewNotificationJob.php
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ public function process()
{
$this->queueNextRun();

$task = new ContentReviewEmails();
$task = ContentReviewEmails::create();
$task->run(new HTTPRequest("GET", "/dev/tasks/ContentReviewEmails"));

$this->currentStep = 1;
Expand Down
39 changes: 38 additions & 1 deletion src/Tasks/ContentReviewEmails.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace SilverStripe\ContentReview\Tasks;

use Page;
use RuntimeException;
use SilverStripe\ContentReview\Compatibility\ContentReviewCompatability;
use SilverStripe\Control\Email\Email;
use SilverStripe\Control\HTTPRequest;
Expand All @@ -15,18 +16,29 @@
use SilverStripe\SiteConfig\SiteConfig;
use SilverStripe\View\ArrayData;
use SilverStripe\View\SSViewer;
use SilverStripe\ContentReview\Models\ContentReviewLog;

/**
* Daily task to send emails to the owners of content items when the review date rolls around.
*/
class ContentReviewEmails extends BuildTask
{
private array $invalid_emails = [];

/**
* @param HTTPRequest $request
* @throws RuntimeException
*/
public function run($request)
{
if (!$this->isValidEmail($senderEmail = SiteConfig::current_site_config()->ReviewFrom)) {
throw new RuntimeException(
sprintf(
'Provided sender email address is invalid: "%s".',
$senderEmail
)
);
}

$compatibility = ContentReviewCompatability::start();

// First grab all the pages with a custom setting
Expand All @@ -42,6 +54,16 @@ public function run($request)
}

ContentReviewCompatability::done($compatibility);

if (is_array($this->invalid_emails) && count($this->invalid_emails) > 0) {
$plural = count($this->invalid_emails) > 1 ? 's are' : ' is';
throw new RuntimeException(
sprintf(
'Provided email' . $plural . ' invalid: "%s".',
implode(', ', $this->invalid_emails)
)
);
}
}

/**
Expand Down Expand Up @@ -93,6 +115,13 @@ protected function notifyOwner($ownerID, SS_List $pages)
// Prepare variables
$siteConfig = SiteConfig::current_site_config();
$owner = Member::get()->byID($ownerID);

if (!$this->isValidEmail($owner->Email)) {
$this->invalid_emails[] = $owner->Name . ': ' . $owner->Email;

return;
}

$templateVariables = $this->getTemplateVariables($owner, $siteConfig, $pages);

// Build email
Expand Down Expand Up @@ -159,4 +188,12 @@ protected function getTemplateVariables($recipient, $config, $pages)
'ToEmail' => $recipient->Email,
];
}

/**
* Check validity of email
*/
protected function isValidEmail(?string $email): bool
{
return (bool) filter_var($email, FILTER_VALIDATE_EMAIL);
}
}
Loading