예제 #1
0
	/**
	 * @param string $id - session id, must be valid hash
	 * @return string
	 */
	public static function read($id)
	{
		if(!self::isConnected() || !self::isValidId($id))
			return "";

		$sid = self::getPrefix();

		if (!self::$isReadOnly)
		{
			$lockTimeout = 55;//TODO: add setting
			$lockWait = 59000000;//micro seconds = 60 seconds TODO: add setting
			$waitStep = 100;

			if (defined('BX_SECURITY_SESSION_MEMCACHE_EXLOCK') && BX_SECURITY_SESSION_MEMCACHE_EXLOCK)
				$lock = Bitrix\Main\Context::getCurrent()->getRequest()->getRequestedPage();
			else
				$lock = 1;

			while(!self::$connection->add($sid.$id.".lock", $lock, 0, $lockTimeout))
			{
				usleep($waitStep);
				$lockWait -= $waitStep;
				if($lockWait < 0)
				{
					$errorText = 'Unable to get session lock within 60 seconds.';
					if ($lock !== 1)
					{
						$lockedUri = self::$connection->get($sid.$id.".lock");
						if ($lockedUri && $lockedUri != 1)
							$errorText .= sprintf(' Locked by "%s".', self::$connection->get($sid.$id.".lock"));
					}

					CSecuritySession::triggerFatalError($errorText);
				}

				if($waitStep < 1000000)
					$waitStep *= 2;
			}
		}

		self::$sessionId = $id;
		self::$isSessionReady = true;
		$res = self::$connection->get($sid.$id);
		if($res === false)
			$res = "";

		return $res;
	}
예제 #2
0
파일: class.php 프로젝트: Satariall/izurit
 protected function getServiceRequestParamsByType($type)
 {
     $a = array('uid' => $_COOKIE['BX_USER_ID'], 'aid' => \Bitrix\Main\Analytics\Counter::getAccountId(), 'count' => $this->arParams['PAGE_ELEMENT_COUNT'] + 10);
     // random choices
     if ($type == 'any_similar') {
         $possible = array('similar_sell', 'similar_view', 'similar');
         $type = $possible[array_rand($possible)];
     } elseif ($type == 'any_personal') {
         $possible = array('bestsell', 'personal');
         $type = $possible[array_rand($possible)];
     } elseif ($type == 'any') {
         $possible = array('similar_sell', 'similar_view', 'similar', 'bestsell', 'personal');
         $type = $possible[array_rand($possible)];
     }
     // configure
     if ($type == 'bestsell') {
         $a['op'] = 'sim_domain_items';
         $a['type'] = 'order';
         $a['domain'] = Bitrix\Main\Context::getCurrent()->getServer()->getHttpHost();
     } elseif ($type == 'personal') {
         $a['op'] = 'recommend';
     } elseif ($type == 'similar_sell') {
         $a['op'] = 'simitems';
         $a['eid'] = $this->arParams['ID'];
         $a['type'] = 'order';
     } elseif ($type == 'similar_view') {
         $a['op'] = 'simitems';
         $a['eid'] = $this->arParams['ID'];
         $a['type'] = 'view';
     } elseif ($type == 'similar') {
         $a['op'] = 'simitems';
         $a['eid'] = $this->arParams['ID'];
     } else {
         // unkonwn type
     }
     // get iblocks
     $iblocks = array();
     if (!empty($this->arParams['IBLOCK_ID'])) {
         $iblocks = array($this->arParams['IBLOCK_ID']);
     } else {
         $iblockList = array();
         /* catalog */
         $iblockIterator = \Bitrix\Catalog\CatalogIblockTable::getList(array('select' => array('IBLOCK_ID', 'PRODUCT_IBLOCK_ID')));
         while ($iblock = $iblockIterator->fetch()) {
             $iblock['IBLOCK_ID'] = (int) $iblock['IBLOCK_ID'];
             $iblock['PRODUCT_IBLOCK_ID'] = (int) $iblock['PRODUCT_IBLOCK_ID'];
             $iblockList[$iblock['IBLOCK_ID']] = $iblock['IBLOCK_ID'];
             if ($iblock['PRODUCT_IBLOCK_ID'] > 0) {
                 $iblockList[$iblock['PRODUCT_IBLOCK_ID']] = $iblock['PRODUCT_IBLOCK_ID'];
             }
         }
         /* iblock */
         $iblockIterator = \Bitrix\Iblock\IblockSiteTable::getList(array('select' => array('IBLOCK_ID'), 'filter' => array('@IBLOCK_ID' => $iblockList, '=SITE_ID' => $this->getSiteId())));
         while ($iblock = $iblockIterator->fetch()) {
             $iblocks[] = $iblock['IBLOCK_ID'];
         }
     }
     $a['ib'] = join('.', $iblocks);
     return $a;
 }
예제 #3
0
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) {
    die;
}
$GLOBALS['APPLICATION']->AddHeadScript("/bitrix/js/main/amcharts/3.3/amcharts.js");
$GLOBALS['APPLICATION']->AddHeadScript("/bitrix/js/main/amcharts/3.3/pie.js");
global $USER;
CJSCore::Init(array("fx", "date"));
$diskSpace = isset($arResult["diskSpace"]) && strlen($arResult["diskSpace"]) > 0 ? doubleval($arResult["diskSpace"]) : 0;
$diskSpace = $diskSpace < 0 ? 0 : $diskSpace;
$freeSpace = isset($arResult["quota"]) && strlen($arResult["quota"]) > 0 ? doubleval($arResult["quota"]) : 0;
$freeSpace = $freeSpace < 0 ? 0 : $freeSpace;
$personalLibIndex = $arResult['personalLibIndex'];
$isInstalledPull = $arResult["isInstalledPull"];
$currenUserId = $USER->getId();
$isMac = false;
$request = Bitrix\Main\Context::getCurrent()->getRequest();
if (stripos($request->getUserAgent(), "Macintosh") !== false) {
    $isMac = true;
}
$diskEnabled = \Bitrix\Main\Config\Option::get('disk', 'successfully_converted', false) && CModule::includeModule('disk');
$isFirstRunAfterConvert = $diskEnabled && !\CUserOptions::getOption('disk', 'DesktopDiskInstall') && !\CUserOptions::getOption('disk', 'DesktopDiskReInstall') && \CUserOptions::getOption('webdav', 'DesktopDiskInstall');
IncludeModuleLangFile($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/classes/general/file.php");
?>
<script type="text/javascript">
	BX.message({
		'disk_name': "<?php 
echo GetMessageJS('WD_DISK_NAME');
?>
",
		'disk_default': "<?php 
echo GetMessageJS('WD_DISK_JS_ERROR_DEFAULT');
예제 #4
0
 * @var $USER CUser
 */
$arResult = array();
$USER_ID = $USER->GetID();
$arResult = array();
$ttl = defined("BX_COMP_MANAGED_CACHE") ? 2592000 : 600;
$extEnabled = IsModuleInstalled('extranet');
$cache_id = 'user_mobile_menu_' . $USER_ID . '_' . $extEnabled . '_' . LANGUAGE_ID . '_' . CSite::GetNameFormat(false);
$cache_dir = '/bx/user_mobile_menu/user_' . $USER_ID;
$obCache = new CPHPCache();
if ($obCache->InitCache($ttl, $cache_id, $cache_dir)) {
    $arResult = $obCache->GetVars();
} else {
    global $CACHE_MANAGER;
    $CACHE_MANAGER->StartTagCache($cache_dir);
    $host = Bitrix\Main\Context::getCurrent()->getServer()->getHttpHost();
    $host = preg_replace("/:(80|443)\$/", "", $host);
    $arResult["HOST"] = htmlspecialcharsbx($host);
    $arResult["USER"] = $USER->GetByID($USER_ID)->GetNext();
    $arResult["USER_FULL_NAME"] = $arResult["USER"]["FULL_NAME"] = CUser::FormatName(CSite::GetNameFormat(false), array("NAME" => $USER->GetFirstName(), "LAST_NAME" => $USER->GetLastName(), "SECOND_NAME" => $USER->GetSecondName(), "LOGIN" => $USER->GetLogin()));
    $arResult["USER"]["AVATAR"] = false;
    if ($arResult["USER"]["PERSONAL_PHOTO"]) {
        $imageFile = CFile::GetFileArray($arResult["USER"]["PERSONAL_PHOTO"]);
        if ($imageFile !== false) {
            $arResult["USER"]["AVATAR"] = CFile::ResizeImageGet($imageFile, array("width" => 1200, "height" => 1020), BX_RESIZE_IMAGE_EXACT, false, false, false, 50);
        }
    }
    $arSGGroup = array();
    $arExtSGGroup = array();
    $arExtSGGroupTmp = array();
    if (CModule::IncludeModule("socialnetwork")) {
예제 #5
0
 /**
  * Finds match between requestURL and on of the url templates.
  *
  * <p>Lets using the engine object and greedy templates.</p>
  * @param string $folder404
  * @param array[string]string $arUrlTemplates
  * @param array[string]string &$arVariables
  * @param string|bool $requestURL
  * @return string
  *
  */
 public function guessComponentPath($folder404, $arUrlTemplates, &$arVariables, $requestURL = false)
 {
     if (!isset($arVariables) || !is_array($arVariables)) {
         $arVariables = array();
     }
     if ($requestURL === false) {
         $requestURL = Bitrix\Main\Context::getCurrent()->getRequest()->getRequestedPage();
     }
     $folder404 = str_replace("\\", "/", $folder404);
     if ($folder404 != "/") {
         $folder404 = "/" . trim($folder404, "/ \t\n\r\v") . "/";
     }
     //SEF base URL must match curent URL (several components on the same page)
     if (strpos($requestURL, $folder404) !== 0) {
         return false;
     }
     $currentPageUrl = substr($requestURL, strlen($folder404));
     $pageCandidates = array();
     $arUrlTemplates = $this->sortUrlTemplates($arUrlTemplates, $bHasGreedyPartsInTemplates);
     if ($bHasGreedyPartsInTemplates && is_callable($this->resolveCallback)) {
         foreach ($arUrlTemplates as $pageID => $pageTemplate) {
             $arVariablesTmp = $arVariables;
             if ($this->__CheckPath4Template($pageTemplate, $currentPageUrl, $arVariablesTmp)) {
                 if ($this->hasNoVariables($pageTemplate)) {
                     $arVariables = $arVariablesTmp;
                     return $pageID;
                 } else {
                     $pageCandidates[$pageID] = $arVariablesTmp;
                 }
             }
         }
     } else {
         foreach ($arUrlTemplates as $pageID => $pageTemplate) {
             if ($this->__CheckPath4Template($pageTemplate, $currentPageUrl, $arVariables)) {
                 return $pageID;
             }
         }
     }
     if (!empty($pageCandidates) && is_callable($this->resolveCallback)) {
         return call_user_func_array($this->resolveCallback, array($this, $pageCandidates, &$arVariables));
     }
     return false;
 }
예제 #6
0
파일: main.php 프로젝트: ASDAFF/entask.ru
 function PrologActions()
 {
     /** @global CMain $APPLICATION */
     global $APPLICATION, $USER;
     if (defined("BX_CHECK_SHORT_URI") && BX_CHECK_SHORT_URI) {
         if ($arUri = CBXShortUri::GetUri(Bitrix\Main\Context::getCurrent()->getRequest()->getDecodedUri())) {
             CBXShortUri::SetLastUsed($arUri["ID"]);
             if (CModule::IncludeModule("statistic")) {
                 CStatEvent::AddCurrent("short_uri_redirect", "", "", "", "", $arUri["URI"], "N", SITE_ID);
             }
             LocalRedirect($arUri["URI"], true, CBXShortUri::GetHttpStatusCodeText($arUri["STATUS"]));
             die;
         }
     }
     if (COption::GetOptionString("main", "buffer_content", "Y") == "Y" && (!defined("BX_BUFFER_USED") || BX_BUFFER_USED !== true)) {
         ob_start(array(&$APPLICATION, "EndBufferContent"));
         $APPLICATION->buffered = true;
         define("BX_BUFFER_USED", true);
         register_shutdown_function(create_function('', 'define("BX_BUFFER_SHUTDOWN", true); while(@ob_end_flush());'));
     }
     //session expander
     if (COption::GetOptionString("main", "session_expand", "Y") != "N" && (!defined("BX_SKIP_SESSION_EXPAND") || BX_SKIP_SESSION_EXPAND === false)) {
         $arPolicy = $USER->GetSecurityPolicy();
         $phpSessTimeout = ini_get("session.gc_maxlifetime");
         if ($arPolicy["SESSION_TIMEOUT"] > 0) {
             $sessTimeout = min($arPolicy["SESSION_TIMEOUT"] * 60, $phpSessTimeout);
         } else {
             $sessTimeout = $phpSessTimeout;
         }
         $cookie_prefix = COption::GetOptionString('main', 'cookie_name', 'BITRIX_SM');
         $salt = $_COOKIE[$cookie_prefix . '_UIDH'] . "|" . $_SERVER["REMOTE_ADDR"] . "|" . @filemtime($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/classes/general/version.php") . "|" . LICENSE_KEY . "|" . CMain::GetServerUniqID();
         $key = md5(bitrix_sessid() . $salt);
         $bShowMess = $USER->IsAuthorized() && COption::GetOptionString("main", "session_show_message", "Y") != "N";
         CUtil::InitJSCore(array('ajax', 'ls'));
         $jsMsg = '<script type="text/javascript">' . "\n" . ($bShowMess ? 'bxSession.mess.messSessExpired = \'' . CUtil::JSEscape(GetMessage("MAIN_SESS_MESS", array("#TIMEOUT#" => round($sessTimeout / 60)))) . '\';' . "\n" : '') . 'bxSession.Expand(' . $sessTimeout . ', \'' . bitrix_sessid() . '\', ' . ($bShowMess ? 'true' : 'false') . ', \'' . $key . '\');' . "\n" . '</script>';
         $APPLICATION->AddHeadScript('/bitrix/js/main/session.js');
         $APPLICATION->AddAdditionalJS($jsMsg);
         $_SESSION["BX_SESSION_COUNTER"] = intval($_SESSION["BX_SESSION_COUNTER"]) + 1;
         if (!defined("BX_SKIP_SESSION_TERMINATE_TIME")) {
             $_SESSION["BX_SESSION_TERMINATE_TIME"] = time() + $sessTimeout;
         }
     }
     //user auto time zone via js cookies
     if (CTimeZone::Enabled() && (!defined("BX_SKIP_TIMEZONE_COOKIE") || BX_SKIP_TIMEZONE_COOKIE === false)) {
         CTimeZone::SetAutoCookie();
     }
     // check user options set via cookie
     if ($USER->IsAuthorized()) {
         $cookieName = COption::GetOptionString("main", "cookie_name", "BITRIX_SM") . "_LAST_SETTINGS";
         if (!empty($_COOKIE[$cookieName])) {
             CUserOptions::SetCookieOptions($cookieName);
         }
     }
     foreach (GetModuleEvents("main", "OnProlog", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent);
     }
 }
예제 #7
0
 public static function CheckUri()
 {
     if ($arUri = static::GetUri(Bitrix\Main\Context::getCurrent()->getRequest()->getDecodedUri())) {
         static::SetLastUsed($arUri["ID"]);
         if (CModule::IncludeModule("statistic")) {
             CStatEvent::AddCurrent("short_uri_redirect", "", "", "", "", $arUri["URI"], "N", SITE_ID);
         }
         LocalRedirect($arUri["URI"], true, static::GetHttpStatusCodeText($arUri["STATUS"]));
         return true;
     }
     return false;
 }
예제 #8
0
파일: ajax.php 프로젝트: rasuldev/torino
use Bitrix\Main\Web\Json;
use Bitrix\Main\Localization\Loc;
Loc::loadMessages(__FILE__);
global $USER;
$answer = array("success" => false, "message" => Loc::getMessage("main_app_passwords_ajax_error"));
if (!$USER->IsAuthorized()) {
    $answer["message"] = Loc::getMessage("main_app_passwords_ajax_error_auth");
    echo Json::encode($answer);
    die;
}
if (!check_bitrix_sessid()) {
    $answer["message"] = Loc::getMessage("main_app_passwords_ajax_error_sess");
    echo Json::encode($answer);
    die;
}
$context = Bitrix\Main\Context::getCurrent();
$request = $context->getRequest();
if ($request->isPost()) {
    $post = $request->getPostList()->toArray();
    $post = Main\Text\Encoding::convertEncodingArray($post, "UTF-8", $context->getCulture()->getCharset());
    if ($post["action"] == "delete" && ($id = intval($post["ID"])) > 0) {
        //deleting the application password
        if (ApplicationPasswordTable::getRow(array("filter" => array("=ID" => $id, "=USER_ID" => $USER->GetID()))) !== null) {
            $result = ApplicationPasswordTable::delete($id);
            if ($result->isSuccess()) {
                $answer["success"] = true;
                $answer["message"] = Loc::getMessage("main_app_passwords_ajax_deleted");
            } else {
                $answer["message"] = implode("<br>", $result->getErrorMessages());
            }
        }
예제 #9
0
<?php

use Bitrix\Disk\FocusController;
define("STOP_STATISTICS", true);
define("PUBLIC_AJAX_MODE", true);
define("NO_KEEP_STATISTIC", "Y");
define("NO_AGENT_STATISTIC", "Y");
define("DisableEventsCheck", true);
$siteId = isset($_REQUEST['SITE_ID']) && is_string($_REQUEST['SITE_ID']) ? $_REQUEST['SITE_ID'] : '';
$siteId = substr(preg_replace('/[^a-z0-9_]/i', '', $siteId), 0, 2);
if (!empty($siteId) && is_string($siteId)) {
    define('SITE_ID', $siteId);
}
require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php";
if (!\Bitrix\Main\Loader::includeModule('disk')) {
    die;
}
$action = Bitrix\Main\Context::getCurrent()->getRequest()->getQuery('action');
if (!$action) {
    die;
}
$docController = new FocusController();
$docController->setActionName($action)->exec();
예제 #10
0
 protected function getServiceRequestParamsByType($type)
 {
     $a = array('uid' => $_COOKIE['BX_USER_ID'], 'aid' => \Bitrix\Main\Analytics\Counter::getAccountId(), 'count' => $this->arParams['PAGE_ELEMENT_COUNT'] + 10);
     // random choices
     if ($type == 'any_similar') {
         $possible = array('similar_sell', 'similar_view', 'similar');
         $type = $possible[array_rand($possible)];
     } elseif ($type == 'any_personal') {
         $possible = array('bestsell', 'personal');
         $type = $possible[array_rand($possible)];
     } elseif ($type == 'any') {
         $possible = array('similar_sell', 'similar_view', 'similar', 'bestsell', 'personal');
         $type = $possible[array_rand($possible)];
     }
     // configure
     if ($type == 'bestsell') {
         $a['op'] = 'sim_domain_items';
         $a['type'] = 'order';
         $a['domain'] = Bitrix\Main\Context::getCurrent()->getServer()->getHttpHost();
     } elseif ($type == 'personal') {
         $a['op'] = 'recommend';
     } elseif ($type == 'similar_sell') {
         $a['op'] = 'simitems';
         $a['eid'] = $this->arParams['ID'];
         $a['type'] = 'order';
     } elseif ($type == 'similar_view') {
         $a['op'] = 'simitems';
         $a['eid'] = $this->arParams['ID'];
         $a['type'] = 'view';
     } elseif ($type == 'similar') {
         $a['op'] = 'simitems';
         $a['eid'] = $this->arParams['ID'];
     } else {
         // unkonwn type
     }
     return $a;
 }