From 09b9939b6543e51078ff7635b10540bfd736f75e Mon Sep 17 00:00:00 2001 From: Jean-Christian Denis Date: Wed, 19 Apr 2023 23:50:27 +0200 Subject: [PATCH] better way to manage cleaners stack --- src/AbstractCleaner.php | 13 ------------- src/Cleaners.php | 31 +++++++++++++++++-------------- src/Prepend.php | 20 ++++++++++++-------- 3 files changed, 29 insertions(+), 35 deletions(-) diff --git a/src/AbstractCleaner.php b/src/AbstractCleaner.php index 98ac6e1..3c683ad 100644 --- a/src/AbstractCleaner.php +++ b/src/AbstractCleaner.php @@ -14,8 +14,6 @@ declare(strict_types=1); namespace Dotclear\Plugin\Uninstaller; -use ArrayObject; - /** * Cleaner abstract class. * @@ -55,17 +53,6 @@ abstract class AbstractCleaner $this->actions = $actions; } - /** - * Create and add the Cleaner to a stack. - * - * @param ArrayObject $stack The cleaners stack - */ - public static function create(ArrayObject $stack): void - { - $class = static::class; - $stack->append(new $class()); - } - /** * Initialize Cleaner properties. * diff --git a/src/Cleaners.php b/src/Cleaners.php index b08fb4a..ae5cd22 100644 --- a/src/Cleaners.php +++ b/src/Cleaners.php @@ -14,7 +14,6 @@ declare(strict_types=1); namespace Dotclear\Plugin\Uninstaller; -use ArrayObject; use dcCore; use Exception; @@ -27,24 +26,28 @@ class Cleaners private array $cleaners = []; /** - * Constructor register the cleaners. + * Contructor load cleaners. */ public function __construct() { - $cleaners = new ArrayObject(); + # --BEHAVIOR-- UninstallerConstruct: Uninstaller + dcCore::app()->callBehavior('UninstallerCleanersConstruct', $this); + } - try { - # --BEHAVIOR-- UninstallerAddCleaner: ArrayObject - dcCore::app()->callBehavior('UninstallerAddCleaner', $cleaners); - - foreach ($cleaners as $cleaner) { - if (is_a($cleaner, AbstractCleaner::class) && !isset($this->cleaners[$cleaner->id])) { - $this->cleaners[$cleaner->id] = $cleaner; - } - } - } catch (Exception $e) { - dcCore::app()->error->add($e->getMessage()); + /** + * Add a cleaner. + * + * @param AbstractCleaner $cleaner The cleaner instance + * + * @return Cleaners Self instance + */ + public function add(AbstractCleaner $cleaner): Cleaners + { + if (!isset($this->cleaners[$cleaner->id])) { + $this->cleaners[$cleaner->id] = $cleaner; } + + return $this; } /** diff --git a/src/Prepend.php b/src/Prepend.php index 482475e..4e347fa 100644 --- a/src/Prepend.php +++ b/src/Prepend.php @@ -35,14 +35,18 @@ class Prepend extends dcNsProcess } // Add cleaners to Uninstaller - dcCore::app()->addBehavior('UninstallerAddCleaner', [Cleaner\Settings::class, 'create']); - dcCore::app()->addBehavior('UninstallerAddCleaner', [Cleaner\Tables::class, 'create']); - dcCore::app()->addBehavior('UninstallerAddCleaner', [Cleaner\Versions::class, 'create']); - dcCore::app()->addBehavior('UninstallerAddCleaner', [Cleaner\Logs::class, 'create']); - dcCore::app()->addBehavior('UninstallerAddCleaner', [Cleaner\Caches::class, 'create']); - dcCore::app()->addBehavior('UninstallerAddCleaner', [Cleaner\Vars::class, 'create']); - dcCore::app()->addBehavior('UninstallerAddCleaner', [Cleaner\Themes::class, 'create']); - dcCore::app()->addBehavior('UninstallerAddCleaner', [Cleaner\Plugins::class, 'create']); + dcCore::app()->addBehavior('UninstallerCleanersConstruct', function (Uninstaller $uninstaller): void { + $uninstaller->cleaners + ->add(new Cleaner\Settings()) + ->add(new Cleaner\Tables()) + ->add(new Cleaner\Versions()) + ->add(new Cleaner\Logs()) + ->add(new Cleaner\Caches()) + ->add(new Cleaner\Vars()) + ->add(new Cleaner\Themes()) + ->add(new Cleaner\Plugins()) + ; + }); return true; }