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,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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

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);
}
}