first commit

This commit is contained in:
2026-02-08 21:16:11 +01:00
commit e17b7026fd
8881 changed files with 1160453 additions and 0 deletions

View File

@@ -0,0 +1,270 @@
<?php
/**
* @package Cache Cleaner
* @version 8.2.2
*
* @author Peter van Westen <info@regularlabs.com>
* @link http://regularlabs.com
* @copyright Copyright © 2022 Regular Labs All Rights Reserved
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
*/
namespace RegularLabs\Plugin\System\CacheCleaner\Cache;
defined('_JEXEC') or die;
use Joomla\CMS\Factory as JFactory;
use Joomla\CMS\Filesystem\File as JFile;
use Joomla\CMS\Filesystem\Folder as JFolder;
use Joomla\CMS\Language\Text as JText;
use RegularLabs\Library\File as RL_File;
use RegularLabs\Plugin\System\CacheCleaner\Cache as CC_Cache;
use RegularLabs\Plugin\System\CacheCleaner\Params;
class Cache
{
static $ignore_folders = null;
static $size = 0;
public static function addError($error = true)
{
CC_Cache::addError($error);
}
public static function addMessage($message = '')
{
CC_Cache::addMessage($message);
}
public static function emptyFolder($path, $min_age_in_minutes = 0)
{
$params = Params::get();
if ( ! JFolder::exists($path))
{
return;
}
$size = 0;
if ($params->show_size)
{
$size = self::getFolderSize($path);
}
// remove folders
$folders = JFolder::folders($path, '.', false, false, [], []);
foreach ($folders as $folder)
{
$f = $path . '/' . $folder;
if (in_array($f, self::getIgnoreFolders()) || ! @opendir($path . '/' . $folder))
{
continue;
}
if (self::isIgnoredParent($f))
{
self::emptyFolder($f);
continue;
}
RL_File::deleteFolder($path . '/' . $folder, false, $min_age_in_minutes);
// Zoo folder needs to be placed back, otherwise Zoo will break (stupid!)
if ($folder == 'com_zoo')
{
JFolder::create($path . '/' . $folder);
}
}
// remove files
$files = JFolder::files($path, '.', false, false, [], []);
foreach ($files as $file)
{
$file_path = $path . '/' . $file;
if ( ! is_file($file_path))
{
continue;
}
if (
$file == 'index.html'
|| in_array($path, self::getIgnoreFolders())
|| in_array($file_path, self::getIgnoreFolders())
|| $file_path == JPATH_ADMINISTRATOR . '/cache/autoload_psr4.php'
)
{
continue;
}
$deleted = RL_File::delete($file_path, false, $min_age_in_minutes);
if ( ! $deleted)
{
self::addError(JText::sprintf('JLIB_FILESYSTEM_DELETE_FAILED', $file_path));
}
}
if ($params->show_size)
{
$size -= self::getFolderSize($path);
self::$size += $size;
}
}
public static function emptyFolderList($folders)
{
}
public static function emptyFolders()
{
$params = Params::get();
// Empty tmp folder
if ($params->clean_tmp)
{
self::emptyFolder(JPATH_SITE . '/tmp');
}
}
public static function emptyTable($table)
{
}
public static function getError()
{
return CC_Cache::getError();
}
public static function getFolderSize($path)
{
if (is_file($path))
{
return @filesize($path);
}
if ( ! JFolder::exists($path) || ! (@opendir($path)))
{
return 0;
}
$size = 0;
foreach (JFolder::files($path) as $file)
{
$size += @filesize($path . '/' . $file);
}
foreach (JFolder::folders($path) as $folder)
{
if ( ! @opendir($path . '/' . $folder))
{
continue;
}
$size += self::getFolderSize($path . '/' . $folder);
}
return $size;
}
public static function getIgnoreFolders()
{
if ( ! is_null(self::$ignore_folders))
{
return self::$ignore_folders;
}
$params = Params::get();
if (empty($params->ignore_folders))
{
self::$ignore_folders = [];
return self::$ignore_folders;
}
$ignore_folders = explode("\n", str_replace('\n', "\n", $params->ignore_folders));
foreach ($ignore_folders as &$folder)
{
if (trim($folder) == '')
{
continue;
}
$folder = rtrim(str_replace('\\', '/', trim($folder)), '/');
$folder = str_replace('//', '/', JPATH_SITE . '/' . $folder);
}
self::$ignore_folders = $ignore_folders;
return self::$ignore_folders;
}
public static function getMessage()
{
return CC_Cache::getMessage();
}
public static function getSize()
{
if ( ! self::$size)
{
return false;
}
if (self::$size < 1024)
{
// Return in Bs
return self::$size . ' bytes';
}
if (self::$size < (1024 * 1024))
{
// Return in KBs
return round(self::$size / 1024, 2) . ' KB';
}
// Return in MBs
return round(self::$size / (1024 * 1024), 2) . ' MB';
}
/**
* Check if folder is a parent path of something in the ignore list
*/
public static function isIgnoredParent($path)
{
$check = $path . '/';
$len = strlen($check);
foreach (self::getIgnoreFolders() as $ignore_folder)
{
if (substr($ignore_folder, 0, $len) == $check)
{
return true;
}
}
return false;
}
public static function purgeTables()
{
}
public static function setError($error = true)
{
CC_Cache::setError($error);
}
public static function setMessage($message = '')
{
CC_Cache::setMessage($message);
}
public static function updateLog()
{
}
}