update cleaners with descriptor and related contents

master
Jean-Christian Paul Denis 2023-04-24 12:08:08 +02:00
parent 37f4310517
commit 3d404671e8
Signed by: JcDenis
GPG Key ID: 1B5B8C5B90B6C951
9 changed files with 187 additions and 85 deletions

View File

@ -17,7 +17,8 @@ namespace Dotclear\Plugin\Uninstaller\Cleaner;
use Dotclear\Plugin\Uninstaller\{ use Dotclear\Plugin\Uninstaller\{
AbstractCleaner, AbstractCleaner,
ActionDescriptor, ActionDescriptor,
TraitCleanerDir TraitCleanerDir,
ValueDescriptor
}; };
class Caches extends AbstractCleaner class Caches extends AbstractCleaner
@ -60,7 +61,16 @@ class Caches extends AbstractCleaner
public function values(): array public function values(): array
{ {
return self::getDirs(DC_TPL_CACHE); $res = [];
foreach(self::getDirs(DC_TPL_CACHE) as $dir) {
$res[] = new ValueDescriptor(
$dir['key'],
'',
(int) $dir['value']
);
}
return $res;
} }
public function execute(string $action, string $ns): bool public function execute(string $action, string $ns): bool

View File

@ -22,7 +22,8 @@ use Dotclear\Database\Statement\{
}; };
use Dotclear\Plugin\Uninstaller\{ use Dotclear\Plugin\Uninstaller\{
AbstractCleaner, AbstractCleaner,
ActionDescriptor ActionDescriptor,
ValueDescriptor
}; };
class Logs extends AbstractCleaner class Logs extends AbstractCleaner
@ -61,31 +62,28 @@ class Logs extends AbstractCleaner
{ {
$sql = new SelectStatement(); $sql = new SelectStatement();
$sql->from(dcCore::app()->prefix . dcLog::LOG_TABLE_NAME) $sql->from(dcCore::app()->prefix . dcLog::LOG_TABLE_NAME)
->columns(['log_table']) ->columns([
$sql->as($sql->count('*'), 'counter'),
'log_table',
])
->where($sql->orGroup(['blog_id IS NULL', 'blog_id IS NOT NULL'])) ->where($sql->orGroup(['blog_id IS NULL', 'blog_id IS NOT NULL']))
->group('log_table'); ->group('log_table');
$res = $sql->select(); $rs = $sql->select();
if ($res == null || $res->isEmpty()) { if (is_null($rs) || $rs->isEmpty()) {
return []; return [];
} }
$rs = []; $res = [];
$i = 0; while ($rs->fetch()) {
while ($res->fetch()) { $res[] = new ValueDescriptor(
$sql = new SelectStatement(); $rs->f('log_table'),
$sql->from(dcCore::app()->prefix . dcLog::LOG_TABLE_NAME) '',
->fields([$sql->count('*')]) (int) $rs->f('counter')
->where($sql->orGroup(['blog_id IS NULL', 'blog_id IS NOT NULL'])) );
->and('log_table = ' . $sql->quote($res->f('log_table')))
->group('log_table');
$rs[$i]['key'] = $res->f('log_table');
$rs[$i]['value'] = (int) $sql->select()?->f(0);
$i++;
} }
return $rs; return $res;
} }
public function execute(string $action, string $ns): bool public function execute(string $action, string $ns): bool

View File

@ -17,7 +17,8 @@ namespace Dotclear\Plugin\Uninstaller\Cleaner;
use Dotclear\Plugin\Uninstaller\{ use Dotclear\Plugin\Uninstaller\{
AbstractCleaner, AbstractCleaner,
ActionDescriptor, ActionDescriptor,
TraitCleanerDir TraitCleanerDir,
ValueDescriptor
}; };
class Plugins extends AbstractCleaner class Plugins extends AbstractCleaner
@ -53,8 +54,17 @@ class Plugins extends AbstractCleaner
public function values(): array public function values(): array
{ {
$res = self::getDirs(explode(PATH_SEPARATOR, DC_PLUGINS_ROOT)); $dirs = self::getDirs(explode(PATH_SEPARATOR, DC_PLUGINS_ROOT));
sort($res); sort($dirs);
$res = [];
foreach($dirs as $dir) {
$res[] = new ValueDescriptor(
$dir['key'],
'',
(int) $dir['value']
);
}
return $res; return $res;
} }

View File

@ -22,7 +22,8 @@ use Dotclear\Database\Statement\{
}; };
use Dotclear\Plugin\Uninstaller\{ use Dotclear\Plugin\Uninstaller\{
AbstractCleaner, AbstractCleaner,
ActionDescriptor ActionDescriptor,
ValueDescriptor
}; };
/** /**
@ -93,31 +94,57 @@ class Preferences extends AbstractCleaner
{ {
$sql = new SelectStatement(); $sql = new SelectStatement();
$sql->from(dcCore::app()->prefix . dcWorkspace::WS_TABLE_NAME) $sql->from(dcCore::app()->prefix . dcWorkspace::WS_TABLE_NAME)
->columns(['pref_ws']) ->columns([
$sql->as($sql->count('*'), 'counter'),
'pref_ws'
])
->where($sql->orGroup(['user_id IS NULL', 'user_id IS NOT NULL'])) ->where($sql->orGroup(['user_id IS NULL', 'user_id IS NOT NULL']))
->group('pref_ws'); ->group('pref_ws');
$res = $sql->select(); $rs = $sql->select();
if ($res == null || $res->isEmpty()) { if (is_null($rs) || $rs->isEmpty()) {
return []; return [];
} }
$rs = []; $res = [];
$i = 0; while ($rs->fetch()) {
while ($res->fetch()) { $res[] = new ValueDescriptor(
$sql = new SelectStatement(); $rs->f('pref_ws'),
$sql->from(dcCore::app()->prefix . dcWorkspace::WS_TABLE_NAME) '',
->fields([$sql->count('*')]) (int) $rs->f('counter')
->where($sql->orGroup(['user_id IS NULL', 'user_id IS NOT NULL'])) );
->and('pref_ws = ' . $sql->quote($res->f('pref_ws')))
->group('pref_ws');
$rs[$i]['key'] = $res->f('pref_ws');
$rs[$i]['value'] = (int) $sql->select()?->f(0);
$i++;
} }
return $rs; return $res;
}
public function related(string $ns): array
{
$sql = new SelectStatement();
$sql->from(dcCore::app()->prefix . dcWorkspace::WS_TABLE_NAME)
->columns([
$sql->as($sql->count('*'), 'counter'),
'pref_id'
])
->where($sql->orGroup(['user_id IS NULL', 'user_id IS NOT NULL']))
->and('pref_ws = ' . $sql->quote($ns))
->group('pref_id');
$rs = $sql->select();
if (is_null($rs) || $rs->isEmpty()) {
return [];
}
$res = [];
while ($rs->fetch()) {
$res[] = new ValueDescriptor(
$rs->f('pref_ws'),
$rs->f('pref_id'),
(int) $rs->f('counter')
);
}
return $res;
} }
public function execute(string $action, string $ns): bool public function execute(string $action, string $ns): bool

View File

@ -22,7 +22,8 @@ use Dotclear\Database\Statement\{
}; };
use Dotclear\Plugin\Uninstaller\{ use Dotclear\Plugin\Uninstaller\{
AbstractCleaner, AbstractCleaner,
ActionDescriptor ActionDescriptor,
ValueDescriptor
}; };
/** /**
@ -97,31 +98,57 @@ class Settings extends AbstractCleaner
{ {
$sql = new SelectStatement(); $sql = new SelectStatement();
$sql->from(dcCore::app()->prefix . dcNamespace::NS_TABLE_NAME) $sql->from(dcCore::app()->prefix . dcNamespace::NS_TABLE_NAME)
->columns(['setting_ns']) ->columns([
$sql->as($sql->count('*'), 'counter'),
'setting_ns'
])
->where($sql->orGroup(['blog_id IS NULL', 'blog_id IS NOT NULL'])) ->where($sql->orGroup(['blog_id IS NULL', 'blog_id IS NOT NULL']))
->group('setting_ns'); ->group('setting_ns');
$res = $sql->select(); $rs = $sql->select();
if ($res == null || $res->isEmpty()) { if (is_null($rs) || $rs->isEmpty()) {
return []; return [];
} }
$rs = []; $res = [];
$i = 0; while ($rs->fetch()) {
while ($res->fetch()) { $res[] = new ValueDescriptor(
$sql = new SelectStatement(); $rs->f('setting_ns'),
$sql->from(dcCore::app()->prefix . dcNamespace::NS_TABLE_NAME) '',
->fields([$sql->count('*')]) (int) $rs->f('counter')
->where($sql->orGroup(['blog_id IS NULL', 'blog_id IS NOT NULL'])) );
->and('setting_ns = ' . $sql->quote($res->f('setting_ns')))
->group('setting_ns');
$rs[$i]['key'] = $res->f('setting_ns');
$rs[$i]['value'] = (int) $sql->select()?->f(0);
$i++;
} }
return $rs; return $res;
}
public function related(string $ns): array
{
$sql = new SelectStatement();
$sql->from(dcCore::app()->prefix . dcNamespace::NS_TABLE_NAME)
->columns([
$sql->as($sql->count('*'), 'counter'),
'setting_id'
])
->where($sql->orGroup(['blog_id IS NULL', 'blog_id IS NOT NULL']))
->and('setting_ns = ' . $sql->quote($ns))
->group('setting_id');
$rs = $sql->select();
if (is_null($rs) || $rs->isEmpty()) {
return [];
}
$res = [];
while ($rs->fetch()) {
$res[] = new ValueDescriptor(
$ns,
$rs->f('setting_id'),
(int) $rs->f('counter')
);
}
return $res;
} }
public function execute(string $action, string $ns): bool public function execute(string $action, string $ns): bool

View File

@ -26,7 +26,8 @@ use Dotclear\Database\Statement\{
}; };
use Dotclear\Plugin\Uninstaller\{ use Dotclear\Plugin\Uninstaller\{
AbstractCleaner, AbstractCleaner,
ActionDescriptor ActionDescriptor,
ValueDescriptor
}; };
class Tables extends AbstractCleaner class Tables extends AbstractCleaner
@ -86,11 +87,10 @@ class Tables extends AbstractCleaner
public function values(): array public function values(): array
{ {
$object = AbstractSchema::init(dcCore::app()->con); $object = AbstractSchema::init(dcCore::app()->con);
$res = $object->getTables(); $tables = $object->getTables();
$rs = []; $res = [];
$i = 0; foreach ($tables as $k => $v) {
foreach ($res as $k => $v) {
// get only tables with dotclear prefix // get only tables with dotclear prefix
if ('' != dcCore::app()->prefix) { if ('' != dcCore::app()->prefix) {
if (!preg_match('/^' . preg_quote(dcCore::app()->prefix) . '(.*?)$/', $v, $m)) { if (!preg_match('/^' . preg_quote(dcCore::app()->prefix) . '(.*?)$/', $v, $m)) {
@ -100,16 +100,15 @@ class Tables extends AbstractCleaner
} }
$sql = new SelectStatement(); $sql = new SelectStatement();
$sql->from($res[$k])
->fields([$sql->count('*')]);
$rs[$i]['key'] = $v; $res[] = new ValueDescriptor(
$rs[$i]['value'] = (int) $sql->select()?->f(0); $v,
; '',
$i++; (int) $sql->from($tables[$k])->fields([$sql->count('*')])->select()?->f(0)
);
} }
return $rs; return $res;
} }
public function execute(string $action, string $ns): bool public function execute(string $action, string $ns): bool

View File

@ -18,7 +18,8 @@ use dcCore;
use Dotclear\Plugin\Uninstaller\{ use Dotclear\Plugin\Uninstaller\{
AbstractCleaner, AbstractCleaner,
ActionDescriptor, ActionDescriptor,
TraitCleanerDir TraitCleanerDir,
ValueDescriptor
}; };
class Themes extends AbstractCleaner class Themes extends AbstractCleaner
@ -58,8 +59,17 @@ class Themes extends AbstractCleaner
return []; return [];
} }
$res = self::getDirs($path); $dirs = self::getDirs($path);
sort($res); sort($dirs);
$res = [];
foreach($dirs as $dir) {
$res[] = new ValueDescriptor(
$dir['key'],
'',
(int) $dir['value']
);
}
return $res; return $res;
} }

View File

@ -17,7 +17,8 @@ namespace Dotclear\Plugin\Uninstaller\Cleaner;
use Dotclear\Plugin\Uninstaller\{ use Dotclear\Plugin\Uninstaller\{
AbstractCleaner, AbstractCleaner,
ActionDescriptor, ActionDescriptor,
TraitCleanerDir TraitCleanerDir,
ValueDescriptor
}; };
class Vars extends AbstractCleaner class Vars extends AbstractCleaner
@ -53,7 +54,16 @@ class Vars extends AbstractCleaner
public function values(): array public function values(): array
{ {
return self::getDirs(DC_VAR); $res = [];
foreach(self::getDirs(DC_VAR) as $dir) {
$res[] = new ValueDescriptor(
$dir['key'],
'',
(int) $dir['value']
);
}
return $res;
} }
public function execute(string $action, string $ns): bool public function execute(string $action, string $ns): bool

View File

@ -15,9 +15,11 @@ declare(strict_types=1);
namespace Dotclear\Plugin\Uninstaller\Cleaner; namespace Dotclear\Plugin\Uninstaller\Cleaner;
use dcCore; use dcCore;
use Dotclear\Database\Statement\SelectStatement;
use Dotclear\Plugin\Uninstaller\{ use Dotclear\Plugin\Uninstaller\{
AbstractCleaner, AbstractCleaner,
ActionDescriptor ActionDescriptor,
ValueDescriptor
}; };
class Versions extends AbstractCleaner class Versions extends AbstractCleaner
@ -63,17 +65,26 @@ class Versions extends AbstractCleaner
public function values(): array public function values(): array
{ {
$res = dcCore::app()->con->select('SELECT * FROM ' . dcCore::app()->prefix . dcCore::VERSION_TABLE_NAME); $sql = new SelectStatement();
$rs = $sql
->from(dcCore::app()->prefix . dcCore::VERSION_TABLE_NAME)
->columns(['module', 'version'])
->select();
$rs = []; if (is_null($rs) || $rs->isEmpty()) {
$i = 0; return [];
while ($res->fetch()) {
$rs[$i]['key'] = $res->f('module');
$rs[$i]['value'] = $res->f('version');
$i++;
} }
return $rs; $res = [];
while ($rs->fetch()) {
$res[] = new ValueDescriptor(
$rs->f('module'),
$rs->f('version'),
1
);
}
return $res;
} }
public function execute(string $action, string $ns): bool public function execute(string $action, string $ns): bool