diff --git a/_admin.php b/_admin.php index 9eb19ba..4635f14 100644 --- a/_admin.php +++ b/_admin.php @@ -11,25 +11,30 @@ * @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( __('Advanced cleaner'), - 'plugin.php?p=dcAdvancedCleaner', - 'index.php?pf=dcAdvancedCleaner/icon.png', - preg_match('/plugin.php\?p=dcAdvancedCleaner(&.*)?$/',$_SERVER['REQUEST_URI']), + $core->adminurl->get('admin.plugin.dcAdvancedCleaner'), + dcPage::getPF('dcAdvancedCleaner/icon.png'), + preg_match( + '/' . preg_quote($core->adminurl->get('admin.plugin.dcAdvancedCleaner')) . '(&.*)?$/', + $_SERVER['REQUEST_URI'] + ), $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'), - 'url' => 'plugin.php?p=dcAdvancedCleaner', - 'small-icon' => 'index.php?pf=dcAdvancedCleaner/icon.png', - 'large-icon' => 'index.php?pf=dcAdvancedCleaner/icon-big.png', - 'permissions' => 'usage,contentadmin' - )); + 'url' => $core->adminurl->get('admin.plugin.dcAdvancedCleaner'), + 'small-icon' => dcPage::getPF('dcAdvancedCleaner/icon.png'), + 'large-icon' => dcPage::getPF('dcAdvancedCleaner/icon-big.png'), + 'permissions' => $core->auth->isSuperAdmin() + ]); } \ No newline at end of file diff --git a/_install.php b/_install.php index 799b9c1..eb79510 100644 --- a/_install.php +++ b/_install.php @@ -11,36 +11,41 @@ * @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'); -# Compare versions -if (version_compare($old_version,$new_version,'>=')) {return;} +if (version_compare($old_version, $new_version, '>=')) { + return null; +} -# Install or update -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 +try { $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->setVersion('dcAdvancedCleaner',$new_version); + $core->blog->settings->dcAdvancedCleaner->put( + '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; -} -catch (Exception $e) -{ +} catch (Exception $e) { $core->error->add($e->getMessage()); return false; } \ No newline at end of file diff --git a/_prepend.php b/_prepend.php index cda1549..d946a7e 100644 --- a/_prepend.php +++ b/_prepend.php @@ -11,41 +11,28 @@ * @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'); -# Main class -$__autoload['dcAdvancedCleaner'] = - dirname(__FILE__).'/inc/class.dc.advanced.cleaner.php'; +$__autoload['dcAdvancedCleaner'] = $d . 'class.dc.advanced.cleaner.php'; +$__autoload['behaviorsDcAdvancedCleaner'] = $d . 'lib.dc.advanced.cleaner.behaviors.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', - array('behaviorsDcAdvancedCleaner','pluginsToolsTabs')); - -# Action on plugin deletion + ['behaviorsDcAdvancedCleaner', 'pluginsToolsTabs']); $core->addBehavior('pluginsBeforeDelete', - array('behaviorsDcAdvancedCleaner','pluginsBeforeDelete')); - -# Action on theme deletion + ['behaviorsDcAdvancedCleaner', 'pluginsBeforeDelete']); $core->addBehavior('themeBeforeDelete', - array('behaviorsDcAdvancedCleaner','themeBeforeDelete')); - -# Tabs of dcAvdancedCleaner admin page + ['behaviorsDcAdvancedCleaner', 'themeBeforeDelete']); $core->addBehavior('dcAdvancedCleanerAdminTabs', - array('behaviorsDcAdvancedCleaner','dcAdvancedCleanerAdminTabs')); + ['behaviorsDcAdvancedCleaner', 'dcAdvancedCleanerAdminTabs']); -# Add dcac events on plugin activityReport -if (defined('ACTIVITY_REPORT')) -{ - require_once dirname(__FILE__).'/inc/lib.dc.advanced.cleaner.activityreport.php'; +if (defined('ACTIVITY_REPORT')) { + dcAdvancedCleanerActivityReportBehaviors::add($core); } \ No newline at end of file diff --git a/inc/class.dc.advanced.cleaner.php b/inc/class.dc.advanced.cleaner.php index 44660cd..71258f3 100644 --- a/inc/class.dc.advanced.cleaner.php +++ b/inc/class.dc.advanced.cleaner.php @@ -11,114 +11,117 @@ * @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 { - protected static $errors = array( - 'settings' => array( + protected static $errors = [ + 'settings' => [ 'delete_global' => 'Failed to delete global settings', 'delete_local' => 'Failed to delete local settings', 'delete_all' => 'Failed to delete all settings' - ), - 'tables' => array( + ], + 'tables' => [ 'empty' => 'Failed to empty table', 'delete' => 'Failed to delete table' - ), - 'plugins' => array( + ], + 'plugins' => [ 'empty' => 'Failed to empty plugin folder', 'delete' => 'Failed to delete plugin folder' - ), - 'themes' => array( + ], + 'themes' => [ 'empty' => 'Failed to empty themes folder', 'delete' => 'Failed to delete themes folder' - ), - 'caches' => array( + ], + 'caches' => [ 'empty' => 'Failed to empty cache folder', 'delete' => 'Failed to delete cache folder' - ), - 'versions' => array( + ], + 'versions' => [ 'delete' => 'Failed to delete version' - ) - ); + ] + ]; - public static $dotclear = array( - 'settings' => array( - 'akismet','antispam','breadcrumb','dcckeditor','dclegacyeditor','maintenance', - 'pages','pings','system','themes','widgets' - ), - 'tables' => array( - 'blog','category','comment','link','log','media', - 'meta','permissions','ping','post','post_media','pref','session', - 'setting','spamrule','user','version' - ), - 'plugins' => array( - 'aboutConfig','akismet','antispam','attachments','blogroll','blowupConfig', - 'breadcrumb','dcCKEditor','dclegacy','dcLegacyEditor','fairTrackbacks','importExport','maintenance', - 'pages','pings','simpleMenu','tags','themeEditor','userPref','widgets' - ), - 'themes' => array( - 'default','customCSS','blueSilence','berlin','ductile' - ), - 'caches' => array( - 'cbfeed','dcrepo','versions' - ), - 'versions' => array( - 'antispam','blogroll','blowupConfig','core','dcCKEditor','dcLegacyEditor','pages','pings','simpleMenu','tags','widgets' - ) - ); + public static $dotclear = [ + 'settings' => [ + 'akismet', 'antispam', 'breadcrumb', 'dcckeditor', 'dclegacyeditor', 'maintenance', + 'pages', 'pings', 'system', 'themes', 'widgets' + ], + 'tables' => [ + 'blog', 'category', 'comment', 'link', 'log', 'media', + 'meta', 'permissions', 'ping', 'post','post_media', 'pref', 'session', + 'setting', 'spamrule', 'user', 'version' + ], + 'plugins' => [ + 'aboutConfig', 'akismet', 'antispam', 'attachments', 'blogroll', 'blowupConfig', + 'breadcrumb', 'dcCKEditor', 'dclegacy', 'dcLegacyEditor', 'fairTrackbacks', 'importExport', 'maintenance', + 'pages', 'pings', 'simpleMenu', 'tags', 'themeEditor', 'userPref', 'widgets' + ], + 'themes' => [ + 'default', 'customCSS', 'blueSilence', 'berlin', 'ductile' + ], + 'caches' => [ + 'cbfeed', 'dcrepo', 'versions' + ], + 'versions' => [ + 'antispam', 'blogroll', 'blowupConfig', 'core', 'dcCKEditor', 'dcLegacyEditor', 'pages', 'pings', 'simpleMenu', 'tags', 'widgets' + ] + ]; - public static $exclude = array( - '.','..','__MACOSX','.svn','CVS','.DS_Store','Thumbs.db' - ); + public static $exclude = [ + '.', '..', '__MACOSX', '.svn', 'CVS', '.DS_Store', 'Thumbs.db' + ]; public static function getSettings($core) { $res = $core->con->select( - 'SELECT setting_ns '. - 'FROM '.$core->prefix.'setting '. - 'WHERE blog_id IS NULL '. - "OR blog_id IS NOT NULL ". - 'GROUP BY setting_ns'); + 'SELECT setting_ns ' . + 'FROM ' . $core->prefix . 'setting ' . + 'WHERE blog_id IS NULL ' . + "OR blog_id IS NOT NULL " . + 'GROUP BY setting_ns' + ); - $rs = array(); + $rs = []; $i = 0; while($res->fetch()) { - $rs[$i]['key'] = $res->setting_ns; $rs[$i]['value'] = $core->con->select( - 'SELECT count(*) FROM '.$core->prefix.'setting '. - "WHERE setting_ns = '".$res->setting_ns."' ". - "AND (blog_id IS NULL OR blog_id IS NOT NULL) ". - "GROUP BY setting_ns ")->f(0); + 'SELECT count(*) FROM ' . $core->prefix .'setting ' . + "WHERE setting_ns = '" . $res->setting_ns ."' " . + "AND (blog_id IS NULL OR blog_id IS NOT NULL) " . + "GROUP BY setting_ns " + )->f(0); $i++; } return $rs; } - protected static function deleteGlobalSettings($core,$entry) + protected static function deleteGlobalSettings($core, $entry) { $core->con->execute( - 'DELETE FROM '.$core->prefix.'setting '. - 'WHERE blog_id IS NULL '. - "AND setting_ns = '".$core->con->escape($entry)."' " + 'DELETE FROM ' .$core->prefix . 'setting ' . + 'WHERE blog_id IS NULL ' . + "AND setting_ns = '" . $core->con->escape($entry) . "' " ); } - protected static function deleteLocalSettings($core,$entry) + protected static function deleteLocalSettings($core, $entry) { $core->con->execute( - 'DELETE FROM '.$core->prefix.'setting '. - "WHERE blog_id = '".$core->con->escape($core->blog->id)."' ". - "AND setting_ns = '".$core->con->escape($entry)."' " + 'DELETE FROM ' . $core->prefix . 'setting ' . + "WHERE blog_id = '" . $core->con->escape($core->blog->id) . "' " . + "AND setting_ns = '" . $core->con->escape($entry) . "' " ); } - protected static function deleteAllSettings($core,$entry) + protected static function deleteAllSettings($core, $entry) { $core->con->execute( - 'DELETE FROM '.$core->prefix.'setting '. - "WHERE setting_ns = '".$core->con->escape($entry)."' ". + 'DELETE FROM ' .$core->prefix . 'setting ' . + "WHERE setting_ns = '" . $core->con->escape($entry) . "' " . "AND (blog_id IS NULL OR blog_id != '') " ); } @@ -128,46 +131,45 @@ class dcAdvancedCleaner $object = dbSchema::init($core->con); $res = $object->getTables(); - $rs = array(); + $rs = []; $i = 0; - foreach($res as $k => $v) - { - if ('' != $core->prefix) - { - if (!preg_match('/^'.preg_quote($core->prefix).'(.*?)$/',$v,$m)) continue; + foreach($res as $k => $v) { + if ('' != $core->prefix) { + if (!preg_match('/^' . preg_quote($core->prefix) . '(.*?)$/', $v, $m)) { + continue; + } $v = $m[1]; } $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++; } return $rs; } - protected static function emptyTable($core,$entry) + protected static function emptyTable($core, $entry) { $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); $core->con->execute( - 'DROP TABLE '.$core->con->escapeSystem($core->prefix.$entry) + 'DROP TABLE ' . $core->con->escapeSystem($core->prefix . $entry) ); } 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; while ($res->fetch()) { - $rs[$i]['key'] = $res->module; $rs[$i]['value'] = $res->version; $i++; @@ -175,30 +177,30 @@ class dcAdvancedCleaner return $rs; } - protected static function deleteVersion($core,$entry) + protected static function deleteVersion($core, $entry) { $core->con->execute( - 'DELETE FROM '.$core->prefix.'version '. - "WHERE module = '".$core->con->escape($entry)."' " + 'DELETE FROM '. $core->prefix . 'version ' . + "WHERE module = '" . $core->con->escape($entry) . "' " ); } public static function getPlugins($core) { - $res = explode(PATH_SEPARATOR,DC_PLUGINS_ROOT); + $res = explode(PATH_SEPARATOR, DC_PLUGINS_ROOT); return self::getDirs($res); } - protected static function emptyPlugin($core,$entry) + protected static function emptyPlugin($core, $entry) { - $res = explode(PATH_SEPARATOR,DC_PLUGINS_ROOT); - self::delDir($res,$entry,false); + $res = explode(PATH_SEPARATOR, DC_PLUGINS_ROOT); + self::delDir($res, $entry, false); } - protected static function deletePlugin($core,$entry) + protected static function deletePlugin($core, $entry) { - $res = explode(PATH_SEPARATOR,DC_PLUGINS_ROOT); - self::delDir($res,$entry,true); + $res = explode(PATH_SEPARATOR, DC_PLUGINS_ROOT); + self::delDir($res, $entry, true); } public static function getThemes($core) @@ -206,14 +208,14 @@ class dcAdvancedCleaner 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) @@ -221,82 +223,82 @@ class dcAdvancedCleaner 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"); + } # BEHAVIOR dcAdvancedCleanerBeforeAction - $core->callBehavior('dcAdvancedCleanerBeforeAction',$type,$action,$ns); + $core->callBehavior('dcAdvancedCleanerBeforeAction', $type, $action, $ns); try { # Delete global settings - if ($type == 'settings' && $action == 'delete_global') - self::deleteGlobalSettings($core,$ns); - + if ($type == 'settings' && $action == 'delete_global') { + self::deleteGlobalSettings($core, $ns); + } # Delete local settings - if ($type == 'settings' && $action == 'delete_local') - self::deleteLocalSettings($core,$ns); - + if ($type == 'settings' && $action == 'delete_local') { + self::deleteLocalSettings($core, $ns); + } # Delete all settings - if ($type == 'settings' && $action == 'delete_all') - self::deleteAllSettings($core,$ns); - + if ($type == 'settings' && $action == 'delete_all') { + self::deleteAllSettings($core, $ns); + } # Empty tables - if ($type == 'tables' && $action == 'empty') - self::emptyTable($core,$ns); - + if ($type == 'tables' && $action == 'empty') { + self::emptyTable($core, $ns); + } # Delete tables - if ($type == 'tables' && $action == 'delete') - self::deleteTable($core,$ns); - + if ($type == 'tables' && $action == 'delete') { + self::deleteTable($core, $ns); + } # Delete versions - if ($type == 'versions' && $action == 'delete') - self::deleteVersion($core,$ns); - + if ($type == 'versions' && $action == 'delete') { + self::deleteVersion($core, $ns); + } # Empty plugins - if ($type == 'plugins' && $action == 'empty') - self::emptyPlugin($core,$ns); - + if ($type == 'plugins' && $action == 'empty') { + self::emptyPlugin($core, $ns); + } # Delete plugins - if ($type == 'plugins' && $action == 'delete') - self::deletePlugin($core,$ns); - + if ($type == 'plugins' && $action == 'delete') { + self::deletePlugin($core, $ns); + } # Empty themes - if ($type == 'themes' && $action == 'empty') - self::emptyTheme($core,$ns); - + if ($type == 'themes' && $action == 'empty') { + self::emptyTheme($core, $ns); + } # Delete themes - if ($type == 'themes' && $action == 'delete') - self::deleteTheme($core,$ns); - + if ($type == 'themes' && $action == 'delete') { + self::deleteTheme($core, $ns); + } # Empty caches - if ($type == 'caches' && $action == 'empty') - self::emptyCache($core,$ns); - + if ($type == 'caches' && $action == 'empty') { + self::emptyCache($core, $ns); + } # Delete caches - if ($type == 'caches' && $action == 'delete') - self::deleteCache($core,$ns); - + if ($type == 'caches' && $action == 'delete') { + self::deleteCache($core, $ns); + } return true; - } - catch(Exception $e) { + } catch(Exception $e) { $errors = self::$errors; if (isset($errors[$type][$action])) { throw new Exception(__($errors[$type][$action])); } 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; } @@ -304,93 +306,93 @@ class dcAdvancedCleaner protected static function getDirs($roots) { - if (!is_array($roots)) - $roots = array($roots); - - $rs = array(); + if (!is_array($roots)) { + $roots = [$roots]; + } + $rs = []; $i = 0; foreach ($roots as $root) { - $dirs = files::scanDir($root); foreach($dirs as $k) { - - if ('.' == $k || '..' == $k || !is_dir($root.'/'.$k)) continue; - + if ('.' == $k || '..' == $k || !is_dir($root .'/' . $k)) { + continue; + } $rs[$i]['key'] = $k; - $rs[$i]['value'] = count(self::scanDir($root.'/'.$k)); + $rs[$i]['value'] = count(self::scanDir($root . '/' . $k)); $i++; } } 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; - - if (!is_array($roots)) - $roots = array($roots); - - foreach ($roots as $root) - { - if (file_exists($root.'/'.$folder)) - return self::delTree($root.'/'.$folder,$delfolder); + } + if (!is_array($roots)) { + $roots = [$roots]; + } + foreach ($roots as $root) { + if (file_exists($root . '/' . $folder)) + return self::delTree($root . '/' . $folder, $delfolder); } return false; } - protected static function scanDir($path,$dir='',$res=array()) + protected static function scanDir($path, $dir = '', $res = []) { $exclude = self::$exclude; $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); foreach($files AS $file) { - if (in_array($file,$exclude)) continue; - - if (is_dir($path.'/'.$file)) { - + if (in_array($file,$exclude)) { + continue; + } + if (is_dir($path . '/' . $file)) { $res[] = $file; - $res = self::scanDir($path.'/'.$file,$dir.'/'.$file,$res); + $res = self::scanDir($path . '/' . $file, $dir . '/' . $file, $res); } else { - - $res[] = empty($dir) ? $file : $dir.'/'.$file; + $res[] = empty($dir) ? $file : $dir . '/' . $file; } } 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 (substr($dir,-1) != '/') $dir .= '/'; - - if (($d = @dir($dir)) === false) return false; - - while (($entryname = $d->read()) !== false) - { - if ($entryname != '.' && $entryname != '..') - { - if (is_dir($dir.'/'.$entryname)) - { - if (!self::delTree($dir.'/'.$entryname)) return false; - } - else - { - if (!@unlink($dir.'/'.$entryname)) return false; + if (!is_dir($dir) || !is_readable($dir)) { + return false; + } + if (substr($dir,-1) != '/') { + $dir .= '/'; + } + if (($d = @dir($dir)) === false) { + return false; + } + while (($entryname = $d->read()) !== false) { + if ($entryname != '.' && $entryname != '..') { + if (is_dir($dir . '/' . $entryname)) { + if (!self::delTree($dir . '/' . $entryname)) {return false; + } + } else { + if (!@unlink($dir . '/' . $entryname)) { + return false; + } } } } $d->close(); - if ($delroot) + if ($delroot) { return @rmdir($dir); - else + } else { return true; + } } } \ No newline at end of file diff --git a/inc/class.dc.uninstaller.php b/inc/class.dc.uninstaller.php index 45c1b40..69ee0b9 100644 --- a/inc/class.dc.uninstaller.php +++ b/inc/class.dc.uninstaller.php @@ -11,7 +11,9 @@ * @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 @@ -24,9 +26,9 @@ class dcUninstaller { protected $path; - protected $modules = array(); ///< array Modules informations array - protected $actions = array('user'=>array(),'callback'=>array()); - protected $callbacks = array('user'=>array(),'callback'=>array()); + protected $modules = []; ///< array Modules informations array + protected $actions = ['user' => [], 'callback' => []]; + protected $callbacks = ['user' => [], 'callback' => []]; protected $id = null; protected $mroot = null; @@ -40,36 +42,36 @@ class dcUninstaller 'caches' : if module has files on DC caches path, 'versions' : if module set a versions on DC table 'version' */ - protected static $allowed_properties = array( - 'versions' => array( + protected static $allowed_properties = [ + 'versions' => [ 'delete' => 'delete version in dc' - ), - 'settings' => array( + ], + 'settings' => [ 'delete_global' => 'delete global settings', 'delete_local' => 'delete local settings', 'delete_all' => 'delete all settings' - ), - 'tables' => array( + ], + 'tables' => [ 'empty' => 'empty table', 'delete' => 'delete table' - ), - 'plugins' => array( + ], + 'plugins' => [ 'empty' => 'empty plugin folder', 'delete' => 'delete plugin folder' - ), - 'themes' => array( + ], + 'themes' => [ 'empty' => 'empty theme folder', 'delete' => 'delete theme folder' - ), - 'caches' => array( + ], + 'caches' => [ 'empty' => 'empty cache folder', 'delete' => 'delete cache folder' - ) - ); + ] + ]; - protected static $priority_properties = array( + protected static $priority_properties = [ 'versions','settings','tables','themes','plugins','caches' - ); + ]; public $core; ///< dcCore dcCore instance @@ -78,7 +80,7 @@ class dcUninstaller @param core dcCore dcCore instance */ - public function __construct($core) + public function __construct(dcCore $core) { $this->core =& $core; } @@ -100,20 +102,20 @@ class dcUninstaller { $this->path = explode(PATH_SEPARATOR,$path); - foreach ($this->path as $root) - { - if (!is_dir($root) || !is_readable($root)) continue; + foreach ($this->path as $root) { + if (!is_dir($root) || !is_readable($root)) { + 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 (($d = @dir($root)) === false) continue; - - while (($entry = $d->read()) !== false) - { - $full_entry = $root.'/'.$entry; - - if ($entry != '.' && $entry != '..' && is_dir($full_entry)) - { + if ($entry != '.' && $entry != '..' && is_dir($full_entry)) { $this->loadModule($full_entry); } } @@ -121,7 +123,7 @@ class dcUninstaller } # 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) { - if (file_exists($root.'/_define.php') - && file_exists($root.'/_uninstall.php')) { + if (file_exists($root . '/_define.php') + && file_exists($root . '/_uninstall.php')) { $this->id = basename($root); $this->mroot = $root; - require $root.'/_define.php'; - require $root.'/_uninstall.php'; + require $root . '/_define.php'; + require $root . '/_uninstall.php'; $this->id = null; $this->mroot = null; @@ -148,25 +150,24 @@ class dcUninstaller } /** - This method registers a module in modules list. You should use - this to register a new module. + This method registers a module in modules list. @param name string Module name @param desc string Module description @param author string Module author name @param version string Module version */ - public function registerModule($name,$desc,$author,$version) + public function registerModule($name, $desc, $author, $version, $properties = []) { if ($this->id) { - $this->modules[$this->id] = array( - 'root' => $this->mroot, - 'name' => $name, - 'desc' => $desc, - 'author' => $author, - 'version' => $version, - 'root_writable' => is_writable($this->mroot) - ); + $this->modules[$this->id] = [ + 'root' => $this->mroot, + 'name' => $name, + 'desc' => $desc, + 'author' => $author, + 'version' => $version, + 'root_writable' => is_writable($this->mroot) + ]; } } @@ -177,7 +178,7 @@ class dcUninstaller @param id string Optionnal module ID @return array */ - public function getModules($id=null) + public function getModules($id = null) { if ($id && isset($this->modules[$id])) { return $this->modules[$id]; @@ -205,33 +206,37 @@ class dcUninstaller @param ns string Name of setting related to module. @param desc string 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); - if (null === $this->id) return; - - if (empty($type) || empty($ns)) return; - - if (!isset(self::$allowed_properties[$type][$action])) return; - - if (empty($desc)) $desc = __($action); - - $this->actions[$group][$this->id][$type][] = array( + if (null === $this->id) { + return null; + } + if (empty($type) || empty($ns)) { + return null; + } + if (!isset(self::$allowed_properties[$type][$action])) { + return null; + } + if (empty($desc)) { + $desc = __($action); + } + $this->actions[$group][$this->id][$type][] = [ 'ns' => $ns, 'action' => $action, 'desc' => $desc - ); + ]; } /** @@ -243,27 +248,28 @@ class dcUninstaller */ public function getUserActions($id) { - return $this->getActions('user',$id); + return $this->getActions('user', $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); - if (!isset($this->actions[$group][$id])) return array(); - - $res = array(); - foreach(self::$priority_properties as $k => $v) - { - if (!isset($this->actions[$group][$id][$v])) continue; + if (!isset($this->actions[$group][$id])) { + return []; + } + $res = []; + foreach(self::$priority_properties as $k => $v) { + if (!isset($this->actions[$group][$id][$v])) { + continue; + } $res[$v] = $this->actions[$group][$id][$v]; } - return $res; } @@ -274,30 +280,33 @@ class dcUninstaller @param func string Callable function @param desc string 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); - if (null === $this->id) return; - - if (empty($desc)) $desc = __('extra action'); - - if (!is_callable($func)) return; - - $this->callbacks[$group][$this->id][] = array( + if (null === $this->id) { + return null; + } + if (empty($desc)) { + $desc = __('extra action'); + } + if (!is_callable($func)) { + return null; + } + $this->callbacks[$group][$this->id][] = [ 'func' => $func, 'desc' => $desc - ); + ]; } /** @@ -308,20 +317,21 @@ class dcUninstaller */ public function getUserCallbacks($id) { - return $this->getCallbacks('user',$id); + return $this->getCallbacks('user', $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); - if (!isset($this->callbacks[$group][$id])) return array(); - + if (!isset($this->callbacks[$group][$id])) { + return []; + } return $this->callbacks[$group][$id]; } @@ -334,22 +344,23 @@ class dcUninstaller @param ns string Name of setting related to module. @return array */ - public function execute($type,$action,$ns) + public function execute($type, $action, $ns) { $prop = $this->getAllowedProperties(); - if (!isset($prop[$type][$action]) || empty($ns)) return; - - dcAdvancedCleaner::execute($this->core,$type,$action,$ns); + if (!isset($prop[$type][$action]) || empty($ns)) { + return null; + } + 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) { - return in_array($group,array('user','direct')) ? $group : null; + return in_array($group, ['user','direct']) ? $group : null; } } \ No newline at end of file diff --git a/inc/lib.dc.advanced.cleaner.activityreport.php b/inc/lib.dc.advanced.cleaner.activityreport.php index c88fc7d..777e97f 100644 --- a/inc/lib.dc.advanced.cleaner.activityreport.php +++ b/inc/lib.dc.advanced.cleaner.activityreport.php @@ -11,28 +11,36 @@ * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html */ -if (!defined('DC_RC_PATH')){return;} - -# 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', - 'maintenance', - __('Maintenance'), - __('New action from dcAdvancedCleaner has been made with type="%s", action="%s", ns="%s".'), - 'dcAdvancedCleanerBeforeAction', - array('dcAdvancedCleanerActivityReportBehaviors','maintenance') -); +if (!defined('DC_RC_PATH')) { + return null; +} class dcAdvancedCleanerActivityReportBehaviors { - public static function maintenance($type,$action,$ns) + public static function maintenance($type, $action, $ns) { - $logs = array($type,$action,$ns); + $logs = array($type ,$action, $ns); - $GLOBALS['core']->activityReport->addLog('dcadvancedcleaner','maintenance',$logs); + $GLOBALS['core']->activityReport->addLog('dcadvancedcleaner', 'maintenance', $logs); + } + + 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', + 'maintenance', + __('Maintenance'), + __('New action from dcAdvancedCleaner has been made with type="%s", action="%s", ns="%s".'), + 'dcAdvancedCleanerBeforeAction', + ['dcAdvancedCleanerActivityReportBehaviors', 'maintenance'] + ); } } \ No newline at end of file diff --git a/inc/lib.dc.advanced.cleaner.behaviors.php b/inc/lib.dc.advanced.cleaner.behaviors.php index d09baab..f7c095c 100644 --- a/inc/lib.dc.advanced.cleaner.behaviors.php +++ b/inc/lib.dc.advanced.cleaner.behaviors.php @@ -11,71 +11,71 @@ * @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 { public static function pluginsBeforeDelete($plugin) { - self::moduleBeforeDelete($plugin,'plugins.php?removed=1'); + self::moduleBeforeDelete($plugin, 'plugins.php?removed=1'); } 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 - public static function moduleBeforeDelete($module,$redir) + // Generic module before delete + public static function moduleBeforeDelete($module, $redir) { global $core; $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->loadModule($module['root']); $m_callbacks = $uninstaller->getDirectCallbacks($module['id']); $m_actions = $uninstaller->getDirectActions($module['id']); - foreach($m_callbacks as $k => $callback) - { - if (!isset($callback['func']) || !is_callable($callback['func'])) continue; - - call_user_func($callback['func'],$module); + foreach($m_callbacks as $k => $callback) { + if (!isset($callback['func']) || !is_callable($callback['func'])) { + continue; + } + call_user_func($callback['func'], $module); $done = true; } - - foreach($m_actions as $type => $actions) - { - foreach($actions as $v) - { - $uninstaller->execute($type,$v['action'],$v['ns']); + foreach($m_actions as $type => $actions) { + foreach($actions as $v) { + $uninstaller->execute($type, $v['action'], $v['ns']); $done = true; } } - if ($done) { 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'); } 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 - public static function modulesTabs($core,$path,$redir,$title='') + // Generic module tabs + 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 = ''; $title = empty($title) ? __('Advanced uninstall') : $title; @@ -84,82 +84,76 @@ class behaviorsDcAdvancedCleaner $modules = $uninstaller->getModules(); $props = $uninstaller->getAllowedProperties(); - # Execute + // Execute if (isset($_POST['action']) && $_POST['action'] == 'uninstall' - && (!empty($_POST['extras']) || !empty($_POST['actions']))) { - + && (!empty($_POST['extras']) || !empty($_POST['actions'])) + ) { try { - # Extras + // Extras if (!empty($_POST['extras'])) { - foreach($_POST['extras'] as $module_id => $extras) - { - foreach($extras as $k => $sentence) - { + foreach($_POST['extras'] as $module_id => $extras) { + foreach($extras as $k => $sentence) { $extra = @unserialize(@base64_decode($sentence)); - if (!$extra || !is_callable($extra)) continue; - - call_user_func($extra,$modul_id); + if (!$extra || !is_callable($extra)) { + continue; + } + call_user_func($extra, $modul_id); } } } - # Actions + // Actions if (!empty($_POST['actions'])) { - foreach($_POST['actions'] as $module_id => $actions) - { - foreach($actions as $k => $sentence) - { + foreach($_POST['actions'] as $module_id => $actions) { + foreach($actions as $k => $sentence) { $action = @unserialize(@base64_decode($sentence)); if (!$action - || !isset($action['type']) - || !isset($action['action']) - || !isset($action['ns'])) continue; - - $uninstaller->execute($action['type'],$action['action'],$action['ns']); + || !isset($action['type']) + || !isset($action['action']) + || !isset($action['ns']) + ) { + continue; + } + $uninstaller->execute($action['type'], $action['action'], $action['ns']); } } } - http::redirect($redir.'&msg=1'); - } - catch(Exception $e) { + http::redirect($redir . '&msg=1'); + } catch(Exception $e) { $err = $e->getMessage(); } } - echo - '
'; - - if($err) - echo '

'.$err.'

'; + echo '
'; + if($err) { + echo '

' . $err . '

'; + } if(!count($modules)) { - echo '

'.__('There is no module with uninstall features').'

'; - return; + echo '

' . __('There is no module with uninstall features') . '

'; + return null; } echo - '

'.__('List of modules with advanced uninstall features').'

'. - '
'. - ''. - ''. - ''; + '

' . __('List of modules with advanced uninstall features') . '

' . + '' . + '
'.__('id').''.__('n°').'
' . + '' . + ''; foreach($props as $pro_id => $prop) { - echo ''; + echo ''; } - echo - ''. - ''; + echo '' . ''; $i = 0; foreach($modules as $module_id => $module) { - echo - ''. - ''. - ''; + '' . + '' . + ''; $actions = $uninstaller->getUserActions($module_id); @@ -174,17 +168,18 @@ class behaviorsDcAdvancedCleaner $j = 0; foreach($actions[$prop_id] as $action_id => $action) { - if (!isset($props[$prop_id][$action['action']])) continue; - - $ret = base64_encode(serialize(array( + if (!isset($props[$prop_id][$action['action']])) { + continue; + } + $ret = base64_encode(serialize([ 'type' => $prop_id, - 'action'=>$action['action'], - 'ns'=>$action['ns'] - ))); + 'action'=> $action['action'], + 'ns'=> $action['ns'] + ])); echo '
'; + form::checkbox(['actions[' . $module_id . '][' . $j . ']'], $ret) . + ' ' . $action['desc'] . '
'; $j++; } @@ -205,21 +200,21 @@ class behaviorsDcAdvancedCleaner $ret = base64_encode(serialize($callback['func'])); echo '
'; + form::checkbox(['extras[' . $module_id . '][' . $k . ']'], $ret) . + ' ' . $callback['desc'] . '
'; } echo ''; } echo - '
' . __('id') . '' . __('v') . ''.__($pro_id).'' . __($pro_id) . ''.__('extra').'
' . __('extra') . '
'.$module_id.''.$module['version'].'
' . $module_id . '' . $module['version'] . '
'. - '

'. - $core->formNonce(). - form::hidden(array('redir'),$redir). - form::hidden(array('action'),'uninstall'). - ' '. - '

'. - '
'. + '' . + '

' . + $core->formNonce() . + form::hidden(['redir'], $redir) . + form::hidden(['action'], 'uninstall') . + ' ' . + '

' . + '' . ''; } } \ No newline at end of file