Пример #1
0
    function SaveConfig($arServerList)
    {
        self::$arList = false;
        $isOnline = false;
        $content = '<' . '?
define("BX_MEMCACHE_CLUSTER", "' . EscapePHPString(CMain::GetServerUniqID()) . '");
$arList = array(
';
        $defGroup = 1;
        $arGroups = array();
        $rsGroups = CClusterGroup::GetList(array("ID" => "DESC"));
        while ($arGroup = $rsGroups->Fetch()) {
            $defGroup = $arGroups[$arGroup["ID"]] = intval($arGroup["ID"]);
        }
        foreach ($arServerList as $i => $arServer) {
            $isOnline |= $arServer["STATUS"] == "ONLINE";
            $GROUP_ID = intval($arServer["GROUP_ID"]);
            if (!array_key_exists($arServer["GROUP_ID"], $arGroups)) {
                $GROUP_ID = $defGroup;
            }
            $content .= "\t" . intval($i) . " => array(\n";
            $content .= "\t\t'ID' => \"" . EscapePHPString($arServer["ID"]) . "\",\n";
            $content .= "\t\t'GROUP_ID' => " . $GROUP_ID . ",\n";
            $content .= "\t\t'HOST' => \"" . EscapePHPString($arServer["HOST"]) . "\",\n";
            $content .= "\t\t'PORT' => " . intval($arServer["PORT"]) . ",\n";
            $content .= "\t\t'WEIGHT' => " . intval($arServer["WEIGHT"]) . ",\n";
            if ($arServer["STATUS"] == "ONLINE") {
                $content .= "\t\t'STATUS' => \"ONLINE\",\n";
            } elseif ($arServer["STATUS"] == "OFFLINE") {
                $content .= "\t\t'STATUS' => \"OFFLINE\",\n";
            } else {
                $content .= "\t\t'STATUS' => \"READY\",\n";
            }
            $content .= "\t),\n";
        }
        $content .= ');
?' . '>';
        file_put_contents($_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/cluster/memcache.php", $content);
        bx_accelerator_reset();
        self::$systemConfigurationUpdate = null;
        $cache = \Bitrix\Main\Config\Configuration::getValue('cache');
        if ($isOnline) {
            if (!is_array($cache) || !isset($cache['type']) || !is_array($cache['type']) || !isset($cache['type']['class_name']) || !$cache['type']['class_name'] === 'CPHPCacheMemcacheCluster') {
                \Bitrix\Main\Config\Configuration::setValue('cache', array('type' => array('class_name' => 'CPHPCacheMemcacheCluster', 'extension' => 'memcache', 'required_file' => 'modules/cluster/classes/general/memcache_cache.php')));
                self::$systemConfigurationUpdate = true;
            }
        } else {
            if (is_array($cache) && isset($cache['type']) && is_array($cache['type']) && isset($cache['type']['class_name']) && $cache['type']['class_name'] === 'CPHPCacheMemcacheCluster') {
                \Bitrix\Main\Config\Configuration::setValue('cache', null);
                self::$systemConfigurationUpdate = false;
            }
        }
    }
Пример #2
0
 public static function onBeforeAdd(Entity\Event $event)
 {
     $result = new Entity\EventResult();
     $data = $event->getParameter("fields");
     if (isset($data["USER_ID"]) && isset($data['PASSWORD'])) {
         $salt = md5(\CMain::GetServerUniqID() . uniqid());
         $password = $salt . md5($salt . $data['PASSWORD']);
         $modified = array('PASSWORD' => $password);
         $user = Main\UserTable::getRowById($data["USER_ID"]);
         if ($user !== null) {
             $realm = defined('BX_HTTP_AUTH_REALM') ? BX_HTTP_AUTH_REALM : "Bitrix Site Manager";
             $digest = md5($user["LOGIN"] . ':' . $realm . ':' . $data['PASSWORD']);
             $modified['DIGEST_PASSWORD'] = $digest;
         }
         $result->modifyFields($modified);
     }
     return $result;
 }
Пример #3
0
	public static function SaveConfig($arServerList)
	{
		self::$arList = false;
		$content = '<'.'?
// define("BX_MEMCACHE_CLUSTER", "'.EscapePHPString(CMain::GetServerUniqID()).'");
$arList = array(
';
		$defGroup = 1;
		$arGroups = array();
		$rsGroups = CClusterGroup::GetList(array("ID" => "DESC"));
		while($arGroup = $rsGroups->Fetch())
			$defGroup = $arGroups[$arGroup["ID"]] = intval($arGroup["ID"]);

		foreach($arServerList as $i => $arServer)
		{
			$GROUP_ID = intval($arServer["GROUP_ID"]);
			if(!array_key_exists($arServer["GROUP_ID"], $arGroups))
				$GROUP_ID = $defGroup;

			$content .= "\t".intval($i)." => array(\n";
			$content .= "\t\t'ID' => \"".EscapePHPString($arServer["ID"])."\",\n";
			$content .= "\t\t'GROUP_ID' => ".$GROUP_ID.",\n";
			$content .= "\t\t'HOST' => \"".EscapePHPString($arServer["HOST"])."\",\n";
			$content .= "\t\t'PORT' => ".intval($arServer["PORT"]).",\n";
			$content .= "\t\t'WEIGHT' => ".intval($arServer["WEIGHT"]).",\n";
			if($arServer["STATUS"] == "ONLINE")
				$content .= "\t\t'STATUS' => \"ONLINE\",\n";
			elseif($arServer["STATUS"] == "OFFLINE")
				$content .= "\t\t'STATUS' => \"OFFLINE\",\n";
			else
				$content .= "\t\t'STATUS' => \"READY\",\n";
			$content .= "\t),\n";
		}

		$content .= ');
?'.'>';
		file_put_contents(
			$_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/cluster/memcache.php"
			,$content
		);
	}
Пример #4
0
 /**
  * @return void
  *
  */
 public static function unlock()
 {
     global $DB;
     $DB->Query("SELECT RELEASE_LOCK('" . CMain::GetServerUniqID() . "_cdn') as L");
 }
Пример #5
0
	if(count($arResult["ERRORS"]) > 0)
	{
		if(COption::GetOptionString("main", "event_log_register_fail", "N") === "Y")
		{
			$arError = $arResult["ERRORS"];
			foreach($arError as $key => $error)
				if(intval($key) == 0 && $key !== 0) 
					$arError[$key] = str_replace("#FIELD_NAME#", '"'.$key.'"', $error);
			CEventLog::Log("SECURITY", "USER_REGISTER_FAIL", "main", false, implode("<br>", $arError));
		}
	}
	else // if there;s no any errors - create user
	{
		$bConfirmReq = COption::GetOptionString("main", "new_user_registration_email_confirmation", "N") == "Y";

		$arResult['VALUES']["CHECKWORD"] = md5(CMain::GetServerUniqID().uniqid());
		$arResult['VALUES']["~CHECKWORD_TIME"] = $DB->CurrentTimeFunction();
		$arResult['VALUES']["ACTIVE"] = $bConfirmReq? "N": "Y";
		$arResult['VALUES']["CONFIRM_CODE"] = $bConfirmReq? randString(8): "";
		$arResult['VALUES']["LID"] = SITE_ID;

		$arResult['VALUES']["USER_IP"] = $_SERVER["REMOTE_ADDR"];
		$arResult['VALUES']["USER_HOST"] = @gethostbyaddr($_SERVER["REMOTE_ADDR"]);
		
		if($arResult["VALUES"]["AUTO_TIME_ZONE"] <> "Y" && $arResult["VALUES"]["AUTO_TIME_ZONE"] <> "N")
			$arResult["VALUES"]["AUTO_TIME_ZONE"] = "";

		$def_group = COption::GetOptionString("main", "new_user_registration_def_group", "");
		if($def_group != "")
			$arResult['VALUES']["GROUP_ID"] = explode(",", $def_group);
Пример #6
0
 function Update($ID, $arFields)
 {
     global $DB, $USER_FIELD_MANAGER;
     $ID = intval($ID);
     if (!$this->CheckFields($arFields, $ID)) {
         $Result = false;
         $arFields["RESULT_MESSAGE"] =& $this->LAST_ERROR;
     } else {
         unset($arFields["ID"]);
         if (is_set($arFields, "ACTIVE") && $arFields["ACTIVE"] != "Y") {
             $arFields["ACTIVE"] = "N";
         }
         if (is_set($arFields, "PERSONAL_GENDER") && ($arFields["PERSONAL_GENDER"] != "M" && $arFields["PERSONAL_GENDER"] != "F")) {
             $arFields["PERSONAL_GENDER"] = "";
         }
         if (is_set($arFields, "PASSWORD")) {
             $original_pass = $arFields["PASSWORD"];
             $salt = randString(8, array("abcdefghijklnmopqrstuvwxyz", "ABCDEFGHIJKLNMOPQRSTUVWXYZ", "0123456789", ",.<>/?;:[]{}\\|~!@#\$%^&*()-_+="));
             $arFields["PASSWORD"] = $salt . md5($salt . $arFields["PASSWORD"]);
             $rUser = CUser::GetByID($ID);
             if ($arUser = $rUser->Fetch()) {
                 if ($arUser["PASSWORD"] != $arFields["PASSWORD"]) {
                     $DB->Query("DELETE FROM b_user_stored_auth WHERE USER_ID=" . $ID);
                 }
             }
             if (COption::GetOptionString("main", "event_log_password_change", "N") === "Y") {
                 CEventLog::Log("SECURITY", "USER_PASSWORD_CHANGED", "main", $ID);
             }
             //$arFields["STORED_HASH"] = CUser::GetPasswordHash($arFields["PASSWORD"]);
         }
         unset($arFields["STORED_HASH"]);
         $checkword = '';
         if (!is_set($arFields, "CHECKWORD")) {
             if (is_set($arFields, "PASSWORD") || is_set($arFields, "EMAIL") || is_set($arFields, "LOGIN") || is_set($arFields, "ACTIVE")) {
                 $salt = randString(8);
                 $checkword = md5(CMain::GetServerUniqID() . uniqid());
                 $arFields["CHECKWORD"] = $salt . md5($salt . $checkword);
             }
         } else {
             $salt = randString(8);
             $checkword = $arFields["CHECKWORD"];
             $arFields["CHECKWORD"] = $salt . md5($salt . $checkword);
         }
         if (is_set($arFields, "CHECKWORD") && !is_set($arFields, "CHECKWORD_TIME")) {
             $arFields["~CHECKWORD_TIME"] = $DB->CurrentTimeFunction();
         }
         if (is_set($arFields, "WORK_COUNTRY")) {
             $arFields["WORK_COUNTRY"] = IntVal($arFields["WORK_COUNTRY"]);
         }
         if (is_set($arFields, "PERSONAL_COUNTRY")) {
             $arFields["PERSONAL_COUNTRY"] = IntVal($arFields["PERSONAL_COUNTRY"]);
         }
         if (array_key_exists("PERSONAL_PHOTO", $arFields) && is_array($arFields["PERSONAL_PHOTO"]) && (!array_key_exists("MODULE_ID", $arFields["PERSONAL_PHOTO"]) || strlen($arFields["PERSONAL_PHOTO"]["MODULE_ID"]) <= 0)) {
             $arFields["PERSONAL_PHOTO"]["MODULE_ID"] = "main";
         }
         CFile::SaveForDB($arFields, "PERSONAL_PHOTO", "main");
         if (array_key_exists("WORK_LOGO", $arFields) && is_array($arFields["WORK_LOGO"]) && (!array_key_exists("MODULE_ID", $arFields["WORK_LOGO"]) || strlen($arFields["WORK_LOGO"]["MODULE_ID"]) <= 0)) {
             $arFields["WORK_LOGO"]["MODULE_ID"] = "main";
         }
         CFile::SaveForDB($arFields, "WORK_LOGO", "main");
         $strUpdate = $DB->PrepareUpdate("b_user", $arFields);
         if (!is_set($arFields, "TIMESTAMP_X")) {
             $strUpdate .= ($strUpdate != "" ? "," : "") . " TIMESTAMP_X = " . $DB->GetNowFunction();
         }
         $strSql = "UPDATE b_user SET " . $strUpdate . " WHERE ID=" . $ID;
         $DB->Query($strSql, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__);
         $USER_FIELD_MANAGER->Update("USER", $ID, $arFields);
         if (COption::GetOptionString("main", "event_log_user_edit", "N") === "Y") {
             $res_log["user"] = $arFields["NAME"] != "" || $arFields["LAST_NAME"] != "" ? trim($arFields["NAME"] . " " . $arFields["LAST_NAME"]) : $arFields["LOGIN"];
             CEventLog::Log("SECURITY", "USER_EDIT", "main", $ID, serialize($res_log));
         }
         if (is_set($arFields, "GROUP_ID")) {
             CUser::SetUserGroup($ID, $arFields["GROUP_ID"]);
         }
         //update digest hash for http digest authorization
         if (is_set($arFields, "PASSWORD") && COption::GetOptionString('main', 'use_digest_auth', 'N') == 'Y') {
             CUser::UpdateDigest($arUser["ID"], $original_pass);
         }
         $Result = true;
         $arFields["CHECKWORD"] = $checkword;
         //update session information and cache for current user
         global $USER;
         if (is_object($USER) && $USER->GetID() == $ID) {
             static $arSessFields = array('LOGIN' => 'LOGIN', 'EMAIL' => 'EMAIL', 'FIRST_NAME' => 'NAME', 'SECOND_NAME' => 'SECOND_NAME', 'LAST_NAME' => 'LAST_NAME', 'AUTO_TIME_ZONE' => 'AUTO_TIME_ZONE', 'TIME_ZONE' => 'TIME_ZONE');
             foreach ($arSessFields as $key => $val) {
                 if (isset($arFields[$val])) {
                     $USER->SetParam($key, $arFields[$val]);
                 }
             }
             $name = $USER->GetParam("FIRST_NAME");
             $last_name = $USER->GetParam("LAST_NAME");
             $USER->SetParam("NAME", $name . ($name == '' || $last_name == '' ? "" : " ") . $last_name);
             //cache for GetByID()
             self::$CURRENT_USER = false;
         }
     }
     $arFields["ID"] = $ID;
     $arFields["RESULT"] =& $Result;
     $events = GetModuleEvents("main", "OnAfterUserUpdate");
     while ($arEvent = $events->Fetch()) {
         ExecuteModuleEventEx($arEvent, array(&$arFields));
     }
     if (defined("BX_COMP_MANAGED_CACHE")) {
         $GLOBALS["CACHE_MANAGER"]->ClearByTag("USER_CARD_" . intval($ID / 100));
         $GLOBALS["CACHE_MANAGER"]->ClearByTag("USER_CARD");
     }
     return $Result;
 }
Пример #7
0
 $arSelectParams = array("FIELDS" => array("PERSONAL_PHOTO"));
 if ($bExtranetInstalled) {
     $arSelectParams["SELECT"] = array("UF_DEPARTMENT");
 }
 $dbuser = CUser::GetList($by = array("last_name" => "asc", "name" => "asc"), $order = false, array("ID" => $USER->GetID()), $arSelectParams);
 $curUser = $dbuser->Fetch();
 $img_src = "";
 if (intval($curUser["PERSONAL_PHOTO"]) > 0) {
     $arImage = CFile::ResizeImageGet($curUser["PERSONAL_PHOTO"], array("width" => 64, "height" => 64), BX_RESIZE_IMAGE_EXACT, false);
     if ($arImage && strlen($arImage["src"]) > 0) {
         $img_src = $arImage["src"];
     }
 }
 $bExtranetUser = $bExtranetInstalled && intval($curUser["UF_DEPARTMENT"][0]) <= 0;
 if (!$bExtranetUser || CMobile::getApiVersion() >= 9 || intval($_GET["api_version"]) >= 9) {
     $data = array("status" => "success", "page_mark" => "<!--bitrix_mobile_app-->", "sessid_md5" => bitrix_sessid(), "target" => md5($USER->GetID() . CMain::GetServerUniqID()), "photoUrl" => $img_src, "useModernStyle" => true, "appmap" => array("main" => array("url" => $params["START_PAGE"] ? $params["START_PAGE"] : "", "bx24ModernStyle" => true), "menu" => array("url" => $params["MENU_PAGE"] ? $params["MENU_PAGE"] : "")));
     if (\Bitrix\MobileApp\Mobile::getInstance()->getApiVersion() >= 10 && strlen($params["CHAT_PAGE"]) > 0) {
         $data["appmap"]["right"] = array("url" => $params["CHAT_PAGE"]);
     }
     if ($bExtranetUser) {
         $rsSites = CSite::GetByID(CExtranet::GetExtranetSiteID());
         if (($arExtranetSite = $rsSites->Fetch()) && $arExtranetSite["ACTIVE"] != "N") {
             $data["whiteList"] = array($arExtranetSite["DIR"] . "mobile/");
             $data["appmap"] = array("main" => array("url" => $arExtranetSite["DIR"] . "mobile/index.php", "bx24ModernStyle" => true), "menu" => array("url" => $arExtranetSite["DIR"] . "mobile/left.php"), "right" => array("url" => $arExtranetSite["DIR"] . "mobile/im/right.php"));
             if (\Bitrix\MobileApp\Mobile::getInstance()->getApiVersion() >= 10) {
                 $data["appmap"]["right"] = array("url" => $arExtranetSite["DIR"] . "mobile/im/right.php");
             }
         }
     }
     if (toUpper(SITE_CHARSET) != "UTF-8") {
         $data = $APPLICATION->ConvertCharsetArray($data, SITE_CHARSET, "utf-8");
Пример #8
0
 /**
  * <p>Функция добавляет нового пользователя. При успешном выполнении возвращает ID нового пользователя, в противном случае - вернет "false", а в свойстве LAST_ERROR объекта будет содержаться текст ошибки. <br><br><b>CUser::Add()</b> можно вызывать только как метод инициализированного объекта, а не как статический метод класса CUser. </p>
  *
  *
  *
  *
  * @param array $fields  Массив значений полей, в качестве ключей данного массива
  * допустимо использовать: <ul> <li> <b>LOGIN</b><font color="red">*</font> - логин (имя
  * входа) </li> <li> <b>NAME</b> - имя пользователя </li> <li> <b>LAST_NAME</b> - фамилия
  * пользователя </li> <li> <b>SECOND_NAME</b> - отчество пользователя </li> <li>
  * <b>EMAIL</b><font color="red">*</font> - E-Mail адрес пользователя </li> <li> <b>PASSWORD</b><font
  * color="red">*</font> - пароль пользователя </li> <li> <b>CONFIRM_PASSWORD</b><font
  * color="red">*</font> - подтверждение пароля (должно быть равным <b>PASSWORD</b>)
  * </li> <li> <b>GROUP_ID</b> - массив ID групп к которым будет приписан
  * пользователь </li> <li> <b>ACTIVE</b> - флаг активности пользователя [Y|N] </li>
  * <li> <b>LID</b> - ID сайта по умолчанию для уведомлений </li> <li> <b>ADMIN_NOTES</b> -
  * заметки администратора </li> <li> <b>XML_ID</b> - ID пользователя для связи с
  * внешними источниками (например, ID пользователя в какой-либо
  * внешний базе) </li> <li> <b>EXTERNAL_AUTH_ID</b> - код источника [link=89611]внешней
  * авторизации[/link] </li> <li> <b>PERSONAL_PROFESSION</b> - наименование профессии </li>
  * <li> <b>PERSONAL_WWW</b> - персональная WWW-страница </li> <li> <b>PERSONAL_ICQ</b> - ICQ </li> <li>
  * <b>PERSONAL_GENDER</b> - пол ["M" - мужчина; "F" - женщина] </li> <li> <b>PERSONAL_BIRTHDAY</b> -
  * дата рождения в формате текущего сайта (или текущего языка для
  * административной части) </li> <li> <b>PERSONAL_PHOTO</b> - массив описывающий
  * фотографию, допустимы следующие ключи этого массива: <ul> <li> <b>name</b>
  * - имя файла </li> <li> <b>size</b> - размер файла </li> <li> <b>tmp_name</b> - временный
  * путь на сервере </li> <li> <b>type</b> - тип загружаемого файла </li> <li> <b>del</b> -
  * если значение равно "Y", то изображение будет удалено </li> <li>
  * <b>MODULE_ID</b> - идентификатор главного модуля - "main" </li> </ul> </li> <li>
  * <b>PERSONAL_PHONE</b> - телефон </li> <li> <b>PERSONAL_FAX</b> - факс </li> <li> <b>PERSONAL_MOBILE</b> -
  * мобильный телефон </li> <li> <b>PERSONAL_PAGER</b> - пэйджер </li> <li> <b>PERSONAL_STREET</b> -
  * улица, дом </li> <li> <b>PERSONAL_MAILBOX</b> - почтовый ящик </li> <li> <b>PERSONAL_CITY</b> -
  * город </li> <li> <b>PERSONAL_STATE</b> - область / край </li> <li> <b>PERSONAL_ZIP</b> - индекс
  * </li> <li> <b>PERSONAL_COUNTRY</b> - страна </li> <li> <b>PERSONAL_NOTES</b> - личные заметки </li>
  * <li> <b>WORK_COMPANY</b> - наименование компании </li> <li> <b>WORK_DEPARTMENT</b> -
  * департамент / отдел </li> <li> <b>WORK_POSITION</b> - должность </li> <li> <b>WORK_WWW</b> -
  * WWW-страница компании </li> <li> <b>WORK_PHONE</b> - рабочий телефон </li> <li>
  * <b>WORK_FAX</b> - рабочий факс </li> <li> <b>WORK_PAGER</b> - рабочий пэйджер </li> <li>
  * <b>WORK_STREET</b> - улица, дом компании </li> <li> <b>WORK_MAILBOX</b> - почтовый ящик
  * компании </li> <li> <b>WORK_CITY</b> - город компании </li> <li> <b>WORK_STATE</b> - область
  * / край компании </li> <li> <b>WORK_ZIP</b> - индекс компании </li> <li> <b>WORK_COUNTRY</b> -
  * страна компании </li> <li> <b>WORK_PROFILE</b> - направления деятельности
  * компании </li> <li> <b>WORK_LOGO</b> - массив описывающий логотип компании,
  * допустимы следующие ключи этого массива: <ul> <li> <b>name</b> - имя файла
  * </li> <li> <b>size</b> - размер файла </li> <li> <b>tmp_name</b> - временный путь на
  * сервере </li> <li> <b>type</b> - тип загружаемого файла </li> <li> <b>del</b> - если
  * значение равно "Y", то изображение будет удалено </li> <li> <b>MODULE_ID</b> -
  * идентификатор главного модуля - "main" </li> </ul> </li> <li> <b>WORK_NOTES</b> -
  * заметки касаемо работы пользователя </li> </ul> <font color="red">*</font> -
  * обязательные поля.
  *
  *
  *
  * @return mixed 
  *
  *
  * <h4>Example</h4> 
  * <pre>
  * &lt;?
  * // создадим массив описывающий изображение 
  * // находящееся в файле на сервере
  * $arIMAGE = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/images/photo.gif");
  * $arIMAGE["MODULE_ID"] = "main";
  * 
  * $user = new CUser;
  * $arFields = Array(
  *   "NAME"              =&gt; "Сергей",
  *   "LAST_NAME"         =&gt; "Иванов",
  *   "EMAIL"             =&gt; "*****@*****.**",
  *   "LOGIN"             =&gt; "ivan",
  *   "LID"               =&gt; "ru",
  *   "ACTIVE"            =&gt; "Y",
  *   "GROUP_ID"          =&gt; array(10,11),
  *   "PASSWORD"          =&gt; "123456",
  *   "CONFIRM_PASSWORD"  =&gt; "123456",
  *   "PERSONAL_PHOTO"    =&gt; $arIMAGE
  * );
  * 
  * $ID = <b>$user-&gt;Add</b>($arFields);
  * if (intval($ID) &gt; 0)
  *     echo "Пользователь успешно добавлен.";
  * else
  *     echo $user-&gt;LAST_ERROR;
  * ?&gt;
  * </pre>
  *
  *
  *
  * <h4>See Also</h4> 
  * <ul> <li> <a href="http://dev.1c-bitrix.ru/api_help/main/reference/cuser/index.php#flds">Поля CUser</a> </li> <li>
  * <a href="http://dev.1c-bitrix.ru/api_help/main/reference/cuser/update.php">CUser::Update</a> </li> <li> <a
  * href="http://dev.1c-bitrix.ru/api_help/main/reference/cuser/delete.php">CUser::Delete</a> </li> </ul></b<a
  * name="examples"></a>
  *
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/main/reference/cuser/add.php
  * @author Bitrix
  */
 public function Add($arFields)
 {
     /** @global CUserTypeManager $USER_FIELD_MANAGER */
     global $DB, $USER_FIELD_MANAGER, $CACHE_MANAGER;
     $ID = 0;
     if (!$this->CheckFields($arFields)) {
         $Result = false;
         $arFields["RESULT_MESSAGE"] =& $this->LAST_ERROR;
     } else {
         unset($arFields["ID"]);
         if (is_set($arFields, "ACTIVE") && $arFields["ACTIVE"] != "Y") {
             $arFields["ACTIVE"] = "N";
         }
         if ($arFields["PERSONAL_GENDER"] == "NOT_REF" || $arFields["PERSONAL_GENDER"] != "M" && $arFields["PERSONAL_GENDER"] != "F") {
             $arFields["PERSONAL_GENDER"] = "";
         }
         $original_pass = $arFields["PASSWORD"];
         $salt = randString(8);
         $arFields["PASSWORD"] = $salt . md5($salt . $arFields["PASSWORD"]);
         unset($arFields["STORED_HASH"]);
         $salt = randString(8);
         $checkword = $arFields["CHECKWORD"] == '' ? md5(CMain::GetServerUniqID() . uniqid()) : $arFields["CHECKWORD"];
         $arFields["CHECKWORD"] = $salt . md5($salt . $checkword);
         $arFields["~CHECKWORD_TIME"] = $DB->CurrentTimeFunction();
         if (is_set($arFields, "EMAIL")) {
             $arFields["EMAIL"] = strtolower($arFields["EMAIL"]);
         }
         if (is_set($arFields, "WORK_COUNTRY")) {
             $arFields["WORK_COUNTRY"] = intval($arFields["WORK_COUNTRY"]);
         }
         if (is_set($arFields, "PERSONAL_COUNTRY")) {
             $arFields["PERSONAL_COUNTRY"] = intval($arFields["PERSONAL_COUNTRY"]);
         }
         if (array_key_exists("PERSONAL_PHOTO", $arFields) && is_array($arFields["PERSONAL_PHOTO"]) && (!array_key_exists("MODULE_ID", $arFields["PERSONAL_PHOTO"]) || strlen($arFields["PERSONAL_PHOTO"]["MODULE_ID"]) <= 0)) {
             $arFields["PERSONAL_PHOTO"]["MODULE_ID"] = "main";
         }
         CFile::SaveForDB($arFields, "PERSONAL_PHOTO", "main");
         if (array_key_exists("WORK_LOGO", $arFields) && is_array($arFields["WORK_LOGO"]) && (!array_key_exists("MODULE_ID", $arFields["WORK_LOGO"]) || strlen($arFields["WORK_LOGO"]["MODULE_ID"]) <= 0)) {
             $arFields["WORK_LOGO"]["MODULE_ID"] = "main";
         }
         CFile::SaveForDB($arFields, "WORK_LOGO", "main");
         $arInsert = $DB->PrepareInsert("b_user", $arFields);
         if (!is_set($arFields, "DATE_REGISTER")) {
             $arInsert[0] .= ", DATE_REGISTER";
             $arInsert[1] .= ", " . $DB->GetNowFunction();
         }
         $strSql = "\n\t\t\t\tINSERT INTO b_user (\n\t\t\t\t\t" . $arInsert[0] . "\n\t\t\t\t) VALUES (\n\t\t\t\t\t" . $arInsert[1] . "\n\t\t\t\t)\n\t\t\t";
         $DB->Query($strSql);
         $ID = $DB->LastID();
         $USER_FIELD_MANAGER->Update("USER", $ID, $arFields);
         if (is_set($arFields, "GROUP_ID")) {
             CUser::SetUserGroup($ID, $arFields["GROUP_ID"]);
         }
         //update digest hash for http digest authorization
         if (COption::GetOptionString('main', 'use_digest_auth', 'N') == 'Y') {
             CUser::UpdateDigest($ID, $original_pass);
         }
         $Result = $ID;
         $arFields["ID"] =& $ID;
         $arFields["CHECKWORD"] = $checkword;
     }
     $arFields["RESULT"] =& $Result;
     foreach (GetModuleEvents("main", "OnAfterUserAdd", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array(&$arFields));
     }
     if ($ID > 0 && defined("BX_COMP_MANAGED_CACHE")) {
         $CACHE_MANAGER->ClearByTag("USER_CARD_" . intval($ID / TAGGED_user_card_size));
         $CACHE_MANAGER->ClearByTag("USER_CARD");
         $CACHE_MANAGER->ClearByTag("USER_NAME_" . $ID);
         $CACHE_MANAGER->ClearByTag("USER_NAME");
     }
     return $Result;
 }
Пример #9
0
 protected function getBatchWithModifier($appMessages = array(), $modifier = "")
 {
     global $APPLICATION;
     $batch = "";
     if (!is_array($appMessages) || count($appMessages) <= 0) {
         return $batch;
     }
     foreach ($appMessages as $appID => $arMessages) {
         $appModifier = ";tkey=" . $appID . ";";
         foreach ($arMessages as $token => $messages) {
             if (!count($messages)) {
                 continue;
             }
             $mess = 0;
             $messCount = count($messages);
             while ($mess < $messCount) {
                 /**
                  * @var CPushMessage $message;
                  */
                 if (!$this->allowEmptyMessage && strlen(trim($messages[$mess]["MESSAGE"])) <= 0) {
                     $mess++;
                     continue;
                 }
                 $message = static::getMessageInstance($token);
                 $id = rand(1, 10000);
                 $message->setCustomIdentifier($id);
                 if ("UTF-8" != toupper(SITE_CHARSET)) {
                     $text = $APPLICATION->ConvertCharset($messages[$mess]["MESSAGE"], SITE_CHARSET, "utf-8");
                 } else {
                     $text = $messages[$mess]["MESSAGE"];
                 }
                 $message->setText($text);
                 $message->setTitle($messages[$mess]["TITLE"]);
                 if (strlen($text) > 0) {
                     if (strlen($messages[$mess]["SOUND"]) > 0) {
                         $message->setSound($messages[$mess]["SOUND"]);
                     }
                 } else {
                     $message->setSound('');
                 }
                 if ($messages[$mess]["PARAMS"]) {
                     $params = $messages[$mess]["PARAMS"];
                     if (is_array($messages[$mess]["PARAMS"])) {
                         $params = json_encode($messages[$mess]["PARAMS"]);
                     }
                     $message->setCustomProperty('params', $params);
                 }
                 if ($messages[$mess]["ACTION"]) {
                     $message->setCustomProperty('action', $messages[$mess]["ACTION"]);
                 }
                 if ($messages[$mess]["JSEVENT"]) {
                     $message->setCustomProperty('jsevent', $messages[$mess]["JSEVENT"]);
                 }
                 if ($messages[$mess]["CATEGORY"]) {
                     $message->setCategory($messages[$mess]["CATEGORY"]);
                 }
                 $message->setCustomProperty('target', md5($messages[$mess]["USER_ID"] . CMain::GetServerUniqID()));
                 if (array_key_exists("EXPIRY", $messages[$mess])) {
                     $expiry = $messages[$mess]["EXPIRY"];
                     if ($expiry === 0 || $expiry === "0") {
                         $message->setExpiry(0);
                     } else {
                         $message->setExpiry(intval($expiry) > 0 ? intval($expiry) : self::DEFAULT_EXPIRY);
                     }
                 }
                 $badge = intval($messages[$mess]["BADGE"]);
                 if (array_key_exists("BADGE", $messages[$mess]) && $badge >= 0) {
                     $message->setBadge($badge);
                 }
                 if (strlen($batch) > 0) {
                     $batch .= ";";
                 }
                 $batch .= $message->getBatch();
                 $mess++;
             }
         }
         $batch = $appModifier . $batch;
     }
     if (strlen($batch) == 0) {
         return $batch;
     }
     return $modifier . $batch;
 }
Пример #10
0
 public static function PrologActions()
 {
     /** @global CMain $APPLICATION */
     global $APPLICATION, $USER;
     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(function () {
             // define("BX_BUFFER_SHUTDOWN", true);
             for ($i = 0, $n = ob_get_level(); $i < $n; $i++) {
                 ob_end_flush();
             }
         });
     }
     //session expander
     if (COption::GetOptionString("main", "session_expand", "Y") != "N" && (!defined("BX_SKIP_SESSION_EXPAND") || BX_SKIP_SESSION_EXPAND === false)) {
         //only for authorized
         if (COption::GetOptionString("main", "session_auth_only", "Y") != "Y" || $USER->IsAuthorized()) {
             $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'] . "|" . $USER->GetID() . "|" . $_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);
     }
 }
Пример #11
0
function bitrix_sess_sign()
{
    return md5("nobody" . CMain::GetServerUniqID() . "nowhere");
}
Пример #12
0
	/**
	 * @param $script - url for detail
	 */
	function __construct($params = array(), $doCheckPost = true)
	{
		global $APPLICATION;
		$this->errorCode = array(
			"BXU344" => GetMessage("UP_CID_IS_REQUIRED"),
			"BXU344.1" => GetMessage("UP_PACKAGE_INDEX_IS_REQUIRED"),
			"BXU345" => GetMessage("UP_BAD_SESSID"),
			"BXU346" => GetMessage("UP_NOT_ENOUGH_PERMISSION"),
			"BXU347" => GetMessage("UP_FILE_IS_LOST"),
			"BXU348" => GetMessage("UP_FILE_IS_NOT_UPLOADED"));
		$params = (is_array($params) ? $params : array());
		$this->script = (array_key_exists("urlToUpload", $params) ? $params["urlToUpload"] : $APPLICATION->GetCurPageParam());
		if (array_key_exists("copies", $params) && is_array($params["copies"]))
		{
			$copies = array();
			foreach($params["copies"] as $key => $val)
			{
				if (is_array($val) && (array_key_exists("width", $val) || array_key_exists("height", $val)))
					$copies[$key] = array("width" => $val["width"], "height" => $val["height"]);
			}
			if (!empty($copies))
				$this->params["copies"] = $copies;
		}
		if (array_key_exists("uploadFileWidth", $params))
			$this->params["uploadFileWidth"] = $params["uploadFileWidth"];
		if (array_key_exists("uploadFileHeight", $params))
			$this->params["uploadFileHeight"] = $params["uploadFileHeight"];
		if (array_key_exists("uploadMaxFilesize", $params))
			$this->params["uploadMaxFilesize"] = $params["uploadMaxFilesize"];

		if (array_key_exists("events", $params) && is_array($params["events"]))
		{
			foreach($params["events"] as $key => $val)
			{
				AddEventHandler(self::EVENT_NAME, $key, $val);
			}
		}
		if (array_key_exists("allowUpload", $params))
		{
			// ALLOW_UPLOAD = 'A'll files | 'I'mages | 'F'iles with selected extensions
			// ALLOW_UPLOAD_EXT = comma-separated list of allowed file extensions (ALLOW_UPLOAD='F')
			$this->params["allowUpload"] = (in_array($params["allowUpload"], array("A", "I", "F")) ? $params["allowUpload"] : "A");
			if ($params["allowUpload"] == "F" && empty($params["allowUploadExt"]))
				$this->params["allowUpload"] = "A";
			$this->params["allowUploadExt"] = $params["allowUploadExt"];
		}
		if (array_key_exists("controlId", $params))
			$this->controlId = $params["controlId"];
		$this->params["controlId"] = $this->controlId;
		$this->path = CTempFile::GetDirectoryName(
			12,
			array(
				"bxu",
				md5(serialize(array(
					$this->controlId,
					bitrix_sessid(),
					CMain::GetServerUniqID()
					))
				)
			)
		);
		if ($doCheckPost !== false && !$this->checkPost(($doCheckPost === true || $doCheckPost == "post")))
		{
			$this->showError();
		}
		return $this;
	}
Пример #13
0
 public static function getUserPrefix($userId)
 {
     $userId = intval($userId);
     return "/" . $userId . "/" . md5(\CMain::GetServerUniqID() . $userId);
 }
Пример #14
0
function bitrix_sessid_set($val=false)
{
	if($val === false)
		$val = md5(CMain::GetServerUniqID().session_id());
	$_SESSION["fixed_session_id"] = $val;
}
Пример #15
0
<?php

if (!Defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) {
    die;
}
$data = array("status" => "failed");
if ($USER->IsAuthorized()) {
    $data = array("status" => "success", "target" => md5($USER->GetID() . CMain::GetServerUniqID()), "sessid_md5" => bitrix_sessid(), "appmap" => array("main" => array("url" => $arParams["START_PAGE"]), "menu" => array("url" => $arParams["MENU_PAGE"])));
}
Пример #16
0
 function __construct($params = array())
 {
     $this->status = new Status("ready");
     global $APPLICATION;
     $this->script = $APPLICATION->GetCurPageParam();
     $this->setParams($params);
     $this->path = \CTempFile::GetDirectoryName(12, array("bxu", md5(serialize(array($this->controlId, bitrix_sessid(), \CMain::GetServerUniqID())))));
     $this->processTime["max"] = intval(ini_get("max_execution_time")) * 0.75;
     $this->processTime["start"] = time();
     $this->log = new Log();
     $this->packLog = new Log();
     $this->http = new HttpClient();
     set_time_limit(0);
     return $this;
 }
Пример #17
0
<?
// define("NO_KEEP_STATISTIC", true);
// define("BX_SKIP_SESSION_TERMINATE_TIME", true);
// define("NOT_CHECK_FILE_PERMISSIONS", true);
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");

if($_SESSION["BX_SESSION_COUNTER"] > 1)
{
	if(check_bitrix_sessid())
	{
		//interval=0 - no user activity
		//interval>0 - expand session for user activity time
		$interval = intval($_REQUEST["interval"]);
		$nextTime = time() + $interval + ($interval>0? 60:0);
		if($_SESSION["BX_SESSION_TERMINATE_TIME"] < $nextTime)
			$_SESSION["BX_SESSION_TERMINATE_TIME"] = $nextTime;
		die("OK");
	}
}
elseif($USER->IsAuthorized())
{
	$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();
	if($_REQUEST["k"] == md5($_REQUEST["sessid"].$salt))
	{
		bitrix_sessid_set($_REQUEST['sessid']);
		die("SESSION_CHANGED");
	}
}
echo "SESSION_EXPIRED";
?>
Пример #18
0
 function ImportUser()
 {
     if ($this->isErrorOccured) {
         return false;
     }
     $this->errorMessage = "";
     $defaultEmail = $this->GetDefaultEmail();
     if (!($arUser = $this->csv->FetchDelimiter())) {
         return false;
     }
     $arFields = array();
     foreach ($this->arHeader as $index => $key) {
         if (($f = trim($arUser[$index])) != '') {
             $arFields[$key] = $f;
         }
     }
     if (!array_key_exists("NAME", $arFields) || strlen($arFields["NAME"]) < 1) {
         $this->errorMessage = GetMessage("CSV_IMPORT_NO_NAME") . " (" . implode(", ", $arFields) . ").<br>";
         return true;
     }
     if (!array_key_exists("LAST_NAME", $arFields) || strlen($arFields["LAST_NAME"]) < 1) {
         $this->errorMessage = GetMessage("CSV_IMPORT_NO_LASTNAME") . " (" . implode(", ", $arFields) . ").<br>";
         return true;
     }
     if (!array_key_exists("PASSWORD", $arFields) || strlen($arFields["PASSWORD"]) < 1) {
         $arFields["PASSWORD"] = $this->GenerateUserPassword(6);
     }
     $arFields["CONFIRM_PASSWORD"] = $arFields["PASSWORD"];
     if (!array_key_exists("EMAIL", $arFields) || strlen($arFields["EMAIL"]) < 3 || !check_email($arFields["EMAIL"])) {
         $arFields["EMAIL"] = $defaultEmail;
     }
     if (!array_key_exists("LOGIN", $arFields)) {
         $arFields["LOGIN"] = ToLower($arFields["NAME"] . " " . $arFields["LAST_NAME"]);
     }
     if (array_key_exists("PERSONAL_BIRTHDAY", $arFields) && (strlen($arFields["PERSONAL_BIRTHDAY"]) < 2 || !CheckDateTime($arFields["PERSONAL_BIRTHDAY"]))) {
         unset($arFields["PERSONAL_BIRTHDAY"]);
     }
     if (array_key_exists("DATE_REGISTER", $arFields) && (strlen($arFields["DATE_REGISTER"]) < 2 || !CheckDateTime($arFields["DATE_REGISTER"]))) {
         unset($arFields["DATE_REGISTER"]);
     }
     if ($this->externalAuthID !== null && !array_key_exists("EXTERNAL_AUTH_ID", $arFields)) {
         $arFields["EXTERNAL_AUTH_ID"] = $this->externalAuthID;
     }
     if (!array_key_exists("XML_ID", $arFields)) {
         $arFields["XML_ID"] = md5(uniqid(rand(), true));
     }
     if (!array_key_exists("CHECKWORD", $arFields) || strlen($arFields["CHECKWORD"]) <= 0) {
         $arFields["CHECKWORD"] = md5(CMain::GetServerUniqID() . uniqid());
     }
     if ($this->imageFilePath !== null) {
         if (array_key_exists("PERSONAL_PHOTO", $arFields) && strlen($arFields["PERSONAL_PHOTO"]) > 0) {
             $arFile = CFile::MakeFileArray($this->imageFilePath . "/" . $arFields["PERSONAL_PHOTO"]);
             $arFile["MODULE_ID"] = "main";
             $arFields["PERSONAL_PHOTO"] = $arFile;
         }
         if (array_key_exists("WORK_LOGO", $arFields) && strlen($arFields["WORK_LOGO"]) > 0) {
             $arFile = CFile::MakeFileArray($this->imageFilePath . "/" . $arFields["WORK_LOGO"]);
             $arFile["MODULE_ID"] = "main";
             $arFields["WORK_LOGO"] = $arFile;
         }
     } else {
         unset($arFields["PERSONAL_PHOTO"]);
         unset($arFields["WORK_LOGO"]);
     }
     $arFields["GROUP_ID"] = $this->userGroups;
     $user = new CUser();
     $userID = (int) $user->Add($arFields);
     if ($userID <= 0) {
         if ($user->LAST_ERROR != '') {
             $this->errorMessage = $arFields["NAME"] . " " . $arFields["LAST_NAME"] . ": " . $user->LAST_ERROR;
         }
     }
     if ($userID <= 0 && $this->ignoreDuplicate === false) {
         $postFix = 2;
         $login = $arFields["LOGIN"];
         do {
             $rsUser = CUser::GetByLogin($arFields["LOGIN"]);
             if (!$rsUser->Fetch()) {
                 break;
             }
             $arFields["LOGIN"] = $login . $postFix;
             $userID = (int) $user->Add($arFields);
             if ($userID > 1) {
                 break;
             }
             $postFix++;
         } while (true);
     }
     if ($userID > 0) {
         if ($this->attachIBlockID > 0) {
             $iblockSectionID = $this->__GetIBlockSectionID($arFields);
             if ($iblockSectionID > 0) {
                 if (!$this->isUserPropertyCreate) {
                     $this->isUserPropertyCreate = $this->__CreateUserProperty();
                 }
                 $arUpdate = array();
                 $arUpdate[$this->userPropertyName] = array($iblockSectionID);
                 $user->Update($userID, $arUpdate);
             }
         }
         if ($this->callback !== null) {
             call_user_func_array($this->callback, array(&$arFields, &$userID));
         }
     }
     return true;
 }
Пример #19
0
 function PrologActions()
 {
     /** @global CMain $APPLICATION */
     global $APPLICATION, $USER;
     if (defined("BX_CHECK_SHORT_URI") && BX_CHECK_SHORT_URI) {
         if ($arUri = CBXShortUri::GetUri($_SERVER["REQUEST_URI"])) {
             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;
         }
     }
     //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";
         $ext = array('ajax');
         if ($bShowMess) {
             $ext[] = "fx";
         }
         CUtil::InitJSCore($ext);
         $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>';
         if ($APPLICATION->IsJSOptimized()) {
             $APPLICATION->AddHeadScript('/bitrix/js/main/session.js');
             $APPLICATION->AddAdditionalJS($jsMsg);
         } else {
             $APPLICATION->AddHeadString('<script type="text/javascript" src="' . CUtil::GetAdditionalFileURL('/bitrix/js/main/session.js') . '"></script>' . "\n" . $jsMsg, true);
         }
         $_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()) {
         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);
         }
     }
     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('', 'while(@ob_end_flush());'));
     }
     foreach (GetModuleEvents("main", "OnProlog", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent);
     }
 }
Пример #20
0
 public static function ExecuteAgents($str_crontab)
 {
     global $DB, $CACHE_MANAGER, $pPERIOD;
     if (defined("BX_FORK_AGENTS_AND_EVENTS_FUNCTION")) {
         if (CMain::ForkActions(array("CAgent", "ExecuteAgents"), array($str_crontab))) {
             return "";
         }
     }
     $saved_time = 0;
     $cache_id = "agents" . $str_crontab;
     if (CACHED_b_agent !== false && $CACHE_MANAGER->Read(CACHED_b_agent, $cache_id, "agents")) {
         $saved_time = $CACHE_MANAGER->Get($cache_id);
         if (time() < $saved_time) {
             return "";
         }
     }
     $uniq = CMain::GetServerUniqID();
     $strSql = "\n\t\t\tSELECT 'x'\n\t\t\tFROM b_agent\n\t\t\tWHERE\n\t\t\t\tACTIVE = 'Y'\n\t\t\t\tAND NEXT_EXEC <= now()\n\t\t\t\tAND (DATE_CHECK IS NULL OR DATE_CHECK <= now())\n\t\t\t\t" . $str_crontab . "\n\t\t\tLIMIT 1\n\t\t";
     $db_result_agents = $DB->Query($strSql);
     if ($db_result_agents->Fetch()) {
         $db_lock = $DB->Query("SELECT GET_LOCK('" . $uniq . "_agent', 0) as L");
         $ar_lock = $db_lock->Fetch();
         if ($ar_lock["L"] == "0") {
             return "";
         }
     } else {
         if (CACHED_b_agent !== false) {
             $rs = $DB->Query("SELECT UNIX_TIMESTAMP(MIN(NEXT_EXEC))-UNIX_TIMESTAMP(NOW()) DATE_DIFF FROM b_agent WHERE ACTIVE='Y' " . $str_crontab . "");
             $ar = $rs->Fetch();
             if (!$ar || $ar["DATE_DIFF"] < 0) {
                 $date_diff = 0;
             } elseif ($ar["DATE_DIFF"] > CACHED_b_agent) {
                 $date_diff = CACHED_b_agent;
             } else {
                 $date_diff = $ar["DATE_DIFF"];
             }
             if ($saved_time > 0) {
                 $CACHE_MANAGER->Clean($cache_id, "agents");
                 $CACHE_MANAGER->Read(CACHED_b_agent, $cache_id, "agents");
             }
             $CACHE_MANAGER->Set($cache_id, intval(time() + $date_diff));
         }
         return "";
     }
     $strSql = "SELECT ID, NAME, AGENT_INTERVAL, IS_PERIOD, MODULE_ID " . "FROM b_agent " . "WHERE ACTIVE='Y' " . "\tAND NEXT_EXEC<=now() " . "\tAND (DATE_CHECK IS NULL OR DATE_CHECK<=now()) " . $str_crontab . " ORDER BY RUNNING ASC, SORT desc";
     $db_result_agents = $DB->Query($strSql);
     $ids = '';
     $agents_array = array();
     while ($db_result_agents_array = $db_result_agents->Fetch()) {
         $agents_array[] = $db_result_agents_array;
         $ids .= ($ids != '' ? ', ' : '') . $db_result_agents_array["ID"];
     }
     if ($ids != '') {
         $strSql = "UPDATE b_agent SET DATE_CHECK=DATE_ADD(IF(DATE_CHECK IS NULL, now(), DATE_CHECK), INTERVAL 600 SECOND) WHERE ID IN (" . $ids . ")";
         $DB->Query($strSql);
     }
     $DB->Query("SELECT RELEASE_LOCK('" . $uniq . "_agent')");
     $logFunction = defined("BX_AGENTS_LOG_FUNCTION") && function_exists(BX_AGENTS_LOG_FUNCTION) ? BX_AGENTS_LOG_FUNCTION : false;
     for ($i = 0, $n = count($agents_array); $i < $n; $i++) {
         $arAgent = $agents_array[$i];
         if ($logFunction) {
             $logFunction($arAgent, "start");
         }
         @set_time_limit(0);
         ignore_user_abort(true);
         if (strlen($arAgent["MODULE_ID"]) > 0 && $arAgent["MODULE_ID"] != "main") {
             if (!CModule::IncludeModule($arAgent["MODULE_ID"])) {
                 continue;
             }
         }
         //update the agent to the running state - if it fails it'll go to the end of the list on the next try
         $DB->Query("UPDATE b_agent SET RUNNING='Y' WHERE ID=" . $arAgent["ID"]);
         //these vars can be assigned within agent code
         $pPERIOD = $arAgent["AGENT_INTERVAL"];
         CTimeZone::Disable();
         global $USER;
         unset($USER);
         $eval_result = "";
         $e = eval("\$eval_result=" . $arAgent["NAME"]);
         unset($USER);
         CTimeZone::Enable();
         if ($logFunction) {
             $logFunction($arAgent, "finish", $eval_result, $e);
         }
         if ($e === false) {
             continue;
         } elseif (strlen($eval_result) <= 0) {
             $strSql = "DELETE FROM b_agent WHERE ID=" . $arAgent["ID"];
         } else {
             $strSql = "\n\t\t\t\t\tUPDATE b_agent SET\n\t\t\t\t\t\tNAME='" . $DB->ForSQL($eval_result, 2000) . "',\n\t\t\t\t\t\tLAST_EXEC=now(),\n\t\t\t\t\t\tNEXT_EXEC=DATE_ADD(" . ($arAgent["IS_PERIOD"] == "Y" ? "NEXT_EXEC" : "now()") . ", INTERVAL " . $pPERIOD . " SECOND),\n\t\t\t\t\t\tDATE_CHECK=NULL,\n\t\t\t\t\t\tRUNNING='N'\n\t\t\t\t\tWHERE ID=" . $arAgent["ID"];
         }
         $DB->Query($strSql);
     }
     return null;
 }
Пример #21
0
 }
 if ($AGREE != "on") {
     $result['errors']["AGREE"] = GetMessage('AUTH_ERROR_AGREE');
 }
 if (strlen($password) < 6) {
     $result['errors']["USER_PASSWORD"] = GetMessage('AUTH_ERROR_PASSWORD');
 }
 if (count($result['errors']) == 0) {
     global $USER;
     COption::SetOptionString("main", "captcha_registration", "N");
     $default_group = COption::GetOptionString("main", "new_user_registration_def_group");
     if (!empty($default_group)) {
         $arrGroups = explode(",", $default_group);
     }
     $user = new CUser();
     $arFields = array("LOGIN" => $EMAIL, "LID" => SITE_ID, "ACTIVE" => "N", "PASSWORD" => $password, "CONFIRM_PASSWORD" => $password, "EMAIL" => $EMAIL, "GROUP_ID" => $arrGroups, "CHECKWORD" => md5(CMain::GetServerUniqID() . uniqid()), "CONFIRM_CODE" => randString(8), "USER_IP" => $_SERVER["REMOTE_ADDR"], "USER_HOST" => @gethostbyaddr($_SERVER["REMOTE_ADDR"]));
     //Если ввели телефон
     if (CDev::check_phone($phone)) {
         $arFields["PERSONAL_PHONE"] = $phone;
         $arFields["EMAIL"] = $arFields["LOGIN"] = $phone . "@megatv.su";
         $arFields["UF_PHONE_REG"] = "Y";
     }
     $USER_ID = $user->Add($arFields);
     if (intval($USER_ID) > 0) {
         CUserEx::subcribeOnFreeChannels($USER_ID);
         $arFields["USER_ID"] = $USER_ID;
         $event = new CEvent();
         $event->SendImmediate("NEW_USER", SITE_ID, $arFields);
         if (CDev::check_phone($phone)) {
             $checkword = mb_substr(md5(uniqid(rand(), true)), 0, 8);
             $cuser = new CUser();