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; } } }
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; }
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 ); }
/** * @return void * */ public static function unlock() { global $DB; $DB->Query("SELECT RELEASE_LOCK('" . CMain::GetServerUniqID() . "_cdn') as L"); }
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);
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; }
$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");
/** * <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> * <? * // создадим массив описывающий изображение * // находящееся в файле на сервере * $arIMAGE = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/images/photo.gif"); * $arIMAGE["MODULE_ID"] = "main"; * * $user = new CUser; * $arFields = Array( * "NAME" => "Сергей", * "LAST_NAME" => "Иванов", * "EMAIL" => "*****@*****.**", * "LOGIN" => "ivan", * "LID" => "ru", * "ACTIVE" => "Y", * "GROUP_ID" => array(10,11), * "PASSWORD" => "123456", * "CONFIRM_PASSWORD" => "123456", * "PERSONAL_PHOTO" => $arIMAGE * ); * * $ID = <b>$user->Add</b>($arFields); * if (intval($ID) > 0) * echo "Пользователь успешно добавлен."; * else * echo $user->LAST_ERROR; * ?> * </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; }
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; }
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); } }
function bitrix_sess_sign() { return md5("nobody" . CMain::GetServerUniqID() . "nowhere"); }
/** * @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; }
public static function getUserPrefix($userId) { $userId = intval($userId); return "/" . $userId . "/" . md5(\CMain::GetServerUniqID() . $userId); }
function bitrix_sessid_set($val=false) { if($val === false) $val = md5(CMain::GetServerUniqID().session_id()); $_SESSION["fixed_session_id"] = $val; }
<?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"]))); }
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; }
<? // 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"; ?>
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; }
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); } }
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; }
} 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();