Compare commits

..

42 Commits

Author SHA1 Message Date
Steve Boyd
55d18d8392 Merge branch '2.4' into 2 2024-07-11 16:17:47 +12:00
Guy Sartorelli
0b94f4b8a9
Merge pull request #115 from creative-commoners/pulls/2.4/composer
MNT Add dev version of framework
2024-07-11 10:00:07 +12:00
Steve Boyd
a2b6f45abd MNT Add dev version of framework 2024-07-10 12:45:43 +12:00
github-actions
b12eee33ed Merge branch '2.4' into 2 2024-03-03 22:44:42 +00:00
Guy Sartorelli
0a17d0c537
Merge pull request #101 from creative-commoners/pulls/2.4/exists
FIX Ensure page has extension before calling method
2024-03-04 11:43:49 +13:00
Steve Boyd
66da923502 FIX Ensure page has extension before calling method 2024-02-29 14:05:44 +13:00
github-actions
3c922398ca Merge branch '2.4' into 2 2024-02-08 11:14:51 +00:00
Guy Sartorelli
82872780eb
TLN Update translations (#99) 2024-02-07 16:14:36 +13:00
github-actions
900aae6a25 Merge branch '2.4' into 2 2023-08-24 11:15:01 +00:00
Guy Sartorelli
d082606ded
ENH Update translations (#88) 2023-08-21 13:18:55 +12:00
Steve Boyd
4129c23c0f Merge branch '2.4' into 2 2023-06-16 12:18:08 +12:00
Guy Sartorelli
84f1ed3914
Merge pull request #86 from creative-commoners/pulls/2.4/tx-1686724968
ENH Update translations
2023-06-15 10:06:18 +12:00
Steve Boyd
b11db96d7a ENH Update translations 2023-06-14 18:42:48 +12:00
Guy Sartorelli
1f015f119c
Merge branch '2.4' into 2 2023-04-26 12:47:28 +12:00
Guy Sartorelli
ebae2446a9
MNT Revert erroneous dependency changes (#83) 2023-03-28 17:12:13 +13:00
Maxime Rainville
633b85537e
Merge pull request #82 from creative-commoners/pulls/2/dispatch-ci
MNT Use gha-dispatch-ci
2023-03-23 12:04:15 +13:00
Steve Boyd
df5845176f MNT Use gha-dispatch-ci 2023-03-21 12:05:01 +13:00
Guy Sartorelli
4afd8ce074
MNT Update development dependencies 2023-03-10 16:35:17 +13:00
Guy Sartorelli
1e78dfc828
MNT Update release dependencies 2023-03-10 16:35:14 +13:00
Guy Sartorelli
b56ae94e87
MNT Update development dependencies 2023-03-10 12:21:30 +13:00
Guy Sartorelli
1ec4a141e3
Merge pull request #81 from creative-commoners/pulls/2/tx-1678080252
ENH Update translations
2023-03-08 10:32:29 +13:00
Steve Boyd
d44e506d00 ENH Update translations 2023-03-06 18:24:12 +13:00
Sabina Talipova
48220dad3a
Merge pull request #76 from creative-commoners/pulls/2/stop-using-depr
API Stop using deprecated API
2022-12-05 16:37:21 +13:00
Steve Boyd
6699b9074a API Stop using deprecated API 2022-11-24 13:10:46 +13:00
Guy Sartorelli
8041c15dc7
Merge pull request #75 from creative-commoners/pulls/2/depr-messages
API Update deprecations
2022-11-21 10:00:28 +13:00
Steve Boyd
9f6b6f9d8a API Update deprecations 2022-11-16 12:00:17 +13:00
Maxime Rainville
831c178514
Merge pull request #74 from creative-commoners/pulls/2/fix-userdoc-deploy
MNT Fix github action for deploying userdocs
2022-08-24 11:13:45 +12:00
Guy Sartorelli
2e1dc4a46e
MNT Fix github action for deploying userdocs 2022-08-23 14:42:19 +12:00
Guy Sartorelli
c5fdbcbd72
Merge pull request #73 from creative-commoners/pulls/2/userhelp-fix
DOC Correct title for userhelp
2022-08-22 11:00:33 +12:00
Maxime Rainville
2ba0438277 DOC Correct title for userhelp 2022-08-20 21:57:04 +12:00
Steve Boyd
656094763b Merge branch '2.3' into 2 2022-08-02 19:03:51 +12:00
Steve Boyd
d18a07213e Merge branch '2.2' into 2.3 2022-08-02 19:03:46 +12:00
Guy Sartorelli
e8da1e07bf
Merge pull request #72 from creative-commoners/pulls/2.2/standardise-modules
MNT Standardise modules
2022-08-02 16:01:03 +12:00
Steve Boyd
abb248242f MNT Standardise modules 2022-08-01 16:23:48 +12:00
Steve Boyd
75237f89db Merge branch '2.3' into 2 2022-07-25 11:49:37 +12:00
Steve Boyd
befc7f07d3 Merge branch '2.2' into 2.3 2022-07-25 11:49:33 +12:00
Guy Sartorelli
c5f4a5ccdb
Merge pull request #71 from creative-commoners/pulls/2.2/module-standards
MNT Use GitHub Actions CI
2022-07-15 12:00:16 +12:00
Steve Boyd
9433c0542a MNT Use GitHub Actions CI 2022-07-05 22:18:11 +12:00
Guy Sartorelli
f93f32d22b
Merge pull request #70 from creative-commoners/pulls/2/php81
ENH PHP 8.1 compatibility
2022-04-26 17:57:34 +12:00
Steve Boyd
600a4b2cde ENH PHP 8.1 compatibility 2022-04-13 13:53:29 +12:00
Maxime Rainville
7195e2a833
Merge pull request #69 from creative-commoners/pulls/2/php74
DEP Set PHP 7.4 as the minimum version
2022-02-18 22:10:56 +13:00
Steve Boyd
8171761d39 DEP Set PHP 7.4 as the minimum version 2022-02-10 17:45:12 +13:00
20 changed files with 102 additions and 51 deletions

11
.github/workflows/ci.yml vendored Normal file
View File

@ -0,0 +1,11 @@
name: CI
on:
push:
pull_request:
workflow_dispatch:
jobs:
ci:
name: CI
uses: silverstripe/gha-ci/.github/workflows/ci.yml@v1

View File

@ -1,13 +1,15 @@
name: Build Docs
name: Deploy Userhelp Docs
on:
push:
branches:
- '3'
- '2'
- 'master'
paths:
- 'docs/en/userguide/**'
jobs:
build:
name: build-docs
deploy:
name: deploy-userhelp-docs
runs-on: ubuntu-latest
steps:
- name: Run build hook

16
.github/workflows/dispatch-ci.yml vendored Normal file
View File

@ -0,0 +1,16 @@
name: Dispatch CI
on:
# At 11:10 AM UTC, only on Sunday and Monday
schedule:
- cron: '10 11 * * 0,1'
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

17
.github/workflows/keepalive.yml vendored Normal file
View File

@ -0,0 +1,17 @@
name: Keepalive
on:
workflow_dispatch:
# The 8th of every month at 11:50am UTC
schedule:
- cron: '50 11 8 * *'
jobs:
keepalive:
name: Keepalive
# 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: Keepalive
uses: silverstripe/gha-keepalive@v1

View File

@ -1,15 +0,0 @@
inherit: true
build:
nodes:
analysis:
tests:
override: [php-scrutinizer-run]
checks:
php:
code_rating: true
duplication: true
filter:
paths: [src/*, tests/*]

View File

@ -1,4 +0,0 @@
version: ~> 1.0
import:
- silverstripe/silverstripe-travis-shared:config/provision/standard-jobs-range.yml

View File

@ -1,8 +1,9 @@
[main]
host = https://www.transifex.com
[silverstripe-versionfeed.master]
[o:silverstripe:p:silverstripe-versionfeed:r:master]
file_filter = lang/<lang>.yml
source_file = lang/en.yml
source_lang = en
type = YML
type = YML

View File

@ -1,9 +1,7 @@
# Version Feed
[![Build Status](https://api.travis-ci.com/silverstripe/silverstripe-versionfeed.svg?branch=2)](https://travis-ci.com/silverstripe/silverstripe-versionfeed)
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/silverstripe/silverstripe-versionfeed/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/silverstripe/silverstripe-versionfeed/?branch=master)
[![codecov](https://codecov.io/gh/silverstripe/silverstripe-versionfeed/branch/master/graph/badge.svg)](https://codecov.io/gh/silverstripe/silverstripe-versionfeed)
[![SilverStripe supported module](https://img.shields.io/badge/silverstripe-supported-0071C4.svg)](https://www.silverstripe.org/software/addons/silverstripe-commercially-supported-module-list/)
[![CI](https://github.com/silverstripe/silverstripe-versionfeed/actions/workflows/ci.yml/badge.svg)](https://github.com/silverstripe/silverstripe-versionfeed/actions/workflows/ci.yml)
[![Silverstripe supported module](https://img.shields.io/badge/silverstripe-supported-0071C4.svg)](https://www.silverstripe.org/software/addons/silverstripe-commercially-supported-module-list/)
## Overview
@ -11,13 +9,13 @@ The module creates an RSS feed on each page with their change history, as well a
## Requirements
* SilverStripe ^4
* Silverstripe ^4
**Note:** For a SilverStripe 3.x compatible version, please use [the 1.x release line](https://github.com/silverstripe/silverstripe-versionfeed/tree/1.2).
**Note:** For a Silverstripe 3.x compatible version, please use [the 1.x release line](https://github.com/silverstripe/silverstripe-versionfeed/tree/1.2).
## Installation
Install with composer by running `composer require silverstripe/versionfeed` in the root of your SilverStripe project.
Install with composer by running `composer require silverstripe/versionfeed` in the root of your Silverstripe project.
## Usage

View File

@ -16,13 +16,14 @@
}
],
"require": {
"php": "^7.3 || ^8.0",
"php": "^7.4 || ^8.0",
"silverstripe/cms": "^4",
"silverstripe/versioned": "^1",
"silverstripe/siteconfig": "^4"
},
"require-dev": {
"phpunit/phpunit": "^9.5",
"silverstripe/framework": "^4.10",
"squizlabs/php_codesniffer": "^3.0"
},
"autoload": {

View File

@ -1,5 +1,7 @@
---
title: Content change RSS
summary: Adds page or site wide RSS feeds that display content changes
---
# Content change RSS

View File

@ -6,6 +6,8 @@ en:
TITLECHANGED: 'Title has changed:'
Warning: 'Publicising the history will also disclose the changes that have at the time been protected from the public view.'
Warning2: 'Changing access settings in such a way that this page or pages under it become publicly<br>accessible may result in publicising all historical changes on these pages too. Please review<br> this section''s "Public history" settings to ascertain only intended information is disclosed.'
db_PublicHistory: 'Public history'
SilverStripe\VersionFeed\VersionFeedSiteConfig:
ALLCHANGES: 'All page changes'
ALLCHANGESLABEL: 'Make global changes feed public'
db_AllChangesEnabled: 'All changes enabled'

View File

@ -6,6 +6,8 @@ eo:
TITLECHANGED: 'Titolo estas ŝanĝita:'
Warning: 'Publikigi la historion ankaŭ malkaŝos la ŝanĝojn ĝis tiam protektitajn kontraŭ publika vido.'
Warning2: 'Ŝanĝi la alirajn agordojn tiel ke ĉi tiu paĝo, aŭ paĝoj sub ĝi, fariĝas publike alireblaj <br>eble rezultigos ke publikiĝos ĉiuj historiaj ŝanĝoj en tiuj paĝoj. Bonvole rekonsideru <br> la sekcion "Publika historio" de ĉi tiu sekcio, por certigi ke nur intencita informo publikiĝu.'
db_PublicHistory: 'Publika historio'
SilverStripe\VersionFeed\VersionFeedSiteConfig:
ALLCHANGES: 'Ĉiuj paĝaj ŝanĝoj'
ALLCHANGESLABEL: 'Ĉieaj ŝanĝoj fluu en publikan'
db_AllChangesEnabled: 'Ĉiuj ŝanĝoj enŝaltitaj'

13
lang/sk.yml Normal file
View File

@ -0,0 +1,13 @@
sk:
SilverStripe\VersionFeed\VersionFeed:
LABEL: 'Zverejniť históriu'
SINGLEPAGEFEEDTITLE: 'Aktualizácie stránky {title}'
SITEFEEDTITLE: 'Aktualizácie {title}'
TITLECHANGED: 'Názov sa zmenil:'
Warning: 'Zverejnením histórie sa zverejnia aj zmeny, ktoré boli v tom čase chránené pred zrakom verejnosti.'
Warning2: 'Zmena nastavení prístupu tak, aby sa táto stránka alebo stránky pod ňou stali verejne prístupné,<br>môže viesť k zverejneniu všetkých historických zmien aj na týchto stránkach.<br> Skontrolujte nastavenia v časti "Verejná história", aby ste sa uistili, že sú zverejnené iba zamýšľané informácie.'
db_PublicHistory: 'Verejná história'
SilverStripe\VersionFeed\VersionFeedSiteConfig:
ALLCHANGES: 'Všetky zmeny stránky'
ALLCHANGESLABEL: 'Zverejnite informačný kanál globálnych zmien'
db_AllChangesEnabled: 'Všetky zmeny povolené'

View File

@ -6,6 +6,7 @@ sl:
TITLECHANGED: 'Spremenjen naslov:'
Warning: 'Objava zgodovine bo razkrila tudi spremembe, ki do sedaj niso bile javno objavljene.'
Warning2: 'Sprememba nastavitev dostopa tako, da so so ta stran ali njene podstrani dostopne javnosti, <br> lahko povzroči objavo tudi vseh sprememb na omenjenih straneh. Podrobno preverite <br> seznam sprememb in se prepričajte, da boste razkrili samo tiste informacije, ki jih želite.'
db_PublicHistory: 'Javna zgodovina'
SilverStripe\VersionFeed\VersionFeedSiteConfig:
ALLCHANGES: 'Vse spremembe'
ALLCHANGESLABEL: 'Javno objavi seznam s krovnimi spremembami'

View File

@ -1,3 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="vendor/silverstripe/cms/tests/bootstrap.php" colors="true">
<testsuites>
<testsuite name="Default">

View File

@ -68,13 +68,13 @@ class RateLimitFilter extends ContentFilter
// Add global identifier
if ($this->config()->get('lock_bypage')) {
$key .= '_' . md5($itemkey);
$key .= '_' . md5($itemkey ?? '');
}
// Add user-specific identifier
if ($this->config()->get('lock_byuserip') && Controller::has_curr()) {
$ip = Controller::curr()->getRequest()->getIP();
$key .= '_' . md5($ip);
$key .= '_' . md5($ip ?? '');
}
return $key;

View File

@ -2,6 +2,7 @@
namespace SilverStripe\VersionFeed;
use SilverStripe\Dev\Deprecation;
use SilverStripe\CMS\Model\SiteTreeExtension;
use SilverStripe\Core\Config\Config;
use SilverStripe\Forms\CheckboxField;
@ -77,7 +78,7 @@ class VersionFeed extends SiteTreeExtension
$offset = $highestVersion ? "AND \"SiteTree_Versions\".\"Version\"<='".(int)$highestVersion."'" : '';
// Get just enough elements for diffing. We need one more than desired to have something to compare to.
$qLimit = (int)$limit + 1;
$versions = $this->owner->allVersions(
$versions = $this->owner->Versions(
"\"WasPublished\"='1' AND \"CanViewType\" IN ('Anyone', 'Inherit') $offset",
"\"SiteTree\".\"LastEdited\" DESC, \"SiteTree\".\"ID\" DESC",
$qLimit
@ -171,7 +172,7 @@ class VersionFeed extends SiteTreeExtension
/**
* Compile a list of changes to the current page, excluding non-published and explicitly secured versions.
*
* @deprecated 2.0.0 Use VersionFeed::getDiffList instead
* @deprecated 2.0.0 Use VersionFeed::getDiffList() instead
*
* @param int $highestVersion Top version number to consider.
* @param boolean $fullHistory Set to true to get the full change history, set to false for a single diff.
@ -181,6 +182,7 @@ class VersionFeed extends SiteTreeExtension
*/
public function getDiffedChanges($highestVersion = null, $fullHistory = true, $limit = 100)
{
Deprecation::notice('2.0.0', 'Use VersionFeed::getDiffList() instead');
return $this->getDiffList(
$highestVersion,
$fullHistory ? $limit : 1

View File

@ -119,7 +119,7 @@ class VersionFeedController extends Extension
if ($lastChange) {
// Cache the diffs to remove DOS possibility.
$key = 'allchanges'
. preg_replace('#[^a-zA-Z0-9_]#', '', $lastChange['LastEdited'])
. preg_replace('#[^a-zA-Z0-9_]#', '', $lastChange['LastEdited'] ?? '')
. (Security::getCurrentUser() ? Security::getCurrentUser()->ID : 'public');
$changeList = $this->filterContent($key, function () use ($latestChanges) {
$changeList = new ArrayList();
@ -191,6 +191,7 @@ class VersionFeedController extends Extension
{
if (!Config::inst()->get(VersionFeed::class, 'allchanges_enabled')
|| !SiteConfig::current_site_config()->AllChangesEnabled
|| !method_exists($this->owner, 'getSiteRSSLink')
) {
return;
}

View File

@ -86,7 +86,7 @@ class VersionFeedFunctionalTest extends FunctionalTest
$response = $this->get($page->RelativeLink('allchanges'));
$this->assertEquals(200, $response->getStatusCode());
$xml = simplexml_load_string($response->getBody());
$xml = simplexml_load_string($response->getBody() ?? '');
$this->assertFalse(
(bool)$xml->channel->item,
'With Page\'s "PublicHistory" disabled, `allchanges` action should not have an item in the channel'
@ -99,7 +99,7 @@ class VersionFeedFunctionalTest extends FunctionalTest
$response = $this->get($page->RelativeLink('changes'));
$this->assertEquals(200, $response->getStatusCode());
$xml = simplexml_load_string($response->getBody());
$xml = simplexml_load_string($response->getBody() ?? '');
$this->assertTrue(
(bool)$xml->channel->item,
'With Page\'s "PublicHistory" enabled, `changes` action should have an item in the channel'
@ -107,7 +107,7 @@ class VersionFeedFunctionalTest extends FunctionalTest
$response = $this->get($page->RelativeLink('allchanges'));
$this->assertEquals(200, $response->getStatusCode());
$xml = simplexml_load_string($response->getBody());
$xml = simplexml_load_string($response->getBody() ?? '');
$this->assertTrue(
(bool)$xml->channel->item,
'With "PublicHistory" enabled, `allchanges` action should have an item in the channel'
@ -141,7 +141,7 @@ class VersionFeedFunctionalTest extends FunctionalTest
$page1->ID,
Versioned::get_versionnumber_by_stage(SiteTree::class, 'Live', $page1->ID, false)
]);
$key = RateLimitFilter::CACHE_PREFIX . '_' . md5($key);
$key = RateLimitFilter::CACHE_PREFIX . '_' . md5($key ?? '');
$this->cache->set($key, time() + 10);
$response = $this->get($page1->RelativeLink('changes'));
$this->assertEquals(429, $response->getStatusCode());
@ -171,19 +171,19 @@ class VersionFeedFunctionalTest extends FunctionalTest
$page2 = $this->createPageWithChanges(['Title' => 'Page2']);
$response = $this->get($page1->RelativeLink('changes'));
$xml = simplexml_load_string($response->getBody());
$xml = simplexml_load_string($response->getBody() ?? '');
$titles = array_map(function ($item) {
return (string)$item->title;
}, $xml->xpath('//item'));
}, $xml->xpath('//item') ?? []);
// TODO Unclear if this should contain the original version
$this->assertContains('Changed: Page1', $titles);
$this->assertNotContains('Changed: Page2', $titles);
$response = $this->get($page2->RelativeLink('changes'));
$xml = simplexml_load_string($response->getBody());
$xml = simplexml_load_string($response->getBody() ?? '');
$titles = array_map(function ($item) {
return (string)$item->title;
}, $xml->xpath('//item'));
}, $xml->xpath('//item') ?? []);
// TODO Unclear if this should contain the original version
$this->assertNotContains('Changed: Page1', $titles);
$this->assertContains('Changed: Page2', $titles);
@ -195,10 +195,10 @@ class VersionFeedFunctionalTest extends FunctionalTest
$page2 = $this->createPageWithChanges(['Title' => 'Page2']);
$response = $this->get($page1->RelativeLink('allchanges'));
$xml = simplexml_load_string($response->getBody());
$xml = simplexml_load_string($response->getBody() ?? '');
$titles = array_map(function ($item) {
return str_replace('Changed: ', '', (string) $item->title);
}, $xml->xpath('//item'));
}, $xml->xpath('//item') ?? []);
$this->assertContains('Page1', $titles);
$this->assertContains('Page2', $titles);
}

View File

@ -44,18 +44,18 @@ class VersionFeedTest extends SapphireTest
// Strip spaces from test output because they're not reliably maintained by the HTML Tidier
$cleanDiffOutput = function ($val) {
return str_replace(' ', '', strip_tags($val));
return str_replace(' ', '', strip_tags($val ?? ''));
};
$this->assertContains(
str_replace(' ', '', _t('RSSHistory.TITLECHANGED', 'Title has changed:') . 'My Changed Title'),
array_map($cleanDiffOutput, $page->getDiffList()->column('DiffTitle')),
array_map($cleanDiffOutput, $page->getDiffList()->column('DiffTitle') ?? []),
'Detects published title changes'
);
$this->assertNotContains(
str_replace(' ', '', _t('RSSHistory.TITLECHANGED', 'Title has changed:') . 'My Unpublished Changed Title'),
array_map($cleanDiffOutput, $page->getDiffList()->column('DiffTitle')),
array_map($cleanDiffOutput, $page->getDiffList()->column('DiffTitle') ?? []),
'Ignores unpublished title changes'
);
}