use a CleanerDescriptor

master
Jean-Christian Paul Denis 2023-04-30 01:10:28 +02:00
parent 20a8544e6a
commit 1c11d73f61
Signed by: JcDenis
GPG Key ID: 1B5B8C5B90B6C951
11 changed files with 283 additions and 275 deletions

View File

@ -37,20 +37,12 @@ abstract class AbstractCleaner
/** /**
* Constructor set up a Cleaner. * Constructor set up a Cleaner.
*/ */
final public function __construct() public function __construct(CleanerDescriptor $descriptor)
{ {
$properties = $this->properties(); $this->id = $descriptor->id;
$this->id = $properties['id'] ?? 'undefined'; $this->name = $descriptor->name;
$this->name = $properties['name'] ?? 'undefined'; $this->desc = $descriptor->desc;
$this->desc = $properties['desc'] ?? 'undefined'; $this->actions = $descriptor->actions;
$actions = [];
foreach ($this->actions() as $descriptor) {
if (is_a($descriptor, ActionDescriptor::class) && $descriptor->id != 'undefined') {
$actions[$descriptor->id] = $descriptor;
}
}
$this->actions = $actions;
} }
/** /**
@ -63,20 +55,6 @@ abstract class AbstractCleaner
return $this->actions[$id] ?? null; return $this->actions[$id] ?? null;
} }
/**
* Initialize Cleaner properties.
*
* @return array<string,string> The Cleaner properties [id=>,name=>,desc=>,]
*/
abstract protected function properties(): array;
/**
* Initialize Cleaner actions.
*
* @return array<int,ActionDescriptor> The Cleaner actions definitions
*/
abstract protected function actions(): array;
/** /**
* Get list of distirbuted values for the cleaner. * Get list of distirbuted values for the cleaner.
* *

View File

@ -17,6 +17,7 @@ namespace Dotclear\Plugin\Uninstaller\Cleaner;
use Dotclear\Plugin\Uninstaller\{ use Dotclear\Plugin\Uninstaller\{
AbstractCleaner, AbstractCleaner,
ActionDescriptor, ActionDescriptor,
CleanerDescriptor,
TraitCleanerDir, TraitCleanerDir,
ValueDescriptor ValueDescriptor
}; };
@ -31,18 +32,13 @@ class Caches extends AbstractCleaner
{ {
use TraitCleanerDir; use TraitCleanerDir;
protected function properties(): array public function __construct()
{ {
return [ parent::__construct(new CleanerDescriptor(
'id' => 'caches', id: 'caches',
'name' => __('Cache'), name: __('Cache'),
'desc' => __('Folders from cache directory'), desc: __('Folders from cache directory'),
]; actions: [
}
protected function actions(): array
{
return [
// delete a $ns folder and thier files. // delete a $ns folder and thier files.
new ActionDescriptor( new ActionDescriptor(
id: 'delete', id: 'delete',
@ -59,7 +55,8 @@ class Caches extends AbstractCleaner
success: __('"%s" cache directory emptied'), success: __('"%s" cache directory emptied'),
error: __('Failed to empty "%s" cache directory') error: __('Failed to empty "%s" cache directory')
), ),
]; ]
));
} }
public function distributed(): array public function distributed(): array

View File

@ -23,6 +23,7 @@ use Dotclear\Database\Statement\{
use Dotclear\Plugin\Uninstaller\{ use Dotclear\Plugin\Uninstaller\{
AbstractCleaner, AbstractCleaner,
ActionDescriptor, ActionDescriptor,
CleanerDescriptor,
ValueDescriptor ValueDescriptor
}; };
@ -34,18 +35,13 @@ use Dotclear\Plugin\Uninstaller\{
*/ */
class Logs extends AbstractCleaner class Logs extends AbstractCleaner
{ {
protected function properties(): array public function __construct()
{ {
return [ parent::__construct(new CleanerDescriptor(
'id' => 'logs', id: 'logs',
'name' => __('Logs'), name: __('Logs'),
'desc' => __('Logs in Dotclear logs table'), desc: __('Logs in Dotclear logs table'),
]; actions: [
}
protected function actions(): array
{
return [
// delete all $ns log_table entries // delete all $ns log_table entries
new ActionDescriptor( new ActionDescriptor(
id: 'delete_all', id: 'delete_all',
@ -54,7 +50,8 @@ class Logs extends AbstractCleaner
success: __('"%s" logs table deleted'), success: __('"%s" logs table deleted'),
error: __('Failed to delete "%s" logs table') error: __('Failed to delete "%s" logs table')
), ),
]; ]
));
} }
public function distributed(): array public function distributed(): array

View File

@ -17,8 +17,9 @@ namespace Dotclear\Plugin\Uninstaller\Cleaner;
use Dotclear\Plugin\Uninstaller\{ use Dotclear\Plugin\Uninstaller\{
AbstractCleaner, AbstractCleaner,
ActionDescriptor, ActionDescriptor,
TraitCleanerDir, CleanerDescriptor,
ValueDescriptor ValueDescriptor,
TraitCleanerDir
}; };
/** /**
@ -30,18 +31,13 @@ class Plugins extends AbstractCleaner
{ {
use TraitCleanerDir; use TraitCleanerDir;
protected function properties(): array public function __construct()
{ {
return [ parent::__construct(new CleanerDescriptor(
'id' => 'plugins', id: 'plugins',
'name' => __('Plugins'), name: __('Plugins'),
'desc' => __('Folders from plugins directories'), desc: __('Folders from plugins directories'),
]; actions: [
}
protected function actions(): array
{
return [
// delete $ns plugin folder // delete $ns plugin folder
new ActionDescriptor( new ActionDescriptor(
id: 'delete', id: 'delete',
@ -50,7 +46,8 @@ class Plugins extends AbstractCleaner
success: __('"%s" plugin files and directories deleted'), success: __('"%s" plugin files and directories deleted'),
error: __('Failed to delete "%s" plugin files and directories') error: __('Failed to delete "%s" plugin files and directories')
), ),
]; ]
));
} }
public function distributed(): array public function distributed(): array

View File

@ -23,6 +23,7 @@ use Dotclear\Database\Statement\{
use Dotclear\Plugin\Uninstaller\{ use Dotclear\Plugin\Uninstaller\{
AbstractCleaner, AbstractCleaner,
ActionDescriptor, ActionDescriptor,
CleanerDescriptor,
ValueDescriptor ValueDescriptor
}; };
@ -34,18 +35,13 @@ use Dotclear\Plugin\Uninstaller\{
*/ */
class Preferences extends AbstractCleaner class Preferences extends AbstractCleaner
{ {
protected function properties(): array public function __construct()
{ {
return [ parent::__construct(new CleanerDescriptor(
'id' => 'preferences', id: 'preferences',
'name' => __('Preferences'), name: __('Preferences'),
'desc' => __('Users preferences workspaces'), desc: __('Users preferences workspaces'),
]; actions: [
}
protected function actions(): array
{
return [
// delete global $ns preferences workspace // delete global $ns preferences workspace
new ActionDescriptor( new ActionDescriptor(
id: 'delete_global', id: 'delete_global',
@ -77,7 +73,8 @@ class Preferences extends AbstractCleaner
success: __('related preferences deleted'), success: __('related preferences deleted'),
error: __('Failed to delete related preferences') error: __('Failed to delete related preferences')
), ),
]; ]
));
} }
public function distributed(): array public function distributed(): array

View File

@ -23,6 +23,7 @@ use Dotclear\Database\Statement\{
use Dotclear\Plugin\Uninstaller\{ use Dotclear\Plugin\Uninstaller\{
AbstractCleaner, AbstractCleaner,
ActionDescriptor, ActionDescriptor,
CleanerDescriptor,
ValueDescriptor ValueDescriptor
}; };
@ -34,18 +35,13 @@ use Dotclear\Plugin\Uninstaller\{
*/ */
class Settings extends AbstractCleaner class Settings extends AbstractCleaner
{ {
protected function properties(): array public function __construct()
{ {
return [ parent::__construct(new CleanerDescriptor(
'id' => 'settings', id: 'settings',
'name' => __('Settings'), name: __('Settings'),
'desc' => __('Namespaces registered in dcSettings'), desc: __('Namespaces registered in dcSettings'),
]; actions: [
}
protected function actions(): array
{
return [
// delete global $ns settings namespace // delete global $ns settings namespace
new ActionDescriptor( new ActionDescriptor(
id: 'delete_global', id: 'delete_global',
@ -77,7 +73,8 @@ class Settings extends AbstractCleaner
success: __('related settings deleted'), success: __('related settings deleted'),
error: __('Failed to delete related settings') error: __('Failed to delete related settings')
), ),
]; ]
));
} }
public function distributed(): array public function distributed(): array

View File

@ -27,6 +27,7 @@ use Dotclear\Database\Statement\{
use Dotclear\Plugin\Uninstaller\{ use Dotclear\Plugin\Uninstaller\{
AbstractCleaner, AbstractCleaner,
ActionDescriptor, ActionDescriptor,
CleanerDescriptor,
ValueDescriptor ValueDescriptor
}; };
@ -37,18 +38,13 @@ use Dotclear\Plugin\Uninstaller\{
*/ */
class Tables extends AbstractCleaner class Tables extends AbstractCleaner
{ {
protected function properties(): array public function __construct()
{ {
return [ parent::__construct(new CleanerDescriptor(
'id' => 'tables', id: 'tables',
'name' => __('Tables'), name: __('Tables'),
'desc' => __('All database tables of Dotclear'), desc: __('All database tables of Dotclear'),
]; actions: [
}
protected function actions(): array
{
return [
// delete $ns database table // delete $ns database table
new ActionDescriptor( new ActionDescriptor(
id: 'delete', id: 'delete',
@ -65,7 +61,8 @@ class Tables extends AbstractCleaner
success: __('"%s" table emptied'), success: __('"%s" table emptied'),
error: __('Failed to empty "%s" table') error: __('Failed to empty "%s" table')
), ),
]; ]
));
} }
public function distributed(): array public function distributed(): array

View File

@ -18,8 +18,9 @@ use dcCore;
use Dotclear\Plugin\Uninstaller\{ use Dotclear\Plugin\Uninstaller\{
AbstractCleaner, AbstractCleaner,
ActionDescriptor, ActionDescriptor,
TraitCleanerDir, CleanerDescriptor,
ValueDescriptor ValueDescriptor,
TraitCleanerDir
}; };
/** /**
@ -31,18 +32,13 @@ class Themes extends AbstractCleaner
{ {
use TraitCleanerDir; use TraitCleanerDir;
protected function properties(): array public function __construct()
{ {
return [ parent::__construct(new CleanerDescriptor(
'id' => 'themes', id: 'themes',
'name' => __('Themes'), name: __('Themes'),
'desc' => __('Folders from blog themes directory'), desc: __('Folders from blog themes directory'),
]; actions: [
}
protected function actions(): array
{
return [
// delete $ns theme folder // delete $ns theme folder
new ActionDescriptor( new ActionDescriptor(
id: 'delete', id: 'delete',
@ -51,7 +47,8 @@ class Themes extends AbstractCleaner
success: __('"%s" theme files and directories deleted'), success: __('"%s" theme files and directories deleted'),
error: __('Failed to delete "%s" theme files and directories') error: __('Failed to delete "%s" theme files and directories')
), ),
]; ]
));
} }
public function distributed(): array public function distributed(): array

View File

@ -17,8 +17,9 @@ namespace Dotclear\Plugin\Uninstaller\Cleaner;
use Dotclear\Plugin\Uninstaller\{ use Dotclear\Plugin\Uninstaller\{
AbstractCleaner, AbstractCleaner,
ActionDescriptor, ActionDescriptor,
TraitCleanerDir, CleanerDescriptor,
ValueDescriptor ValueDescriptor,
TraitCleanerDir
}; };
/** /**
@ -31,18 +32,13 @@ class Vars extends AbstractCleaner
{ {
use TraitCleanerDir; use TraitCleanerDir;
protected function properties(): array public function __construct()
{ {
return [ parent::__construct(new CleanerDescriptor(
'id' => 'vars', id: 'vars',
'name' => __('Var'), name: __('Var'),
'desc' => __('Folders from Dotclear VAR directory'), desc: __('Folders from Dotclear VAR directory'),
]; actions: [
}
protected function actions(): array
{
return [
// delete a $ns folder and their files // delete a $ns folder and their files
new ActionDescriptor( new ActionDescriptor(
id: 'delete', id: 'delete',
@ -51,7 +47,8 @@ class Vars extends AbstractCleaner
success: __('"%s" var directory deleted'), success: __('"%s" var directory deleted'),
error: __('Failed to delete "%s" var directory') error: __('Failed to delete "%s" var directory')
), ),
]; ]
));
} }
public function distributed(): array public function distributed(): array

View File

@ -19,6 +19,7 @@ use Dotclear\Database\Statement\SelectStatement;
use Dotclear\Plugin\Uninstaller\{ use Dotclear\Plugin\Uninstaller\{
AbstractCleaner, AbstractCleaner,
ActionDescriptor, ActionDescriptor,
CleanerDescriptor,
ValueDescriptor ValueDescriptor
}; };
@ -30,18 +31,13 @@ use Dotclear\Plugin\Uninstaller\{
*/ */
class Versions extends AbstractCleaner class Versions extends AbstractCleaner
{ {
protected function properties(): array public function __construct()
{ {
return [ parent::__construct(new CleanerDescriptor(
'id' => 'versions', id: 'versions',
'name' => __('Versions'), name: __('Versions'),
'desc' => __('Versions registered in table "version" of Dotclear'), desc: __('Versions registered in table "version" of Dotclear'),
]; actions: [
}
protected function actions(): array
{
return [
// delete $ns version // delete $ns version
new ActionDescriptor( new ActionDescriptor(
id: 'delete', id: 'delete',
@ -50,7 +46,8 @@ class Versions extends AbstractCleaner
success: __('"%s" version number deleted'), success: __('"%s" version number deleted'),
error: __('Failed to delete "%s" version number') error: __('Failed to delete "%s" version number')
), ),
]; ]
));
} }
public function distributed(): array public function distributed(): array

View File

@ -0,0 +1,57 @@
<?php
/**
* @brief Uninstaller, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis and Contributors
*
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
declare(strict_types=1);
namespace Dotclear\Plugin\Uninstaller;
/**
* Cleaner descriptor.
*/
class CleanerDescriptor
{
/** @var array<string,ActionDescriptor> $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<int,ActionDescriptor> $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<string,mixed> The properties
*/
public function dump(): array
{
return get_object_vars($this);
}
}