%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/pull/classes/general/ |
Current File : /home/bitrix/www/bitrix/modules/pull/classes/general/pull_options.php |
<? use Bitrix\Main\Page\Asset; class CPullOptions { static $optionDefaultConfig = null; static $optionDefaultModule = null; public static function CheckNeedRun($bGetSectionStatus = true) { $arExcludeSites = CPullOptions::GetExcludeSites(); if (isset($arExcludeSites[SITE_ID])) return false; global $CACHE_MANAGER; $bAdminSection = false; if(defined("ADMIN_SECTION") && ADMIN_SECTION == true) $bAdminSection = true; $arResult = Array(); $res = $CACHE_MANAGER->Read(2592000, "pull_cnr"); if ($res) $arResult = $CACHE_MANAGER->Get("pull_cnr"); if(!$res) { $arResult = Array( 'ADMIN_SECTION' => false, 'PUBLIC_SECTION' => false ); $arModule = self::GetDependentModule(); foreach ($arModule as $moduleId => $options) { if (isset($options['ADMIN_SECTION']) && $options['ADMIN_SECTION'] == 'Y') $arResult['ADMIN_SECTION'] = true; if (isset($options['PUBLIC_SECTION']) && $options['PUBLIC_SECTION'] == 'Y') $arResult['PUBLIC_SECTION'] = true; } $CACHE_MANAGER->Set("pull_cnr", $arResult); } return $bGetSectionStatus? $arResult[$bAdminSection? 'ADMIN_SECTION': 'PUBLIC_SECTION']: $arResult; } public static function ModuleEnable() { $arResult = self::CheckNeedRun(false); return ($arResult['ADMIN_SECTION'] || $arResult['PUBLIC_SECTION'])? true: false; } public static function GetDependentModule() { $arModule = Array(); foreach(GetModuleEvents("pull", "OnGetDependentModule", true) as $arEvent) { $ar = ExecuteModuleEventEx($arEvent); if (isset($ar['MODULE_ID'])) { $arModule[$ar['MODULE_ID']] = Array( 'MODULE_ID' => $ar['MODULE_ID'], 'ADMIN_SECTION' => isset($ar['USE']) && in_array('ADMIN_SECTION', $ar['USE'])? true: false, 'PUBLIC_SECTION' => isset($ar['USE']) && in_array('PUBLIC_SECTION', $ar['USE'])? true: false, ); } } return $arModule; } public static function GetExcludeSites() { $result = COption::GetOptionString("pull", "exclude_sites", "a:0:{}", self::GetDefaultOption("exclude_sites")); return unserialize($result); } public static function SetExcludeSites($sites) { if (!is_array($sites)) return false; COption::SetOptionString("pull", "exclude_sites", serialize($sites)); return true; } /* * @deprecated No longer used by internal code and not recommended. Use CPullOptions::GetQueueServerStatus() */ public static function GetNginxStatus() { return self::GetQueueServerStatus(); } public static function GetQueueServerStatus() { $result = COption::GetOptionString("pull", "nginx", self::GetDefaultOption("nginx")); return $result == 'N'? false: true; } public static function GetQueueServerHeaders() { $result = COption::GetOptionString("pull", "nginx_headers", self::GetDefaultOption("nginx_headers")); return $result == 'Y'? true: false; } /* * @deprecated No longer used by internal code and not recommended. Use CPullOptions::SetQueueServerStatus() */ public static function SetNginxStatus($flag = "N") { return self::SetQueueServerStatus($flag); } public static function SetQueueServerStatus($flag = "N") { COption::SetOptionString("pull", "nginx", $flag=='Y'?'Y':'N'); if ($flag=='Y') { CAgent::AddAgent("CPullChannel::CheckOnlineChannel();", "pull", "N", 240, "", "Y", ConvertTimeStamp(time()+CTimeZone::GetOffset()+240, "FULL")); CAgent::RemoveAgent("CPullStack::CheckExpireAgent();", "pull"); } else { CAgent::RemoveAgent("CPullChannel::CheckOnlineChannel();", "pull"); CAgent::AddAgent("CPullStack::CheckExpireAgent();", "pull", "N"); } return true; } public static function SetQueueServerHeaders($flag = "Y") { COption::SetOptionString("pull", "nginx_headers", $flag=='Y'?'Y':'N'); return true; } public static function GetPushStatus() { $result = COption::GetOptionString("pull", "push", self::GetDefaultOption("push")); return $result == 'N'? false: true; } public static function SetPushStatus($flag = "N") { COption::SetOptionString("pull", "push", $flag=='Y'?'Y':'N'); if ($flag == 'Y') CAgent::AddAgent("CPushManager::SendAgent();", "pull", "N", 30); else CAgent::RemoveAgent("CPushManager::SendAgent();", "pull"); return true; } public static function GetPushMessagePerHit() { return intval(COption::GetOptionInt("pull", "push_message_per_hit", self::GetDefaultOption("push_message_per_hit"))); } public static function SetPushMessagePerHit($count) { COption::SetOptionInt("pull", "push_message_per_hit", intval($count)); return true; } public static function GetGuestStatus() { return COption::GetOptionString("pull", "guest", self::GetDefaultOption("guest")) == 'Y' && IsModuleInstalled('statistic'); } public static function SetGuestStatus($flag = "N") { COption::SetOptionString("pull", "guest", IsModuleInstalled('statistic') && $flag=='Y'?'Y':'N'); return true; } public static function GetPublishUrl($channelId = "") { $url = COption::GetOptionString("pull", "path_to_publish", self::GetDefaultOption("path_to_publish")).(strlen($channelId)>0?'?CHANNEL_ID='.$channelId:''); return $url; } public static function SetSignatureKey($signature) { COption::SetOptionString("pull", "signature_key", $signature); return true; } public static function GetSignatureKey() { $url = COption::GetOptionString("pull", "signature_key", self::GetDefaultOption("signature_key")); return $url; } public static function GetSignatureAlgorithm() { $url = COption::GetOptionString("pull", "signature_algo", self::GetDefaultOption("signature_algo")); return $url; } public static function SetPublishUrl($path = "") { if (strlen($path)<=0) { $path = self::GetDefaultOption('path_to_publish'); } COption::SetOptionString("pull", "path_to_publish", $path); return true; } public static function GetListenUrl($channelId = "") { if (!is_array($channelId) && strlen($channelId) > 0) $channelId = Array($channelId); else if (!is_array($channelId)) $channelId = Array(); $optionName = "path_to_modern_listener"; $url = COption::GetOptionString("pull", $optionName, self::GetDefaultOption($optionName)).(count($channelId)>0?'?CHANNEL_ID='.implode('/', $channelId):''); $url = str_replace('#PORT#', self::GetQueueServerVersion()>1? '': ':8893', $url); return $url; } public static function SetListenUrl($path = "") { if (strlen($path)<=0) { $path = self::GetDefaultOption('path_to_modern_listener'); } COption::SetOptionString("pull", 'path_to_modern_listener', $path); return true; } public static function GetListenSecureUrl($channelId = "") { if (!is_array($channelId) && strlen($channelId) > 0) $channelId = Array($channelId); else if (!is_array($channelId)) $channelId = Array(); $optionName = "path_to_modern_listener_secure"; $url = COption::GetOptionString("pull", $optionName, self::GetDefaultOption($optionName)).(count($channelId)>0?'?CHANNEL_ID='.implode('/', $channelId):''); $url = str_replace('#PORT#', self::GetQueueServerVersion()>1? '': ':8894', $url); return $url; } public static function SetListenSecureUrl($path = "") { if (strlen($path)<=0) { $path = self::GetDefaultOption('path_to_modern_listener_secure'); } COption::SetOptionString("pull", 'path_to_modern_listener_secure', $path); return true; } /* * Get version of QueueServer * 1 version - nginx-push-stream-module 0.3.4 * 2 version - nginx-push-stream-module 0.4.0 * 3 version - Bitrix Push & Pull server 1.0 * 4 version - Bitrix Push & Pull server 2.0 (reserved) */ public static function GetQueueServerVersion() { return intval(COption::GetOptionInt("pull", "nginx_version", self::GetDefaultOption("nginx_version"))); } public static function SetQueueServerVersion($version) { COption::SetOptionInt("pull", "nginx_version", intval($version)); return true; } public static function GetCommandPerHit() { return intval(COption::GetOptionInt("pull", "nginx_command_per_hit", self::GetDefaultOption("nginx_command_per_hit"))); } public static function SetCommandPerHit($count) { COption::SetOptionInt("pull", "nginx_command_per_hit", intval($count)); return true; } public static function GetWebSocketStatus() { return self::GetWebSocket() && self::GetQueueServerVersion()>1? true: false; } public static function GetWebSocket() { $result = false; if ( CPullOptions::GetQueueServerVersion() == 3 || COption::GetOptionString("pull", "websocket", self::GetDefaultOption("websocket")) == 'Y' ) { $result = true; } return $result; } public static function SetWebSocket($flag = "N") { COption::SetOptionString("pull", "websocket", $flag=='Y'?'Y':'N'); return true; } public static function GetWebSocketUrl($channelId = "") { if (!is_array($channelId) && strlen($channelId) > 0) $channelId = Array($channelId); else if (!is_array($channelId)) $channelId = Array(); $url = COption::GetOptionString("pull", "path_to_websocket", self::GetDefaultOption("path_to_websocket")).(count($channelId)>0?'?CHANNEL_ID='.implode('/', $channelId):''); return $url; } public static function SetWebSocketUrl($path = "") { if (strlen($path)<=0) { $path = self::GetDefaultOption('path_to_websocket'); } COption::SetOptionString("pull", "path_to_websocket", $path); return true; } public static function GetWebSocketSecureUrl($channelId = "") { if (!is_array($channelId) && strlen($channelId) > 0) $channelId = Array($channelId); else if (!is_array($channelId)) $channelId = Array(); $url = COption::GetOptionString("pull", "path_to_websocket_secure", self::GetDefaultOption("path_to_websocket_secure")).(count($channelId)>0?'?CHANNEL_ID='.implode('/', $channelId):''); return $url; } public static function SetWebSocketSecureUrl($path = "") { if (strlen($path)<=0) { $path = self::GetDefaultOption('path_to_websocket_secure'); } COption::SetOptionString("pull", "path_to_websocket_secure", $path); return true; } /* UTILITY */ public static function SendConfigDie() { $arMessage = Array( 'module_id' => 'pull', 'command' => 'config_expire', 'params' => Array() ); CPullStack::AddBroadcast($arMessage); } public static function GetDefaultOption($optionName) { if (is_null(self::$optionDefaultConfig)) { $config = \Bitrix\Main\Config\Configuration::getValue('pull'); self::$optionDefaultConfig = is_null($config) ? Array() : $config; } if (is_null(self::$optionDefaultModule)) { include($_SERVER['DOCUMENT_ROOT'].BX_ROOT.'/modules/pull/default_option.php'); self::$optionDefaultModule = $pull_default_option; } if (array_key_exists($optionName, self::$optionDefaultConfig)) { return self::$optionDefaultConfig[$optionName]; } return array_key_exists($optionName, self::$optionDefaultModule)? self::$optionDefaultModule[$optionName]: null; } public static function ClearCheckCache() { // init module cache $CModule = new CModule(); $CModule->IsInstalled(); CAgent::RemoveAgent("CPullOptions::ClearAgent();", "pull"); CAgent::AddAgent("CPullOptions::ClearAgent();", "pull", "N", 30, "", "Y", ConvertTimeStamp(time()+CTimeZone::GetOffset()+30, "FULL")); } public static function ClearAgent() { global $CACHE_MANAGER; $CACHE_MANAGER->Clean("pull_cnr"); if (self::ModuleEnable()) { CAgent::AddAgent("CPullChannel::CheckOnlineChannel();", "pull", "N", 240, "", "Y", ConvertTimeStamp(time()+CTimeZone::GetOffset()+100, "FULL")); CAgent::AddAgent("CPullChannel::CheckExpireAgent();", "pull", "N", 43200, "", "Y", ConvertTimeStamp(time()+CTimeZone::GetOffset() + 43200, "FULL")); CAgent::AddAgent("CPullStack::CheckExpireAgent();", "pull", "N", 86400, "", "Y", ConvertTimeStamp(time()+CTimeZone::GetOffset() + 86400, "FULL")); CAgent::AddAgent("CPullWatch::CheckExpireAgent();", "pull", "N", 600, "", "Y", ConvertTimeStamp(time()+CTimeZone::GetOffset() + 600, "FULL")); } else { CAgent::RemoveAgent("CPullChannel::CheckOnlineChannel();", "pull"); CAgent::RemoveAgent("CPullChannel::CheckExpireAgent();", "pull"); CAgent::RemoveAgent("CPullStack::CheckExpireAgent();", "pull"); CAgent::RemoveAgent("CPullWatch::CheckExpireAgent();", "pull"); CAgent::RemoveAgent("CPushManager::SendAgent();", "pull"); } } public static function OnEpilog() { $userId = 0; if (defined('PULL_USER_ID')) { $userId = PULL_USER_ID; } else if (is_object($GLOBALS['USER']) && intval($GLOBALS['USER']->GetID()) > 0) { $userId = intval($GLOBALS['USER']->GetID()); } else if (IsModuleInstalled('statistic') && intval($_SESSION["SESS_SEARCHER_ID"]) <= 0 && intval($_SESSION["SESS_GUEST_ID"]) > 0 && COption::GetOptionString("pull", "guest", self::GetDefaultOption("guest")) == 'Y') { $userId = intval($_SESSION["SESS_GUEST_ID"])*-1; } if (!defined('BX_PULL_SKIP_INIT') && !(isset($_REQUEST['AJAX_CALL']) && $_REQUEST['AJAX_CALL'] == 'Y') && $userId != 0 && CModule::IncludeModule('pull')) { define("BX_PULL_SKIP_INIT", true); if (CPullOptions::CheckNeedRun()) { CJSCore::Init(array('pull')); global $APPLICATION; if(\Bitrix\Main\Page\Frame::getInstance()->getUseAppCache()) { $pullInitJs = <<<JS var pullInited = false; BX.bind(window, "load", function(){ var config = BX.frameCache.getPullConfig(); if(config != null) { pullInited = true; BX.PULL.start(config); } }); BX.addCustomEvent("pullConfigHasBeenChanged",function(config){ if(pullInited) { BX.PULL.updateChannelID(config); BX.PULL.tryConnect(); return; } BX.PULL.start(config); }); JS; Asset::getInstance()->addString('<script type="text/javascript">'.$pullInitJs.'</script>'); } else { $pullConfig = CPullChannel::GetConfig($userId); $APPLICATION->AddAdditionalJS('<script type="text/javascript">BX.bind(window, "load", function() { BX.PULL.start('.(empty($pullConfig)? '': CUtil::PhpToJsObject($pullConfig)).'); });</script>'); } } } } }