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,35 +32,31 @@ 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: [
} // delete a $ns folder and thier files.
new ActionDescriptor(
protected function actions(): array id: 'delete',
{ select: __('delete selected cache directories'),
return [ query: __('delete "%s" cache directory'),
// delete a $ns folder and thier files. success: __('"%s" cache directory deleted'),
new ActionDescriptor( error: __('Failed to delete "%s" cache directory')
id: 'delete', ),
select: __('delete selected cache directories'), // delete $ns folder files but keep folder
query: __('delete "%s" cache directory'), new ActionDescriptor(
success: __('"%s" cache directory deleted'), id: 'empty',
error: __('Failed to delete "%s" cache directory') select: __('empty selected cache directories'),
), query: __('empty "%s" cache directory'),
// delete $ns folder files but keep folder success: __('"%s" cache directory emptied'),
new ActionDescriptor( error: __('Failed to empty "%s" cache directory')
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 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,27 +35,23 @@ 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: [
} // delete all $ns log_table entries
new ActionDescriptor(
protected function actions(): array id: 'delete_all',
{ select: __('delete selected logs tables'),
return [ query: __('delete "%s" logs table'),
// delete all $ns log_table entries success: __('"%s" logs table deleted'),
new ActionDescriptor( error: __('Failed to delete "%s" logs table')
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 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,27 +31,23 @@ 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: [
} // delete $ns plugin folder
new ActionDescriptor(
protected function actions(): array id: 'delete',
{ select: __('delete selected plugins files and directories'),
return [ query: __('delete "%s" plugin files and directories'),
// delete $ns plugin folder success: __('"%s" plugin files and directories deleted'),
new ActionDescriptor( error: __('Failed to delete "%s" plugin files and directories')
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 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,50 +35,46 @@ 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: [
} // delete global $ns preferences workspace
new ActionDescriptor(
protected function actions(): array id: 'delete_global',
{ select: __('delete selected global preferences workspaces'),
return [ query: __('delete "%s" global preferences workspace'),
// delete global $ns preferences workspace success: __('"%s" global preferences workspace deleted'),
new ActionDescriptor( error: __('Failed to delete "%s" global preferences workspace')
id: 'delete_global', ),
select: __('delete selected global preferences workspaces'), // delete users $ns preferences workspace
query: __('delete "%s" global preferences workspace'), new ActionDescriptor(
success: __('"%s" global preferences workspace deleted'), id: 'delete_local',
error: __('Failed to delete "%s" global preferences workspace') select: __('delete selected users preferences workspaces'),
), query: __('delete "%s" users preferences workspace'),
// delete users $ns preferences workspace success: __('"%s" users preferences workspace deleted'),
new ActionDescriptor( error: __('Failed to delete "%s" users preferences workspace')
id: 'delete_local', ),
select: __('delete selected users preferences workspaces'), // delete user and global $ns preferences workspace
query: __('delete "%s" users preferences workspace'), new ActionDescriptor(
success: __('"%s" users preferences workspace deleted'), id: 'delete_all',
error: __('Failed to delete "%s" users preferences workspace') select: __('delete selected preferences workspaces'),
), query: __('delete "%s" preferences workspace'),
// delete user and global $ns preferences workspace success: __('"%s" preferences workspace deleted'),
new ActionDescriptor( error: __('Failed to delete "%s" preferences workspace')
id: 'delete_all', ),
select: __('delete selected preferences workspaces'), // delete users and globals specific $ws:$id settings using 'pref_ws:pref_id;pref_ws:pref_id;' as $ns
query: __('delete "%s" preferences workspace'), new ActionDescriptor(
success: __('"%s" preferences workspace deleted'), id: 'delete_related',
error: __('Failed to delete "%s" preferences workspace') query: __('delete related preferences'),
), success: __('related preferences deleted'),
// delete users and globals specific $ws:$id settings using 'pref_ws:pref_id;pref_ws:pref_id;' as $ns error: __('Failed to delete related preferences')
new ActionDescriptor( ),
id: 'delete_related', ]
query: __('delete related preferences'), ));
success: __('related preferences deleted'),
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,50 +35,46 @@ 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: [
} // delete global $ns settings namespace
new ActionDescriptor(
protected function actions(): array id: 'delete_global',
{ select: __('delete selected global settings namespaces'),
return [ query: __('delete "%s" global settings namespace'),
// delete global $ns settings namespace success: __('"%s" global settings namespace deleted'),
new ActionDescriptor( error: __('Failed to delete "%s" global settings namespace')
id: 'delete_global', ),
select: __('delete selected global settings namespaces'), // delete blogs $ns settings namespace
query: __('delete "%s" global settings namespace'), new ActionDescriptor(
success: __('"%s" global settings namespace deleted'), id: 'delete_local',
error: __('Failed to delete "%s" global settings namespace') select: __('delete selected blog settings namespaces'),
), query: __('delete "%s" blog settings namespace'),
// delete blogs $ns settings namespace success: __('"%s" blog settings namespace deleted'),
new ActionDescriptor( error: __('Failed to delete "%s" blog settings namespace')
id: 'delete_local', ),
select: __('delete selected blog settings namespaces'), // delete blogs and global settings namespace
query: __('delete "%s" blog settings namespace'), new ActionDescriptor(
success: __('"%s" blog settings namespace deleted'), id: 'delete_all',
error: __('Failed to delete "%s" blog settings namespace') select: __('delete selected settings namespaces'),
), query: __('delete "%s" settings namespace'),
// delete blogs and global settings namespace success: __('"%s" settings namespace deleted'),
new ActionDescriptor( error: __('Failed to delete "%s" settings namespace')
id: 'delete_all', ),
select: __('delete selected settings namespaces'), // delete blogs and globals specific $ns:$id settings using 'setting_ns:setting_id;setting_ns:setting_id;' as $ns
query: __('delete "%s" settings namespace'), new ActionDescriptor(
success: __('"%s" settings namespace deleted'), id: 'delete_related',
error: __('Failed to delete "%s" settings namespace') query: __('delete related settings'),
), success: __('related settings deleted'),
// delete blogs and globals specific $ns:$id settings using 'setting_ns:setting_id;setting_ns:setting_id;' as $ns error: __('Failed to delete related settings')
new ActionDescriptor( ),
id: 'delete_related', ]
query: __('delete related settings'), ));
success: __('related settings deleted'),
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,35 +38,31 @@ 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: [
} // delete $ns database table
new ActionDescriptor(
protected function actions(): array id: 'delete',
{ select: __('delete selected tables'),
return [ query: __('delete "%s" table'),
// delete $ns database table success: __('"%s" table deleted'),
new ActionDescriptor( error: __('Failed to delete "%s" table')
id: 'delete', ),
select: __('delete selected tables'), // truncate (empty) $ns database table
query: __('delete "%s" table'), new ActionDescriptor(
success: __('"%s" table deleted'), id: 'empty',
error: __('Failed to delete "%s" table') select: __('empty selected tables'),
), query: __('empty "%s" table'),
// truncate (empty) $ns database table success: __('"%s" table emptied'),
new ActionDescriptor( error: __('Failed to empty "%s" table')
id: 'empty', ),
select: __('empty selected tables'), ]
query: __('empty "%s" table'), ));
success: __('"%s" table emptied'),
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,27 +32,23 @@ 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: [
} // delete $ns theme folder
new ActionDescriptor(
protected function actions(): array id: 'delete',
{ select: __('delete selected themes files and directories'),
return [ query: __('delete "%s" theme files and directories'),
// delete $ns theme folder success: __('"%s" theme files and directories deleted'),
new ActionDescriptor( error: __('Failed to delete "%s" theme files and directories')
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 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,27 +32,23 @@ 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: [
} // delete a $ns folder and their files
new ActionDescriptor(
protected function actions(): array id: 'delete',
{ select: __('delete selected var directories'),
return [ query: __('delete "%s" var directory'),
// delete a $ns folder and their files success: __('"%s" var directory deleted'),
new ActionDescriptor( error: __('Failed to delete "%s" var directory')
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 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,27 +31,23 @@ 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: [
} // delete $ns version
new ActionDescriptor(
protected function actions(): array id: 'delete',
{ select: __('delete selected versions numbers'),
return [ query: __('delete "%s" version number'),
// delete $ns version success: __('"%s" version number deleted'),
new ActionDescriptor( error: __('Failed to delete "%s" version number')
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 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);
}
}