second pass to clean up code

master
Jean-Christian Paul Denis 2021-09-07 01:39:52 +02:00
parent bbdd672463
commit 3d158267b5
7 changed files with 469 additions and 456 deletions

View File

@ -11,25 +11,30 @@
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_CONTEXT_ADMIN')){return;} if (!defined('DC_CONTEXT_ADMIN')) {
return null;
}
$_menu['Plugins']->addItem( $_menu['Plugins']->addItem(
__('Advanced cleaner'), __('Advanced cleaner'),
'plugin.php?p=dcAdvancedCleaner', $core->adminurl->get('admin.plugin.dcAdvancedCleaner'),
'index.php?pf=dcAdvancedCleaner/icon.png', dcPage::getPF('dcAdvancedCleaner/icon.png'),
preg_match('/plugin.php\?p=dcAdvancedCleaner(&.*)?$/',$_SERVER['REQUEST_URI']), preg_match(
'/' . preg_quote($core->adminurl->get('admin.plugin.dcAdvancedCleaner')) . '(&.*)?$/',
$_SERVER['REQUEST_URI']
),
$core->auth->isSuperAdmin() $core->auth->isSuperAdmin()
); );
$core->addBehavior('adminDashboardFavorites','dcAdvancedCleanerDashboardFavorites'); $core->addBehavior('adminDashboardFavorites', 'dcAdvancedCleanerDashboardFavorites');
function dcAdvancedCleanerDashboardFavorites($core,$favs) function dcAdvancedCleanerDashboardFavorites(dcCore $core, $favs)
{ {
$favs->register('dcAdvancedCleaner', array( $favs->register('dcAdvancedCleaner', [
'title' => __('Advanced cleaner'), 'title' => __('Advanced cleaner'),
'url' => 'plugin.php?p=dcAdvancedCleaner', 'url' => $core->adminurl->get('admin.plugin.dcAdvancedCleaner'),
'small-icon' => 'index.php?pf=dcAdvancedCleaner/icon.png', 'small-icon' => dcPage::getPF('dcAdvancedCleaner/icon.png'),
'large-icon' => 'index.php?pf=dcAdvancedCleaner/icon-big.png', 'large-icon' => dcPage::getPF('dcAdvancedCleaner/icon-big.png'),
'permissions' => 'usage,contentadmin' 'permissions' => $core->auth->isSuperAdmin()
)); ]);
} }

View File

@ -11,36 +11,41 @@
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_CONTEXT_ADMIN')){return;} if (!defined('DC_CONTEXT_ADMIN')) {
return null;
}
# Get new version $new_version = $core->plugins->moduleInfo('dcAdvancedCleaner', 'version');
$new_version = $core->plugins->moduleInfo('dcAdvancedCleaner','version');
$old_version = $core->getVersion('dcAdvancedCleaner'); $old_version = $core->getVersion('dcAdvancedCleaner');
# Compare versions if (version_compare($old_version, $new_version, '>=')) {
if (version_compare($old_version,$new_version,'>=')) {return;} return null;
}
# Install or update try {
try
{
# Check DC version
if (version_compare(str_replace("-r","-p",DC_VERSION),'2.2-alpha','<'))
{
throw new Exception('dcAdvancedCleaner requires Dotclear 2.2');
}
# Settings
$core->blog->settings->addNamespace('dcAdvancedCleaner'); $core->blog->settings->addNamespace('dcAdvancedCleaner');
$core->blog->settings->dcAdvancedCleaner->put('dcAdvancedCleaner_behavior_active',true,'boolean','',false,true);
$core->blog->settings->dcAdvancedCleaner->put('dcAdvancedCleaner_dcproperty_hide',true,'boolean','',false,true);
# Version $core->blog->settings->dcAdvancedCleaner->put(
$core->setVersion('dcAdvancedCleaner',$new_version); 'dcAdvancedCleaner_behavior_active',
true,
'boolean',
'',
false,
true
);
$core->blog->settings->dcAdvancedCleaner->put(
'dcAdvancedCleaner_dcproperty_hide',
true,
'boolean',
'',
false,
true
);
$core->setVersion('dcAdvancedCleaner', $new_version);
return true; return true;
} } catch (Exception $e) {
catch (Exception $e)
{
$core->error->add($e->getMessage()); $core->error->add($e->getMessage());
return false; return false;
} }

View File

@ -11,41 +11,28 @@
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_RC_PATH')) return; if (!defined('DC_RC_PATH')) {
return null;
}
$d = dirname(__FILE__) . '/inc/';
global $__autoload, $core;
$core->blog->settings->addNamespace('dcAdvancedCleaner'); $core->blog->settings->addNamespace('dcAdvancedCleaner');
# Main class $__autoload['dcAdvancedCleaner'] = $d . 'class.dc.advanced.cleaner.php';
$__autoload['dcAdvancedCleaner'] = $__autoload['behaviorsDcAdvancedCleaner'] = $d . 'lib.dc.advanced.cleaner.behaviors.php';
dirname(__FILE__).'/inc/class.dc.advanced.cleaner.php'; $__autoload['dcUninstaller'] = $d . 'class.dc.uninstaller.php';
$__autoload['dcAdvancedCleanerActivityReportBehaviors'] = $d . 'lib.dc.advanced.cleaner.activityreport.php';
# Behaviors class
$__autoload['behaviorsDcAdvancedCleaner'] =
dirname(__FILE__).'/inc/lib.dc.advanced.cleaner.behaviors.php';
# Unsintaller class
$__autoload['dcUninstaller'] =
dirname(__FILE__).'/inc/class.dc.uninstaller.php';
# Add tab on plugin admin page
$core->addBehavior('pluginsToolsTabs', $core->addBehavior('pluginsToolsTabs',
array('behaviorsDcAdvancedCleaner','pluginsToolsTabs')); ['behaviorsDcAdvancedCleaner', 'pluginsToolsTabs']);
# Action on plugin deletion
$core->addBehavior('pluginsBeforeDelete', $core->addBehavior('pluginsBeforeDelete',
array('behaviorsDcAdvancedCleaner','pluginsBeforeDelete')); ['behaviorsDcAdvancedCleaner', 'pluginsBeforeDelete']);
# Action on theme deletion
$core->addBehavior('themeBeforeDelete', $core->addBehavior('themeBeforeDelete',
array('behaviorsDcAdvancedCleaner','themeBeforeDelete')); ['behaviorsDcAdvancedCleaner', 'themeBeforeDelete']);
# Tabs of dcAvdancedCleaner admin page
$core->addBehavior('dcAdvancedCleanerAdminTabs', $core->addBehavior('dcAdvancedCleanerAdminTabs',
array('behaviorsDcAdvancedCleaner','dcAdvancedCleanerAdminTabs')); ['behaviorsDcAdvancedCleaner', 'dcAdvancedCleanerAdminTabs']);
# Add dcac events on plugin activityReport if (defined('ACTIVITY_REPORT')) {
if (defined('ACTIVITY_REPORT')) dcAdvancedCleanerActivityReportBehaviors::add($core);
{
require_once dirname(__FILE__).'/inc/lib.dc.advanced.cleaner.activityreport.php';
} }

View File

@ -11,114 +11,117 @@
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_ADMIN_CONTEXT')){return;} if (!defined('DC_ADMIN_CONTEXT')) {
return null;
}
class dcAdvancedCleaner class dcAdvancedCleaner
{ {
protected static $errors = array( protected static $errors = [
'settings' => array( 'settings' => [
'delete_global' => 'Failed to delete global settings', 'delete_global' => 'Failed to delete global settings',
'delete_local' => 'Failed to delete local settings', 'delete_local' => 'Failed to delete local settings',
'delete_all' => 'Failed to delete all settings' 'delete_all' => 'Failed to delete all settings'
), ],
'tables' => array( 'tables' => [
'empty' => 'Failed to empty table', 'empty' => 'Failed to empty table',
'delete' => 'Failed to delete table' 'delete' => 'Failed to delete table'
), ],
'plugins' => array( 'plugins' => [
'empty' => 'Failed to empty plugin folder', 'empty' => 'Failed to empty plugin folder',
'delete' => 'Failed to delete plugin folder' 'delete' => 'Failed to delete plugin folder'
), ],
'themes' => array( 'themes' => [
'empty' => 'Failed to empty themes folder', 'empty' => 'Failed to empty themes folder',
'delete' => 'Failed to delete themes folder' 'delete' => 'Failed to delete themes folder'
), ],
'caches' => array( 'caches' => [
'empty' => 'Failed to empty cache folder', 'empty' => 'Failed to empty cache folder',
'delete' => 'Failed to delete cache folder' 'delete' => 'Failed to delete cache folder'
), ],
'versions' => array( 'versions' => [
'delete' => 'Failed to delete version' 'delete' => 'Failed to delete version'
) ]
); ];
public static $dotclear = array( public static $dotclear = [
'settings' => array( 'settings' => [
'akismet','antispam','breadcrumb','dcckeditor','dclegacyeditor','maintenance', 'akismet', 'antispam', 'breadcrumb', 'dcckeditor', 'dclegacyeditor', 'maintenance',
'pages','pings','system','themes','widgets' 'pages', 'pings', 'system', 'themes', 'widgets'
), ],
'tables' => array( 'tables' => [
'blog','category','comment','link','log','media', 'blog', 'category', 'comment', 'link', 'log', 'media',
'meta','permissions','ping','post','post_media','pref','session', 'meta', 'permissions', 'ping', 'post','post_media', 'pref', 'session',
'setting','spamrule','user','version' 'setting', 'spamrule', 'user', 'version'
), ],
'plugins' => array( 'plugins' => [
'aboutConfig','akismet','antispam','attachments','blogroll','blowupConfig', 'aboutConfig', 'akismet', 'antispam', 'attachments', 'blogroll', 'blowupConfig',
'breadcrumb','dcCKEditor','dclegacy','dcLegacyEditor','fairTrackbacks','importExport','maintenance', 'breadcrumb', 'dcCKEditor', 'dclegacy', 'dcLegacyEditor', 'fairTrackbacks', 'importExport', 'maintenance',
'pages','pings','simpleMenu','tags','themeEditor','userPref','widgets' 'pages', 'pings', 'simpleMenu', 'tags', 'themeEditor', 'userPref', 'widgets'
), ],
'themes' => array( 'themes' => [
'default','customCSS','blueSilence','berlin','ductile' 'default', 'customCSS', 'blueSilence', 'berlin', 'ductile'
), ],
'caches' => array( 'caches' => [
'cbfeed','dcrepo','versions' 'cbfeed', 'dcrepo', 'versions'
), ],
'versions' => array( 'versions' => [
'antispam','blogroll','blowupConfig','core','dcCKEditor','dcLegacyEditor','pages','pings','simpleMenu','tags','widgets' 'antispam', 'blogroll', 'blowupConfig', 'core', 'dcCKEditor', 'dcLegacyEditor', 'pages', 'pings', 'simpleMenu', 'tags', 'widgets'
) ]
); ];
public static $exclude = array( public static $exclude = [
'.','..','__MACOSX','.svn','CVS','.DS_Store','Thumbs.db' '.', '..', '__MACOSX', '.svn', 'CVS', '.DS_Store', 'Thumbs.db'
); ];
public static function getSettings($core) public static function getSettings($core)
{ {
$res = $core->con->select( $res = $core->con->select(
'SELECT setting_ns '. 'SELECT setting_ns ' .
'FROM '.$core->prefix.'setting '. 'FROM ' . $core->prefix . 'setting ' .
'WHERE blog_id IS NULL '. 'WHERE blog_id IS NULL ' .
"OR blog_id IS NOT NULL ". "OR blog_id IS NOT NULL " .
'GROUP BY setting_ns'); 'GROUP BY setting_ns'
);
$rs = array(); $rs = [];
$i = 0; $i = 0;
while($res->fetch()) { while($res->fetch()) {
$rs[$i]['key'] = $res->setting_ns; $rs[$i]['key'] = $res->setting_ns;
$rs[$i]['value'] = $core->con->select( $rs[$i]['value'] = $core->con->select(
'SELECT count(*) FROM '.$core->prefix.'setting '. 'SELECT count(*) FROM ' . $core->prefix .'setting ' .
"WHERE setting_ns = '".$res->setting_ns."' ". "WHERE setting_ns = '" . $res->setting_ns ."' " .
"AND (blog_id IS NULL OR blog_id IS NOT NULL) ". "AND (blog_id IS NULL OR blog_id IS NOT NULL) " .
"GROUP BY setting_ns ")->f(0); "GROUP BY setting_ns "
)->f(0);
$i++; $i++;
} }
return $rs; return $rs;
} }
protected static function deleteGlobalSettings($core,$entry) protected static function deleteGlobalSettings($core, $entry)
{ {
$core->con->execute( $core->con->execute(
'DELETE FROM '.$core->prefix.'setting '. 'DELETE FROM ' .$core->prefix . 'setting ' .
'WHERE blog_id IS NULL '. 'WHERE blog_id IS NULL ' .
"AND setting_ns = '".$core->con->escape($entry)."' " "AND setting_ns = '" . $core->con->escape($entry) . "' "
); );
} }
protected static function deleteLocalSettings($core,$entry) protected static function deleteLocalSettings($core, $entry)
{ {
$core->con->execute( $core->con->execute(
'DELETE FROM '.$core->prefix.'setting '. 'DELETE FROM ' . $core->prefix . 'setting ' .
"WHERE blog_id = '".$core->con->escape($core->blog->id)."' ". "WHERE blog_id = '" . $core->con->escape($core->blog->id) . "' " .
"AND setting_ns = '".$core->con->escape($entry)."' " "AND setting_ns = '" . $core->con->escape($entry) . "' "
); );
} }
protected static function deleteAllSettings($core,$entry) protected static function deleteAllSettings($core, $entry)
{ {
$core->con->execute( $core->con->execute(
'DELETE FROM '.$core->prefix.'setting '. 'DELETE FROM ' .$core->prefix . 'setting ' .
"WHERE setting_ns = '".$core->con->escape($entry)."' ". "WHERE setting_ns = '" . $core->con->escape($entry) . "' " .
"AND (blog_id IS NULL OR blog_id != '') " "AND (blog_id IS NULL OR blog_id != '') "
); );
} }
@ -128,46 +131,45 @@ class dcAdvancedCleaner
$object = dbSchema::init($core->con); $object = dbSchema::init($core->con);
$res = $object->getTables(); $res = $object->getTables();
$rs = array(); $rs = [];
$i = 0; $i = 0;
foreach($res as $k => $v) foreach($res as $k => $v) {
{ if ('' != $core->prefix) {
if ('' != $core->prefix) if (!preg_match('/^' . preg_quote($core->prefix) . '(.*?)$/', $v, $m)) {
{ continue;
if (!preg_match('/^'.preg_quote($core->prefix).'(.*?)$/',$v,$m)) continue; }
$v = $m[1]; $v = $m[1];
} }
$rs[$i]['key'] = $v; $rs[$i]['key'] = $v;
$rs[$i]['value'] = $core->con->select('SELECT count(*) FROM '.$res[$k])->f(0); $rs[$i]['value'] = $core->con->select('SELECT count(*) FROM ' . $res[$k])->f(0);
$i++; $i++;
} }
return $rs; return $rs;
} }
protected static function emptyTable($core,$entry) protected static function emptyTable($core, $entry)
{ {
$core->con->execute( $core->con->execute(
'DELETE FROM '.$core->con->escapeSystem($core->prefix.$entry) 'DELETE FROM ' . $core->con->escapeSystem($core->prefix . $entry)
); );
} }
protected static function deleteTable($core,$entry) protected static function deleteTable($core, $entry)
{ {
self::emptyTable($core,$entry); self::emptyTable($core,$entry);
$core->con->execute( $core->con->execute(
'DROP TABLE '.$core->con->escapeSystem($core->prefix.$entry) 'DROP TABLE ' . $core->con->escapeSystem($core->prefix . $entry)
); );
} }
public static function getVersions($core) public static function getVersions($core)
{ {
$res = $core->con->select('SELECT * FROM '.$core->prefix.'version'); $res = $core->con->select('SELECT * FROM ' . $core->prefix . 'version');
$rs = array(); $rs = [];
$i = 0; $i = 0;
while ($res->fetch()) { while ($res->fetch()) {
$rs[$i]['key'] = $res->module; $rs[$i]['key'] = $res->module;
$rs[$i]['value'] = $res->version; $rs[$i]['value'] = $res->version;
$i++; $i++;
@ -175,30 +177,30 @@ class dcAdvancedCleaner
return $rs; return $rs;
} }
protected static function deleteVersion($core,$entry) protected static function deleteVersion($core, $entry)
{ {
$core->con->execute( $core->con->execute(
'DELETE FROM '.$core->prefix.'version '. 'DELETE FROM '. $core->prefix . 'version ' .
"WHERE module = '".$core->con->escape($entry)."' " "WHERE module = '" . $core->con->escape($entry) . "' "
); );
} }
public static function getPlugins($core) public static function getPlugins($core)
{ {
$res = explode(PATH_SEPARATOR,DC_PLUGINS_ROOT); $res = explode(PATH_SEPARATOR, DC_PLUGINS_ROOT);
return self::getDirs($res); return self::getDirs($res);
} }
protected static function emptyPlugin($core,$entry) protected static function emptyPlugin($core, $entry)
{ {
$res = explode(PATH_SEPARATOR,DC_PLUGINS_ROOT); $res = explode(PATH_SEPARATOR, DC_PLUGINS_ROOT);
self::delDir($res,$entry,false); self::delDir($res, $entry, false);
} }
protected static function deletePlugin($core,$entry) protected static function deletePlugin($core, $entry)
{ {
$res = explode(PATH_SEPARATOR,DC_PLUGINS_ROOT); $res = explode(PATH_SEPARATOR, DC_PLUGINS_ROOT);
self::delDir($res,$entry,true); self::delDir($res, $entry, true);
} }
public static function getThemes($core) public static function getThemes($core)
@ -206,14 +208,14 @@ class dcAdvancedCleaner
return self::getDirs($core->blog->themes_path); return self::getDirs($core->blog->themes_path);
} }
protected static function emptyTheme($core,$entry) protected static function emptyTheme($core, $entry)
{ {
self::delDir($core->blog->themes_path,$entry,false); self::delDir($core->blog->themes_path, $entry, false);
} }
protected static function deleteTheme($core,$entry) protected static function deleteTheme($core, $entry)
{ {
self::delDir($core->blog->themes_path,$entry,true); self::delDir($core->blog->themes_path, $entry, true);
} }
public static function getCaches($core) public static function getCaches($core)
@ -221,82 +223,82 @@ class dcAdvancedCleaner
return self::getDirs(DC_TPL_CACHE); return self::getDirs(DC_TPL_CACHE);
} }
protected static function emptyCache($core,$entry) protected static function emptyCache($core, $entry)
{ {
self::delDir(DC_TPL_CACHE,$entry,false); self::delDir(DC_TPL_CACHE, $entry, false);
} }
protected static function deleteCache($core,$entry) protected static function deleteCache($core, $entry)
{ {
self::delDir(DC_TPL_CACHE,$entry,true); self::delDir(DC_TPL_CACHE, $entry, true);
} }
public static function execute($core,$type,$action,$ns) public static function execute($core, $type, $action, $ns)
{ {
if (strtolower($ns) == 'dcadvancedcleaner') if (strtolower($ns) == 'dcadvancedcleaner') {
throw new exception("dcAdvancedCleaner can't remove itself"); throw new exception("dcAdvancedCleaner can't remove itself");
}
# BEHAVIOR dcAdvancedCleanerBeforeAction # BEHAVIOR dcAdvancedCleanerBeforeAction
$core->callBehavior('dcAdvancedCleanerBeforeAction',$type,$action,$ns); $core->callBehavior('dcAdvancedCleanerBeforeAction', $type, $action, $ns);
try { try {
# Delete global settings # Delete global settings
if ($type == 'settings' && $action == 'delete_global') if ($type == 'settings' && $action == 'delete_global') {
self::deleteGlobalSettings($core,$ns); self::deleteGlobalSettings($core, $ns);
# Delete local settings
if ($type == 'settings' && $action == 'delete_local')
self::deleteLocalSettings($core,$ns);
# Delete all settings
if ($type == 'settings' && $action == 'delete_all')
self::deleteAllSettings($core,$ns);
# Empty tables
if ($type == 'tables' && $action == 'empty')
self::emptyTable($core,$ns);
# Delete tables
if ($type == 'tables' && $action == 'delete')
self::deleteTable($core,$ns);
# Delete versions
if ($type == 'versions' && $action == 'delete')
self::deleteVersion($core,$ns);
# Empty plugins
if ($type == 'plugins' && $action == 'empty')
self::emptyPlugin($core,$ns);
# Delete plugins
if ($type == 'plugins' && $action == 'delete')
self::deletePlugin($core,$ns);
# Empty themes
if ($type == 'themes' && $action == 'empty')
self::emptyTheme($core,$ns);
# Delete themes
if ($type == 'themes' && $action == 'delete')
self::deleteTheme($core,$ns);
# Empty caches
if ($type == 'caches' && $action == 'empty')
self::emptyCache($core,$ns);
# Delete caches
if ($type == 'caches' && $action == 'delete')
self::deleteCache($core,$ns);
return true;
} }
catch(Exception $e) { # Delete local settings
if ($type == 'settings' && $action == 'delete_local') {
self::deleteLocalSettings($core, $ns);
}
# Delete all settings
if ($type == 'settings' && $action == 'delete_all') {
self::deleteAllSettings($core, $ns);
}
# Empty tables
if ($type == 'tables' && $action == 'empty') {
self::emptyTable($core, $ns);
}
# Delete tables
if ($type == 'tables' && $action == 'delete') {
self::deleteTable($core, $ns);
}
# Delete versions
if ($type == 'versions' && $action == 'delete') {
self::deleteVersion($core, $ns);
}
# Empty plugins
if ($type == 'plugins' && $action == 'empty') {
self::emptyPlugin($core, $ns);
}
# Delete plugins
if ($type == 'plugins' && $action == 'delete') {
self::deletePlugin($core, $ns);
}
# Empty themes
if ($type == 'themes' && $action == 'empty') {
self::emptyTheme($core, $ns);
}
# Delete themes
if ($type == 'themes' && $action == 'delete') {
self::deleteTheme($core, $ns);
}
# Empty caches
if ($type == 'caches' && $action == 'empty') {
self::emptyCache($core, $ns);
}
# Delete caches
if ($type == 'caches' && $action == 'delete') {
self::deleteCache($core, $ns);
}
return true;
} catch(Exception $e) {
$errors = self::$errors; $errors = self::$errors;
if (isset($errors[$type][$action])) { if (isset($errors[$type][$action])) {
throw new Exception(__($errors[$type][$action])); throw new Exception(__($errors[$type][$action]));
} }
else { else {
throw new Exception(sprintf(__('Cannot execute "%s" of type "%s"'),$action,$type)); throw new Exception(sprintf(__('Cannot execute "%s" of type "%s"'), $action, $type));
} }
return false; return false;
} }
@ -304,93 +306,93 @@ class dcAdvancedCleaner
protected static function getDirs($roots) protected static function getDirs($roots)
{ {
if (!is_array($roots)) if (!is_array($roots)) {
$roots = array($roots); $roots = [$roots];
}
$rs = array(); $rs = [];
$i = 0; $i = 0;
foreach ($roots as $root) { foreach ($roots as $root) {
$dirs = files::scanDir($root); $dirs = files::scanDir($root);
foreach($dirs as $k) { foreach($dirs as $k) {
if ('.' == $k || '..' == $k || !is_dir($root .'/' . $k)) {
if ('.' == $k || '..' == $k || !is_dir($root.'/'.$k)) continue; continue;
}
$rs[$i]['key'] = $k; $rs[$i]['key'] = $k;
$rs[$i]['value'] = count(self::scanDir($root.'/'.$k)); $rs[$i]['value'] = count(self::scanDir($root . '/' . $k));
$i++; $i++;
} }
} }
return $rs; return $rs;
} }
protected static function delDir($roots,$folder,$delfolder=true) protected static function delDir($roots, $folder, $delfolder = true)
{ {
if (strpos($folder,'/')) if (strpos($folder,'/')) {
return false; return false;
}
if (!is_array($roots)) if (!is_array($roots)) {
$roots = array($roots); $roots = [$roots];
}
foreach ($roots as $root) foreach ($roots as $root) {
{ if (file_exists($root . '/' . $folder))
if (file_exists($root.'/'.$folder)) return self::delTree($root . '/' . $folder, $delfolder);
return self::delTree($root.'/'.$folder,$delfolder);
} }
return false; return false;
} }
protected static function scanDir($path,$dir='',$res=array()) protected static function scanDir($path, $dir = '', $res = [])
{ {
$exclude = self::$exclude; $exclude = self::$exclude;
$path = path::real($path); $path = path::real($path);
if (!is_dir($path) || !is_readable($path)) return array(); if (!is_dir($path) || !is_readable($path)) {
return [];
}
$files = files::scandir($path); $files = files::scandir($path);
foreach($files AS $file) { foreach($files AS $file) {
if (in_array($file,$exclude)) continue; if (in_array($file,$exclude)) {
continue;
if (is_dir($path.'/'.$file)) { }
if (is_dir($path . '/' . $file)) {
$res[] = $file; $res[] = $file;
$res = self::scanDir($path.'/'.$file,$dir.'/'.$file,$res); $res = self::scanDir($path . '/' . $file, $dir . '/' . $file, $res);
} else { } else {
$res[] = empty($dir) ? $file : $dir . '/' . $file;
$res[] = empty($dir) ? $file : $dir.'/'.$file;
} }
} }
return $res; return $res;
} }
protected static function delTree($dir,$delroot=true) protected static function delTree($dir, $delroot = true)
{ {
if (!is_dir($dir) || !is_readable($dir)) return false; if (!is_dir($dir) || !is_readable($dir)) {
return false;
if (substr($dir,-1) != '/') $dir .= '/'; }
if (substr($dir,-1) != '/') {
if (($d = @dir($dir)) === false) return false; $dir .= '/';
}
while (($entryname = $d->read()) !== false) if (($d = @dir($dir)) === false) {
{ return false;
if ($entryname != '.' && $entryname != '..') }
{ while (($entryname = $d->read()) !== false) {
if (is_dir($dir.'/'.$entryname)) if ($entryname != '.' && $entryname != '..') {
{ if (is_dir($dir . '/' . $entryname)) {
if (!self::delTree($dir.'/'.$entryname)) return false; if (!self::delTree($dir . '/' . $entryname)) {return false;
}
} else {
if (!@unlink($dir . '/' . $entryname)) {
return false;
} }
else
{
if (!@unlink($dir.'/'.$entryname)) return false;
} }
} }
} }
$d->close(); $d->close();
if ($delroot) if ($delroot) {
return @rmdir($dir); return @rmdir($dir);
else } else {
return true; return true;
} }
}
} }

View File

@ -11,7 +11,9 @@
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_ADMIN_CONTEXT')){return;} if (!defined('DC_ADMIN_CONTEXT')) {
return null;
}
/** /**
@brief Modules uninstall features handler @brief Modules uninstall features handler
@ -24,9 +26,9 @@ class dcUninstaller
{ {
protected $path; protected $path;
protected $modules = array(); ///< <b>array</b> Modules informations array protected $modules = []; ///< <b>array</b> Modules informations array
protected $actions = array('user'=>array(),'callback'=>array()); protected $actions = ['user' => [], 'callback' => []];
protected $callbacks = array('user'=>array(),'callback'=>array()); protected $callbacks = ['user' => [], 'callback' => []];
protected $id = null; protected $id = null;
protected $mroot = null; protected $mroot = null;
@ -40,36 +42,36 @@ class dcUninstaller
'caches' : if module has files on DC caches path, 'caches' : if module has files on DC caches path,
'versions' : if module set a versions on DC table 'version' 'versions' : if module set a versions on DC table 'version'
*/ */
protected static $allowed_properties = array( protected static $allowed_properties = [
'versions' => array( 'versions' => [
'delete' => 'delete version in dc' 'delete' => 'delete version in dc'
), ],
'settings' => array( 'settings' => [
'delete_global' => 'delete global settings', 'delete_global' => 'delete global settings',
'delete_local' => 'delete local settings', 'delete_local' => 'delete local settings',
'delete_all' => 'delete all settings' 'delete_all' => 'delete all settings'
), ],
'tables' => array( 'tables' => [
'empty' => 'empty table', 'empty' => 'empty table',
'delete' => 'delete table' 'delete' => 'delete table'
), ],
'plugins' => array( 'plugins' => [
'empty' => 'empty plugin folder', 'empty' => 'empty plugin folder',
'delete' => 'delete plugin folder' 'delete' => 'delete plugin folder'
), ],
'themes' => array( 'themes' => [
'empty' => 'empty theme folder', 'empty' => 'empty theme folder',
'delete' => 'delete theme folder' 'delete' => 'delete theme folder'
), ],
'caches' => array( 'caches' => [
'empty' => 'empty cache folder', 'empty' => 'empty cache folder',
'delete' => 'delete cache folder' 'delete' => 'delete cache folder'
) ]
); ];
protected static $priority_properties = array( protected static $priority_properties = [
'versions','settings','tables','themes','plugins','caches' 'versions','settings','tables','themes','plugins','caches'
); ];
public $core; ///< <b>dcCore</b> dcCore instance public $core; ///< <b>dcCore</b> dcCore instance
@ -78,7 +80,7 @@ class dcUninstaller
@param core <b>dcCore</b> dcCore instance @param core <b>dcCore</b> dcCore instance
*/ */
public function __construct($core) public function __construct(dcCore $core)
{ {
$this->core =& $core; $this->core =& $core;
} }
@ -100,20 +102,20 @@ class dcUninstaller
{ {
$this->path = explode(PATH_SEPARATOR,$path); $this->path = explode(PATH_SEPARATOR,$path);
foreach ($this->path as $root) foreach ($this->path as $root) {
{ if (!is_dir($root) || !is_readable($root)) {
if (!is_dir($root) || !is_readable($root)) continue; continue;
}
if (substr($root, -1) != '/') {
$root .= '/';
}
if (($d = @dir($root)) === false) {
continue;
}
while (($entry = $d->read()) !== false) {
$full_entry = $root . '/' . $entry;
if (substr($root,-1) != '/') $root .= '/'; if ($entry != '.' && $entry != '..' && is_dir($full_entry)) {
if (($d = @dir($root)) === false) continue;
while (($entry = $d->read()) !== false)
{
$full_entry = $root.'/'.$entry;
if ($entry != '.' && $entry != '..' && is_dir($full_entry))
{
$this->loadModule($full_entry); $this->loadModule($full_entry);
} }
} }
@ -121,7 +123,7 @@ class dcUninstaller
} }
# Sort modules by name # Sort modules by name
uasort($this->modules,array($this,'sortModules')); uasort($this->modules, [$this, 'sortModules']);
} }
/** /**
@ -133,14 +135,14 @@ class dcUninstaller
*/ */
public function loadModule($root) public function loadModule($root)
{ {
if (file_exists($root.'/_define.php') if (file_exists($root . '/_define.php')
&& file_exists($root.'/_uninstall.php')) { && file_exists($root . '/_uninstall.php')) {
$this->id = basename($root); $this->id = basename($root);
$this->mroot = $root; $this->mroot = $root;
require $root.'/_define.php'; require $root . '/_define.php';
require $root.'/_uninstall.php'; require $root . '/_uninstall.php';
$this->id = null; $this->id = null;
$this->mroot = null; $this->mroot = null;
@ -148,25 +150,24 @@ class dcUninstaller
} }
/** /**
This method registers a module in modules list. You should use This method registers a module in modules list.
this to register a new module.
@param name <b>string</b> Module name @param name <b>string</b> Module name
@param desc <b>string</b> Module description @param desc <b>string</b> Module description
@param author <b>string</b> Module author name @param author <b>string</b> Module author name
@param version <b>string</b> Module version @param version <b>string</b> Module version
*/ */
public function registerModule($name,$desc,$author,$version) public function registerModule($name, $desc, $author, $version, $properties = [])
{ {
if ($this->id) { if ($this->id) {
$this->modules[$this->id] = array( $this->modules[$this->id] = [
'root' => $this->mroot, 'root' => $this->mroot,
'name' => $name, 'name' => $name,
'desc' => $desc, 'desc' => $desc,
'author' => $author, 'author' => $author,
'version' => $version, 'version' => $version,
'root_writable' => is_writable($this->mroot) 'root_writable' => is_writable($this->mroot)
); ];
} }
} }
@ -177,7 +178,7 @@ class dcUninstaller
@param id <b>string</b> Optionnal module ID @param id <b>string</b> Optionnal module ID
@return <b>array</b> @return <b>array</b>
*/ */
public function getModules($id=null) public function getModules($id = null)
{ {
if ($id && isset($this->modules[$id])) { if ($id && isset($this->modules[$id])) {
return $this->modules[$id]; return $this->modules[$id];
@ -205,33 +206,37 @@ class dcUninstaller
@param ns <b>string</b> Name of setting related to module. @param ns <b>string</b> Name of setting related to module.
@param desc <b>string</b> Description of action @param desc <b>string</b> Description of action
*/ */
protected function addUserAction($type,$action,$ns,$desc='') protected function addUserAction($type, $action, $ns, $desc = '')
{ {
$this->addAction('user',$type,$action,$ns,$desc); $this->addAction('user', $type, $action, $ns, $desc);
} }
protected function addDirectAction($type,$action,$ns,$desc='') protected function addDirectAction($type, $action, $ns, $desc = '')
{ {
$this->addAction('direct',$type,$action,$ns,$desc); $this->addAction('direct', $type, $action, $ns, $desc);
} }
private function addAction($group,$type,$action,$ns,$desc) private function addAction($group, $type, $action, $ns, $desc)
{ {
$group = self::group($group); $group = self::group($group);
if (null === $this->id) return; if (null === $this->id) {
return null;
if (empty($type) || empty($ns)) return; }
if (empty($type) || empty($ns)) {
if (!isset(self::$allowed_properties[$type][$action])) return; return null;
}
if (empty($desc)) $desc = __($action); if (!isset(self::$allowed_properties[$type][$action])) {
return null;
$this->actions[$group][$this->id][$type][] = array( }
if (empty($desc)) {
$desc = __($action);
}
$this->actions[$group][$this->id][$type][] = [
'ns' => $ns, 'ns' => $ns,
'action' => $action, 'action' => $action,
'desc' => $desc 'desc' => $desc
); ];
} }
/** /**
@ -243,27 +248,28 @@ class dcUninstaller
*/ */
public function getUserActions($id) public function getUserActions($id)
{ {
return $this->getActions('user',$id); return $this->getActions('user', $id);
} }
public function getDirectActions($id) public function getDirectActions($id)
{ {
return $this->getActions('direct',$id); return $this->getActions('direct', $id);
} }
protected function getActions($group,$id) protected function getActions($group, $id)
{ {
$group = self::group($group); $group = self::group($group);
if (!isset($this->actions[$group][$id])) return array(); if (!isset($this->actions[$group][$id])) {
return [];
$res = array(); }
foreach(self::$priority_properties as $k => $v) $res = [];
{ foreach(self::$priority_properties as $k => $v) {
if (!isset($this->actions[$group][$id][$v])) continue; if (!isset($this->actions[$group][$id][$v])) {
continue;
}
$res[$v] = $this->actions[$group][$id][$v]; $res[$v] = $this->actions[$group][$id][$v];
} }
return $res; return $res;
} }
@ -274,30 +280,33 @@ class dcUninstaller
@param func <b>string</b> Callable function @param func <b>string</b> Callable function
@param desc <b>string</b> Description of action @param desc <b>string</b> Description of action
*/ */
protected function addUserCallback($func,$desc='') protected function addUserCallback($func, $desc= '')
{ {
$this->addCallback('user',$func,$desc); $this->addCallback('user', $func, $desc);
} }
protected function addDirectCallback($func,$desc='') protected function addDirectCallback($func, $desc = '')
{ {
$this->addCallback('direct',$func,$desc); $this->addCallback('direct', $func, $desc);
} }
private function addCallback($group,$func,$desc) private function addCallback($group, $func, $desc)
{ {
$group = self::group($group); $group = self::group($group);
if (null === $this->id) return; if (null === $this->id) {
return null;
if (empty($desc)) $desc = __('extra action'); }
if (empty($desc)) {
if (!is_callable($func)) return; $desc = __('extra action');
}
$this->callbacks[$group][$this->id][] = array( if (!is_callable($func)) {
return null;
}
$this->callbacks[$group][$this->id][] = [
'func' => $func, 'func' => $func,
'desc' => $desc 'desc' => $desc
); ];
} }
/** /**
@ -308,20 +317,21 @@ class dcUninstaller
*/ */
public function getUserCallbacks($id) public function getUserCallbacks($id)
{ {
return $this->getCallbacks('user',$id); return $this->getCallbacks('user', $id);
} }
public function getDirectCallbacks($id) public function getDirectCallbacks($id)
{ {
return $this->getCallbacks('direct',$id); return $this->getCallbacks('direct', $id);
} }
protected function getCallbacks($group,$id) protected function getCallbacks($group, $id)
{ {
$group = self::group($group); $group = self::group($group);
if (!isset($this->callbacks[$group][$id])) return array(); if (!isset($this->callbacks[$group][$id])) {
return [];
}
return $this->callbacks[$group][$id]; return $this->callbacks[$group][$id];
} }
@ -334,22 +344,23 @@ class dcUninstaller
@param ns <b>string</b> Name of setting related to module. @param ns <b>string</b> Name of setting related to module.
@return <b>array</b> @return <b>array</b>
*/ */
public function execute($type,$action,$ns) public function execute($type, $action, $ns)
{ {
$prop = $this->getAllowedProperties(); $prop = $this->getAllowedProperties();
if (!isset($prop[$type][$action]) || empty($ns)) return; if (!isset($prop[$type][$action]) || empty($ns)) {
return null;
dcAdvancedCleaner::execute($this->core,$type,$action,$ns); }
dcAdvancedCleaner::execute($this->core, $type, $action, $ns);
} }
private function sortModules($a,$b) private function sortModules($a, $b)
{ {
return strcasecmp($a['name'],$b['name']); return strcasecmp($a['name'], $b['name']);
} }
private function group($group) private function group($group)
{ {
return in_array($group,array('user','direct')) ? $group : null; return in_array($group, ['user','direct']) ? $group : null;
} }
} }

View File

@ -11,28 +11,36 @@
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_RC_PATH')){return;} if (!defined('DC_RC_PATH')) {
return null;
}
# This file is used with plugin activityReport class dcAdvancedCleanerActivityReportBehaviors
$core->activityReport->addGroup('dcadvancedcleaner',__('Plugin dcAdvancedCleaner')); {
public static function maintenance($type, $action, $ns)
{
$logs = array($type ,$action, $ns);
# from BEHAVIOR dcAdvancedCleanerBeforeAction $GLOBALS['core']->activityReport->addLog('dcadvancedcleaner', 'maintenance', $logs);
# in dcAdvancedCleaner/inc/class.dc.advanced.cleaner.php }
$core->activityReport->addAction(
public static function add($core)
{
// This file is used with plugin activityReport
$core->activityReport->addGroup(
'dcadvancedcleaner',
__('Plugin dcAdvancedCleaner')
);
// from BEHAVIOR dcAdvancedCleanerBeforeAction
// in dcAdvancedCleaner/inc/class.dc.advanced.cleaner.php
$core->activityReport->addAction(
'dcadvancedcleaner', 'dcadvancedcleaner',
'maintenance', 'maintenance',
__('Maintenance'), __('Maintenance'),
__('New action from dcAdvancedCleaner has been made with type="%s", action="%s", ns="%s".'), __('New action from dcAdvancedCleaner has been made with type="%s", action="%s", ns="%s".'),
'dcAdvancedCleanerBeforeAction', 'dcAdvancedCleanerBeforeAction',
array('dcAdvancedCleanerActivityReportBehaviors','maintenance') ['dcAdvancedCleanerActivityReportBehaviors', 'maintenance']
); );
class dcAdvancedCleanerActivityReportBehaviors
{
public static function maintenance($type,$action,$ns)
{
$logs = array($type,$action,$ns);
$GLOBALS['core']->activityReport->addLog('dcadvancedcleaner','maintenance',$logs);
} }
} }

View File

@ -11,71 +11,71 @@
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_ADMIN_CONTEXT')){return;} if (!defined('DC_ADMIN_CONTEXT')) {
return null;
}
class behaviorsDcAdvancedCleaner class behaviorsDcAdvancedCleaner
{ {
public static function pluginsBeforeDelete($plugin) public static function pluginsBeforeDelete($plugin)
{ {
self::moduleBeforeDelete($plugin,'plugins.php?removed=1'); self::moduleBeforeDelete($plugin, 'plugins.php?removed=1');
} }
public static function themeBeforeDelete($theme) public static function themeBeforeDelete($theme)
{ {
self::moduleBeforeDelete($theme,'blog_theme.php?del=1'); self::moduleBeforeDelete($theme, 'blog_theme.php?del=1');
} }
# Generic module before delete // Generic module before delete
public static function moduleBeforeDelete($module,$redir) public static function moduleBeforeDelete($module, $redir)
{ {
global $core; global $core;
$done = false; $done = false;
if (!$core->blog->settings->dcAdvancedCleaner->dcAdvancedCleaner_behavior_active) return; if (!$core->blog->settings->dcAdvancedCleaner->dcAdvancedCleaner_behavior_active) {
return null;
}
$uninstaller = new dcUninstaller($core); $uninstaller = new dcUninstaller($core);
$uninstaller->loadModule($module['root']); $uninstaller->loadModule($module['root']);
$m_callbacks = $uninstaller->getDirectCallbacks($module['id']); $m_callbacks = $uninstaller->getDirectCallbacks($module['id']);
$m_actions = $uninstaller->getDirectActions($module['id']); $m_actions = $uninstaller->getDirectActions($module['id']);
foreach($m_callbacks as $k => $callback) foreach($m_callbacks as $k => $callback) {
{ if (!isset($callback['func']) || !is_callable($callback['func'])) {
if (!isset($callback['func']) || !is_callable($callback['func'])) continue; continue;
}
call_user_func($callback['func'],$module); call_user_func($callback['func'], $module);
$done = true; $done = true;
} }
foreach($m_actions as $type => $actions) {
foreach($m_actions as $type => $actions) foreach($actions as $v) {
{ $uninstaller->execute($type, $v['action'], $v['ns']);
foreach($actions as $v)
{
$uninstaller->execute($type,$v['action'],$v['ns']);
$done = true; $done = true;
} }
} }
if ($done) { if ($done) {
http::redirect($redir); http::redirect($redir);
} }
} }
public static function dcAdvancedCleanerAdminTabs($core,$p_url) public static function dcAdvancedCleanerAdminTabs($core, $p_url)
{ {
self::modulesTabs($core,DC_PLUGINS_ROOT,$p_url.'&tab=uninstaller'); self::modulesTabs($core,DC_PLUGINS_ROOT,$p_url.'&tab=uninstaller');
} }
public static function pluginsToolsTabs($core) public static function pluginsToolsTabs($core)
{ {
self::modulesTabs($core,DC_PLUGINS_ROOT,'plugins.php?tab=uninstaller'); self::modulesTabs($core, DC_PLUGINS_ROOT, 'plugins.php?tab=uninstaller');
} }
# Generic module tabs // Generic module tabs
public static function modulesTabs($core,$path,$redir,$title='') public static function modulesTabs($core, $path, $redir, $title = '')
{ {
if (!$core->blog->settings->dcAdvancedCleaner->dcAdvancedCleaner_behavior_active) return; if (!$core->blog->settings->dcAdvancedCleaner->dcAdvancedCleaner_behavior_active) {
return null;
}
$err = ''; $err = '';
$title = empty($title) ? __('Advanced uninstall') : $title; $title = empty($title) ? __('Advanced uninstall') : $title;
@ -84,82 +84,76 @@ class behaviorsDcAdvancedCleaner
$modules = $uninstaller->getModules(); $modules = $uninstaller->getModules();
$props = $uninstaller->getAllowedProperties(); $props = $uninstaller->getAllowedProperties();
# Execute // Execute
if (isset($_POST['action']) && $_POST['action'] == 'uninstall' if (isset($_POST['action']) && $_POST['action'] == 'uninstall'
&& (!empty($_POST['extras']) || !empty($_POST['actions']))) { && (!empty($_POST['extras']) || !empty($_POST['actions']))
) {
try { try {
# Extras // Extras
if (!empty($_POST['extras'])) { if (!empty($_POST['extras'])) {
foreach($_POST['extras'] as $module_id => $extras) foreach($_POST['extras'] as $module_id => $extras) {
{ foreach($extras as $k => $sentence) {
foreach($extras as $k => $sentence)
{
$extra = @unserialize(@base64_decode($sentence)); $extra = @unserialize(@base64_decode($sentence));
if (!$extra || !is_callable($extra)) continue; if (!$extra || !is_callable($extra)) {
continue;
call_user_func($extra,$modul_id); }
call_user_func($extra, $modul_id);
} }
} }
} }
# Actions // Actions
if (!empty($_POST['actions'])) { if (!empty($_POST['actions'])) {
foreach($_POST['actions'] as $module_id => $actions) foreach($_POST['actions'] as $module_id => $actions) {
{ foreach($actions as $k => $sentence) {
foreach($actions as $k => $sentence)
{
$action = @unserialize(@base64_decode($sentence)); $action = @unserialize(@base64_decode($sentence));
if (!$action if (!$action
|| !isset($action['type']) || !isset($action['type'])
|| !isset($action['action']) || !isset($action['action'])
|| !isset($action['ns'])) continue; || !isset($action['ns'])
) {
$uninstaller->execute($action['type'],$action['action'],$action['ns']); continue;
}
$uninstaller->execute($action['type'], $action['action'], $action['ns']);
} }
} }
} }
http::redirect($redir.'&msg=1'); http::redirect($redir . '&msg=1');
} } catch(Exception $e) {
catch(Exception $e) {
$err = $e->getMessage(); $err = $e->getMessage();
} }
} }
echo echo '<div class="multi-part" id="uninstaller" title="' . __($title) . '">';
'<div class="multi-part" id="uninstaller" title="'.__($title).'">';
if($err)
echo '<p class="error">'.$err.'</p>';
if($err) {
echo '<p class="error">' . $err . '</p>';
}
if(!count($modules)) { if(!count($modules)) {
echo '<p>'.__('There is no module with uninstall features').'</p></div>'; echo '<p>' . __('There is no module with uninstall features') . '</p></div>';
return; return null;
} }
echo echo
'<p>'.__('List of modules with advanced uninstall features').'</p>'. '<p>' . __('List of modules with advanced uninstall features') . '</p>' .
'<form method="post" action="'.$redir.'">'. '<form method="post" action="' . $redir . '">' .
'<table class="clear"><tr>'. '<table class="clear"><tr>' .
'<th>'.__('id').'</th>'. '<th>' . __('id') . '</th>' .
'<th>'.__('n°').'</th>'; '<th>' . __('v') . '</th>';
foreach($props as $pro_id => $prop) { foreach($props as $pro_id => $prop) {
echo '<th>'.__($pro_id).'</th>'; echo '<th>' . __($pro_id) . '</th>';
} }
echo echo '<th>' . __('extra') . '</th>' . '</tr>';
'<th>'.__('extra').'</th>'.
'</tr>';
$i = 0; $i = 0;
foreach($modules as $module_id => $module) { foreach($modules as $module_id => $module) {
echo echo
'<tr class="line">'. '<tr class="line">' .
'<td class="nowrap">'.$module_id.'</td>'. '<td class="nowrap">' . $module_id . '</td>' .
'<td class="nowrap">'.$module['version'].'</td>'; '<td class="nowrap">' . $module['version'] . '</td>';
$actions = $uninstaller->getUserActions($module_id); $actions = $uninstaller->getUserActions($module_id);
@ -174,17 +168,18 @@ class behaviorsDcAdvancedCleaner
$j = 0; $j = 0;
foreach($actions[$prop_id] as $action_id => $action) { foreach($actions[$prop_id] as $action_id => $action) {
if (!isset($props[$prop_id][$action['action']])) continue; if (!isset($props[$prop_id][$action['action']])) {
continue;
$ret = base64_encode(serialize(array( }
$ret = base64_encode(serialize([
'type' => $prop_id, 'type' => $prop_id,
'action'=>$action['action'], 'action'=> $action['action'],
'ns'=>$action['ns'] 'ns'=> $action['ns']
))); ]));
echo '<label class="classic">'. echo '<label class="classic">'.
form::checkbox(array('actions['.$module_id.']['.$j.']'),$ret). form::checkbox(['actions[' . $module_id . '][' . $j . ']'], $ret) .
' '.$action['desc'].'</label><br />'; ' ' . $action['desc'] . '</label><br />';
$j++; $j++;
} }
@ -205,21 +200,21 @@ class behaviorsDcAdvancedCleaner
$ret = base64_encode(serialize($callback['func'])); $ret = base64_encode(serialize($callback['func']));
echo '<label class="classic">'. echo '<label class="classic">'.
form::checkbox(array('extras['.$module_id.']['.$k.']'),$ret). form::checkbox(['extras[' . $module_id . '][' . $k . ']'], $ret) .
' '.$callback['desc'].'</label><br />'; ' ' . $callback['desc'] . '</label><br />';
} }
echo '</td></tr>'; echo '</td></tr>';
} }
echo echo
'</table>'. '</table>' .
'<p>'. '<p>' .
$core->formNonce(). $core->formNonce() .
form::hidden(array('redir'),$redir). form::hidden(['redir'], $redir) .
form::hidden(array('action'),'uninstall'). form::hidden(['action'], 'uninstall') .
'<input type="submit" name="submit" value="'.__('Perform selected actions').'" /> '. '<input type="submit" name="submit" value="' . __('Perform selected actions') . '" /> ' .
'</p>'. '</p>' .
'</form>'. '</form>' .
'</div>'; '</div>';
} }
} }