diff --git a/.gitignore b/.gitignore index 69ff3db..3a9875b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ /vendor/ -/framework/ -/cms/ +composer.lock diff --git a/README.md b/README.md index 574ea6f..c157746 100644 --- a/README.md +++ b/README.md @@ -7,4 +7,6 @@ The latest version only supports SilverStripe 4, see the `1.0` branch for a Silv ## Installation (composer required) - $ composer require "heyday/silverstripe-redirects" \ No newline at end of file +``` +composer require "heyday/silverstripe-redirects" +``` diff --git a/_config/config.yml b/_config/config.yml index 301d2c6..079e1f1 100644 --- a/_config/config.yml +++ b/_config/config.yml @@ -1,9 +1,7 @@ +--- +Name: redirects +--- SilverStripe\Core\Injector\Injector: - RedirectsCache: - class: Doctrine\Common\Cache\FilesystemCache - constructor: - 0: '../silverstripe-redirects/cache' - RedirectUrlDataSource: class: Heyday\SilverStripeRedirects\Source\DataSource\DataListDataSource constructor: @@ -14,16 +12,15 @@ SilverStripe\Core\Injector\Injector: class: Heyday\SilverStripeRedirects\Source\DataSource\CachedDataSource constructor: 0: '%$RedirectUrlDataSource' - 1: '%$RedirectsCache' - Heyday\SilverStripeRedirects\Code\RedirectUrl: + Heyday\SilverStripeRedirects\Source\RedirectUrl: properties: dataSource: '%$CachedRedirectUrlDataSource' RedirectUrlDataList: class: SilverStripe\ORM\DataList constructor: - 0: 'Heyday\SilverStripeRedirects\Code\RedirectUrl' + 0: 'Heyday\SilverStripeRedirects\Source\RedirectUrl' Heyday\SilverStripeRedirects\Source\Redirector: constructor: @@ -33,7 +30,17 @@ SilverStripe\Core\Injector\Injector: constructor: 0: '%$Heyday\SilverStripeRedirects\Source\Redirector' - SilverStripe\Control\RequestProcessor: + Psr\SimpleCache\CacheInterface.redirectsCache: + factory: SilverStripe\Core\Cache\CacheFactory + constructor: + namespace: "redirectsCache" +--- +Name: redirects-processing +After: + - requestprocessors +--- +SilverStripe\Core\Injector\Injector: + SilverStripe\Control\Director: properties: - filters: - - '%$Heyday\SilverStripeRedirects\Source\RequestFilter' + Middlewares: + RedirectMiddleware: '%$Heyday\SilverStripeRedirects\Source\RequestFilter' diff --git a/_config/legacy.yml b/_config/legacy.yml index 465d373..7870711 100644 --- a/_config/legacy.yml +++ b/_config/legacy.yml @@ -3,7 +3,7 @@ Name: redirectslegacy --- SilverStripe\ORM\DatabaseAdmin: classname_value_remapping: - RedirectUrl: 'Heyday\SilverStripeRedirects\Code\RedirectUrl' - -Heyday\SilverStripeRedirects\Code\RedirectUrl: - table_name: RedirectUrl \ No newline at end of file + RedirectUrl: 'Heyday\SilverStripeRedirects\Source\RedirectUrl' + 'Heyday\SilverStripeRedirects\Code\RedirectUrl': 'Heyday\SilverStripeRedirects\Source\RedirectUrl' +Heyday\SilverStripeRedirects\Source\RedirectUrl: + table_name: RedirectUrl diff --git a/cache/.gitignore b/cache/.gitignore deleted file mode 100644 index d3c28dc..0000000 --- a/cache/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -* -!.gitignore -!_manifest_exclude \ No newline at end of file diff --git a/cache/_manifest_exclude b/cache/_manifest_exclude deleted file mode 100644 index e69de29..0000000 diff --git a/composer.json b/composer.json index bdaf870..74f943c 100644 --- a/composer.json +++ b/composer.json @@ -1,34 +1,16 @@ { - "name": "heyday/silverstripe-redirects", - "description": "DB Management of redirects", - "license": "MIT", - "authors": [ - { - "name": "Cam Spiers", - "email": "camspiers@gmail.com" - },{ - "name": "Ben Dubuisson", - "email": "ben.dubuisson@heyday.co.nz" - } - ], - "type": "silverstripe-module", - "autoload": { - "psr-4": { - "Heyday\\SilverStripeRedirects\\Code\\": "code/", - "Heyday\\SilverStripeRedirects\\Source\\": "src/" - } - }, - "require": { - "doctrine/cache": "~1.3", - "silverstripe/framework": "~4.0", - "silverstripe/cms": "~4.0" - }, - "require-dev": { - "symfony/yaml": "~2.5" - }, - "suggest": { - "symfony/yaml": "Add this Yaml library to be able to use Yaml sources" - }, - "prefer-stable": true, - "minimum-stability": "dev" + "name": "heyday/silverstripe-redirects", + "description": "DB Management of redirects", + "license": "MIT", + "type": "silverstripe-vendormodule", + "autoload": { + "psr-4": { + "Heyday\\SilverStripeRedirects\\Source\\": "src/" + } + }, + "require": { + "silverstripe/cms": "~4.0" + }, + "prefer-stable": true, + "minimum-stability": "dev" } diff --git a/src/DataSource/CachedDataSource.php b/src/DataSource/CachedDataSource.php index 67bc90d..dbc0a06 100644 --- a/src/DataSource/CachedDataSource.php +++ b/src/DataSource/CachedDataSource.php @@ -2,26 +2,26 @@ namespace Heyday\SilverStripeRedirects\Source\DataSource; - use Heyday\SilverStripeRedirects\Source\DataSourceInterface; use Heyday\SilverStripeRedirects\Source\CacheableDataSourceInterface; +use Psr\SimpleCache\CacheInterface; +use SilverStripe\Core\Injector\Injector; class CachedDataSource implements DataSourceInterface { /** @var \Heyday\SilverStripeRedirects\Source\CacheableDataSourceInterface */ protected $dataSource; - - /** @var \Doctrine\Common\Cache\CacheProvider */ + + /** @var CacheInterface */ protected $cache; /** * @param CacheableDataSourceInterface $dataSource - * @param \Doctrine\Common\Cache\CacheProvider $cache */ - public function __construct(CacheableDataSourceInterface $dataSource, $cache) + public function __construct(CacheableDataSourceInterface $dataSource) { $this->dataSource = $dataSource; - $this->cache = $cache; + $this->cache = Injector::inst()->get(CacheInterface::class . '.redirectsCache'); } /** @@ -31,11 +31,13 @@ public function get() { $key = $this->dataSource->getKey(); - if (!$result = $this->cache->fetch($key)) { - $this->cache->save( + if (!$this->cache->has($key)) { + $this->cache->set( $key, $result = $this->dataSource->get() ); + } else { + $result = $this->cache->get($key); } return $result; @@ -47,6 +49,6 @@ public function get() */ public function delete() { - $this->cache->delete($this->dataSource->getKey()); + $this->cache->clear(); } -} \ No newline at end of file +} diff --git a/src/DataSource/DataListDataSource.php b/src/DataSource/DataListDataSource.php index 680a0ea..478e104 100644 --- a/src/DataSource/DataListDataSource.php +++ b/src/DataSource/DataListDataSource.php @@ -52,4 +52,4 @@ public function getKey() { return md5($this->list->sql()); } -} \ No newline at end of file +} diff --git a/code/RedirectUrl.php b/src/RedirectUrl.php similarity index 95% rename from code/RedirectUrl.php rename to src/RedirectUrl.php index eba117c..ea53e25 100644 --- a/code/RedirectUrl.php +++ b/src/RedirectUrl.php @@ -1,8 +1,9 @@ 'SilverStripe\CMS\Model\SiteTree', - 'ToRelation' => 'SilverStripe\CMS\Model\SiteTree' + 'FromRelation' => SiteTree::class, + 'ToRelation' => SiteTree::class ]; /** @@ -297,9 +298,7 @@ protected function hasPermission($member = null) } - /** - * Clear out from and to manual links if we have a relation - */ + protected function onBeforeWrite() { parent::onBeforeWrite(); @@ -317,23 +316,21 @@ protected function onBeforeWrite() } } - /** - * - */ + protected function onAfterWrite() { parent::onAfterWrite(); + if (isset($this->dataSource)) { $this->dataSource->delete(); } } - /** - * - */ + protected function onAfterDelete() { parent::onAfterDelete(); + if (isset($this->dataSource)) { $this->dataSource->delete(); } diff --git a/code/RedirectUrlValidator.php b/src/RedirectUrlValidator.php similarity index 94% rename from code/RedirectUrlValidator.php rename to src/RedirectUrlValidator.php index ecf0d39..89e9d81 100644 --- a/code/RedirectUrlValidator.php +++ b/src/RedirectUrlValidator.php @@ -1,6 +1,6 @@ validationError( 'From', @@ -31,7 +31,7 @@ public function php($data) ); $valid = false; } - + if ($data['ToType'] == 'page' && $data['ToRelationID'] == 0) { $this->validationError( 'ToRelationID', @@ -40,7 +40,7 @@ public function php($data) ); $valid = false; } - + if ($data['ToType'] == 'manual' && empty($data['To'])) { $this->validationError( 'To', diff --git a/code/RedirectsModelAdmin.php b/src/RedirectsModelAdmin.php similarity index 91% rename from code/RedirectsModelAdmin.php rename to src/RedirectsModelAdmin.php index b3cf319..73dd45c 100644 --- a/code/RedirectsModelAdmin.php +++ b/src/RedirectsModelAdmin.php @@ -1,6 +1,6 @@ redirector = $redirector; } - /** - * Filter executed before a request processes - * - * @param HTTPRequest $request Request container object - * @return boolean Whether to continue processing other filters. Null or true will continue processing (optional) - */ - public function preRequest(HTTPRequest $request) + public function process(HTTPRequest $request, callable $delegate) { if (!Director::is_cli() && $response = $this->redirector->getResponse($request)) { $response->output(); exit; } - } - /** - * Filter executed AFTER a request - * - * @param HTTPRequest $request Request container object - * @param HTTPResponse $response - * @return boolean Whether to continue processing other filters. Null or true will continue processing (optional) - */ - public function postRequest(HTTPRequest $request, HTTPResponse $response) - { - //NOOP + $response = $delegate($request); + + if (!$response) { + return null; + } + + return $response; } -} \ No newline at end of file +} diff --git a/src/Transformer/RedirectUrlTransformer.php b/src/Transformer/RedirectUrlTransformer.php index 1ed630d..3398199 100644 --- a/src/Transformer/RedirectUrlTransformer.php +++ b/src/Transformer/RedirectUrlTransformer.php @@ -3,7 +3,7 @@ namespace Heyday\SilverStripeRedirects\Source\Transformer; use Heyday\SilverStripeRedirects\Source\Redirect; -use Heyday\SilverStripeRedirects\Code\RedirectUrl; +use Heyday\SilverStripeRedirects\Source\RedirectUrl; use Heyday\SilverStripeRedirects\Source\TransformerInterface; class RedirectUrlTransformer implements TransformerInterface @@ -25,4 +25,4 @@ public function transform($item) )); } } -} \ No newline at end of file +} diff --git a/src/_manifest_exclude b/src/_manifest_exclude deleted file mode 100644 index e69de29..0000000