Example #1
1
/**
 * Обёртка, кэширующая результаты _getIblocks() в глобальный массив $arIb
 */
function getIblocks()
{
    global $arIb;
    $obCache = \Bitrix\Main\Data\Cache::createInstance();
    $cacheTime = 86400;
    $cacheId = md5('s1');
    $cachePath = "iblocks";
    if ($obCache->initCache($cacheTime, $cacheId, $cachePath)) {
        $vars = $obCache->getVars();
        $arIb = $vars["arIb"];
    } elseif ($obCache->startDataCache()) {
        $arIb = _getIblocks();
        $obCache->endDataCache(array("arIb" => $arIb));
    }
}
Example #2
0
 /**
  * {@inheritdoc}
  */
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $dir = $input->getOption('dir');
     $tag = $input->getOption('tag');
     $cache = Cache::createInstance();
     if (empty($dir) && empty($tag)) {
         Application::getInstance()->getManagedCache()->cleanAll();
         $cache->cleanDir();
         $cache->cleanDir(false, 'stack_cache');
         StaticHtmlCache::getInstance()->deleteAll();
         if (Cache::clearCache(true)) {
             $output->writeln('<info>All Bitrix cache was deleted</info>');
         } else {
             $output->writeln('<error>Error deleting Bitrix cache</error>');
         }
     }
     if ($dir) {
         $cache->cleanDir($dir);
         $output->writeln('<info>Bitrix cache by "/' . BX_ROOT . '/cache/' . $dir . '" dir was deleted</info>');
     }
     if ($tag) {
         Application::getInstance()->getTaggedCache()->clearByTag($tag);
         $output->writeln('<info>Bitrix cache by tag "' . $tag . '" was deleted</info>');
     }
 }
Example #3
0
 public static function restoreDebugMode()
 {
     global $DB, $APPLICATION;
     $toRestore = explode("|", constant("PERFMON_STARTED"));
     $DB->ShowSqlStat = $toRestore[0];
     \Bitrix\Main\Data\Cache::setShowCacheStat($toRestore[1]);
     $APPLICATION->ShowIncludeStat = $toRestore[2];
 }
Example #4
0
 /**
  * @param bool $isArray
  * @return null
  */
 protected function read($isArray = false)
 {
     $value = $isArray ? array() : null;
     if (!$this->beenWrite && \Bitrix\Main\Data\Cache::shouldClearCache()) {
         $this->clear();
     }
     $this->timeLive && $this->original->read($value, $this->baseDir(), $this->bxInitDir, $this->key, $this->timeLive);
     return $value;
 }
function getPropertiesEx($arParams)
{
    $obCache = \Bitrix\Main\Data\Cache::createInstance();
    $cacheTime = 86400;
    $cacheId = md5($arParams);
    $cachePath = "properties";
    $arProperties = array();
    if ($obCache->initCache($cacheTime, $cacheId, $cachePath)) {
        $vars = $obCache->getVars();
        $arProperties = $vars["arProperties"];
    } elseif ($obCache->startDataCache()) {
        $arProperties = _getPropertiesEx($arParams);
        $obCache->endDataCache(array("arProperties" => $arProperties));
    }
    return $arProperties;
}
Example #6
0
 public function onUserSetLastActivityDate(\Bitrix\Main\Event $event)
 {
     $users = $event->getParameter(0);
     foreach ($users as $userId) {
         $cache = \Bitrix\Main\Data\Cache::createInstance();
         if ($cache->startDataCache(60, $userId, '/im/status')) {
             $mapper = \Bitrix\Replica\Mapper::getInstance();
             $map = $mapper->getByPrimaryValue("b_im_status.USER_ID", false, $userId);
             if ($map) {
                 $guid = \Bitrix\Replica\Client\User::getLocalUserGuid($userId);
                 if ($guid && $map[$guid]) {
                     $event = array("operation" => "im_status_update", "guid" => $guid);
                     \Bitrix\Replica\Log\Client::getInstance()->write($map[$guid], $event);
                 }
             }
             $cache->endDataCache(true);
         }
     }
 }
Example #7
0
 protected function getUserGroupWithStorage()
 {
     if (!\CBXFeatures::isFeatureEnabled("Workgroups")) {
         return array();
     }
     if (!Loader::includeModule('socialnetwork')) {
         return array();
     }
     $userId = $this->getUser()->getId();
     $currentPossibleUserGroups = $currentUserGroups = array();
     $cache = Cache::createInstance();
     $cacheTtl = defined('BX_COMP_MANAGED_CACHE') ? 3153600 : 3600 * 4;
     $cachePath = "/disk/uf/{$userId}";
     if ($cache->initCache($cacheTtl, 'group_storage_list_' . SITE_ID . '_' . $userId, $cachePath)) {
         list($currentUserGroups) = $cache->getVars();
     } else {
         $cache->startDataCache();
         $taggedCache = Application::getInstance()->getTaggedCache();
         $taggedCache->startTagCache($cachePath);
         $diskSecurityContext = new DiskSecurityContext($userId);
         $storages = Storage::getReadableList($diskSecurityContext, array('filter' => array('STORAGE.ENTITY_TYPE' => ProxyType\Group::className())));
         foreach ($storages as $storage) {
             $currentPossibleUserGroups[$storage->getEntityId()] = $storage;
         }
         unset($storage);
         $query = \CSocNetUserToGroup::getList(array('GROUP_NAME' => 'ASC'), array('USER_ID' => $userId, 'GROUP_ID' => array_keys($currentPossibleUserGroups)), false, false, array('GROUP_ID', 'GROUP_NAME', 'GROUP_ACTIVE', 'GROUP_CLOSED', 'ROLE'));
         while ($row = $query->getNext()) {
             if ($row['GROUP_ACTIVE'] == 'Y' && $row['GROUP_CLOSED'] == 'N' && $row['ROLE'] != SONET_ROLES_BAN && $row['ROLE'] != SONET_ROLES_REQUEST && isset($currentPossibleUserGroups[$row['GROUP_ID']])) {
                 $taggedCache->registerTag("sonet_features_G_{$row['GROUP_ID']}");
                 $taggedCache->registerTag("sonet_group_{$row['GROUP_ID']}");
                 $currentUserGroups[$row['GROUP_ID']] = array('STORAGE' => $currentPossibleUserGroups[$row['GROUP_ID']], 'NAME' => $row['GROUP_NAME']);
             }
         }
         $taggedCache->registerTag("sonet_user2group_U{$userId}");
         $taggedCache->endTagCache();
         $cache->endDataCache(array($currentUserGroups));
     }
     return $currentUserGroups;
 }
Example #8
0
 /**
  * Function starts the caching block of the component execution.
  *
  * @param int|bool $cacheTime
  * @param mixed $additionalCacheID
  * @param string|bool $cachePath
  * @return string
  *
  */
 public final function startResultCache($cacheTime = false, $additionalCacheID = false, $cachePath = false)
 {
     /** @global CMain $APPLICATION */
     global $APPLICATION, $CACHE_MANAGER;
     if (!$this->__bInited) {
         return null;
     }
     if ($this->arParams["CACHE_TYPE"] == "N" || $this->arParams["CACHE_TYPE"] == "A" && COption::getOptionString("main", "component_cache_on", "Y") == "N") {
         return true;
     }
     if ($cacheTime === false) {
         $cacheTime = intval($this->arParams["CACHE_TIME"]);
     }
     $this->__cacheID = $this->getCacheID($additionalCacheID);
     $this->__cachePath = $cachePath;
     if ($this->__cachePath === false) {
         $this->__cachePath = $CACHE_MANAGER->getCompCachePath($this->__relativePath);
     }
     $this->__cache = \Bitrix\Main\Data\Cache::createInstance();
     if ($this->__cache->startDataCache($cacheTime, $this->__cacheID, $this->__cachePath)) {
         $this->__NavNum = $GLOBALS["NavNum"];
         if (defined("BX_COMP_MANAGED_CACHE") && $this->__cache->isStarted()) {
             $CACHE_MANAGER->startTagCache($this->__cachePath);
         }
         return true;
     } else {
         $arCache = $this->__cache->GetVars();
         $this->arResult = $arCache["arResult"];
         if (array_key_exists("templateCachedData", $arCache)) {
             $templateCachedData =& $arCache["templateCachedData"];
             if ($templateCachedData && is_array($templateCachedData)) {
                 if (array_key_exists("additionalCSS", $templateCachedData) && strlen($templateCachedData["additionalCSS"]) > 0) {
                     $APPLICATION->SetAdditionalCSS($templateCachedData["additionalCSS"]);
                     if ($this->__parent) {
                         $this->__parent->addChildCSS($templateCachedData["additionalCSS"]);
                     }
                 }
                 if (array_key_exists("additionalJS", $templateCachedData) && strlen($templateCachedData["additionalJS"]) > 0) {
                     $APPLICATION->AddHeadScript($templateCachedData["additionalJS"]);
                     if ($this->__parent) {
                         $this->__parent->addChildJS($templateCachedData["additionalJS"]);
                     }
                 }
                 if (array_key_exists("frames", $templateCachedData) && is_array($templateCachedData["frames"])) {
                     foreach ($templateCachedData["frames"] as $frameState) {
                         \Bitrix\Main\Page\FrameHelper::applyCachedData($frameState);
                     }
                 }
                 if (array_key_exists("frameMode", $templateCachedData) && $templateCachedData["frameMode"] === false) {
                     $context = isset($templateCachedData["frameModeCtx"]) ? "(from component cache) " . $templateCachedData["frameModeCtx"] : $this->__name . " - a cached template set frameMode=false";
                     \Bitrix\Main\Data\StaticHtmlCache::applyComponentFrameMode($context);
                 }
                 if (isset($templateCachedData["externalCss"])) {
                     foreach ($templateCachedData["externalCss"] as $cssPath) {
                         $APPLICATION->SetAdditionalCSS($cssPath);
                         //Check if parent component exists and plug css it to it's "collection"
                         if ($this->__parent) {
                             $this->__parent->addChildCSS($cssPath);
                         }
                     }
                 }
                 if (isset($templateCachedData["externalJs"])) {
                     foreach ($templateCachedData["externalJs"] as $jsPath) {
                         $APPLICATION->AddHeadScript($jsPath);
                         //Check if parent component exists and plug js it to it's "collection"
                         if ($this->__parent) {
                             $this->__parent->addChildJS($jsPath);
                         }
                     }
                 }
             }
             if ($templateCachedData["__editButtons"]) {
                 foreach ($templateCachedData["__editButtons"] as $button) {
                     if ($button[0] == 'AddEditAction') {
                         $this->addEditAction($button[1], $button[2], $button[3], $button[4]);
                     } else {
                         $this->addDeleteAction($button[1], $button[2], $button[3], $button[4]);
                     }
                 }
             }
             if ($templateCachedData["__view"]) {
                 foreach ($templateCachedData["__view"] as $view_id => $target) {
                     foreach ($target as $view_content) {
                         $APPLICATION->addViewContent($view_id, $view_content[0], $view_content[1]);
                     }
                 }
             }
             if (array_key_exists("__NavNum", $templateCachedData)) {
                 $GLOBALS["NavNum"] += $templateCachedData["__NavNum"];
             }
             if (array_key_exists("__children_css", $templateCachedData)) {
                 foreach ($templateCachedData["__children_css"] as $css_url) {
                     $APPLICATION->setAdditionalCSS($css_url);
                 }
             }
             if (array_key_exists("__children_js", $templateCachedData)) {
                 foreach ($templateCachedData["__children_js"] as $js_url) {
                     $APPLICATION->addHeadScript($js_url);
                 }
             }
             if (array_key_exists("__children_epilogs", $templateCachedData)) {
                 foreach ($templateCachedData["__children_epilogs"] as $component_epilog) {
                     $this->includeComponentEpilog($component_epilog);
                 }
             }
             if (array_key_exists("component_epilog", $templateCachedData)) {
                 $this->includeComponentEpilog($templateCachedData["component_epilog"]);
             }
         }
         return false;
     }
 }
Example #9
0
 /**
  * Returns items from cache. If cache expired will be executed request to DB (method $this->getItems()).
  *
  * @param array $filter Parameters for filter.
  * @param string $shard Shard of the cache.
  *
  * @return mixed
  *
  * @throws ValueNotFoundException Value was not found.
  * @throws \InvalidArgumentException Invalid type on filter.
  */
 protected function getFromCache($filter = [], $shard = null)
 {
     $filter = $this->prepareFilter($filter);
     $cache = Cache::createInstance();
     if ($cache->initCache(static::getCacheTime(), null, static::getCacheDir() . '/' . $shard)) {
         $items = $cache->getVars();
     } else {
         $cache->startDataCache();
         Application::getInstance()->getTaggedCache()->startTagCache(static::getCacheDir() . '/' . $shard);
         $items = $this->getItems($shard);
         if (!empty($items)) {
             Application::getInstance()->getTaggedCache()->endTagCache();
             $cache->endDataCache($items);
         } else {
             $cache->abortDataCache();
         }
     }
     try {
         return $this->getValue($items, $filter, $shard);
     } catch (ValueNotFoundException $e) {
         if ($this->silenceMode) {
             return null;
         }
         throw $e;
     }
 }
Example #10
0
 private function loadFormattedFolderTreeAndBreadcrumbs($returnTree = false)
 {
     $cache = Data\Cache::createInstance();
     if ($cache->initCache(15768000, 'storage_tr_' . $this->storage->getId(), 'disk')) {
         list($formattedFolders, $this->cacheBreadcrumbs) = $cache->getVars();
     } else {
         $querySharedFolders = \Bitrix\Disk\Sharing::getList(array('filter' => array('FROM_ENTITY' => Sharing::CODE_USER . $this->getUser()->getId(), '!TO_ENTITY' => Sharing::CODE_USER . $this->getUser()->getId())));
         $sharedFolders = array();
         while ($sharedFolder = $querySharedFolders->fetch()) {
             $sharedFolders[$sharedFolder['REAL_OBJECT_ID']] = $sharedFolder['REAL_OBJECT_ID'];
         }
         $formattedFolders = array();
         foreach ($this->walkAndBuildTree($this->storage->getRootObject()) as $folder) {
             /** @var Folder $folder */
             $formattedFolders[] = $this->formatFolderToResponse($folder, isset($sharedFolders[$folder->getId()]));
         }
         unset($folder);
         $cache->startDataCache();
         $cache->endDataCache(array($formattedFolders, $this->cacheBreadcrumbs));
     }
     return $returnTree ? $formattedFolders : null;
 }
Example #11
0
 public function Save()
 {
     if (defined("BITRIX_SKIP_STACK_CACHE") && BITRIX_SKIP_STACK_CACHE) {
         return;
     }
     global $DB;
     if (!$this->cleanSet || !$this->cleanGet && count($this->values) >= $this->len) {
         $objCache = \Bitrix\Main\Data\Cache::createInstance();
         //Force cache rewrite
         $saveClearState = $objCache->setClearCache(true);
         if ($objCache->StartDataCache($this->ttl, $this->entity, $DB->type . "/" . $this->entity, $this->values, "stack_cache")) {
             $objCache->EndDataCache();
         }
         $objCache->setClearCache($saveClearState);
         $this->cleanGet = true;
         $this->cleanSet = true;
     }
 }
Example #12
0
 * @global CMain $APPLICATION
 * @global CDatabase $DB
 */
define("START_EXEC_EPILOG_AFTER_1", microtime());
$GLOBALS["BX_STATE"] = "EA";
global $USER, $APPLICATION, $DB;
foreach (GetModuleEvents("main", "OnEpilog", true) as $arEvent) {
    ExecuteModuleEventEx($arEvent);
}
$r = $APPLICATION->EndBufferContentMan();
$main_exec_time = round(getmicrotime() - START_EXEC_TIME, 4);
echo $r;
$arAllEvents = GetModuleEvents("main", "OnAfterEpilog", true);
define("START_EXEC_EVENTS_1", microtime());
$GLOBALS["BX_STATE"] = "EV";
CMain::EpilogActions();
define("START_EXEC_EVENTS_2", microtime());
$GLOBALS["BX_STATE"] = "EA";
foreach ($arAllEvents as $arEvent) {
    ExecuteModuleEventEx($arEvent);
}
if (!IsModuleInstalled("compression") && !defined("ADMIN_AJAX_MODE") && $_REQUEST["mode"] != 'excel') {
    $bShowTime = $_SESSION["SESS_SHOW_TIME_EXEC"] == 'Y';
    $bShowStat = $DB->ShowSqlStat && $USER->CanDoOperation('edit_php');
    $bShowCacheStat = \Bitrix\Main\Data\Cache::getShowCacheStat() && ($canEditPHP || $_SESSION["SHOW_CACHE_STAT"] == "Y");
    if ($bShowTime || $bShowStat || $bShowCacheStat) {
        include_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/interface/debug_info.php";
    }
}
$DB->Disconnect();
CMain::ForkActions();
Example #13
0
/**
 * Обёртка, кэширующая результаты _getListEx()
 *
 * Возможные параметры $arOptions:
 * - *iblock_id* - ID или символьный код инфоблока
 * - *filter* - Параметры фильтра
 * - *sort* - Параметры сортировки
 * - *select* - Поля для выборки
 * - *get_sections* - *true*, если нужно выбрать секции, а не элементы
 * - *id_key* - *true*, если ключи результирующего массива
 *              должны принять значения ID элемента:<br>
 *              <code>array(ID1 => array(...), ID2 => array(...))</code><br>
 *              Если параметр равен *false*, массив будет неассоциативным:<br>
 *              <code>array(array(...), array(...))</code>
 * - *is_sub_query* - Если *true*, результат выборки будет оформлен для фильтрации в другом _getListEx()
 * - *cache_time* - Время хранения кэша
 * - *nav* — Параметры для постраничной навигации, формируются, как в стандартном GetList()
 *           https://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockelement/getlist.php
 * 
 * @example getlistex.php Выбор всех компаний, у которых есть офис в Ярославле. Пример вложенных getListEx
 * @param  array $arOptions Параметры выборки
 * @return array            Массив с результатами выборки
 */
function getListEx($arOptions)
{
    $iblockId = iblock($arOptions['iblock_id']);
    if ($iblockId === false) {
        return false;
    }
    $obCache = \Bitrix\Main\Data\Cache::createInstance();
    $cacheTime = intval($arOptions['cache_time']) > 0 ? intval($arOptions['cache_time']) : 3600;
    $cacheId = md5(serialize($arOptions));
    $cachePath = '/lists_ex/' . $iblockId . '/';
    $arElements = array();
    if ($obCache->initCache($cacheTime, $cacheId, $cachePath)) {
        $vars = $obCache->getVars();
        $arElements = $vars['arElements'];
    } elseif ($obCache->startDataCache()) {
        global $CACHE_MANAGER;
        $CACHE_MANAGER->StartTagCache($cachePath);
        $CACHE_MANAGER->RegisterTag('iblock_id_' . $iblockId);
        $arElements = _getListEx($arOptions);
        foreach ($arElements as $arElement) {
            if (isset($arElement["ID"])) {
                $CACHE_MANAGER->RegisterTag("element_" . $arElement["ID"]);
            }
            if (!is_array($arElement) && intval($arElement) > 0) {
                $CACHE_MANAGER->RegisterTag("element_" . intval($arElement));
            }
        }
        $CACHE_MANAGER->EndTagCache();
        $obCache->endDataCache(array('arElements' => $arElements));
    }
    return $arElements;
}
Example #14
0
 /**
  * Returns new instance of the Cache object.
  *
  * @return Data\Cache
  */
 public function getCache()
 {
     return \Bitrix\Main\Data\Cache::createInstance();
 }
Example #15
0
 public function save()
 {
     Config\Option::set('security', $this->optionPrefix . 'hosts', $this->hosts, '');
     Config\Option::set('security', $this->optionPrefix . 'action', $this->action, '');
     Config\Option::set('security', $this->optionPrefix . 'action_options', serialize($this->actionOptions), '');
     Config\Option::set('security', $this->optionPrefix . 'logging', $this->isLogNeeded, '');
     if (!is_null($this->isActive)) {
         if ($this->isActive) {
             EventManager::getInstance()->registerEventHandler('main', 'OnPageStart', 'security', get_class($this), 'onPageStart');
         } else {
             EventManager::getInstance()->unRegisterEventHandler('main', 'OnPageStart', 'security', get_class($this), 'onPageStart');
         }
     }
     Data\Cache::createInstance()->clean($this->cacheId);
 }
Example #16
0
 function GetStandardButtons()
 {
     global $USER, $APPLICATION, $DB;
     if (isset($_SERVER["REAL_FILE_PATH"]) && $_SERVER["REAL_FILE_PATH"] != "") {
         $currentDirPath = dirname($_SERVER["REAL_FILE_PATH"]);
         $currentFilePath = $_SERVER["REAL_FILE_PATH"];
     } else {
         $currentDirPath = $APPLICATION->GetCurDir();
         $currentFilePath = $APPLICATION->GetCurPage(true);
     }
     $encCurrentDirPath = urlencode($currentDirPath);
     $encCurrentFilePath = urlencode($currentFilePath);
     $encRequestUri = urlencode($_SERVER["REQUEST_URI"]);
     $encSiteTemplateId = urlencode(SITE_TEMPLATE_ID);
     $documentRoot = CSite::GetSiteDocRoot(SITE_ID);
     $filemanExists = IsModuleInstalled("fileman");
     //create button
     $defaultUrl = "";
     $bCanCreatePage = CTopPanel::IsCanCreatePage($currentDirPath, $documentRoot, $filemanExists);
     $bCanCreateSection = CTopPanel::IsCanCreateSection($currentDirPath, $documentRoot, $filemanExists);
     if ($bCanCreatePage || $bCanCreateSection) {
         require_once $_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/admin_tools.php";
         //create page from new template
         $arActPageTemplates = CPageTemplate::GetList(array(SITE_TEMPLATE_ID));
         //create page from old template
         $arPageTemplates = GetFileTemplates(SITE_ID, array(SITE_TEMPLATE_ID));
     }
     // CREATE PAGE button and submenu
     $arMenu = array();
     if ($bCanCreatePage) {
         $defaultUrl = $APPLICATION->GetPopupLink(array("URL" => "/bitrix/admin/public_file_new.php?lang=" . LANGUAGE_ID . "&site=" . SITE_ID . "&templateID=" . $encSiteTemplateId . "&path=" . $encCurrentDirPath . "&back_url=" . $encRequestUri, "PARAMS" => array("min_width" => 450, "min_height" => 250)));
         $arMenu[] = array("TEXT" => GetMessage("top_panel_create_page"), "TITLE" => GetMessage("top_panel_create_page_title"), "ICON" => "panel-new-file", "ACTION" => $defaultUrl, "DEFAULT" => true, "SORT" => 10, "HK_ID" => "top_panel_create_page");
         //templates menu for pages
         $arSubmenu = array();
         if (!empty($arActPageTemplates)) {
             foreach ($arActPageTemplates as $pageTemplate) {
                 if ($pageTemplate['type'] == '' || $pageTemplate['type'] == 'page') {
                     $arSubmenu[] = array("TEXT" => "<b>" . $pageTemplate['name'] . "</b>" . ($pageTemplate['description'] != '' ? "<br>" . $pageTemplate['description'] : ""), "TITLE" => GetMessage("top_panel_template") . " " . $pageTemplate['file'], "ICON" => $pageTemplate['icon'] == '' ? "panel-new-file-template" : "", "IMAGE" => $pageTemplate['icon'] != '' ? $pageTemplate['icon'] : "", "ACTION" => str_replace("public_file_new.php?", "public_file_new.php?wiz_template=" . urlencode($pageTemplate['file']) . "&", $defaultUrl));
                 }
             }
         }
         if (!empty($arPageTemplates) && (!empty($arSubmenu) || count($arPageTemplates) > 1)) {
             foreach ($arPageTemplates as $pageTemplate) {
                 $arSubmenu[] = array("TEXT" => $pageTemplate['name'], "TITLE" => GetMessage("top_panel_template") . " " . $pageTemplate['file'], "ICON" => "panel-new-file-template", "ACTION" => str_replace("public_file_new.php?", "public_file_new.php?page_template=" . urlencode($pageTemplate['file']) . "&", $defaultUrl));
             }
         }
         //page from template
         if ($bCanCreatePage && !empty($arSubmenu)) {
             $arMenu[] = array("TEXT" => GetMessage("top_panel_create_from_template"), "TITLE" => GetMessage("top_panel_create_from_template_title"), "ICON" => "panel-new-file-template", "MENU" => $arSubmenu, "SORT" => 20);
         }
     }
     if (!empty($arMenu)) {
         $APPLICATION->AddPanelButton(array("HREF" => $defaultUrl == "" ? "" : "javascript:" . $defaultUrl, 'TYPE' => 'BIG', "ID" => "create", "ICON" => "bx-panel-create-page-icon", "ALT" => GetMessage("top_panel_create_title"), "TEXT" => GetMessage("top_panel_create_new"), "MAIN_SORT" => "100", "SORT" => 10, "MENU" => $arMenu, "RESORT_MENU" => true, "HK_ID" => "top_panel_create_new", "HINT" => array("TITLE" => GetMessage("top_panel_create_new_tooltip_title"), "TEXT" => GetMessage("top_panel_create_new_tooltip")), "HINT_MENU" => array("TITLE" => GetMessage("top_panel_create_new_menu_tooltip_title"), "TEXT" => GetMessage("top_panel_create_new_menu_tooltip"))));
     }
     // CREATE SECTION button and submenu
     $arMenu = array();
     if ($bCanCreateSection) {
         $defaultUrl = $APPLICATION->GetPopupLink(array("URL" => "/bitrix/admin/public_file_new.php?lang=" . LANGUAGE_ID . "&site=" . SITE_ID . "&templateID=" . $encSiteTemplateId . "&newFolder=Y&path=" . $encCurrentDirPath . "&back_url=" . $encRequestUri, "PARAMS" => array("min_width" => 450, "min_height" => 250)));
         $arMenu[] = array("TEXT" => GetMessage("top_panel_create_folder"), "TITLE" => GetMessage("top_panel_create_folder_title"), "ICON" => "panel-new-folder", 'DEFAULT' => true, "ACTION" => $defaultUrl, "SORT" => 10, "HK_ID" => "top_panel_create_folder");
         //templates menu for sections
         $arSectSubmenu = array();
         if (!empty($arActPageTemplates)) {
             foreach ($arActPageTemplates as $pageTemplate) {
                 if ($pageTemplate['type'] == '' || $pageTemplate['type'] == 'section') {
                     $arSectSubmenu[] = array("TEXT" => "<b>" . $pageTemplate['name'] . "</b>" . ($pageTemplate['description'] != '' ? "<br>" . $pageTemplate['description'] : ""), "TITLE" => GetMessage("top_panel_template") . " " . $pageTemplate['file'], "ICON" => $pageTemplate['icon'] == '' ? "panel-new-file-template" : "", "IMAGE" => $pageTemplate['icon'] != '' ? $pageTemplate['icon'] : "", "ACTION" => str_replace("public_file_new.php?", "public_file_new.php?newFolder=Y&wiz_template=" . urlencode($pageTemplate['file']) . "&", $defaultUrl));
                 }
             }
         }
         if (!empty($arPageTemplates) && (!empty($arSectSubmenu) || count($arPageTemplates) > 1)) {
             if (!empty($arSectSubmenu)) {
                 $arSectSubmenu[] = array("SEPARATOR" => true);
             }
             foreach ($arPageTemplates as $pageTemplate) {
                 $arSectSubmenu[] = array("TEXT" => $pageTemplate['name'], "TITLE" => GetMessage("top_panel_template") . " " . $pageTemplate['file'], "ICON" => "panel-new-file-template", "ACTION" => str_replace("public_file_new.php?", "public_file_new.php?newFolder=Y&page_template=" . urlencode($pageTemplate['file']) . "&", $defaultUrl));
             }
         }
         //section from template
         if ($bCanCreateSection && !empty($arSectSubmenu)) {
             $arMenu[] = array("TEXT" => GetMessage("top_panel_create_folder_template"), "TITLE" => GetMessage("top_panel_create_folder_template_title"), "ICON" => "panel-new-folder-template", "MENU" => $arSectSubmenu, "SORT" => 20);
         }
     }
     if (!empty($arMenu)) {
         $APPLICATION->AddPanelButton(array("HREF" => $defaultUrl == "" ? "" : "javascript:" . $defaultUrl, 'TYPE' => 'BIG', "ID" => "create_section", "ICON" => "bx-panel-create-section-icon", "ALT" => GetMessage("top_panel_create_title"), "TEXT" => GetMessage("top_panel_create_folder_new"), "MAIN_SORT" => "100", "SORT" => 20, "MENU" => $arMenu, "RESORT_MENU" => true, "HK_ID" => "top_panel_create_folder_new", "HINT" => array("TITLE" => GetMessage("top_panel_create_folder_new_tooltip_title"), "TEXT" => GetMessage("top_panel_create_folder_new_tooltip")), "HINT_MENU" => array("TITLE" => GetMessage("top_panel_create_folder_new_menu_tooltip_title"), "TEXT" => GetMessage("top_panel_create_folder_new_menu_tooltip"))));
     }
     // EDIT PAGE button and submenu
     $defaultUrl = "";
     $arMenu = array();
     if (CTopPanel::IsCanEditPage($currentFilePath, $documentRoot, $filemanExists)) {
         $defaultUrl = $APPLICATION->GetPopupLink(array("URL" => "/bitrix/admin/public_file_edit.php?lang=" . LANGUAGE_ID . "&path=" . $encCurrentFilePath . "&site=" . SITE_ID . "&back_url=" . $encRequestUri . "&templateID=" . $encSiteTemplateId, "PARAMS" => array("width" => 780, "height" => 470, "resizable" => true, "min_width" => 780, "min_height" => 400, 'dialog_type' => 'EDITOR')));
         $arMenu[] = array("TEXT" => GetMessage("top_panel_edit_page"), "TITLE" => GetMessage("top_panel_edit_page_title"), "ICON" => "panel-edit-visual", "ACTION" => $defaultUrl, "DEFAULT" => true, "SORT" => 10, "HK_ID" => "top_panel_edit_page");
         $arMenu[] = array("TEXT" => GetMessage("top_panel_page_prop"), "TITLE" => GetMessage("top_panel_page_prop_title"), "ICON" => "panel-file-props", "ACTION" => $APPLICATION->GetPopupLink(array("URL" => "/bitrix/admin/public_file_property.php?lang=" . LANGUAGE_ID . "&site=" . SITE_ID . "&path=" . $encCurrentFilePath . "&back_url=" . $encRequestUri, "PARAMS" => array("min_width" => 450, "min_height" => 250))), "SORT" => 20, "HK_ID" => "top_panel_page_prop");
         $arMenu[] = array("SEPARATOR" => true, "SORT" => 49);
         $arMenu[] = array("TEXT" => GetMessage("top_panel_edit_page_html"), "TITLE" => GetMessage("top_panel_edit_page_html_title"), "ICON" => "panel-edit-text", "ACTION" => $APPLICATION->GetPopupLink(array("URL" => "/bitrix/admin/public_file_edit.php?lang=" . LANGUAGE_ID . "&noeditor=Y&path=" . $encCurrentFilePath . "&site=" . SITE_ID . "&back_url=" . $encRequestUri, "PARAMS" => array("width" => 780, "height" => 470, 'dialog_type' => 'EDITOR', "min_width" => 700, "min_height" => 400))), "SORT" => 50, "HK_ID" => "top_panel_edit_page_html");
         if ($USER->CanDoOperation("edit_php")) {
             $arMenu[] = array("TEXT" => GetMessage("top_panel_edit_page_php"), "TITLE" => GetMessage("top_panel_edit_page_php_title"), "ICON" => "panel-edit-php", "ACTION" => $APPLICATION->GetPopupLink(array("URL" => "/bitrix/admin/public_file_edit_src.php?lang=" . LANGUAGE_ID . "&path=" . $encCurrentFilePath . "&site=" . SITE_ID . "&back_url=" . $encRequestUri . "&templateID=" . $encSiteTemplateId, "PARAMS" => array("width" => 770, "height" => 470, 'dialog_type' => 'EDITOR', "min_width" => 700, "min_height" => 400))), "SORT" => 60, "HK_ID" => "top_panel_edit_page_php");
         }
     }
     $bNeedSep = false;
     if (CTopPanel::IsCanEditPermission($currentFilePath, $documentRoot, $filemanExists)) {
         $bNeedSep = true;
         //access button
         $arMenu[] = array("TEXT" => GetMessage("top_panel_access_page_new"), "TITLE" => GetMessage("top_panel_access_page_title"), "ICON" => "panel-file-access", "ACTION" => $APPLICATION->GetPopupLink(array("URL" => "/bitrix/admin/public_access_edit.php?lang=" . LANGUAGE_ID . "&site=" . SITE_ID . "&path=" . $encCurrentFilePath . "&back_url=" . $encRequestUri, "PARAMS" => array("min_width" => 450, "min_height" => 250))), "SORT" => 30, "HK_ID" => "top_panel_access_page_new");
     }
     //delete button
     if (CTopPanel::IsCanDeletePage($currentFilePath, $documentRoot, $filemanExists)) {
         $bNeedSep = true;
         $arMenu[] = array("ID" => "delete", "ICON" => "icon-delete", "ALT" => GetMessage("top_panel_del_page"), "TEXT" => GetMessage("top_panel_del_page"), "ACTION" => $APPLICATION->GetPopupLink(array("URL" => "/bitrix/admin/public_file_delete.php?lang=" . LANGUAGE_ID . "&site=" . SITE_ID . "&path=" . $encCurrentFilePath, "PARAMS" => array("min_width" => 250, "min_height" => 180, 'height' => 180, 'width' => 440))), "SORT" => 40, "HK_ID" => "top_panel_del_page");
     }
     if ($bNeedSep) {
         $arMenu[] = array("SEPARATOR" => true, "SORT" => 29);
     }
     if (!empty($arMenu)) {
         //check anonymous access
         $arOperations = CUser::GetFileOperations(array(SITE_ID, $currentFilePath), array(2));
         $bAllowAnonymous = in_array("fm_view_file", $arOperations);
         $APPLICATION->AddPanelButton(array("HREF" => $defaultUrl == "" ? "" : "javascript:" . $defaultUrl, "TYPE" => "BIG", "ID" => "edit", "ICON" => $bAllowAnonymous ? "bx-panel-edit-page-icon" : "bx-panel-edit-secret-page-icon", "ALT" => GetMessage("top_panel_edit_title"), "TEXT" => GetMessage("top_panel_edit_new"), "MAIN_SORT" => "200", "SORT" => 10, "MENU" => $arMenu, "HK_ID" => "top_panel_edit_new", "RESORT_MENU" => true, "HINT" => array("TITLE" => GetMessage("top_panel_edit_new_tooltip_title"), "TEXT" => GetMessage("top_panel_edit_new_tooltip")), "HINT_MENU" => array("TITLE" => GetMessage("top_panel_edit_new_menu_tooltip_title"), "TEXT" => GetMessage("top_panel_edit_new_menu_tooltip"))));
     }
     // EDIT SECTION button
     $arMenu = array();
     if (CTopPanel::IsCanEditSection($currentDirPath, $filemanExists)) {
         $defaultUrl = 'javascript:' . $APPLICATION->GetPopupLink(array("URL" => "/bitrix/admin/public_folder_edit.php?lang=" . LANGUAGE_ID . "&site=" . SITE_ID . "&path=" . urlencode($APPLICATION->GetCurDir()) . "&back_url=" . $encRequestUri, "PARAMS" => array("min_width" => 450, "min_height" => 250)));
         $arMenu[] = array("TEXT" => GetMessage("top_panel_folder_prop"), "TITLE" => GetMessage("top_panel_folder_prop_title"), "ICON" => "panel-folder-props", "DEFAULT" => true, "ACTION" => $defaultUrl, "SORT" => 10, "HK_ID" => "top_panel_folder_prop");
     }
     if (CTopPanel::IsCanEditPermission($currentDirPath, $documentRoot, $filemanExists)) {
         $arMenu[] = array("TEXT" => GetMessage("top_panel_access_folder_new"), "TITLE" => GetMessage("top_panel_access_folder_title"), "ICON" => "panel-folder-access", "ACTION" => $APPLICATION->GetPopupLink(array("URL" => "/bitrix/admin/public_access_edit.php?lang=" . LANGUAGE_ID . "&site=" . SITE_ID . "&path=" . $encCurrentDirPath . "&back_url=" . $encRequestUri, "PARAMS" => array("min_width" => 450, "min_height" => 250))), "SORT" => 30, "HK_ID" => "top_panel_access_folder_new");
     }
     if (!empty($arMenu)) {
         //check anonymous access
         $arOperations = CUser::GetFileOperations(array(SITE_ID, $currentDirPath), array(2));
         $bAllowAnonymous = in_array("fm_view_listing", $arOperations);
         $APPLICATION->AddPanelButton(array("HREF" => $defaultUrl, "ID" => 'edit_section', "TYPE" => "BIG", "TEXT" => GetMessage("top_panel_folder_prop_new"), "TITLE" => GetMessage("top_panel_folder_prop_title"), "ICON" => $bAllowAnonymous ? "bx-panel-edit-section-icon" : "bx-panel-edit-secret-section-icon", "MAIN_SORT" => "200", "SORT" => 20, "MENU" => $arMenu, "HK_ID" => "top_panel_folder_prop_new", "RESORT_MENU" => true, "HINT" => array("TITLE" => GetMessage("top_panel_folder_prop_new_tooltip_title"), "TEXT" => GetMessage("top_panel_folder_prop_new_tooltip")), "HINT_MENU" => array("TITLE" => GetMessage("top_panel_folder_prop_new_menu_tooltip_title"), "TEXT" => GetMessage("top_panel_folder_prop_new_menu_tooltip"))));
     }
     // STRUCTURE button and submenu
     if ($USER->CanDoOperation('fileman_view_file_structure') && $USER->CanDoFileOperation('fm_edit_existent_folder', array(SITE_ID, "/"))) {
         $defaultUrl = $APPLICATION->GetPopupLink(array("URL" => "/bitrix/admin/public_structure.php?lang=" . LANGUAGE_ID . "&site=" . SITE_ID . "&path=" . $encCurrentFilePath . "&templateID=" . $encSiteTemplateId, "PARAMS" => array("width" => 350, "height" => 470, "resize" => true)));
         $arMenu = array();
         if ($filemanExists) {
             $arMenu[] = array("TEXT" => GetMessage("main_top_panel_struct"), "TITLE" => GetMessage("main_top_panel_struct_title"), "ACTION" => $defaultUrl, "DEFAULT" => true, "HK_ID" => "main_top_panel_struct");
             $arMenu[] = array('SEPARATOR' => true);
             $arMenu[] = array("TEXT" => GetMessage("main_top_panel_struct_panel"), "TITLE" => GetMessage("main_top_panel_struct_panel_title"), "ACTION" => "jsUtils.Redirect([], '" . CUtil::JSEscape("/bitrix/admin/fileman_admin.php?lang=" . LANGUAGE_ID . "&site=" . SITE_ID . "&path=" . urlencode($APPLICATION->GetCurDir())) . "')", "HK_ID" => "main_top_panel_struct_panel");
         }
         $APPLICATION->AddPanelButton(array("HREF" => "javascript:" . $defaultUrl, "ID" => "structure", "ICON" => "bx-panel-site-structure-icon", "ALT" => GetMessage("main_top_panel_struct_title"), "TEXT" => GetMessage("main_top_panel_structure"), "MAIN_SORT" => "300", "SORT" => 30, "MENU" => $arMenu, "HK_ID" => "main_top_panel_structure", "HINT" => array("TITLE" => GetMessage("main_top_panel_structure_tooltip_title"), "TEXT" => GetMessage("main_top_panel_structure_tooltip"))));
     }
     //cache button
     if ($USER->CanDoOperation("cache_control")) {
         //recreate cache on the current page
         $arMenu = array(array("TEXT" => GetMessage("top_panel_cache_page"), "TITLE" => GetMessage("top_panel_cache_page_title"), "ICON" => "panel-page-cache", "ACTION" => "BX.clearCache()", "DEFAULT" => true, "HK_ID" => "top_panel_cache_page"));
         if (!empty($APPLICATION->aCachedComponents)) {
             $arMenu[] = array("TEXT" => GetMessage("top_panel_cache_comp"), "TITLE" => GetMessage("top_panel_cache_comp_title"), "ICON" => "panel-comp-cache", "ACTION" => "jsComponentUtils.ClearCache('component_name=" . CUtil::addslashes(implode(",", $APPLICATION->aCachedComponents)) . "&site_id=" . SITE_ID . "');", "HK_ID" => "top_panel_cache_comp");
         }
         $arMenu[] = array("SEPARATOR" => true);
         $sessionClearCache = isset($_SESSION["SESS_CLEAR_CACHE"]) && $_SESSION["SESS_CLEAR_CACHE"] == "Y";
         $arMenu[] = array("TEXT" => GetMessage("top_panel_cache_not"), "TITLE" => GetMessage("top_panel_cache_not_title"), "CHECKED" => $sessionClearCache, "ACTION" => "jsUtils.Redirect([], '" . CUtil::addslashes($APPLICATION->GetCurPageParam("clear_cache_session=" . ($sessionClearCache ? "N" : "Y"), array("clear_cache_session"))) . "');", "HK_ID" => "top_panel_cache_not");
         $APPLICATION->AddPanelButton(array("HREF" => "javascript:BX.clearCache()", "TYPE" => "BIG", "ICON" => "bx-panel-clear-cache-icon", "TEXT" => GetMessage("top_panel_cache_new"), "ALT" => GetMessage("top_panel_clear_cache"), "MAIN_SORT" => "400", "SORT" => 10, "MENU" => $arMenu, "HK_ID" => "top_panel_clear_cache", "HINT" => array("TITLE" => GetMessage("top_panel_cache_new_tooltip_title"), "TEXT" => GetMessage("top_panel_cache_new_tooltip")), "HINT_MENU" => array("TITLE" => GetMessage("top_panel_cache_new_menu_tooltip_title"), "TEXT" => GetMessage("top_panel_cache_new_menu_tooltip"))));
     }
     $bHideComponentsMenu = false;
     if ($USER->CanDoOperation('edit_php') || !empty($APPLICATION->arPanelFutureButtons['components'])) {
         if (empty($APPLICATION->arPanelFutureButtons['components'])) {
             if ($APPLICATION->GetShowIncludeAreas() != 'Y') {
                 $APPLICATION->AddPanelButtonMenu('components', array("TEXT" => GetMessage("top_panel_edit_mode"), "TITLE" => GetMessage("top_panel_edit_mode_title"), "ACTION" => "jsUtils.Redirect([], BX('bx-panel-toggle').href);", "HK_ID" => "top_panel_edit_mode"));
             } else {
                 $bHideComponentsMenu = true;
             }
         }
         if ($bHideComponentsMenu) {
             $APPLICATION->AddPanelButton(array("ID" => "components_empty", "HREF" => "javascript:void(0)", "ICON" => "bx-panel-components-icon", "TEXT" => GetMessage("top_panel_comp"), "MAIN_SORT" => "500", "SORT" => 10, "HINT" => array("TITLE" => GetMessage("top_panel_comp_tooltip_title"), "TEXT" => GetMessage('top_panel_comp_tooltip_empty'))));
         } else {
             $APPLICATION->AddPanelButton(array("ID" => "components", "ICON" => "bx-panel-components-icon", "TEXT" => GetMessage("top_panel_comp"), "MAIN_SORT" => "500", "SORT" => 10, "HINT" => array("TITLE" => GetMessage("top_panel_comp_tooltip_title"), "TEXT" => GetMessage("top_panel_comp_tooltip"))));
         }
     }
     //TEMPLATE button and submenu
     if ($USER->CanDoOperation("edit_php") || $USER->CanDoOperation("lpa_template_edit")) {
         $arMenu = array();
         $bUseSubmenu = false;
         $defaultUrl = '';
         if ($USER->CanDoOperation("edit_php")) {
             $filePath = SITE_TEMPLATE_PATH . "/styles.css";
             if (file_exists($_SERVER['DOCUMENT_ROOT'] . $filePath)) {
                 $arMenu[] = array("TEXT" => GetMessage("top_panel_templ_site_css"), "TITLE" => GetMessage("top_panel_templ_site_css_title"), "ICON" => "panel-edit-text", "HK_ID" => "top_panel_templ_site_css", "ACTION" => $APPLICATION->GetPopupLink(array("URL" => "/bitrix/admin/public_file_edit_src.php?lang=" . LANGUAGE_ID . "&path=" . urlencode($filePath) . "&site=" . SITE_ID . "&back_url=" . $encRequestUri, "PARAMS" => array("width" => 770, 'height' => 470, 'resize' => true, 'dialog_type' => 'EDITOR', "min_width" => 700, "min_height" => 400))));
                 $bUseSubmenu = true;
             }
             $filePath = SITE_TEMPLATE_PATH . "/template_styles.css";
             if (file_exists($_SERVER['DOCUMENT_ROOT'] . $filePath)) {
                 $arMenu[] = array("TEXT" => GetMessage("top_panel_templ_templ_css"), "TITLE" => GetMessage("top_panel_templ_templ_css_title"), "ICON" => "panel-edit-text", "HK_ID" => "top_panel_templ_templ_css", "ACTION" => $APPLICATION->GetPopupLink(array("URL" => "/bitrix/admin/public_file_edit_src.php?lang=" . LANGUAGE_ID . "&path=" . urlencode($filePath) . "&site=" . SITE_ID . "&back_url=" . $encRequestUri, "PARAMS" => array("width" => 770, 'height' => 470, 'resize' => true, 'dialog_type' => 'EDITOR', "min_width" => 700, "min_height" => 400))));
                 $bUseSubmenu = true;
             }
         }
         $arSubMenu = array(array("TEXT" => GetMessage("top_panel_templ_edit"), "TITLE" => GetMessage("top_panel_templ_edit_title"), "ICON" => "icon-edit", "ACTION" => "jsUtils.Redirect([], '/bitrix/admin/template_edit.php?lang=" . LANGUAGE_ID . "&ID=" . $encSiteTemplateId . "')", "DEFAULT" => !$bUseSubmenu, "HK_ID" => "top_panel_templ_edit"), array("TEXT" => GetMessage("top_panel_templ_site"), "TITLE" => GetMessage("top_panel_templ_site_title"), "ICON" => "icon-edit", "ACTION" => "jsUtils.Redirect([], '/bitrix/admin/site_edit.php?lang=" . LANGUAGE_ID . "&LID=" . SITE_ID . "')", "DEFAULT" => false, "HK_ID" => "top_panel_templ_site"));
         if ($bUseSubmenu) {
             $arMenu[] = array('SEPARATOR' => "Y");
             $arMenu[] = array("TEXT" => GetMessage("top_panel_cp"), "MENU" => $arSubMenu);
         } else {
             $arMenu = $arSubMenu;
             $defaultUrl = "javascript:" . $arSubMenu[0]['ACTION'];
         }
         $APPLICATION->AddPanelButton(array("HREF" => $defaultUrl, "ICON" => "bx-panel-site-template-icon", "ALT" => GetMessage("top_panel_templ_title"), "TEXT" => GetMessage("top_panel_templ"), "MAIN_SORT" => "500", "SORT" => 30, "MENU" => $arMenu, "HK_ID" => "top_panel_templ", "HINT" => array("TITLE" => GetMessage("top_panel_templ_tooltip_title"), "TEXT" => GetMessage("top_panel_templ_tooltip"))));
     }
     //statistics buttons
     if ($USER->CanDoOperation("edit_php")) {
         //show debug information
         $sessionShowIncludeTimeExec = isset($_SESSION["SESS_SHOW_INCLUDE_TIME_EXEC"]) && $_SESSION["SESS_SHOW_INCLUDE_TIME_EXEC"] == "Y";
         $sessionShowTimeExec = isset($_SESSION["SESS_SHOW_TIME_EXEC"]) && $_SESSION["SESS_SHOW_TIME_EXEC"] == "Y";
         $cmd = $sessionShowIncludeTimeExec && $sessionShowTimeExec && $DB->ShowSqlStat ? "N" : "Y";
         $url = $APPLICATION->GetCurPageParam("show_page_exec_time=" . $cmd . "&show_include_exec_time=" . $cmd . "&show_sql_stat=" . $cmd, array("show_page_exec_time", "show_include_exec_time", "show_sql_stat"));
         $arMenu = array(array("TEXT" => GetMessage("top_panel_debug_summ"), "TITLE" => GetMessage("top_panel_debug_summ_title"), "CHECKED" => $cmd == "N", "ACTION" => "jsUtils.Redirect([], '" . CUtil::addslashes($url) . "');", "DEFAULT" => true, "HK_ID" => "top_panel_debug_summ"), array("SEPARATOR" => true), array("TEXT" => GetMessage("top_panel_debug_sql"), "TITLE" => GetMessage("top_panel_debug_sql_title"), "CHECKED" => !!$DB->ShowSqlStat, "ACTION" => "jsUtils.Redirect([], '" . CUtil::addslashes($APPLICATION->GetCurPageParam("show_sql_stat=" . ($DB->ShowSqlStat ? "N" : "Y"), array("show_sql_stat"))) . "');", "HK_ID" => "top_panel_debug_sql"), array("TEXT" => GetMessage("top_panel_debug_cache"), "TITLE" => GetMessage("top_panel_debug_cache_title"), "CHECKED" => !!\Bitrix\Main\Data\Cache::getShowCacheStat(), "ACTION" => "jsUtils.Redirect([], '" . CUtil::addslashes($APPLICATION->GetCurPageParam("show_cache_stat=" . (\Bitrix\Main\Data\Cache::getShowCacheStat() ? "N" : "Y"), array("show_cache_stat"))) . "');", "HK_ID" => "top_panel_debug_cache"), array("TEXT" => GetMessage("top_panel_debug_incl"), "TITLE" => GetMessage("top_panel_debug_incl_title"), "CHECKED" => $sessionShowIncludeTimeExec, "ACTION" => "jsUtils.Redirect([], '" . CUtil::addslashes($APPLICATION->GetCurPageParam("show_include_exec_time=" . ($sessionShowIncludeTimeExec ? "N" : "Y"), array("show_include_exec_time"))) . "');", "HK_ID" => "top_panel_debug_incl"), array("TEXT" => GetMessage("top_panel_debug_time"), "TITLE" => GetMessage("top_panel_debug_time_title"), "CHECKED" => $sessionShowTimeExec, "ACTION" => "jsUtils.Redirect([], '" . CUtil::addslashes($APPLICATION->GetCurPageParam("show_page_exec_time=" . ($sessionShowTimeExec ? "N" : "Y"), array("show_page_exec_time"))) . "');", "HK_ID" => "top_panel_debug_time"));
         if (IsModuleInstalled("compression")) {
             $bShowCompressed = isset($_SESSION["SESS_COMPRESS"]) && $_SESSION["SESS_COMPRESS"] == "Y";
             if (isset($_GET["compress"])) {
                 if ($_GET["compress"] === "Y" || $_GET["compress"] === "y") {
                     $bShowCompressed = true;
                 } elseif ($_GET["compress"] === "N" || $_GET["compress"] === "n") {
                     $bShowCompressed = false;
                 }
             }
             $arMenu[] = array("SEPARATOR" => true);
             $arMenu[] = array("TEXT" => GetMessage("top_panel_debug_compr"), "TITLE" => GetMessage("top_panel_debug_compr_title"), "CHECKED" => !!$bShowCompressed, "ACTION" => "jsUtils.Redirect([], '" . CUtil::addslashes($APPLICATION->GetCurPageParam("compress=" . ($bShowCompressed ? "N" : "Y"), array("compress"))) . "');", "HK_ID" => "top_panel_debug_compr");
         }
         $APPLICATION->AddPanelButton(array("HREF" => $url, "ICON" => "bx-panel-performance-icon", "TEXT" => GetMessage("top_panel_debug"), "ALT" => GetMessage("top_panel_show_debug"), "MAIN_SORT" => "500", "SORT" => 40, "MENU" => $arMenu, "HK_ID" => "top_panel_debug", "HINT" => array("TITLE" => GetMessage("top_panel_debug_tooltip_title"), "TEXT" => GetMessage("top_panel_debug_tooltip"))));
     }
     ///////////////////////     SHORT URIs     ////////////////////////////////////////
     if ($USER->CanDoOperation('manage_short_uri')) {
         $url = $APPLICATION->GetPopupLink(array("URL" => "/bitrix/admin/short_uri_edit.php?lang=" . LANGUAGE_ID . "&public=Y&bxpublic=Y&str_URI=" . urlencode($APPLICATION->GetCurPageParam("", array("clear_cache", "sessid", "login", "logout", "register", "forgot_password", "change_password", "confirm_registration", "confirm_code", "confirm_user_id", "bitrix_include_areas", "show_page_exec_time", "show_include_exec_time", "show_sql_stat", "show_link_stat"))) . "&site=" . SITE_ID . "&back_url=" . $encRequestUri, "PARAMS" => array("width" => 770, 'height' => 270, 'resize' => true)));
         $APPLICATION->AddPanelButton(array("HREF" => "javascript:" . $url, "ICON" => "bx-panel-short-url-icon", "ALT" => GetMessage("MTP_SHORT_URI_ALT"), "TEXT" => GetMessage("MTP_SHORT_URI"), "MAIN_SORT" => 1000, "HK_ID" => "MTP_SHORT_URI", "MENU" => array(array("TEXT" => GetMessage("MTP_SHORT_URI1"), "TITLE" => GetMessage("MTP_SHORT_URI_ALT1"), "ACTION" => "javascript:" . $url, "DEFAULT" => true, "HK_ID" => "MTP_SHORT_URI1"), array("TEXT" => GetMessage("MTP_SHORT_URI_LIST"), "TITLE" => GetMessage("MTP_SHORT_URI_LIST_ALT"), "ACTION" => "jsUtils.Redirect([], '" . CUtil::addslashes("/bitrix/admin/short_uri_admin.php?lang=" . LANGUAGE_ID . "") . "');", "HK_ID" => "MTP_SHORT_URI_LIST")), "MODE" => "view", "HINT" => array("TITLE" => GetMessage("MTP_SHORT_URI_HINT"), "TEXT" => GetMessage("MTP_SHORT_URI_HINT_ALT"))));
     }
 }
Example #17
0
 /**
  * Cleans cache with folders tree.
  *
  * @internal
  * @deprecated
  * @param array $storageIds List of storage id.
  * @return void
  */
 public function cleanCacheTreeBitrixDisk(array $storageIds)
 {
     $cache = Cache::createInstance();
     foreach ($storageIds as $id) {
         $cache->clean('storage_tr_' . $id, 'disk');
     }
     unset($id);
 }
Example #18
0
	/**
	 * Function perform start of cache process, if needed
	 * @param mixed[]|string $cacheId An optional addition for cache key
	 * @return boolean True, if cache content needs to be generated, false if cache is valid and can be read
	 */
	final protected function startCache($cacheId = array())
	{
		if(!$this->getCacheNeed())
			return true;

		$this->currentCache = Data\Cache::createInstance();

		return $this->currentCache->startDataCache(intval($this->arParams['CACHE_TIME']), $this->getCacheKey($cacheId), static::COMPONENT_CACHE_DIR);
	}
Example #19
0
 function EndDataCache()
 {
     if (!$this->bStarted) {
         return;
     }
     $this->bStarted = false;
     $arAllVars = ob_get_contents();
     $this->_cache->write($arAllVars, $this->basedir, $this->initdir, $this->filename, $this->TTL);
     if (\Bitrix\Main\Data\Cache::getShowCacheStat()) {
         $written = 0;
         $path = '';
         if ($this->_cache instanceof \Bitrix\Main\Data\ICacheEngineStat) {
             $written = $this->_cache->getWrittenBytes();
             $path = $this->_cache->getCachePath();
         } elseif ($this->_cache instanceof \ICacheBackend) {
             /** @noinspection PhpUndefinedFieldInspection */
             $written = $this->_cache->written;
             /** @noinspection PhpUndefinedFieldInspection */
             $path = $this->_cache->path;
         }
         \Bitrix\Main\Diag\CacheTracker::addCacheStatBytes($written);
         \Bitrix\Main\Diag\CacheTracker::add($written, $path, $this->basedir, $this->initdir, $this->filename, "W");
     }
     if (strlen($arAllVars) > 0) {
         ob_end_flush();
     } else {
         ob_end_clean();
     }
 }
Example #20
0
 public function Stop($rel_path = "", $path = "", $cache_type = "")
 {
     /** @global CMain $APPLICATION */
     global $APPLICATION;
     /** @global CDatabase $DB */
     global $DB;
     /** @global int $CACHE_STAT_BYTES */
     global $CACHE_STAT_BYTES;
     if ($this->is_comp) {
         self::$level--;
     }
     $this->arResult = array("PATH" => $path, "REL_PATH" => $rel_path, "QUERY_COUNT" => 0, "QUERY_TIME" => 0, "QUERIES" => array(), "TIME" => getmicrotime() - $this->start_time, "BX_STATE" => $GLOBALS["BX_STATE"], "CACHE_TYPE" => $cache_type, "CACHE_SIZE" => \Bitrix\Main\Data\Cache::getShowCacheStat() ? \Bitrix\Main\Diag\CacheTracker::getCacheStatBytes() : 0, "LEVEL" => self::$level);
     if ($this->savedTracker) {
         $application = \Bitrix\Main\Application::getInstance();
         $connection = $application->getConnection();
         $sqlTracker = $connection->getTracker();
         if ($sqlTracker->getCounter() > 0) {
             $this->arResult["QUERY_COUNT"] = $sqlTracker->getCounter();
             $this->arResult["QUERY_TIME"] = $sqlTracker->getTime();
             $this->arResult["QUERIES"] = $sqlTracker->getQueries();
         }
         $connection->setTracker($this->savedTracker);
         $DB->sqlTracker = $connection->getTracker();
         $this->savedTracker = null;
     }
     if (\Bitrix\Main\Data\Cache::getShowCacheStat()) {
         $this->arResult["CACHE"] = \Bitrix\Main\Diag\CacheTracker::getCacheTracking();
         \Bitrix\Main\Diag\CacheTracker::setCacheTracking($this->arCacheDebugSave);
         \Bitrix\Main\Diag\CacheTracker::setCacheStatBytes($CACHE_STAT_BYTES = $this->cache_size);
     }
 }
Example #21
0
    echo $APPLICATION->GetCurPage();
    ?>
</p>
	<p><?php 
    echo GetMessage("debug_info_comps_cache");
    ?>
 <?php 
    if (COption::GetOptionString("main", "component_cache_on", "Y") == "Y") {
        echo GetMessage("debug_info_comps_cache_on");
    } else {
        echo "<a href=\"/bitrix/admin/cache.php\"><font class=\"errortext\">" . GetMessage("debug_info_comps_cache_off") . "</font></a>";
    }
    ?>
.</p>
	<p><?php 
    if (\Bitrix\Main\Data\Cache::getShowCacheStat()) {
        echo GetMessage("debug_info_cache_size") . " ", CFile::FormatSize(\Bitrix\Main\Diag\CacheTracker::getCacheStatBytes(), 0);
    } else {
        echo "&nbsp;";
    }
    ?>
</p>
<?php 
    $obJSPopup->StartContent(array('buffer' => true));
    ?>
	<div id="BX_DEBUG_TIME_1">
		<div class="bx-debug-content bx-debug-content-table">

<table cellpadding="0" cellspacing="0" border="0" width="100%">
	<tr class="heading">
		<td>&nbsp;</td>
Example #22
0
 /**
  * Function perform start of cache process, if needed
  * @param mixed[]|string $cacheId An optional addition for cache key
  * @return boolean True, if cache content needs to be generated, false if cache is valid and can be read
  */
 protected final function startCache($cacheId = array())
 {
     if (!$this->getCacheNeed()) {
         return true;
     }
     $this->currentCache = Data\Cache::createInstance();
     return $this->currentCache->startDataCache(intval($this->arParams['CACHE_TIME']), $this->getCacheKey($cacheId));
 }
Example #23
0
 public function clearByTag($tag)
 {
     $con = Main\Application::getConnection();
     $sqlHelper = $con->getSqlHelper();
     if ($tag === true) {
         $sqlWhere = " WHERE TAG <> '*'";
     } else {
         $sqlWhere = "  WHERE TAG = '" . $sqlHelper->forSql($tag) . "'";
     }
     $arDirs = array();
     $rs = $con->query("SELECT * FROM b_cache_tag" . $sqlWhere);
     while ($ar = $rs->fetch()) {
         $arDirs[$ar["RELATIVE_PATH"]] = $ar;
     }
     $con->queryExecute("DELETE FROM b_cache_tag" . $sqlWhere);
     $cache = Cache::createInstance();
     $managedCache = Main\Application::getInstance()->getManagedCache();
     foreach ($arDirs as $path => $ar) {
         $con->queryExecute("\n\t\t\t\tDELETE FROM b_cache_tag\n\t\t\t\tWHERE SITE_ID = '" . $sqlHelper->forSql($ar["SITE_ID"]) . "'\n\t\t\t\tAND CACHE_SALT = '" . $sqlHelper->forSql($ar["CACHE_SALT"]) . "'\n\t\t\t\tAND RELATIVE_PATH = '" . $sqlHelper->forSql($ar["RELATIVE_PATH"]) . "'\n\t\t\t");
         if (preg_match("/^managed:(.+)\$/", $path, $match)) {
             $managedCache->cleanDir($match[1]);
         } else {
             $cache->cleanDir($path);
         }
         unset($this->dbCacheTags[$path]);
     }
 }
            $cache_type = GetMessage("PERFMON_PANEL_CACHE_STORAGE_MEMCACHE");
            break;
        case "cacheengineapc":
            $cache_type = GetMessage("PERFMON_PANEL_CACHE_STORAGE_APC");
            break;
        case "cacheenginexcache":
            $cache_type = GetMessage("PERFMON_PANEL_CACHE_STORAGE_XCACHE");
            break;
        case "cacheenginefiles":
            $cache_type = GetMessage("PERFMON_PANEL_CACHE_STORAGE_FILES");
            break;
        case "cacheenginememcachecluster":
            $cache_type = GetMessage("PERFMON_PANEL_CACHE_STORAGE_CLUSTER");
            break;
        default:
            $cache_type = \Bitrix\Main\Data\Cache::getCacheEngineType();
            break;
    }
    ?>
			<td class="bx-digit-cell"><?php 
    echo $cache_type;
    ?>
</td>
			<td><?php 
    echo GetMessage("PERFMON_PANEL_CACHE_STORAGE_REC");
    ?>
</td>
		</tr>
		<tr>
			<td nowrap><?php 
    echo GetMessage("PERFMON_PANEL_MANAGED_CACHE");
Example #25
0
    }
}
######################################################
######################################################
######################################################
if (!isset($arParams['CACHE_TIME'])) {
    $arParams['CACHE_TIME'] = 999999;
}
if (!isset($arParams['CACHE_TYPE'])) {
    $arParams['CACHE_TYPE'] = 'A';
}
// obtain cached data
$cacheNeeded = intval($arParams['CACHE_TIME']) > 0 && $arParams['CACHE_TYPE'] != 'N' && \Bitrix\Main\Config\Option::get("main", "component_cache_on", "Y") == "Y";
$cachedData = array();
if ($cacheNeeded) {
    $currentCache = \Bitrix\Main\Data\Cache::createInstance();
    $cacheDir = '/sale/location/legacy/component/sal';
    if ($currentCache->startDataCache(intval($arParams['CACHE_TIME']), implode('|', array_merge($arParams, array(SITE_ID, LANGUAGE_ID))), $cacheDir)) {
        global $CACHE_MANAGER;
        $CACHE_MANAGER->StartTagCache($cacheDir);
        try {
            $cachedData['ZONE_IDS'] = SalesZone::getSelectedIds($arParams["SITE_ID"]);
            $cachedData['DEFAULT_LOCS'] = array();
            $res = CSaleLocation::GetList(array("SORT" => "ASC", "COUNTRY_NAME_LANG" => "ASC", "CITY_NAME_LANG" => "ASC"), array("LOC_DEFAULT" => "Y", "LID" => LANGUAGE_ID), false, false, array("*"));
            while ($item = $res->fetch()) {
                $cachedData['DEFAULT_LOCS'][] = $item;
            }
        } catch (Exception $e) {
            if ($cacheNeeded) {
                $CACHE_MANAGER->AbortTagCache();
                $currentCache->abortDataCache();
Example #26
0
 /**
  * Returns new instance of the Cache object.
  *
  * @return Data\Cache
  */
 public static function getCache()
 {
     return Data\Cache::createInstance();
 }
Example #27
0
 public function getCompCachePath($relativePath)
 {
     // TODO: global var!
     global $BX_STATE;
     if ($BX_STATE === "WA") {
         $salt = Cache::getSalt();
     } else {
         $salt = "/" . substr(md5($BX_STATE), 0, 3);
     }
     $path = "/" . SITE_ID . $relativePath . $salt;
     return $path;
 }
Example #28
0
<?php

/**
 * PERFMON_STARTED
 */
define('PERFMON_STARTED', $DB->ShowSqlStat . "|" . \Bitrix\Main\Data\Cache::getShowCacheStat() . "|" . $APPLICATION->ShowIncludeStat);
/**
 * T_KEYWORD
 */
define('T_KEYWORD', 400);
/**
 * LOG_FILENAME
 */
define('LOG_FILENAME', $_SERVER["DOCUMENT_ROOT"] . "/debug.trc");
Example #29
0
 function GetParams()
 {
     $res = array("enabled" => array(array("PARAMETER" => 'eaccelerator.enable', "VALUE" => ini_get('eaccelerator.enable'), "RECOMMENDATION" => GetMessage("PERFMON_MEASURE_SET_REC", array("#value#" => "1")))), "cache_ttl" => array(array("PARAMETER" => 'eaccelerator.shm_ttl', "VALUE" => ini_get('eaccelerator.shm_ttl'), "RECOMMENDATION" => GetMessage("PERFMON_MEASURE_GREATER_THAN_ZERO_REC"))), "check_mtime" => array(array("PARAMETER" => 'eaccelerator.check_mtime', "VALUE" => ini_get('eaccelerator.check_mtime'), "RECOMMENDATION" => GetMessage("PERFMON_MEASURE_SET_REC", array("#value#" => "1")))), "memory_pct" => array(array("PARAMETER" => 'eaccelerator.shm_size (' . GetMessage("PERFMON_MEASURE_CURRENT_VALUE", array("#value#" => ini_get('eaccelerator.shm_size'))) . ')', "VALUE" => ini_get('eaccelerator.shm_size'), "RECOMMENDATION" => GetMessage("PERFMON_MEASURE_EQUAL_OR_GREATER_THAN_REC", array("#value#" => "40")))));
     if (\Bitrix\Main\Data\Cache::getCacheEngineType() == "cacheengineeaccelerator") {
         $res["cache_limit"] = array(array("PARAMETER" => 'eaccelerator.shm_max', "VALUE" => ini_get('eaccelerator.shm_max'), "RECOMMENDATION" => GetMessage("PERFMON_MEASURE_GREATER_THAN_ZERO_REC")));
     }
     return $res;
 }
Example #30
0
	private static function onEpilogComposite()
	{
		global $USER, $APPLICATION;

		if (is_object($USER) && $USER->IsAuthorized())
		{
			if (self::isCurrentUserCC())
			{
				if ($APPLICATION->get_cookie("CC") !== "Y" || $APPLICATION->get_cookie("NCC") === "Y")
				{
					self::setCC();
				}
			}
			else
			{
				if ($APPLICATION->get_cookie("NCC") !== "Y" || $APPLICATION->get_cookie("CC") === "Y")
				{
					self::setNCC();
				}
			}
		}
		else
		{
			if ($APPLICATION->get_cookie("NCC") === "Y" || $APPLICATION->get_cookie("CC") === "Y")
			{
				self::deleteCompositeCookies();
			}
		}

		if (Main\Data\Cache::shouldClearCache())
		{
			$server = Main\Context::getCurrent()->getServer();

			$queryString = DeleteParam(array("clear_cache", "clear_cache_session"));
			$uri = new Bitrix\Main\Web\Uri($server->getRequestUri());
			$refinedUri = $queryString != "" ? $uri->getPath()."?".$queryString : $uri->getPath();

			$cachedFile = self::convertUriToPath($refinedUri, self::getHttpHost());

			$cacheStorage = Bitrix\Main\Data\StaticHtmlCache::getStaticHtmlStorage($cachedFile);
			if ($cacheStorage !== null)
			{
				$bytes = $cacheStorage->delete();
				if ($bytes !== false && $cacheStorage->shouldCountQuota())
				{
					self::updateQuota(-$bytes);
				}
			}
		}
	}