run the upgrader tool over the codebase to namespace the classes

This commit is contained in:
Dylan Wagstaff 2017-12-11 12:10:56 +13:00
parent bfb7422981
commit 9a7651b017
9 changed files with 163 additions and 31 deletions

12
.upgrade.yml Normal file
View File

@ -0,0 +1,12 @@
mappings:
VersionFeed: SilverStripe\VersionFeed\VersionFeed
VersionFeed_Controller: SilverStripe\VersionFeed\VersionFeedController
VersionFeedSiteConfig: SilverStripe\VersionFeed\VersionFeedSiteConfig
CachedContentFilter: SilverStripe\VersionFeed\Filters\CachedContentFilter
ContentFilter: SilverStripe\VersionFeed\Filters\ContentFilter
RateLimitFilter: SilverStripe\VersionFeed\Filters\RateLimitFilter
\VersionFeed\Filters\CachedContentFilter: SilverStripe\VersionFeed\Filters\CachedContentFilter
\VersionFeed\Filters\ContentFilter: SilverStripe\VersionFeed\Filters\ContentFilter
\VersionFeed\Filters\RateLimitFilter: SilverStripe\VersionFeed\Filters\RateLimitFilter
VersionFeedFunctionalTest: SilverStripe\VersionFeed\Tests\VersionFeedFunctionalTest
VersionFeedTest: SilverStripe\VersionFeed\Tests\VersionFeedTest

View File

@ -1,6 +1,12 @@
<?php <?php
namespace VersionFeed\Filters; namespace SilverStripe\VersionFeed\Filters;
use SilverStripe\Core\Config\Config;
/** /**
* Caches results of a callback * Caches results of a callback
@ -19,7 +25,7 @@ class CachedContentFilter extends ContentFilter {
$cache = $this->getCache(); $cache = $this->getCache();
// Return cached value if available // Return cached value if available
$cacheEnabled = \Config::inst()->get(get_class(), 'cache_enabled'); $cacheEnabled = Config::inst()->get(get_class(), 'cache_enabled');
$result = (isset($_GET['flush']) || !$cacheEnabled) $result = (isset($_GET['flush']) || !$cacheEnabled)
? null ? null
: $cache->load($key); : $cache->load($key);

View File

@ -1,6 +1,14 @@
<?php <?php
namespace VersionFeed\Filters; namespace SilverStripe\VersionFeed\Filters;
use SS_Cache;
use SilverStripe\VersionFeed\VersionFeedController;
use SilverStripe\Core\Config\Config;
/** /**
* Conditionally executes a given callback, attempting to return the desired results * Conditionally executes a given callback, attempting to return the desired results
@ -33,11 +41,11 @@ abstract class ContentFilter {
* @return Zend_Cache_Frontend * @return Zend_Cache_Frontend
*/ */
protected function getCache() { protected function getCache() {
$cache = \SS_Cache::factory('VersionFeed_Controller'); $cache = \SS_Cache::factory(VersionFeedController::class);
$cache->setOption('automatic_serialization', true); $cache->setOption('automatic_serialization', true);
// Map 0 to null for unlimited lifetime // Map 0 to null for unlimited lifetime
$lifetime = \Config::inst()->get(get_class($this), 'cache_lifetime') ?: null; $lifetime = Config::inst()->get(get_class($this), 'cache_lifetime') ?: null;
$cache->setLifetime($lifetime); $cache->setLifetime($lifetime);
return $cache; return $cache;
} }

View File

@ -1,6 +1,16 @@
<?php <?php
namespace VersionFeed\Filters; namespace SilverStripe\VersionFeed\Filters;
use SilverStripe\Core\Config\Config;
use SilverStripe\Control\Controller;
use SilverStripe\Control\HTTPResponse_Exception;
/** /**
* Provides rate limiting of execution of a callback * Provides rate limiting of execution of a callback
@ -60,13 +70,13 @@ class RateLimitFilter extends ContentFilter {
$key = self::CACHE_PREFIX; $key = self::CACHE_PREFIX;
// Add global identifier // Add global identifier
if(\Config::inst()->get(get_class(), 'lock_bypage')) { if(Config::inst()->get(get_class(), 'lock_bypage')) {
$key .= '_' . md5($itemkey); $key .= '_' . md5($itemkey);
} }
// Add user-specific identifier // Add user-specific identifier
if(\Config::inst()->get(get_class(), 'lock_byuserip') && \Controller::has_curr()) { if(Config::inst()->get(get_class(), 'lock_byuserip') && Controller::has_curr()) {
$ip = \Controller::curr()->getRequest()->getIP(); $ip = Controller::curr()->getRequest()->getIP();
$key .= '_' . md5($ip); $key .= '_' . md5($ip);
} }
@ -76,7 +86,7 @@ class RateLimitFilter extends ContentFilter {
public function getContent($key, $callback) { public function getContent($key, $callback) {
// Bypass rate limiting if flushing, or timeout isn't set // Bypass rate limiting if flushing, or timeout isn't set
$timeout = \Config::inst()->get(get_class(), 'lock_timeout'); $timeout = Config::inst()->get(get_class(), 'lock_timeout');
if(isset($_GET['flush']) || !$timeout) { if(isset($_GET['flush']) || !$timeout) {
return parent::getContent($key, $callback); return parent::getContent($key, $callback);
} }
@ -87,7 +97,7 @@ class RateLimitFilter extends ContentFilter {
if($lockedUntil = $cache->load($limitKey)) { if($lockedUntil = $cache->load($limitKey)) {
if(time() < $lockedUntil) { if(time() < $lockedUntil) {
// Politely inform visitor of limit // Politely inform visitor of limit
$response = new \SS_HTTPResponse_Exception('Too Many Requests.', 429); $response = new HTTPResponse_Exception('Too Many Requests.', 429);
$response->getResponse()->addHeader('Retry-After', 1 + $lockedUntil - time()); $response->getResponse()->addHeader('Retry-After', 1 + $lockedUntil - time());
throw $response; throw $response;
} }
@ -100,7 +110,7 @@ class RateLimitFilter extends ContentFilter {
$result = parent::getContent($key, $callback); $result = parent::getContent($key, $callback);
// Reset rate limit with optional cooldown // Reset rate limit with optional cooldown
if($cooldown = \Config::inst()->get(get_class(), 'lock_cooldown')) { if($cooldown = Config::inst()->get(get_class(), 'lock_cooldown')) {
// Set cooldown on successful query execution // Set cooldown on successful query execution
$cache->save(time() + $cooldown, $limitKey); $cache->save(time() + $cooldown, $limitKey);
} else { } else {

View File

@ -1,5 +1,28 @@
<?php <?php
namespace SilverStripe\VersionFeed;
use Diff;
use HTMLText;
use SilverStripe\ORM\ArrayList;
use SilverStripe\Forms\FieldList;
use SilverStripe\Core\Config\Config;
use SilverStripe\Forms\CheckboxField;
use SilverStripe\Forms\FieldGroup;
use SilverStripe\Forms\LiteralField;
use SilverStripe\SiteConfig\SiteConfig;
use SilverStripe\CMS\Model\SiteTreeExtension;
class VersionFeed extends SiteTreeExtension { class VersionFeed extends SiteTreeExtension {
private static $db = array( private static $db = array(

View File

@ -1,5 +1,33 @@
<?php <?php
namespace SilverStripe\VersionFeed;
use SilverStripe\Core\Config\Config;
use SilverStripe\VersionFeed\VersionFeed;
use SilverStripe\Control\RSS\RSSFeed;
use SilverStripe\SiteConfig\SiteConfig;
use SilverStripe\ORM\DB;
use SilverStripe\Security\Member;
use SilverStripe\ORM\ArrayList;
use SilverStripe\CMS\Model\SiteTree;
use SilverStripe\Versioned\Versioned_Version;
use SilverStripe\Core\Convert;
use SilverStripe\View\Requirements;
use SilverStripe\Core\Extension;
class VersionFeed_Controller extends Extension { class VersionFeed_Controller extends Extension {
private static $allowed_actions = array( private static $allowed_actions = array(
@ -48,7 +76,7 @@ class VersionFeed_Controller extends Extension {
*/ */
public function changes() { public function changes() {
// Check viewability of changes // Check viewability of changes
if(!Config::inst()->get('VersionFeed', 'changes_enabled') if(!Config::inst()->get(VersionFeed::class, 'changes_enabled')
|| !$this->owner->PublicHistory || !$this->owner->PublicHistory
|| $this->owner->Version == '' || $this->owner->Version == ''
) { ) {
@ -59,7 +87,7 @@ class VersionFeed_Controller extends Extension {
$target = $this->owner; $target = $this->owner;
$key = implode('_', array('changes', $this->owner->ID, $this->owner->Version)); $key = implode('_', array('changes', $this->owner->ID, $this->owner->Version));
$entries = $this->filterContent($key, function() use ($target) { $entries = $this->filterContent($key, function() use ($target) {
return $target->getDiffList(null, Config::inst()->get('VersionFeed', 'changes_limit')); return $target->getDiffList(null, Config::inst()->get(VersionFeed::class, 'changes_limit'));
}); });
// Generate the output. // Generate the output.
@ -74,13 +102,13 @@ class VersionFeed_Controller extends Extension {
*/ */
public function allchanges() { public function allchanges() {
// Check viewability of allchanges // Check viewability of allchanges
if(!Config::inst()->get('VersionFeed', 'allchanges_enabled') if(!Config::inst()->get(VersionFeed::class, 'allchanges_enabled')
|| !SiteConfig::current_site_config()->AllChangesEnabled || !SiteConfig::current_site_config()->AllChangesEnabled
) { ) {
return $this->owner->httpError(404, 'Global history not viewable'); return $this->owner->httpError(404, 'Global history not viewable');
} }
$limit = (int)Config::inst()->get('VersionFeed', 'allchanges_limit'); $limit = (int)Config::inst()->get(VersionFeed::class, 'allchanges_limit');
$latestChanges = DB::query(' $latestChanges = DB::query('
SELECT * FROM "SiteTree_versions" SELECT * FROM "SiteTree_versions"
WHERE "WasPublished" = \'1\' WHERE "WasPublished" = \'1\'
@ -135,7 +163,7 @@ class VersionFeed_Controller extends Extension {
* Generates and embeds the RSS header link for the page-specific version rss feed * Generates and embeds the RSS header link for the page-specific version rss feed
*/ */
public function linkToPageRSSFeed() { public function linkToPageRSSFeed() {
if (!Config::inst()->get('VersionFeed', 'changes_enabled') || !$this->owner->PublicHistory) { if (!Config::inst()->get(VersionFeed::class, 'changes_enabled') || !$this->owner->PublicHistory) {
return; return;
} }
@ -152,7 +180,7 @@ class VersionFeed_Controller extends Extension {
* Generates and embeds the RSS header link for the global version rss feed * Generates and embeds the RSS header link for the global version rss feed
*/ */
public function linkToAllSiteRSSFeed() { public function linkToAllSiteRSSFeed() {
if(!Config::inst()->get('VersionFeed', 'allchanges_enabled') if(!Config::inst()->get(VersionFeed::class, 'allchanges_enabled')
|| !SiteConfig::current_site_config()->AllChangesEnabled || !SiteConfig::current_site_config()->AllChangesEnabled
) { ) {
return; return;

View File

@ -1,5 +1,21 @@
<?php <?php
namespace SilverStripe\VersionFeed;
use SilverStripe\Forms\FieldList;
use SilverStripe\Core\Config\Config;
use SilverStripe\VersionFeed\VersionFeed;
use SilverStripe\Forms\CheckboxField;
use SilverStripe\Forms\FieldGroup;
use SilverStripe\ORM\DataExtension;
/** /**
* Allows global configuration of all changes * Allows global configuration of all changes
*/ */
@ -17,8 +33,8 @@ class VersionFeedSiteConfig extends DataExtension {
$labels['AllChangesEnabled'] = _t('VersionFeedSiteConfig.ALLCHANGESLABEL', 'Make global changes feed public'); $labels['AllChangesEnabled'] = _t('VersionFeedSiteConfig.ALLCHANGESLABEL', 'Make global changes feed public');
} }
public function updateCMSFields(\FieldList $fields) { public function updateCMSFields(FieldList $fields) {
if(!Config::inst()->get('VersionFeed', 'allchanges_enabled')) return; if(!Config::inst()->get(VersionFeed::class, 'allchanges_enabled')) return;
$fields->addFieldToTab('Root.Access', $fields->addFieldToTab('Root.Access',
FieldGroup::create(new CheckboxField('AllChangesEnabled', $this->owner->fieldLabel('AllChangesEnabled'))) FieldGroup::create(new CheckboxField('AllChangesEnabled', $this->owner->fieldLabel('AllChangesEnabled')))

View File

@ -1,10 +1,29 @@
<?php <?php
namespace SilverStripe\VersionFeed\Tests;
use SS_Cache;
use Zend_Cache;
use Page;
use SilverStripe\VersionFeed\VersionFeed;
use SilverStripe\VersionFeed\VersionFeedController;
use SilverStripe\Core\Config\Config;
use SilverStripe\CMS\Model\SiteTree;
use SilverStripe\Versioned\Versioned;
use SilverStripe\SiteConfig\SiteConfig;
use SilverStripe\Dev\FunctionalTest;
class VersionFeedFunctionalTest extends FunctionalTest { class VersionFeedFunctionalTest extends FunctionalTest {
protected $usesDatabase = true; protected $usesDatabase = true;
protected $requiredExtensions = array( protected $requiredExtensions = array(
'Page' => array('VersionFeed'), 'Page' => array(VersionFeed::class),
'Page_Controller' => array('VersionFeed_Controller'), 'Page_Controller' => array(VersionFeedController::class),
); );
protected $userIP; protected $userIP;
@ -12,15 +31,15 @@ class VersionFeedFunctionalTest extends FunctionalTest {
public function setUp() { public function setUp() {
parent::setUp(); parent::setUp();
$cache = SS_Cache::factory('VersionFeed_Controller'); $cache = SS_Cache::factory(VersionFeedController::class);
$cache->clean(Zend_Cache::CLEANING_MODE_ALL); $cache->clean(Zend_Cache::CLEANING_MODE_ALL);
$this->userIP = isset($_SERVER['HTTP_CLIENT_IP']) ? $_SERVER['HTTP_CLIENT_IP'] : null; $this->userIP = isset($_SERVER['HTTP_CLIENT_IP']) ? $_SERVER['HTTP_CLIENT_IP'] : null;
Config::nest(); Config::nest();
// Enable history by default // Enable history by default
Config::inst()->update('VersionFeed', 'changes_enabled', true); Config::inst()->update(VersionFeed::class, 'changes_enabled', true);
Config::inst()->update('VersionFeed', 'allchanges_enabled', true); Config::inst()->update(VersionFeed::class, 'allchanges_enabled', true);
// Disable caching and locking by default // Disable caching and locking by default
Config::inst()->update('VersionFeed\Filters\CachedContentFilter', 'cache_enabled', false); Config::inst()->update('VersionFeed\Filters\CachedContentFilter', 'cache_enabled', false);
@ -72,7 +91,7 @@ class VersionFeedFunctionalTest extends FunctionalTest {
// Artifically set cache lock // Artifically set cache lock
Config::inst()->update('VersionFeed\Filters\RateLimitFilter', 'lock_byuserip', false); Config::inst()->update('VersionFeed\Filters\RateLimitFilter', 'lock_byuserip', false);
$cache = SS_Cache::factory('VersionFeed_Controller'); $cache = SS_Cache::factory(VersionFeedController::class);
$cache->setOption('automatic_serialization', true); $cache->setOption('automatic_serialization', true);
$cache->save(time() + 10, \VersionFeed\Filters\RateLimitFilter::CACHE_PREFIX); $cache->save(time() + 10, \VersionFeed\Filters\RateLimitFilter::CACHE_PREFIX);
@ -89,7 +108,7 @@ class VersionFeedFunctionalTest extends FunctionalTest {
$key = implode('_', array( $key = implode('_', array(
'changes', 'changes',
$page1->ID, $page1->ID,
Versioned::get_versionnumber_by_stage('SiteTree', 'Live', $page1->ID, false) Versioned::get_versionnumber_by_stage(SiteTree::class, 'Live', $page1->ID, false)
)); ));
$key = \VersionFeed\Filters\RateLimitFilter::CACHE_PREFIX . '_' . md5($key); $key = \VersionFeed\Filters\RateLimitFilter::CACHE_PREFIX . '_' . md5($key);
$cache->save(time() + 10, $key); $cache->save(time() + 10, $key);
@ -195,7 +214,7 @@ class VersionFeedFunctionalTest extends FunctionalTest {
// Test requests to 'changes' action // Test requests to 'changes' action
foreach(array(true, false) as $publicHistory_Config) { foreach(array(true, false) as $publicHistory_Config) {
Config::inst()->update('VersionFeed', 'changes_enabled', $publicHistory_Config); Config::inst()->update(VersionFeed::class, 'changes_enabled', $publicHistory_Config);
$expectedResponse = $publicHistory_Page && $publicHistory_Config ? 200 : 404; $expectedResponse = $publicHistory_Page && $publicHistory_Config ? 200 : 404;
$response = $this->get($page->RelativeLink('changes')); $response = $this->get($page->RelativeLink('changes'));
$this->assertEquals($expectedResponse, $response->getStatusCode()); $this->assertEquals($expectedResponse, $response->getStatusCode());
@ -204,7 +223,7 @@ class VersionFeedFunctionalTest extends FunctionalTest {
// Test requests to 'allchanges' action on each page // Test requests to 'allchanges' action on each page
foreach(array(true, false) as $allChanges_Config) { foreach(array(true, false) as $allChanges_Config) {
foreach(array(true, false) as $allChanges_SiteConfig) { foreach(array(true, false) as $allChanges_SiteConfig) {
Config::inst()->update('VersionFeed', 'allchanges_enabled', $allChanges_Config); Config::inst()->update(VersionFeed::class, 'allchanges_enabled', $allChanges_Config);
$siteConfig = SiteConfig::current_site_config(); $siteConfig = SiteConfig::current_site_config();
$siteConfig->AllChangesEnabled = $allChanges_SiteConfig; $siteConfig->AllChangesEnabled = $allChanges_SiteConfig;
$siteConfig->write(); $siteConfig->write();

View File

@ -1,11 +1,21 @@
<?php <?php
namespace SilverStripe\VersionFeed\Tests;
use Page;
use SilverStripe\VersionFeed\VersionFeed;
use SilverStripe\VersionFeed\VersionFeedController;
use SilverStripe\Dev\SapphireTest;
class VersionFeedTest extends SapphireTest { class VersionFeedTest extends SapphireTest {
protected $usesDatabase = true; protected $usesDatabase = true;
protected $requiredExtensions = array( protected $requiredExtensions = array(
'SiteTree' => array('VersionFeed'), 'SiteTree' => array(VersionFeed::class),
'ContentController' => array('VersionFeed_Controller'), 'ContentController' => array(VersionFeedController::class),
); );
protected $illegalExtensions = array( protected $illegalExtensions = array(