From 1c11d73f6117547a9c725c975a76279845d568aa Mon Sep 17 00:00:00 2001 From: Jean-Christian Denis Date: Sun, 30 Apr 2023 01:10:28 +0200 Subject: [PATCH] use a CleanerDescriptor --- src/AbstractCleaner.php | 32 +++----------- src/Cleaner/Caches.php | 53 +++++++++++------------ src/Cleaner/Logs.php | 37 ++++++++--------- src/Cleaner/Plugins.php | 41 +++++++++--------- src/Cleaner/Preferences.php | 83 ++++++++++++++++++------------------- src/Cleaner/Settings.php | 83 ++++++++++++++++++------------------- src/Cleaner/Tables.php | 53 +++++++++++------------ src/Cleaner/Themes.php | 41 +++++++++--------- src/Cleaner/Vars.php | 41 +++++++++--------- src/Cleaner/Versions.php | 37 ++++++++--------- src/CleanerDescriptor.php | 57 +++++++++++++++++++++++++ 11 files changed, 283 insertions(+), 275 deletions(-) create mode 100644 src/CleanerDescriptor.php diff --git a/src/AbstractCleaner.php b/src/AbstractCleaner.php index 2635e41..6957e37 100644 --- a/src/AbstractCleaner.php +++ b/src/AbstractCleaner.php @@ -37,20 +37,12 @@ abstract class AbstractCleaner /** * Constructor set up a Cleaner. */ - final public function __construct() + public function __construct(CleanerDescriptor $descriptor) { - $properties = $this->properties(); - $this->id = $properties['id'] ?? 'undefined'; - $this->name = $properties['name'] ?? 'undefined'; - $this->desc = $properties['desc'] ?? 'undefined'; - - $actions = []; - foreach ($this->actions() as $descriptor) { - if (is_a($descriptor, ActionDescriptor::class) && $descriptor->id != 'undefined') { - $actions[$descriptor->id] = $descriptor; - } - } - $this->actions = $actions; + $this->id = $descriptor->id; + $this->name = $descriptor->name; + $this->desc = $descriptor->desc; + $this->actions = $descriptor->actions; } /** @@ -63,20 +55,6 @@ abstract class AbstractCleaner return $this->actions[$id] ?? null; } - /** - * Initialize Cleaner properties. - * - * @return array The Cleaner properties [id=>,name=>,desc=>,] - */ - abstract protected function properties(): array; - - /** - * Initialize Cleaner actions. - * - * @return array The Cleaner actions definitions - */ - abstract protected function actions(): array; - /** * Get list of distirbuted values for the cleaner. * diff --git a/src/Cleaner/Caches.php b/src/Cleaner/Caches.php index a68ac8d..b137b7e 100644 --- a/src/Cleaner/Caches.php +++ b/src/Cleaner/Caches.php @@ -17,6 +17,7 @@ namespace Dotclear\Plugin\Uninstaller\Cleaner; use Dotclear\Plugin\Uninstaller\{ AbstractCleaner, ActionDescriptor, + CleanerDescriptor, TraitCleanerDir, ValueDescriptor }; @@ -31,35 +32,31 @@ class Caches extends AbstractCleaner { use TraitCleanerDir; - protected function properties(): array + public function __construct() { - return [ - 'id' => 'caches', - 'name' => __('Cache'), - 'desc' => __('Folders from cache directory'), - ]; - } - - protected function actions(): array - { - return [ - // delete a $ns folder and thier files. - new ActionDescriptor( - id: 'delete', - select: __('delete selected cache directories'), - query: __('delete "%s" cache directory'), - success: __('"%s" cache directory deleted'), - error: __('Failed to delete "%s" cache directory') - ), - // delete $ns folder files but keep folder - new ActionDescriptor( - id: 'empty', - select: __('empty selected cache directories'), - query: __('empty "%s" cache directory'), - success: __('"%s" cache directory emptied'), - error: __('Failed to empty "%s" cache directory') - ), - ]; + parent::__construct(new CleanerDescriptor( + id: 'caches', + name: __('Cache'), + desc: __('Folders from cache directory'), + actions: [ + // delete a $ns folder and thier files. + new ActionDescriptor( + id: 'delete', + select: __('delete selected cache directories'), + query: __('delete "%s" cache directory'), + success: __('"%s" cache directory deleted'), + error: __('Failed to delete "%s" cache directory') + ), + // delete $ns folder files but keep folder + new ActionDescriptor( + id: 'empty', + select: __('empty selected cache directories'), + query: __('empty "%s" cache directory'), + success: __('"%s" cache directory emptied'), + error: __('Failed to empty "%s" cache directory') + ), + ] + )); } public function distributed(): array diff --git a/src/Cleaner/Logs.php b/src/Cleaner/Logs.php index 7372652..6f35d8b 100644 --- a/src/Cleaner/Logs.php +++ b/src/Cleaner/Logs.php @@ -23,6 +23,7 @@ use Dotclear\Database\Statement\{ use Dotclear\Plugin\Uninstaller\{ AbstractCleaner, ActionDescriptor, + CleanerDescriptor, ValueDescriptor }; @@ -34,27 +35,23 @@ use Dotclear\Plugin\Uninstaller\{ */ class Logs extends AbstractCleaner { - protected function properties(): array + public function __construct() { - return [ - 'id' => 'logs', - 'name' => __('Logs'), - 'desc' => __('Logs in Dotclear logs table'), - ]; - } - - protected function actions(): array - { - return [ - // delete all $ns log_table entries - new ActionDescriptor( - id: 'delete_all', - select: __('delete selected logs tables'), - query: __('delete "%s" logs table'), - success: __('"%s" logs table deleted'), - error: __('Failed to delete "%s" logs table') - ), - ]; + parent::__construct(new CleanerDescriptor( + id: 'logs', + name: __('Logs'), + desc: __('Logs in Dotclear logs table'), + actions: [ + // delete all $ns log_table entries + new ActionDescriptor( + id: 'delete_all', + select: __('delete selected logs tables'), + query: __('delete "%s" logs table'), + success: __('"%s" logs table deleted'), + error: __('Failed to delete "%s" logs table') + ), + ] + )); } public function distributed(): array diff --git a/src/Cleaner/Plugins.php b/src/Cleaner/Plugins.php index 246a9e7..27628b9 100644 --- a/src/Cleaner/Plugins.php +++ b/src/Cleaner/Plugins.php @@ -17,8 +17,9 @@ namespace Dotclear\Plugin\Uninstaller\Cleaner; use Dotclear\Plugin\Uninstaller\{ AbstractCleaner, ActionDescriptor, - TraitCleanerDir, - ValueDescriptor + CleanerDescriptor, + ValueDescriptor, + TraitCleanerDir }; /** @@ -30,27 +31,23 @@ class Plugins extends AbstractCleaner { use TraitCleanerDir; - protected function properties(): array + public function __construct() { - return [ - 'id' => 'plugins', - 'name' => __('Plugins'), - 'desc' => __('Folders from plugins directories'), - ]; - } - - protected function actions(): array - { - return [ - // delete $ns plugin folder - new ActionDescriptor( - id: 'delete', - select: __('delete selected plugins files and directories'), - query: __('delete "%s" plugin files and directories'), - success: __('"%s" plugin files and directories deleted'), - error: __('Failed to delete "%s" plugin files and directories') - ), - ]; + parent::__construct(new CleanerDescriptor( + id: 'plugins', + name: __('Plugins'), + desc: __('Folders from plugins directories'), + actions: [ + // delete $ns plugin folder + new ActionDescriptor( + id: 'delete', + select: __('delete selected plugins files and directories'), + query: __('delete "%s" plugin files and directories'), + success: __('"%s" plugin files and directories deleted'), + error: __('Failed to delete "%s" plugin files and directories') + ), + ] + )); } public function distributed(): array diff --git a/src/Cleaner/Preferences.php b/src/Cleaner/Preferences.php index a27cd5f..f1aa7d8 100644 --- a/src/Cleaner/Preferences.php +++ b/src/Cleaner/Preferences.php @@ -23,6 +23,7 @@ use Dotclear\Database\Statement\{ use Dotclear\Plugin\Uninstaller\{ AbstractCleaner, ActionDescriptor, + CleanerDescriptor, ValueDescriptor }; @@ -34,50 +35,46 @@ use Dotclear\Plugin\Uninstaller\{ */ class Preferences extends AbstractCleaner { - protected function properties(): array + public function __construct() { - return [ - 'id' => 'preferences', - 'name' => __('Preferences'), - 'desc' => __('Users preferences workspaces'), - ]; - } - - protected function actions(): array - { - return [ - // delete global $ns preferences workspace - new ActionDescriptor( - id: 'delete_global', - select: __('delete selected global preferences workspaces'), - query: __('delete "%s" global preferences workspace'), - success: __('"%s" global preferences workspace deleted'), - error: __('Failed to delete "%s" global preferences workspace') - ), - // delete users $ns preferences workspace - new ActionDescriptor( - id: 'delete_local', - select: __('delete selected users preferences workspaces'), - query: __('delete "%s" users preferences workspace'), - success: __('"%s" users preferences workspace deleted'), - error: __('Failed to delete "%s" users preferences workspace') - ), - // delete user and global $ns preferences workspace - new ActionDescriptor( - id: 'delete_all', - select: __('delete selected preferences workspaces'), - query: __('delete "%s" preferences workspace'), - success: __('"%s" preferences workspace deleted'), - error: __('Failed to delete "%s" preferences workspace') - ), - // delete users and globals specific $ws:$id settings using 'pref_ws:pref_id;pref_ws:pref_id;' as $ns - new ActionDescriptor( - id: 'delete_related', - query: __('delete related preferences'), - success: __('related preferences deleted'), - error: __('Failed to delete related preferences') - ), - ]; + parent::__construct(new CleanerDescriptor( + id: 'preferences', + name: __('Preferences'), + desc: __('Users preferences workspaces'), + actions: [ + // delete global $ns preferences workspace + new ActionDescriptor( + id: 'delete_global', + select: __('delete selected global preferences workspaces'), + query: __('delete "%s" global preferences workspace'), + success: __('"%s" global preferences workspace deleted'), + error: __('Failed to delete "%s" global preferences workspace') + ), + // delete users $ns preferences workspace + new ActionDescriptor( + id: 'delete_local', + select: __('delete selected users preferences workspaces'), + query: __('delete "%s" users preferences workspace'), + success: __('"%s" users preferences workspace deleted'), + error: __('Failed to delete "%s" users preferences workspace') + ), + // delete user and global $ns preferences workspace + new ActionDescriptor( + id: 'delete_all', + select: __('delete selected preferences workspaces'), + query: __('delete "%s" preferences workspace'), + success: __('"%s" preferences workspace deleted'), + error: __('Failed to delete "%s" preferences workspace') + ), + // delete users and globals specific $ws:$id settings using 'pref_ws:pref_id;pref_ws:pref_id;' as $ns + new ActionDescriptor( + id: 'delete_related', + query: __('delete related preferences'), + success: __('related preferences deleted'), + error: __('Failed to delete related preferences') + ), + ] + )); } public function distributed(): array diff --git a/src/Cleaner/Settings.php b/src/Cleaner/Settings.php index 1afee4f..929cbd4 100644 --- a/src/Cleaner/Settings.php +++ b/src/Cleaner/Settings.php @@ -23,6 +23,7 @@ use Dotclear\Database\Statement\{ use Dotclear\Plugin\Uninstaller\{ AbstractCleaner, ActionDescriptor, + CleanerDescriptor, ValueDescriptor }; @@ -34,50 +35,46 @@ use Dotclear\Plugin\Uninstaller\{ */ class Settings extends AbstractCleaner { - protected function properties(): array + public function __construct() { - return [ - 'id' => 'settings', - 'name' => __('Settings'), - 'desc' => __('Namespaces registered in dcSettings'), - ]; - } - - protected function actions(): array - { - return [ - // delete global $ns settings namespace - new ActionDescriptor( - id: 'delete_global', - select: __('delete selected global settings namespaces'), - query: __('delete "%s" global settings namespace'), - success: __('"%s" global settings namespace deleted'), - error: __('Failed to delete "%s" global settings namespace') - ), - // delete blogs $ns settings namespace - new ActionDescriptor( - id: 'delete_local', - select: __('delete selected blog settings namespaces'), - query: __('delete "%s" blog settings namespace'), - success: __('"%s" blog settings namespace deleted'), - error: __('Failed to delete "%s" blog settings namespace') - ), - // delete blogs and global settings namespace - new ActionDescriptor( - id: 'delete_all', - select: __('delete selected settings namespaces'), - query: __('delete "%s" settings namespace'), - success: __('"%s" settings namespace deleted'), - error: __('Failed to delete "%s" settings namespace') - ), - // delete blogs and globals specific $ns:$id settings using 'setting_ns:setting_id;setting_ns:setting_id;' as $ns - new ActionDescriptor( - id: 'delete_related', - query: __('delete related settings'), - success: __('related settings deleted'), - error: __('Failed to delete related settings') - ), - ]; + parent::__construct(new CleanerDescriptor( + id: 'settings', + name: __('Settings'), + desc: __('Namespaces registered in dcSettings'), + actions: [ + // delete global $ns settings namespace + new ActionDescriptor( + id: 'delete_global', + select: __('delete selected global settings namespaces'), + query: __('delete "%s" global settings namespace'), + success: __('"%s" global settings namespace deleted'), + error: __('Failed to delete "%s" global settings namespace') + ), + // delete blogs $ns settings namespace + new ActionDescriptor( + id: 'delete_local', + select: __('delete selected blog settings namespaces'), + query: __('delete "%s" blog settings namespace'), + success: __('"%s" blog settings namespace deleted'), + error: __('Failed to delete "%s" blog settings namespace') + ), + // delete blogs and global settings namespace + new ActionDescriptor( + id: 'delete_all', + select: __('delete selected settings namespaces'), + query: __('delete "%s" settings namespace'), + success: __('"%s" settings namespace deleted'), + error: __('Failed to delete "%s" settings namespace') + ), + // delete blogs and globals specific $ns:$id settings using 'setting_ns:setting_id;setting_ns:setting_id;' as $ns + new ActionDescriptor( + id: 'delete_related', + query: __('delete related settings'), + success: __('related settings deleted'), + error: __('Failed to delete related settings') + ), + ] + )); } public function distributed(): array diff --git a/src/Cleaner/Tables.php b/src/Cleaner/Tables.php index c45e7fb..0458ede 100644 --- a/src/Cleaner/Tables.php +++ b/src/Cleaner/Tables.php @@ -27,6 +27,7 @@ use Dotclear\Database\Statement\{ use Dotclear\Plugin\Uninstaller\{ AbstractCleaner, ActionDescriptor, + CleanerDescriptor, ValueDescriptor }; @@ -37,35 +38,31 @@ use Dotclear\Plugin\Uninstaller\{ */ class Tables extends AbstractCleaner { - protected function properties(): array + public function __construct() { - return [ - 'id' => 'tables', - 'name' => __('Tables'), - 'desc' => __('All database tables of Dotclear'), - ]; - } - - protected function actions(): array - { - return [ - // delete $ns database table - new ActionDescriptor( - id: 'delete', - select: __('delete selected tables'), - query: __('delete "%s" table'), - success: __('"%s" table deleted'), - error: __('Failed to delete "%s" table') - ), - // truncate (empty) $ns database table - new ActionDescriptor( - id: 'empty', - select: __('empty selected tables'), - query: __('empty "%s" table'), - success: __('"%s" table emptied'), - error: __('Failed to empty "%s" table') - ), - ]; + parent::__construct(new CleanerDescriptor( + id: 'tables', + name: __('Tables'), + desc: __('All database tables of Dotclear'), + actions: [ + // delete $ns database table + new ActionDescriptor( + id: 'delete', + select: __('delete selected tables'), + query: __('delete "%s" table'), + success: __('"%s" table deleted'), + error: __('Failed to delete "%s" table') + ), + // truncate (empty) $ns database table + new ActionDescriptor( + id: 'empty', + select: __('empty selected tables'), + query: __('empty "%s" table'), + success: __('"%s" table emptied'), + error: __('Failed to empty "%s" table') + ), + ] + )); } public function distributed(): array diff --git a/src/Cleaner/Themes.php b/src/Cleaner/Themes.php index 6a4291f..1145d6e 100644 --- a/src/Cleaner/Themes.php +++ b/src/Cleaner/Themes.php @@ -18,8 +18,9 @@ use dcCore; use Dotclear\Plugin\Uninstaller\{ AbstractCleaner, ActionDescriptor, - TraitCleanerDir, - ValueDescriptor + CleanerDescriptor, + ValueDescriptor, + TraitCleanerDir }; /** @@ -31,27 +32,23 @@ class Themes extends AbstractCleaner { use TraitCleanerDir; - protected function properties(): array + public function __construct() { - return [ - 'id' => 'themes', - 'name' => __('Themes'), - 'desc' => __('Folders from blog themes directory'), - ]; - } - - protected function actions(): array - { - return [ - // delete $ns theme folder - new ActionDescriptor( - id: 'delete', - select: __('delete selected themes files and directories'), - query: __('delete "%s" theme files and directories'), - success: __('"%s" theme files and directories deleted'), - error: __('Failed to delete "%s" theme files and directories') - ), - ]; + parent::__construct(new CleanerDescriptor( + id: 'themes', + name: __('Themes'), + desc: __('Folders from blog themes directory'), + actions: [ + // delete $ns theme folder + new ActionDescriptor( + id: 'delete', + select: __('delete selected themes files and directories'), + query: __('delete "%s" theme files and directories'), + success: __('"%s" theme files and directories deleted'), + error: __('Failed to delete "%s" theme files and directories') + ), + ] + )); } public function distributed(): array diff --git a/src/Cleaner/Vars.php b/src/Cleaner/Vars.php index a8a24f2..637e838 100644 --- a/src/Cleaner/Vars.php +++ b/src/Cleaner/Vars.php @@ -17,8 +17,9 @@ namespace Dotclear\Plugin\Uninstaller\Cleaner; use Dotclear\Plugin\Uninstaller\{ AbstractCleaner, ActionDescriptor, - TraitCleanerDir, - ValueDescriptor + CleanerDescriptor, + ValueDescriptor, + TraitCleanerDir }; /** @@ -31,27 +32,23 @@ class Vars extends AbstractCleaner { use TraitCleanerDir; - protected function properties(): array + public function __construct() { - return [ - 'id' => 'vars', - 'name' => __('Var'), - 'desc' => __('Folders from Dotclear VAR directory'), - ]; - } - - protected function actions(): array - { - return [ - // delete a $ns folder and their files - new ActionDescriptor( - id: 'delete', - select: __('delete selected var directories'), - query: __('delete "%s" var directory'), - success: __('"%s" var directory deleted'), - error: __('Failed to delete "%s" var directory') - ), - ]; + parent::__construct(new CleanerDescriptor( + id: 'vars', + name: __('Var'), + desc: __('Folders from Dotclear VAR directory'), + actions: [ + // delete a $ns folder and their files + new ActionDescriptor( + id: 'delete', + select: __('delete selected var directories'), + query: __('delete "%s" var directory'), + success: __('"%s" var directory deleted'), + error: __('Failed to delete "%s" var directory') + ), + ] + )); } public function distributed(): array diff --git a/src/Cleaner/Versions.php b/src/Cleaner/Versions.php index 5deb13c..ba93d96 100644 --- a/src/Cleaner/Versions.php +++ b/src/Cleaner/Versions.php @@ -19,6 +19,7 @@ use Dotclear\Database\Statement\SelectStatement; use Dotclear\Plugin\Uninstaller\{ AbstractCleaner, ActionDescriptor, + CleanerDescriptor, ValueDescriptor }; @@ -30,27 +31,23 @@ use Dotclear\Plugin\Uninstaller\{ */ class Versions extends AbstractCleaner { - protected function properties(): array + public function __construct() { - return [ - 'id' => 'versions', - 'name' => __('Versions'), - 'desc' => __('Versions registered in table "version" of Dotclear'), - ]; - } - - protected function actions(): array - { - return [ - // delete $ns version - new ActionDescriptor( - id: 'delete', - select: __('delete selected versions numbers'), - query: __('delete "%s" version number'), - success: __('"%s" version number deleted'), - error: __('Failed to delete "%s" version number') - ), - ]; + parent::__construct(new CleanerDescriptor( + id: 'versions', + name: __('Versions'), + desc: __('Versions registered in table "version" of Dotclear'), + actions: [ + // delete $ns version + new ActionDescriptor( + id: 'delete', + select: __('delete selected versions numbers'), + query: __('delete "%s" version number'), + success: __('"%s" version number deleted'), + error: __('Failed to delete "%s" version number') + ), + ] + )); } public function distributed(): array diff --git a/src/CleanerDescriptor.php b/src/CleanerDescriptor.php new file mode 100644 index 0000000..5a7610a --- /dev/null +++ b/src/CleanerDescriptor.php @@ -0,0 +1,57 @@ + $actions The actions descriptions */ + public readonly array $actions; + + /** + * Contructor populate descriptor properties. + * + * @param string $id The cleaner ID + * @param string $name The cleaner name + * @param string $desc The cleaner description + * @param array $actions The actions descriptions + */ + public function __construct( + public readonly string $id, + public readonly string $name, + public readonly string $desc, + array $actions + ) { + $valid = []; + foreach ($actions as $action) { + if (is_a($action, ActionDescriptor::class) && $action->id != 'undefined') { + $valid[$action->id] = $action; + } + } + $this->actions = $valid; + } + + /** + * Get descriptor properties. + * + * @return array The properties + */ + public function dump(): array + { + return get_object_vars($this); + } +}