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.
*/
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<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.
*

View File

@ -17,6 +17,7 @@ namespace Dotclear\Plugin\Uninstaller\Cleaner;
use Dotclear\Plugin\Uninstaller\{
AbstractCleaner,
ActionDescriptor,
CleanerDescriptor,
TraitCleanerDir,
ValueDescriptor
};
@ -31,18 +32,13 @@ 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 [
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',
@ -59,7 +55,8 @@ class Caches extends AbstractCleaner
success: __('"%s" cache directory emptied'),
error: __('Failed to empty "%s" cache directory')
),
];
]
));
}
public function distributed(): array

View File

@ -23,6 +23,7 @@ use Dotclear\Database\Statement\{
use Dotclear\Plugin\Uninstaller\{
AbstractCleaner,
ActionDescriptor,
CleanerDescriptor,
ValueDescriptor
};
@ -34,18 +35,13 @@ 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 [
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',
@ -54,7 +50,8 @@ class Logs extends AbstractCleaner
success: __('"%s" logs table deleted'),
error: __('Failed to delete "%s" logs table')
),
];
]
));
}
public function distributed(): array

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -17,8 +17,9 @@ namespace Dotclear\Plugin\Uninstaller\Cleaner;
use Dotclear\Plugin\Uninstaller\{
AbstractCleaner,
ActionDescriptor,
TraitCleanerDir,
ValueDescriptor
CleanerDescriptor,
ValueDescriptor,
TraitCleanerDir
};
/**
@ -31,18 +32,13 @@ 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 [
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',
@ -51,7 +47,8 @@ class Vars extends AbstractCleaner
success: __('"%s" var directory deleted'),
error: __('Failed to delete "%s" var directory')
),
];
]
));
}
public function distributed(): array

View File

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