diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ad1ca6..51a401d 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Redirect Changelog +## 2.0.0 - 2022-06-24 +### Changed +- Make compatible with Craft 4.0 +- Make compatible php 8.0 + ## 1.1.1 - 2020-08-06 + ### Fixed - Fixed plugin name in Composer to be in line with the plugin store diff --git a/INSTALL.md b/INSTALL.md index ee15c3d..ee06d55 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -2,7 +2,7 @@ ## Requirements -This plugin requires Craft CMS 3.0.14 or later. +This plugin requires Craft CMS 4.0 or later. ## Installation diff --git a/README.md b/README.md index 3041309..319d650 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Craft CMS 3.x Redirect Manager +# Craft CMS 4.x Redirect Manager Craft plugin that provides an easy way to enter and maintain 301 and 302 redirects. The plugin provides a clear user interface for admin and non-admin users. @@ -11,7 +11,7 @@ As a new (experimental) feature the redirect also give you the ability to enable **Note**: This plugin may become a paid add-on when the Craft Plugin store becomes available. ## Requirements -This plugin requires Craft CMS 3.4 or later. +This plugin requires Craft CMS 4.0 or later. ## Installation diff --git a/composer.json b/composer.json index e687bd1..efb21f4 100755 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "name": "dolphiq/redirect", "description": "Craft redirect plugin provides an easy way to enter and maintain 301 and 302 redirects and 404 error pages.", "type": "craft-plugin", - "version": "1.1.1", + "version": "2.0.0", "keywords": [ "craft", "cms", @@ -12,6 +12,9 @@ "seo", "craft3" ], + "platform": { + "php": "8.0|8.1" + }, "license": "MIT", "support": { "docs": "https://github.com/Dolphiq/craft3-plugin-redirect/blob/master/README.md", @@ -22,15 +25,10 @@ "name": "Dolphiq", "email": "info@dolphiq.nl", "homepage": "https://dolphiq.nl/" - }, - { - "name": "RJ Hallsted", - "email": "rjhallsted@gmail.com", - "homepage": "https://github.com/rjhallsted/" } ], "require": { - "craftcms/cms": "^3.0.14" + "craftcms/cms": "^4.0.0" }, "autoload": { "psr-4": { diff --git a/src/RedirectPlugin.php b/src/RedirectPlugin.php index 61da4fb..0fd4a6d 100644 --- a/src/RedirectPlugin.php +++ b/src/RedirectPlugin.php @@ -11,16 +11,21 @@ namespace dolphiq\redirect; use Craft; +use craft\base\Plugin; +use craft\events\RegisterUrlRulesEvent; +use craft\feedme\events\RegisterFeedMeElementsEvent; +use craft\feedme\Plugin as FeedmePlugin; +use craft\feedme\services\Elements as FeedmeElements; +use craft\helpers\UrlHelper; +use craft\web\UrlManager; use dolphiq\redirect\elements\FeedMeRedirect; use dolphiq\redirect\models\Settings; -use dolphiq\redirect\services\Redirects; use dolphiq\redirect\services\CatchAll; -use craft\events\RegisterUrlRulesEvent; -use craft\web\UrlManager; +use dolphiq\redirect\services\Redirects; use yii\base\Event; +use yii\web\Response; - -class RedirectPlugin extends \craft\base\Plugin +class RedirectPlugin extends Plugin { public static $plugin; @@ -30,7 +35,7 @@ class RedirectPlugin extends \craft\base\Plugin /** * Returns the Redirects service. * - * @return \dolphiq\redirect\services\Redirects The Redirects service + * @return Redirects The Redirects service */ public function getRedirects() { @@ -50,11 +55,11 @@ public function getCatchAll() return $this->_catchAallService; } - public $hasCpSection = true; - public $hasCpSettings = true; + public bool $hasCpSection = true; + public bool $hasCpSettings = true; // table schema version - public $schemaVersion = '1.0.5'; + public string $schemaVersion = '1.0.5'; /* * @@ -62,7 +67,7 @@ public function getCatchAll() * The getCpNavItem was found in the source and will check the user privilages already. * */ - public function getCpNavItem() + public function getCpNavItem(): array { return [ 'url' => 'redirect', @@ -82,10 +87,10 @@ protected function createSettingsModel(): Settings * */ - public function getSettingsResponse() + public function getSettingsResponse(): Response { - $url = \craft\helpers\UrlHelper::cpUrl('settings/redirect/settings'); - return \Craft::$app->controller->redirect($url); + $url = UrlHelper::cpUrl('settings/redirect/settings'); + return Craft::$app->controller->redirect($url); } /** @@ -97,7 +102,7 @@ public function getSettingsResponse() public function registerCpUrlRules(RegisterUrlRulesEvent $event) { // only register CP URLs if the user is logged in - if (!\Craft::$app->user->identity) + if (!Craft::$app->user->identity) return; $rules = [ // register routes for the sub nav @@ -137,8 +142,8 @@ public function registerCpUrlRules(RegisterUrlRulesEvent $event) */ private function registerFeedMeElement() { - if (Craft::$app->plugins->isPluginEnabled('feed-me') && class_exists(\craft\feedme\Plugin::class)) { - Event::on(\craft\feedme\services\Elements::class, \craft\feedme\services\Elements::EVENT_REGISTER_FEED_ME_ELEMENTS, function (\craft\feedme\events\RegisterFeedMeElementsEvent $e) { + if (Craft::$app->plugins->isPluginEnabled('feed-me') && class_exists(FeedmePlugin::class)) { + Event::on(FeedmeElements::class, FeedmeElements::EVENT_REGISTER_FEED_ME_ELEMENTS, function (RegisterFeedMeElementsEvent $e) { $e->elements[] = FeedMeRedirect::class; }); } @@ -155,7 +160,7 @@ public function init() Event::on(UrlManager::class, UrlManager::EVENT_REGISTER_CP_URL_RULES, [$this, 'registerCpUrlRules']); // Register FeedMe ElementType - $this->registerFeedMeElement(); + $this->registerFeedMeElement(); $settings = RedirectPlugin::$plugin->getSettings(); if ($settings->redirectsActive) { @@ -188,7 +193,7 @@ public function init() ]; } - $event->rules = array_merge($activeRules ,$event->rules); + $event->rules = array_merge($activeRules, $event->rules); } // 404? diff --git a/src/controllers/RedirectController.php b/src/controllers/RedirectController.php index f1bea3c..aaf4f10 100644 --- a/src/controllers/RedirectController.php +++ b/src/controllers/RedirectController.php @@ -23,7 +23,7 @@ class RedirectController extends Controller { private $_sourceRouteParams = []; - protected $allowAnonymous = ['index']; + protected array|int|bool $allowAnonymous = ['index']; const EVENT_BEFORE_CATCHALL = 'beforeCatchall'; diff --git a/src/controllers/SettingsController.php b/src/controllers/SettingsController.php index 63fec65..6f72e7b 100644 --- a/src/controllers/SettingsController.php +++ b/src/controllers/SettingsController.php @@ -10,15 +10,11 @@ namespace dolphiq\redirect\controllers; use Craft; -use craft\web\Controller; use craft\helpers\UrlHelper; - -use dolphiq\redirect\RedirectPlugin; -use dolphiq\redirect\elements\Redirect; - use craft\records\Element as ElementRecord; - -use craft\db\Query; +use craft\web\Controller; +use dolphiq\redirect\elements\Redirect; +use dolphiq\redirect\RedirectPlugin; class SettingsController extends Controller { @@ -186,7 +182,7 @@ public function actionSettings(): craft\web\Response * * @return Response */ - public function actionSaveSettings(): craft\web\Response + public function actionSaveSettings(): ?craft\web\Response { $this->requirePostRequest(); $this->requireAdmin(); @@ -219,7 +215,7 @@ public function actionSaveSettings(): craft\web\Response Craft::$app->getSession()->setNotice(Craft::t('app', 'Plugin settings saved.')); - return $this->redirectToPostedUrl($newSettings); + return $this->redirectToPostedUrl((object)$newSettings); } /** @@ -335,8 +331,8 @@ public function actionSaveRedirect() } $elementRecord = ElementRecord::findOne($redirect->id); - if($elementRecord) { - $redirect->uid = $elementRecord->uid; + if ($elementRecord) { + $redirect->uid = $elementRecord->uid; } $redirect->siteId = $siteId; @@ -359,14 +355,14 @@ public function actionSaveRedirect() return null; } else { - // remove form other sites - Craft::$app->getDb()->createCommand() - ->delete('{{%elements_sites}}', [ - 'AND', - ['elementId' => $redirect->id], - ['!=', 'siteId', $siteId] - ]) - ->execute(); + // remove form other sites + Craft::$app->getDb()->createCommand() + ->delete('{{%elements_sites}}', [ + 'AND', + ['elementId' => $redirect->id], + ['!=', 'siteId', $siteId] + ]) + ->execute(); if ($request->getAcceptsJson()) { return $this->asJson([ diff --git a/src/elements/FeedMeRedirect.php b/src/elements/FeedMeRedirect.php index 9c65bca..dbaba69 100644 --- a/src/elements/FeedMeRedirect.php +++ b/src/elements/FeedMeRedirect.php @@ -2,13 +2,11 @@ namespace dolphiq\redirect\elements; -use craft\feedme\Base\Element; -use craft\feedme\Base\ElementInterface; - +use Cake\Utility\Hash; use Craft; use craft\base\Element as BaseElement; - -use Cake\Utility\Hash; +use craft\feedme\Base\Element; +use craft\feedme\Base\ElementInterface; use dolphiq\redirect\elements\Redirect as RedirectElement; class FeedMeRedirect extends Element implements ElementInterface @@ -25,17 +23,17 @@ class FeedMeRedirect extends Element implements ElementInterface // Templates // ========================================================================= - public function getGroupsTemplate() + public function getGroupsTemplate(): string { return 'redirect/_feed-me/groups'; } - public function getColumnTemplate() + public function getColumnTemplate(): string { return 'redirect/_feed-me/column'; } - public function getMappingTemplate() + public function getMappingTemplate(): string { return 'redirect/_feed-me/map'; } @@ -44,12 +42,12 @@ public function getMappingTemplate() // Public Methods // ========================================================================= - public function getGroups() + public function getGroups(): array { return []; } - public function getQuery($settings, $params = []) + public function getQuery($settings, $params = []): mixed { $query = RedirectElement::find(); @@ -70,7 +68,7 @@ public function getQuery($settings, $params = []) return $query; } - public function setModel($settings) + public function setModel($settings): Redirect { $this->element = new RedirectElement(); @@ -83,7 +81,7 @@ public function setModel($settings) return $this->element; } - public function save($element, $settings) + public function save($element, $settings): bool { $this->element = $element; diff --git a/src/elements/Redirect.php b/src/elements/Redirect.php index 522274c..5b6099f 100644 --- a/src/elements/Redirect.php +++ b/src/elements/Redirect.php @@ -35,7 +35,7 @@ public static function displayName(): string /** * @inheritdoc */ - public static function refHandle() + public static function refHandle(): ?string { return 'redirect'; } @@ -105,7 +105,7 @@ public function getSupportedSites(): array /** * @inheritdoc */ - public function getCpEditUrl() + public function getCpEditUrl(): ?string { return UrlHelper::cpUrl('redirect/' . $this->id . '?siteId=' . $this->siteId); @@ -167,12 +167,14 @@ protected static function defineSources(string $context = null): array 'label' => Craft::t('redirect', 'Temporarily redirects'), 'criteria' => ['statusCode' => 302] ], - [ + /* + * @todo: add a toggle to set a redirect inactive + * [ 'key' => 'inactive', 'label' => Craft::t('redirect', 'Inactive redirects'), 'criteria' => ['hitAt' => 60] - ], + ],*/ ]; } return $sources; @@ -270,7 +272,7 @@ protected static function defineActions(string $source = null): array /** * @inheritdoc */ - public function rules() + public function rules(): array { $rules = parent::rules(); $rules[] = [['hitAt'], DateTimeValidator::class]; @@ -313,7 +315,7 @@ public function beforeSave(bool $isNew): bool * @inheritdoc * @throws Exception if reasons */ - public function afterSave(bool $isNew) + public function afterSave(bool $isNew): void { // Get the redirect record if (!$isNew) { @@ -367,7 +369,7 @@ protected static function defineDefaultTableAttributes(string $source): array /** * @inheritdoc */ - public function init() + public function init(): void { parent::init(); } @@ -378,7 +380,7 @@ public function init() * @return string */ /** @noinspection PhpInconsistentReturnPointsInspection */ - public function __toString() + public function __toString(): string { try { return $this->getName(); @@ -430,5 +432,5 @@ public function datetimeAttributes(): array * @var int|null siteId */ - public $siteId; + public ?int $siteId; } diff --git a/src/elements/actions/DeleteRedirects.php b/src/elements/actions/DeleteRedirects.php index a509829..8ab34cf 100644 --- a/src/elements/actions/DeleteRedirects.php +++ b/src/elements/actions/DeleteRedirects.php @@ -35,7 +35,7 @@ public static function isDestructive(): bool /** * @inheritdoc */ - public function getConfirmationMessage() + public function getConfirmationMessage(): ?string { return Craft::t('redirect', 'Are you sure you want to delete the selected redirects?'); } diff --git a/src/fields/Redirects.php b/src/fields/Redirects.php index 8a7c47b..13849d1 100644 --- a/src/fields/Redirects.php +++ b/src/fields/Redirects.php @@ -9,14 +9,9 @@ namespace dolphiq\redirect\fields; use Craft; +use craft\fields\BaseRelationField; use dolphiq\redirect\elements\Redirect; -/** - * Users represents a Users field. - * - * @author Pixel & Tonic, Inc. - * @since 3.0 - */ class Redirects extends BaseRelationField { // Static @@ -33,7 +28,7 @@ public static function displayName(): string /** * @inheritdoc */ - protected static function elementType(): string + public static function elementType():string { return Redirect::class; } @@ -55,7 +50,7 @@ public static function defaultSelectionLabel(): string /** * @inheritdoc */ - public function init() + public function init(): void { parent::init(); $this->allowMultipleSources = false; diff --git a/src/models/Settings.php b/src/models/Settings.php index a28cd69..269ca4a 100644 --- a/src/models/Settings.php +++ b/src/models/Settings.php @@ -23,7 +23,7 @@ class Settings extends Model /** * @inheritdoc */ - public function init() + public function init(): void { parent::init(); } @@ -31,7 +31,7 @@ public function init() /** * @inheritdoc */ - public function rules() + public function rules(): array { return [ [['redirectsActive', 'catchAllActive'], 'required'], diff --git a/src/records/RedirectGroup.php b/src/records/RedirectGroup.php index ba1e52b..7d6715f 100644 --- a/src/records/RedirectGroup.php +++ b/src/records/RedirectGroup.php @@ -5,9 +5,10 @@ * @license https://craftcms.com/license */ -namespace craft\records; +namespace dolphiq\redirect\records; use craft\db\ActiveRecord; +use craft\records\FieldLayout; use yii\db\ActiveQueryInterface; /** diff --git a/src/templates/redirects.twig b/src/templates/redirects.twig index ad9c118..e23fc85 100644 --- a/src/templates/redirects.twig +++ b/src/templates/redirects.twig @@ -17,7 +17,7 @@ {% exit 404 %} {% endif %} -{% set sources = craft.app.elementIndexes.getSources(elementType, 'index') %} +{% set sources = craft.app.ElementSources.getSources(elementType, 'index') %} {% set showSiteMenu = (craft.app.getIsMultiSite() ? (showSiteMenu ?? 'auto') : false) %} {% if showSiteMenu == 'auto' %}