CanDoOperation('cache_control');
$cachetype = $_REQUEST["cachetype"] ?? null;
IncludeModuleLangFile(__FILE__);
if(
$_SERVER["REQUEST_METHOD"] == "POST"
&& isset($_REQUEST["ajax"])
&& $_REQUEST["ajax"]=="y"
&& isset($_REQUEST["clearcache"])
&& $_REQUEST["clearcache"] == "Y"
)
{
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_js.php");
if(!check_bitrix_sessid() || !$isAdmin)
{
?>
require($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/include/epilog_admin_js.php");
}
$obCacheCleaner = null;
$filesEngine = (\Bitrix\Main\Data\Cache::getCacheEngineType() == "cacheenginefiles");
$rootDir = $_SERVER["DOCUMENT_ROOT"];
if ($cachetype !== "html" && $filesEngine)
{
$config = Configuration::getValue('cache');
if (!empty($config['root_directory']))
{
$rootDir = $config['root_directory'];
}
}
$curentTime = time();
$endTime = $curentTime + 5;
if ($cachetype == "landing" && \Bitrix\Main\Loader::includeModule("landing"))
{
\Bitrix\Landing\Block::clearRepositoryCache();
CAdminMessage::ShowMessage(array(
"MESSAGE" => GetMessage("main_cache_finished"),
"HTML" => true,
"TYPE" => "OK",
));
?>
require($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/include/epilog_admin_js.php");
}
elseif ($cachetype === "html" || $filesEngine)
{
if (!empty($_POST["path"]) && is_string($_POST["path"]))
{
$path = $_POST["path"];
}
else
{
$path = "";
$session["CACHE_STAT"] = [];
}
$obCacheCleaner = new CFileCacheCleaner($cachetype, $rootDir);
if (!$obCacheCleaner->InitPath($path))
{
ShowError(GetMessage("main_cache_wrong_cache_path"));
?>
require($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/include/epilog_admin_js.php");
}
}
$session = Application::getInstance()->getSession();
if ($cachetype === "html")
{
$obCacheCleaner->Start();
$space_freed = 0;
while ($file = $obCacheCleaner->GetNextFile())
{
if (
is_string($file)
&& !preg_match("/(\\.enabled|\\.size|.config\\.php)\$/", $file)
)
{
$file_size = filesize($file);
$session["CACHE_STAT"]["scanned"] = ($session["CACHE_STAT"]["scanned"] ?? 0) + 1;
$session["CACHE_STAT"]["space_total"] = ($session["CACHE_STAT"]["space_total"] ?? 0) + $file_size;
if (@unlink($file))
{
$session["CACHE_STAT"]["deleted"] = ($session["CACHE_STAT"]["deleted"] ?? 0) + 1;
$session["CACHE_STAT"]["space_freed"] = ($session["CACHE_STAT"]["space_freed"] ?? 0) + $file_size;
$space_freed += $file_size;
}
else
{
$session["CACHE_STAT"]["errors"] = ($session["CACHE_STAT"]["errors"] ?? 0) + 1;
}
if (time() >= $endTime)
{
break;
}
}
}
\Bitrix\Main\Composite\Helper::updateCacheFileSize(-$space_freed);
}
elseif ($filesEngine)
{
$bDoNotCheckExpiredDate = (
$cachetype === "all"
|| $cachetype === "menu"
|| $cachetype === "managed"
);
$obCacheCleaner->Start();
while ($file = $obCacheCleaner->GetNextFile())
{
if (is_string($file))
{
$date_expire = $obCacheCleaner->GetFileExpiration($file);
if ($date_expire)
{
$file_size = filesize($file);
$session["CACHE_STAT"]["scanned"] = ($session["CACHE_STAT"]["scanned"] ?? 0) + 1;
$session["CACHE_STAT"]["space_total"] = ($session["CACHE_STAT"]["space_total"] ?? 0) + $file_size;
if ($bDoNotCheckExpiredDate || ($date_expire < $curentTime))
{
if (@unlink($file))
{
$session["CACHE_STAT"]["deleted"] = ($session["CACHE_STAT"]["deleted"] ?? 0) + 1;
$session["CACHE_STAT"]["space_freed"] = ($session["CACHE_STAT"]["space_freed"] ?? 0) + $file_size;
}
else
{
$session["CACHE_STAT"]["errors"] = ($session["CACHE_STAT"]["errors"] ?? 0) + 1;
}
}
}
if (time() >= $endTime)
{
break;
}
}
}
}
else
{
$file = false;
$session["CACHE_STAT"] = array();
}
if (is_string($file))
{
$currentFile = mb_substr($file, mb_strlen($rootDir));
$currentPath = $currentFile;
CFileTree::ExtractFileFromPath($currentPath);
CAdminMessage::ShowMessage(array(
"MESSAGE" => GetMessage("main_cache_in_progress"),
"DETAILS" => GetMessage("main_cache_files_scanned_count", array("#value#" => "".intval($session["CACHE_STAT"]["scanned"]).""))."
"
.GetMessage("main_cache_files_scanned_size", array("#value#" => "".CFile::FormatSize($session["CACHE_STAT"]["space_total"]).""))."
"
.GetMessage("main_cache_files_deleted_count", array("#value#" => "".intval($session["CACHE_STAT"]["deleted"]).""))."
"
.GetMessage("main_cache_files_deleted_size", array("#value#" => "".CFile::FormatSize($session["CACHE_STAT"]["space_freed"]).""))."
"
.GetMessage("main_cache_files_delete_errors", array("#value#" => "".intval($session["CACHE_STAT"]["errors"]).""))."
"
.GetMessage("main_cache_files_last_path", array("#value#" => "".htmlspecialcharsbx($currentPath).""))."
"
,
"HTML"=>true,
"TYPE"=>"OK",
));
?>
}
else
{
if ($cachetype == "menu")
{
$CACHE_MANAGER->CleanDir("menu");
CBitrixComponent::clearComponentCache("bitrix:menu");
}
elseif ($cachetype == "managed")
{
$CACHE_MANAGER->CleanAll();
$stackCacheManager->CleanAll();
}
elseif ($cachetype == "html")
{
$page = \Bitrix\Main\Composite\Page::getInstance();
$page->deleteAll();
}
elseif ($cachetype == "all")
{
$taggedCache = Application::getInstance()->getTaggedCache();
$taggedCache->deleteAllTags();
BXClearCache(true);
$CACHE_MANAGER->CleanAll();
$stackCacheManager->CleanAll();
$page = \Bitrix\Main\Composite\Page::getInstance();
$page->deleteAll();
}
if ($session["CACHE_STAT"])
{
CAdminMessage::ShowMessage(array(
"MESSAGE"=>GetMessage("main_cache_finished"),
"DETAILS"=> ""
.GetMessage("main_cache_files_scanned_count", array("#value#" => "".intval($session["CACHE_STAT"]["scanned"] ?? 0).""))."
"
.GetMessage("main_cache_files_scanned_size", array("#value#" => "".CFile::FormatSize($session["CACHE_STAT"]["space_total"] ?? 0).""))."
"
.GetMessage("main_cache_files_deleted_count", array("#value#" => "".intval($session["CACHE_STAT"]["deleted"] ?? 0).""))."
"
.GetMessage("main_cache_files_deleted_size", array("#value#" => "".CFile::FormatSize($session["CACHE_STAT"]["space_freed"] ?? 0).""))."
"
.GetMessage("main_cache_files_delete_errors", array("#value#" => "".intval($session["CACHE_STAT"]["errors"] ?? 0).""))."
"
,
"HTML"=>true,
"TYPE"=>"OK",
));
$session["CACHE_STAT"] = [];
}
else
{
CAdminMessage::ShowMessage(array(
"MESSAGE"=>GetMessage("main_cache_finished"),
"HTML"=>true,
"TYPE"=>"OK",
));
}
?>
}
require($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/include/epilog_admin_js.php");
}
else
{
if(!$USER->CanDoOperation('cache_control') && !$USER->CanDoOperation('view_other_settings'))
{
$APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));
}
$errorMessage = "";
$okMessage = "";
$cache_on = $_REQUEST['cache_on'] ?? null;
if ($_SERVER['REQUEST_METHOD'] == "POST" && ($cache_on=="Y" || $cache_on=="N") && check_bitrix_sessid() && $isAdmin)
{
if(COption::GetOptionString("main", "component_cache_on", "Y")=="Y")
{
if ($cache_on=="N")
{
COption::SetOptionString("main", "component_cache_on", "N");
$okMessage .= GetMessage("MAIN_OPTION_CACHE_SUCCESS").". ";
}
}
else
{
if ($cache_on=="Y")
{
COption::SetOptionString("main", "component_cache_on", "Y");
$okMessage .= GetMessage("MAIN_OPTION_CACHE_SUCCESS").". ";
}
}
}
$managed_cache_on = $_REQUEST['managed_cache_on'] ?? null;
if($_SERVER['REQUEST_METHOD'] == "POST" && ($managed_cache_on=="Y" || $managed_cache_on=="N") && check_bitrix_sessid() && $isAdmin)
{
COption::SetOptionString("main", "component_managed_cache_on", $managed_cache_on);
if($managed_cache_on == "N")
{
$taggedCache = Application::getInstance()->getTaggedCache();
$taggedCache->clearByTag(true);
}
LocalRedirect($APPLICATION->GetCurPage()."?lang=".LANGUAGE_ID."&tabControl_active_tab=fedit4&res=managed_saved");
}
if (isset($_REQUEST["res"]) && $_REQUEST["res"] == "managed_saved")
{
$okMessage .= GetMessage("main_cache_managed_saved");
}
$APPLICATION->SetTitle(GetMessage("MCACHE_TITLE"));
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");
?>
if($errorMessage <> '')
CAdminMessage::ShowMessage(Array("DETAILS"=>$errorMessage, "TYPE"=>"ERROR", "MESSAGE"=>GetMessage("SAE_ERROR"), "HTML"=>true));
if($okMessage <> '')
CAdminMessage::ShowNote($okMessage);
?>