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\{
AbstractCleaner,
ActionDescriptor,
TraitCleanerDir
TraitCleanerDir,
ValueDescriptor
};
class Caches extends AbstractCleaner
@ -60,7 +61,16 @@ class Caches extends AbstractCleaner
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

View File

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

View File

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

View File

@ -22,7 +22,8 @@ use Dotclear\Database\Statement\{
};
use Dotclear\Plugin\Uninstaller\{
AbstractCleaner,
ActionDescriptor
ActionDescriptor,
ValueDescriptor
};
/**
@ -93,31 +94,57 @@ class Preferences extends AbstractCleaner
{
$sql = new SelectStatement();
$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']))
->group('pref_ws');
$res = $sql->select();
if ($res == null || $res->isEmpty()) {
$rs = $sql->select();
if (is_null($rs) || $rs->isEmpty()) {
return [];
}
$rs = [];
$i = 0;
while ($res->fetch()) {
$sql = new SelectStatement();
$sql->from(dcCore::app()->prefix . dcWorkspace::WS_TABLE_NAME)
->fields([$sql->count('*')])
->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++;
$res = [];
while ($rs->fetch()) {
$res[] = new ValueDescriptor(
$rs->f('pref_ws'),
'',
(int) $rs->f('counter')
);
}
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

View File

@ -22,7 +22,8 @@ use Dotclear\Database\Statement\{
};
use Dotclear\Plugin\Uninstaller\{
AbstractCleaner,
ActionDescriptor
ActionDescriptor,
ValueDescriptor
};
/**
@ -97,31 +98,57 @@ class Settings extends AbstractCleaner
{
$sql = new SelectStatement();
$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']))
->group('setting_ns');
$res = $sql->select();
if ($res == null || $res->isEmpty()) {
$rs = $sql->select();
if (is_null($rs) || $rs->isEmpty()) {
return [];
}
$rs = [];
$i = 0;
while ($res->fetch()) {
$sql = new SelectStatement();
$sql->from(dcCore::app()->prefix . dcNamespace::NS_TABLE_NAME)
->fields([$sql->count('*')])
->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++;
$res = [];
while ($rs->fetch()) {
$res[] = new ValueDescriptor(
$rs->f('setting_ns'),
'',
(int) $rs->f('counter')
);
}
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

View File

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

View File

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

View File

@ -17,7 +17,8 @@ namespace Dotclear\Plugin\Uninstaller\Cleaner;
use Dotclear\Plugin\Uninstaller\{
AbstractCleaner,
ActionDescriptor,
TraitCleanerDir
TraitCleanerDir,
ValueDescriptor
};
class Vars extends AbstractCleaner
@ -53,7 +54,16 @@ class Vars extends AbstractCleaner
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

View File

@ -15,9 +15,11 @@ declare(strict_types=1);
namespace Dotclear\Plugin\Uninstaller\Cleaner;
use dcCore;
use Dotclear\Database\Statement\SelectStatement;
use Dotclear\Plugin\Uninstaller\{
AbstractCleaner,
ActionDescriptor
ActionDescriptor,
ValueDescriptor
};
class Versions extends AbstractCleaner
@ -63,17 +65,26 @@ class Versions extends AbstractCleaner
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 = [];
$i = 0;
while ($res->fetch()) {
$rs[$i]['key'] = $res->f('module');
$rs[$i]['value'] = $res->f('version');
$i++;
if (is_null($rs) || $rs->isEmpty()) {
return [];
}
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