private function GetRealParameterValue($objectName, $fieldName, &$result) { $return = false; if ($objectName == "Document") { $rootActivity = $this->GetRootActivity(); $documentId = $rootActivity->GetDocumentId(); $documentService = $this->workflow->GetService("DocumentService"); $document = $documentService->GetDocument($documentId); if (array_key_exists($fieldName, $document)) { $result = $document[$fieldName]; if (is_array($result) && strtoupper(substr($fieldName, -strlen('_PRINTABLE'))) == '_PRINTABLE') { $result = implode(", ", $result); } $return = true; } else { $result = ''; $return = true; } } elseif ($objectName == "Template") { $rootActivity = $this->GetRootActivity(); if (substr($fieldName, -strlen("_printable")) == "_printable") { $fieldNameTmp = substr($fieldName, 0, strlen($fieldName) - strlen("_printable")); $result = $rootActivity->{$fieldNameTmp}; $rootActivity = $this->GetRootActivity(); $documentId = $rootActivity->GetDocumentId(); $documentService = $this->workflow->GetService("DocumentService"); $result = $documentService->GetFieldValuePrintable($documentId, $fieldNameTmp, $rootActivity->arPropertiesTypes[$fieldNameTmp]["Type"], $result, $rootActivity->arPropertiesTypes[$fieldNameTmp]); if (is_array($result)) { $result = implode(", ", $result); } } else { $result = $rootActivity->{$fieldName}; } $return = true; } elseif ($objectName == "Variable" || $objectName == 'Constant') { $rootActivity = $this->GetRootActivity(); if (substr($fieldName, -strlen("_printable")) == "_printable") { $fieldNameTmp = substr($fieldName, 0, strlen($fieldName) - strlen("_printable")); $result = $objectName == "Variable" ? $rootActivity->GetVariable($fieldNameTmp) : $rootActivity->GetConstant($fieldNameTmp); $fieldType = $objectName == "Variable" ? $rootActivity->arVariablesTypes[$fieldNameTmp] : $rootActivity->GetConstantType($fieldNameTmp); $rootActivity = $this->GetRootActivity(); $documentId = $rootActivity->GetDocumentId(); $documentService = $this->workflow->GetService("DocumentService"); $result = $documentService->GetFieldValuePrintable($documentId, $fieldNameTmp, $fieldType["Type"], $result, $fieldType); if (is_array($result)) { $result = implode(", ", $result); } } else { $result = $objectName == "Variable" ? $rootActivity->GetVariable($fieldName) : $rootActivity->GetConstant($fieldName); } $return = true; } elseif ($objectName == "Workflow") { $result = $this->GetWorkflowInstanceId(); $return = true; } elseif ($objectName == "User") { $result = 0; if ($GLOBALS["USER"]->IsAuthorized()) { $result = "user_" . $GLOBALS["USER"]->GetID(); } $return = true; } elseif ($objectName == "System") { global $DB; $result = null; if ($fieldName == "Now") { $result = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL"))); } elseif ($fieldName == "NowLocal") { $result = time(); if (CTimeZone::Enabled()) { $result += CTimeZone::GetOffset(); } $result = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), $result); } elseif ($fieldName == "Date") { $result = date($DB->DateFormatToPHP(CSite::GetDateFormat("SHORT"))); } if ($result !== null) { $return = true; } } elseif ($objectName) { $activity = $this->workflow->GetActivityByName($objectName); if ($activity) { // _printable is not supported because mapping between activity property types // and document property types is not supported $result = $activity->{$fieldName}; $return = true; } } return $return; }
{ $arResult["USER_PROPERTIES"]["SHOW"] = "Y"; $arResult["bVarsFromForm"] = (count($arResult['ERRORS']) <= 0) ? false : true; } // ******************** /User properties *************************************************** // initialize captcha if ($arResult["USE_CAPTCHA"] == "Y") $arResult["CAPTCHA_CODE"] = htmlspecialcharsbx($APPLICATION->CaptchaGetCode()); // set title if ($arParams["SET_TITLE"] == "Y") $APPLICATION->SetTitle(GetMessage("REGISTER_DEFAULT_TITLE")); //time zones $arResult["TIME_ZONE_ENABLED"] = CTimeZone::Enabled(); if($arResult["TIME_ZONE_ENABLED"]) $arResult["TIME_ZONE_LIST"] = CTimeZone::GetZones(); $arResult["SECURE_AUTH"] = false; if(!CMain::IsHTTPS() && COption::GetOptionString('main', 'use_encrypted_auth', 'N') == 'Y') { $sec = new CRsaSecurity(); if(($arKeys = $sec->LoadKeys())) { $sec->SetKeys($arKeys); $sec->AddToForm('regform', array('REGISTER[PASSWORD]', 'REGISTER[CONFIRM_PASSWORD]')); $arResult["SECURE_AUTH"] = true; } }
/** * @return string */ public static function getDatetimeExpressionTemplate() { if (self::$datetimeTemplate === null) { $helper = Application::getConnection()->getSqlHelper(); $format = Context::getCurrent()->getCulture()->getDateTimeFormat(); $datetimeFieldName = '#FIELD#'; $datetimeField = $datetimeFieldName; if (\CTimeZone::Enabled()) { $diff = \CTimeZone::GetOffset(); if ($diff != 0) { $datetimeField = $helper->addSecondsToDateTime($diff, $datetimeField); } unset($diff); } self::$datetimeTemplate = str_replace(array('%', $datetimeFieldName), array('%%', '%1$s'), $helper->formatDate($format, $datetimeField)); unset($datetimeField, $datetimeFieldName, $format, $helper); } return self::$datetimeTemplate; }
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 GetOffset($userId = false) { $offset = 0; if ($userId > 0) { if (!isset(self::$arTimezoneOffsets[$userId])) { if (!CTimeZone::Enabled()) { CTimeZone::Enable(); $offset = CTimeZone::GetOffset($userId); CTimeZone::Disable(); } else { $offset = CTimeZone::GetOffset($userId); } self::$arTimezoneOffsets[$userId] = $offset; } else { $offset = self::$arTimezoneOffsets[$userId]; } } else { if (!isset(self::$offset)) { if (!CTimeZone::Enabled()) { CTimeZone::Enable(); $offset = CTimeZone::GetOffset(); CTimeZone::Disable(); } else { $offset = CTimeZone::GetOffset(); } self::$offset = $offset; } else { $offset = self::$offset; } } return $offset; }
/** * Creates DateTime object from local user time using global timezone settings and default culture * * @param string $timeString * @return DateTime */ public static function createFromUserTime($timeString) { /** @var DateTime $time */ try { //try full datetime format $time = new static($timeString); } catch (Main\ObjectException $e) { //try short date format $time = new static($timeString, Date::getFormat()); $time->setTime(0, 0, 0); } if (\CTimeZone::Enabled()) { static $diff = null; if ($diff === null) { $diff = \CTimeZone::GetOffset(); } if ($diff != 0) { $time->add(($diff > 0 ? "-" : "") . "PT" . abs($diff) . "S"); } } return $time; }
<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die; } $arFormFields = array("NAME" => 1, "SECOND_NAME" => 1, "LAST_NAME" => 1, "AUTO_TIME_ZONE" => 1, "PERSONAL_PROFESSION" => 1, "PERSONAL_WWW" => 1, "PERSONAL_ICQ" => 1, "PERSONAL_GENDER" => 1, "PERSONAL_BIRTHDAY" => 1, "PERSONAL_PHOTO" => 1, "PERSONAL_PHONE" => 1, "PERSONAL_FAX" => 1, "PERSONAL_MOBILE" => 1, "PERSONAL_PAGER" => 1, "PERSONAL_STREET" => 1, "PERSONAL_MAILBOX" => 1, "PERSONAL_CITY" => 1, "PERSONAL_STATE" => 1, "PERSONAL_ZIP" => 1, "PERSONAL_COUNTRY" => 1, "PERSONAL_NOTES" => 1, "WORK_COMPANY" => 1, "WORK_DEPARTMENT" => 1, "WORK_POSITION" => 1, "WORK_WWW" => 1, "WORK_PHONE" => 1, "WORK_FAX" => 1, "WORK_PAGER" => 1, "WORK_STREET" => 1, "WORK_MAILBOX" => 1, "WORK_CITY" => 1, "WORK_STATE" => 1, "WORK_ZIP" => 1, "WORK_COUNTRY" => 1, "WORK_PROFILE" => 1, "WORK_LOGO" => 1, "WORK_NOTES" => 1); if (!CTimeZone::Enabled()) { unset($arFormFields["AUTO_TIME_ZONE"]); } $arUserFields = array(); foreach ($arFormFields as $value => $dummy) { $arUserFields[$value] = "[" . $value . "] " . GetMessage("REGISTER_FIELD_" . $value); } $arRes = $GLOBALS["USER_FIELD_MANAGER"]->GetUserFields("USER", 0, LANGUAGE_ID); $userProp = array(); if (!empty($arRes)) { foreach ($arRes as $key => $val) { $userProp[$val["FIELD_NAME"]] = strLen($val["EDIT_FORM_LABEL"]) > 0 ? $val["EDIT_FORM_LABEL"] : $val["FIELD_NAME"]; } } $arComponentParameters = array("PARAMETERS" => array("SHOW_FIELDS" => array("NAME" => GetMessage("REGISTER_SHOW_FIELDS"), "TYPE" => "LIST", "MULTIPLE" => "Y", "ADDITIONAL_VALUES" => "N", "VALUES" => $arUserFields, "PARENT" => "BASE"), "REQUIRED_FIELDS" => array("NAME" => GetMessage("REGISTER_REQUIRED_FIELDS"), "TYPE" => "LIST", "MULTIPLE" => "Y", "ADDITIONAL_VALUES" => "N", "VALUES" => $arUserFields, "PARENT" => "BASE"), "AUTH" => array("NAME" => GetMessage("REGISTER_AUTOMATED_AUTH"), "TYPE" => "CHECKBOX", "DEFAULT" => "Y", "PARENT" => "ADDITIONAL_SETTINGS"), "USE_BACKURL" => array("NAME" => GetMessage("REGISTER_USE_BACKURL"), "TYPE" => "CHECKBOX", "DEFAULT" => "Y", "PARENT" => "ADDITIONAL_SETTINGS"), "SUCCESS_PAGE" => array("NAME" => GetMessage("REGISTER_SUCCESS_PAGE"), "TYPE" => "STRING", "DEFAULT" => "", "PARENT" => "ADDITIONAL_SETTINGS"), "SET_TITLE" => array(), "USER_PROPERTY" => array("PARENT" => "ADDITIONAL_SETTINGS", "NAME" => GetMessage("USER_PROPERTY"), "TYPE" => "LIST", "VALUES" => $userProp, "MULTIPLE" => "Y", "DEFAULT" => array())));
private function GetRealParameterValue($objectName, $fieldName, &$result, array $modifiers = null) { $return = true; $property = null; if ($objectName == "Document") { $rootActivity = $this->GetRootActivity(); $documentId = $rootActivity->GetDocumentId(); /** @var CBPDocumentService $documentService */ $documentService = $this->workflow->GetService("DocumentService"); $document = $documentService->GetDocument($documentId); $result = ''; if (isset($document[$fieldName])) { $result = $document[$fieldName]; if (is_array($result) && strtoupper(substr($fieldName, -strlen('_PRINTABLE'))) == '_PRINTABLE') { $result = implode(", ", $result); } if (!empty($modifiers)) { $documentType = $this->GetDocumentType(); $fields = $documentService->GetDocumentFields($documentType); $property = isset($fields[$fieldName]) ? $fields[$fieldName] : null; } } } elseif ($objectName == 'Template' || $objectName == 'Variable' || $objectName == 'Constant') { $rootActivity = $this->GetRootActivity(); if (substr($fieldName, -strlen("_printable")) == "_printable") { $fieldName = substr($fieldName, 0, strlen($fieldName) - strlen("_printable")); $modifiers = array('printable'); } switch ($objectName) { case 'Variable': $result = $rootActivity->GetVariable($fieldName); $property = $rootActivity->arVariablesTypes[$fieldName]; break; case 'Constant': $result = $rootActivity->GetConstant($fieldName); $property = $rootActivity->GetConstantType($fieldName); break; default: $result = $rootActivity->{$fieldName}; $property = $rootActivity->arPropertiesTypes[$fieldName]; } } elseif ($objectName == "Workflow") { $result = $this->GetWorkflowInstanceId(); $property = array('Type' => 'string'); } elseif ($objectName == "User") { $result = 0; if (isset($GLOBALS["USER"]) && is_object($GLOBALS["USER"]) && $GLOBALS["USER"]->isAuthorized()) { $result = "user_" . $GLOBALS["USER"]->GetID(); } $property = array('Type' => 'user'); } elseif ($objectName == "System") { global $DB; $result = null; $property = array('Type' => 'datetime'); if ($fieldName == "Now") { $result = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL"))); } elseif ($fieldName == "NowLocal") { $result = time(); if (CTimeZone::Enabled()) { $result += CTimeZone::GetOffset(); } $result = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), $result); } elseif ($fieldName == "Date") { $result = date($DB->DateFormatToPHP(CSite::GetDateFormat("SHORT"))); $property = array('Type' => 'date'); } if ($result === null) { $return = false; } } elseif ($objectName) { $activity = $this->workflow->GetActivityByName($objectName); if ($activity) { $result = $activity->{$fieldName}; //if mapping is set, we can apply modifiers (type converting & formating like `printable`, `bool` etc.) if (isset($activity->arPropertiesTypes[$fieldName])) { $property = $activity->arPropertiesTypes[$fieldName]; } } else { $return = false; } } else { $return = false; } if ($return) { $result = $this->applyPropertyValueModifiers($fieldName, $property, $result, $modifiers); } return $return; }
/** * Performs the user authorization: * fills session parameters; * remembers auth; * spreads auth through sites */ function Authorize($id, $bSave = false, $bUpdate = true, $applicationId = null) { /** @global CMain $APPLICATION */ global $DB, $APPLICATION; unset($_SESSION["SESS_OPERATIONS"]); unset($_SESSION["MODULE_PERMISSIONS"]); $_SESSION["BX_LOGIN_NEED_CAPTCHA"] = false; $strSql = "SELECT U.* " . "FROM b_user U " . "WHERE U.ID='" . intval($id) . "' "; $result = $DB->Query($strSql, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__); if ($arUser = $result->Fetch()) { $this->justAuthorized = true; $_SESSION["SESS_AUTH"]["AUTHORIZED"] = "Y"; $_SESSION["SESS_AUTH"]["USER_ID"] = $arUser["ID"]; $_SESSION["SESS_AUTH"]["LOGIN"] = $arUser["LOGIN"]; $_SESSION["SESS_AUTH"]["LOGIN_COOKIES"] = $arUser["LOGIN"]; $_SESSION["SESS_AUTH"]["EMAIL"] = $arUser["EMAIL"]; $_SESSION["SESS_AUTH"]["PASSWORD_HASH"] = $arUser["PASSWORD"]; $_SESSION["SESS_AUTH"]["TITLE"] = $arUser["TITLE"]; $_SESSION["SESS_AUTH"]["NAME"] = $arUser["NAME"] . ($arUser["NAME"] == '' || $arUser["LAST_NAME"] == '' ? "" : " ") . $arUser["LAST_NAME"]; $_SESSION["SESS_AUTH"]["FIRST_NAME"] = $arUser["NAME"]; $_SESSION["SESS_AUTH"]["SECOND_NAME"] = $arUser["SECOND_NAME"]; $_SESSION["SESS_AUTH"]["LAST_NAME"] = $arUser["LAST_NAME"]; $_SESSION["SESS_AUTH"]["PERSONAL_PHOTO"] = $arUser["PERSONAL_PHOTO"]; $_SESSION["SESS_AUTH"]["PERSONAL_GENDER"] = $arUser["PERSONAL_GENDER"]; $_SESSION["SESS_AUTH"]["ADMIN"] = false; $_SESSION["SESS_AUTH"]["CONTROLLER_ADMIN"] = false; $_SESSION["SESS_AUTH"]["POLICY"] = CUser::GetGroupPolicy($arUser["ID"]); $_SESSION["SESS_AUTH"]["AUTO_TIME_ZONE"] = trim($arUser["AUTO_TIME_ZONE"]); $_SESSION["SESS_AUTH"]["TIME_ZONE"] = $arUser["TIME_ZONE"]; $_SESSION["SESS_AUTH"]["APPLICATION_ID"] = $applicationId; $_SESSION["SESS_AUTH"]["BX_USER_ID"] = $arUser["BX_USER_ID"]; // groups $_SESSION["SESS_AUTH"]["GROUPS"] = Main\UserTable::getUserGroupIds($arUser["ID"]); foreach ($_SESSION["SESS_AUTH"]["GROUPS"] as $groupId) { if ($groupId == 1) { $_SESSION["SESS_AUTH"]["ADMIN"] = true; break; } } //sometimes we don't need to update db (REST) if ($bUpdate) { $tz = ''; if (CTimeZone::Enabled()) { if (!CTimeZone::IsAutoTimeZone(trim($arUser["AUTO_TIME_ZONE"])) || CTimeZone::GetCookieValue() !== null) { $tz = ', TIME_ZONE_OFFSET = ' . CTimeZone::GetOffset(); } } $bxUid = ''; if (!empty($_COOKIE['BX_USER_ID']) && preg_match('/^[0-9a-f]{32}$/', $_COOKIE['BX_USER_ID'])) { if ($_COOKIE['BX_USER_ID'] != $arUser['BX_USER_ID']) { // save new bxuid value $bxUid = ", BX_USER_ID = '" . $_COOKIE['BX_USER_ID'] . "'"; $arUser['BX_USER_ID'] = $_COOKIE['BX_USER_ID']; $_SESSION["SESS_AUTH"]["BX_USER_ID"] = $_COOKIE['BX_USER_ID']; } } $DB->Query("\n\t\t\t\t\tUPDATE b_user SET\n\t\t\t\t\t\tSTORED_HASH = NULL,\n\t\t\t\t\t\tLAST_LOGIN = "******",\n\t\t\t\t\t\tTIMESTAMP_X = TIMESTAMP_X,\n\t\t\t\t\t\tLOGIN_ATTEMPTS = 0\n\t\t\t\t\t\t" . $tz . "\n\t\t\t\t\t\t" . $bxUid . "\n\t\t\t\t\tWHERE\n\t\t\t\t\t\tID=" . $arUser["ID"]); if ($applicationId === null && ($bSave || COption::GetOptionString("main", "auth_multisite", "N") == "Y")) { $hash = $this->GetSessionHash(); $secure = COption::GetOptionString("main", "use_secure_password_cookies", "N") == "Y" && CMain::IsHTTPS(); if ($bSave) { $period = time() + 60 * 60 * 24 * 30 * 60; $spread = BX_SPREAD_SITES | BX_SPREAD_DOMAIN; } else { $period = 0; $spread = BX_SPREAD_SITES; } $APPLICATION->set_cookie("UIDH", $hash, $period, '/', false, $secure, $spread, false, true); $APPLICATION->set_cookie("UIDL", $arUser["LOGIN"], $period, '/', false, $secure, $spread, false, true); $stored_id = CUser::CheckStoredHash($arUser["ID"], $hash); if ($stored_id) { $DB->Query("UPDATE b_user_stored_auth SET\n\t\t\t\t\t\t\t\tLAST_AUTH=" . $DB->CurrentTimeFunction() . ",\n\t\t\t\t\t\t\t\t" . ($this->bLoginByHash ? "" : "TEMP_HASH='" . ($bSave ? "N" : "Y") . "', ") . "\n\t\t\t\t\t\t\t\tIP_ADDR='" . sprintf("%u", ip2long($_SERVER["REMOTE_ADDR"])) . "'\n\t\t\t\t\t\t\tWHERE ID=" . $stored_id); } else { $arFields = array('USER_ID' => $arUser["ID"], '~DATE_REG' => $DB->CurrentTimeFunction(), '~LAST_AUTH' => $DB->CurrentTimeFunction(), 'TEMP_HASH' => $bSave ? "N" : "Y", '~IP_ADDR' => sprintf("%u", ip2long($_SERVER["REMOTE_ADDR"])), 'STORED_HASH' => $hash); $stored_id = CDatabase::Add("b_user_stored_auth", $arFields); } $_SESSION["SESS_AUTH"]["STORED_AUTH_ID"] = $stored_id; } } $this->admin = null; $arParams = array("user_fields" => $arUser, "save" => $bSave, "update" => $bUpdate, "applicationId" => $applicationId); foreach (GetModuleEvents("main", "OnAfterUserAuthorize", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($arParams)); } foreach (GetModuleEvents("main", "OnUserLogin", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($_SESSION["SESS_AUTH"]["USER_ID"])); } if (COption::GetOptionString("main", "event_log_login_success", "N") === "Y") { CEventLog::Log("SECURITY", "USER_AUTHORIZE", "main", $arUser["ID"], $applicationId); } CHTMLPagesCache::OnUserLogin(); return true; } return false; }
echo CSite::SelectBox("LID", $str_LID, "", "", "style=\"width:220px\"" . $dis); ?> </td> </tr> <? $tabControl->EndCustomField("LID", '<input type="hidden" name="LID" value="'.$str_LID.'">'); $params = array('id="bx_user_info_event"'); if(!$canSelfEdit || $str_EXTERNAL_AUTH_ID <> '') { $params[] = "disabled"; } $tabControl->AddCheckBoxField("user_info_event", GetMessage('INFO_FOR_USER'), false, "Y", ($_REQUEST["user_info_event"]=="Y"), $params); endif; if(CTimeZone::Enabled()) { $tabControl->AddSection("USER_TIME_ZONE", GetMessage("user_edit_time_zones")); $tabControl->AddDropDownField("AUTO_TIME_ZONE", GetMessage("user_edit_time_zones_auto"), false, array(""=>GetMessage("user_edit_time_zones_auto_def"), "Y"=>GetMessage("user_edit_time_zones_auto_yes"), "N"=>GetMessage("user_edit_time_zones_auto_no")), $str_AUTO_TIME_ZONE, array('onchange="this.form.TIME_ZONE.disabled=(this.value != \'N\')"')); $tabControl->AddDropDownField("TIME_ZONE", GetMessage("user_edit_time_zones_zones"), false, CTimeZone::GetZones(), $str_TIME_ZONE, ($str_AUTO_TIME_ZONE<>"N"? array('disabled') : array())); } ?> <? if($showGroupTabs): $tabControl->BeginNextFormTab(); $tabControl->BeginCustomField("GROUP_ID", GetMessage("user_edit_form_groups")); ?> <tr> <td colspan="2" align="center"> <table border="0" cellpadding="0" cellspacing="0" class="internal" style="width:80%;"> <tr class="heading">
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); } }
private static function disableTimeZone() { static::$timeZoneEnabled = \CTimeZone::Enabled(); \CTimeZone::Disable(); }
public static function ConvertFromDB($arProperty, $value, $format = '') { static $offsetEnabled = null; static $timeOffset = false; if (!isset($offsetEnabled) || $offsetEnabled !== CTimeZone::Enabled()) { $offsetEnabled = CTimeZone::Enabled(); $timeOffset = CTimeZone::GetOffset(); } if (strlen($value["VALUE"]) > 0) { $timestamp = MakeTimeStamp($value["VALUE"], 'YYYY-MM-DD HH:MI:SS'); $timestamp += $timeOffset; $value["VALUE"] = ConvertTimeStamp($timestamp, $format ? $format : "FULL"); $value["VALUE"] = str_replace(" 00:00:00", "", $value["VALUE"]); } return $value; }
public static function GetUserOffset($params) { $userOffset = 0; $localOffset = 0; if (!CTimeZone::Enabled()) { return 0; } try { $localTime = new DateTime(); $localOffset = $localTime->getOffset(); $autoTimeZone = trim($params["AUTO_TIME_ZONE"]); $userZone = $params["TIME_ZONE"]; $factOffset = $params["TIME_ZONE_OFFSET"]; if ($autoTimeZone == "N") { $userTime = $userZone != "" ? new DateTime(null, new DateTimeZone($userZone)) : $localTime; $userOffset = $userTime->getOffset(); } else { if (CTimeZone::IsAutoTimeZone($autoTimeZone)) { return intval($factOffset); } else { $serverZone = COption::GetOptionString("main", "default_time_zone", ""); $serverTime = $serverZone != "" ? new DateTime(null, new DateTimeZone($serverZone)) : $localTime; $userOffset = $serverTime->getOffset(); } } } catch (Exception $e) { return 0; } return intval($userOffset) - intval($localOffset); }
function CharToDateFunction($strValue, $strType = "FULL", $lang = false) { $sFieldExpr = "'" . CDatabase::FormatDate($strValue, CLang::GetDateFormat($strType, $lang), $strType == "SHORT" ? "Y-M-D" : "Y-M-D H:I:S") . "'"; //time zone if ($strType == "FULL" && CTimeZone::Enabled()) { static $diff = false; if ($diff === false) { $diff = CTimeZone::GetOffset(); } if ($diff != 0) { $sFieldExpr = "DATE_ADD(" . $sFieldExpr . ", INTERVAL -(" . $diff . ") SECOND)"; } } return $sFieldExpr; }
/** * Performs the user authorization: * fills session parameters; * remembers auth; * spreads auth through sites */ function Authorize($id, $bSave = false) { /** @global CMain $APPLICATION */ global $DB, $APPLICATION; unset($_SESSION["SESS_OPERATIONS"]); $_SESSION["BX_LOGIN_NEED_CAPTCHA"] = false; $strSql = "SELECT U.* " . "FROM b_user U " . "WHERE U.ID='" . intval($id) . "' "; $result = $DB->Query($strSql, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__); if ($arUser = $result->Fetch()) { $_SESSION["SESS_AUTH"]["AUTHORIZED"] = "Y"; $_SESSION["SESS_AUTH"]["USER_ID"] = $arUser["ID"]; $_SESSION["SESS_AUTH"]["LOGIN"] = $arUser["LOGIN"]; $_SESSION["SESS_AUTH"]["LOGIN_COOKIES"] = $arUser["LOGIN"]; $_SESSION["SESS_AUTH"]["EMAIL"] = $arUser["EMAIL"]; $_SESSION["SESS_AUTH"]["PASSWORD_HASH"] = $arUser["PASSWORD"]; $_SESSION["SESS_AUTH"]["NAME"] = $arUser["NAME"] . ($arUser["NAME"] == '' || $arUser["LAST_NAME"] == '' ? "" : " ") . $arUser["LAST_NAME"]; $_SESSION["SESS_AUTH"]["FIRST_NAME"] = $arUser["NAME"]; $_SESSION["SESS_AUTH"]["SECOND_NAME"] = $arUser["SECOND_NAME"]; $_SESSION["SESS_AUTH"]["LAST_NAME"] = $arUser["LAST_NAME"]; $_SESSION["SESS_AUTH"]["ADMIN"] = false; $_SESSION["SESS_AUTH"]["CONTROLLER_ADMIN"] = false; $_SESSION["SESS_AUTH"]["POLICY"] = CUser::GetGroupPolicy($arUser["ID"]); $_SESSION["SESS_AUTH"]["AUTO_TIME_ZONE"] = trim($arUser["AUTO_TIME_ZONE"]); $_SESSION["SESS_AUTH"]["TIME_ZONE"] = $arUser["TIME_ZONE"]; $arGroups = array(); $strSql = "SELECT G.ID " . "FROM b_group G " . "WHERE G.ANONYMOUS='Y' " . "\tAND G.ACTIVE='Y' "; $result = $DB->Query($strSql, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__); while ($ar = $result->Fetch()) { $arGroups[] = $ar["ID"]; } if (!in_array(2, $arGroups)) { $arGroups[] = 2; } $strSql = "SELECT G.ID " . "FROM b_user_group UG, b_group G " . "WHERE UG.USER_ID = " . $arUser["ID"] . " " . "\tAND G.ID=UG.GROUP_ID " . "\tAND G.ACTIVE='Y' " . "\tAND ((UG.DATE_ACTIVE_FROM IS NULL) OR (UG.DATE_ACTIVE_FROM <= " . $DB->CurrentTimeFunction() . ")) " . "\tAND ((UG.DATE_ACTIVE_TO IS NULL) OR (UG.DATE_ACTIVE_TO >= " . $DB->CurrentTimeFunction() . ")) " . "\tAND (G.ANONYMOUS<>'Y' OR G.ANONYMOUS IS NULL) "; $result = $DB->Query($strSql, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__); while ($ar = $result->Fetch()) { $arGroups[] = $ar["ID"]; if ($ar["ID"] == 1) { $_SESSION["SESS_AUTH"]["ADMIN"] = true; } } sort($arGroups); $_SESSION["SESS_AUTH"]["GROUPS"] = $arGroups; $tz = ''; if (CTimeZone::Enabled()) { if (!CTimeZone::IsAutoTimeZone(trim($arUser["AUTO_TIME_ZONE"])) || CTimeZone::GetCookieValue() !== null) { $tz = ', TIME_ZONE_OFFSET = ' . CTimeZone::GetOffset(); } } $DB->Query("\n\t\t\t\tUPDATE b_user SET\n\t\t\t\t\tSTORED_HASH = NULL,\n\t\t\t\t\tLAST_LOGIN = "******",\n\t\t\t\t\tTIMESTAMP_X = TIMESTAMP_X,\n\t\t\t\t\tLOGIN_ATTEMPTS = 0\n\t\t\t\t\t" . $tz . "\n\t\t\t\tWHERE\n\t\t\t\t\tID=" . $arUser["ID"]); $APPLICATION->set_cookie("LOGIN", $_SESSION["SESS_AUTH"]["LOGIN_COOKIES"], time() + 60 * 60 * 24 * 30 * 60, '/', false, false, COption::GetOptionString("main", "auth_multisite", "N") == "Y"); if ($bSave || COption::GetOptionString("main", "auth_multisite", "N") == "Y") { $hash = $this->GetSessionHash(); $secure = COption::GetOptionString("main", "use_secure_password_cookies", "N") == "Y" && CMain::IsHTTPS(); if ($bSave) { $APPLICATION->set_cookie("UIDH", $hash, time() + 60 * 60 * 24 * 30 * 60, '/', false, $secure, BX_SPREAD_SITES | BX_SPREAD_DOMAIN); } else { $APPLICATION->set_cookie("UIDH", $hash, 0, '/', false, $secure, BX_SPREAD_SITES); } $stored_id = CUser::CheckStoredHash($arUser["ID"], $hash); if ($stored_id) { $DB->Query("UPDATE b_user_stored_auth SET\n\t\t\t\t\t\t\tLAST_AUTH=" . $DB->CurrentTimeFunction() . ",\n\t\t\t\t\t\t\t" . ($this->bLoginByHash ? "" : "TEMP_HASH='" . ($bSave ? "N" : "Y") . "', ") . "\n\t\t\t\t\t\t\tIP_ADDR='" . sprintf("%u", ip2long($_SERVER["REMOTE_ADDR"])) . "'\n\t\t\t\t\t\tWHERE ID=" . $stored_id); } else { $arFields = array('USER_ID' => $arUser["ID"], '~DATE_REG' => $DB->CurrentTimeFunction(), '~LAST_AUTH' => $DB->CurrentTimeFunction(), 'TEMP_HASH' => $bSave ? "N" : "Y", '~IP_ADDR' => sprintf("%u", ip2long($_SERVER["REMOTE_ADDR"])), 'STORED_HASH' => $hash); $stored_id = CDatabase::Add("b_user_stored_auth", $arFields); } $_SESSION["SESS_AUTH"]["STORED_AUTH_ID"] = $stored_id; } $this->admin = null; $arParams = array("user_fields" => $arUser, "save" => $bSave); foreach (GetModuleEvents("main", "OnAfterUserAuthorize", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array(&$arParams)); } foreach (GetModuleEvents("main", "OnUserLogin", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($_SESSION["SESS_AUTH"]["USER_ID"])); } if (COption::GetOptionString("main", "event_log_login_success", "N") === "Y") { CEventLog::Log("SECURITY", "USER_AUTHORIZE", "main", $arUser["ID"]); } return true; } return false; }
public static function DatetimeToTimestampFunction($fieldName) { $timeZone = ""; if (CTimeZone::Enabled()) { static $diff = false; if ($diff === false) { $diff = CTimeZone::GetOffset(); } if ($diff != 0) { $timeZone = $diff > 0 ? "+" . $diff : $diff; } } return "UNIX_TIMESTAMP(" . $fieldName . ")" . $timeZone; }
} IntOptionSet("dump_auto_interval", $i); COption::SetOptionInt('main', 'last_backup_start_time', 0); COption::SetOptionInt('main', 'last_backup_end_time', 0); $start_time = time(); $min_left = $t - date('H') * 60 - date('i'); if ($min_left < -60) { $start_time += 86400; $day = 'TOMORROW'; $w = date('w', time() + 86400); } else { $day = 'TODAY'; $w = date('w'); } // converting time to UTC $diff = (CTimeZone::Enabled() ? CTimeZone::GetOffset() : 0) + date('Z'); $sec -= $diff; if ($sec < 0) { $sec += 86400; $w = ($w - 1) % 7; } elseif ($sec >= 86400) { $sec -= 86400; $w = ($w + 1) % 7; } switch ($dump_auto_interval) { case 1: $arWeekDays = array(0, 1, 2, 3, 4, 5, 6); break; case 2: if ($w % 2) { $arWeekDays = array(1, 3, 5);
function GetMessagesForChat($currentUserID, $userID, $date = false, $arNavStartParams = false, $replyMessId = false) { global $DB; $currentUserID = IntVal($currentUserID); if ($currentUserID <= 0) { return false; } $userID = IntVal($userID); if ($date !== false) { $date = Trim($date); if (StrLen($date) <= 0) { return false; } if (!preg_match("#\\d\\d\\d\\d-\\d\\d-\\d\\d \\d\\d:\\d\\d:\\d\\d#i", $date)) { return false; } } $replyMessId = intval($replyMessId); //time zone $diff = false; if (CTimeZone::Enabled()) { $diff = CTimeZone::GetOffset(); } if ($diff !== false && $diff != 0) { $sDateFmt = "DATE_FORMAT(DATE_ADD(DATE_CREATE, INTERVAL " . $diff . " SECOND), '%Y-%m-%d %H:%i:%s') as DATE_CREATE_FMT, "; } else { $sDateFmt = "DATE_FORMAT(DATE_CREATE, '%Y-%m-%d %H:%i:%s') as DATE_CREATE_FMT, "; } $strSql = "SELECT 'IN' as WHO, ID, FROM_USER_ID as USER_ID, TITLE, MESSAGE, DATE_VIEW as DATE_VIEW, DATE_CREATE, " . "\t" . $sDateFmt . "\t" . $DB->DateToCharFunction("DATE_CREATE", "FULL") . " as DATE_CREATE_FORMAT " . "FROM b_sonet_messages " . "WHERE TO_USER_ID = " . $currentUserID . " " . ($userID > 0 ? "\tAND FROM_USER_ID = " . $userID . " " : "") . "\tAND TO_DELETED = 'N' " . "\tAND (IS_LOG IS NULL OR NOT IS_LOG = 'Y') " . ($date !== false && $replyMessId <= 0 ? " AND MESSAGE_TYPE = 'P' AND DATE_CREATE > '" . $DB->ForSql($date) . "' " : "") . ($replyMessId > 0 ? " AND MESSAGE_TYPE = 'P' AND ID >= '" . $replyMessId . "' " : "") . "UNION ALL " . "SELECT 'OUT' as WHO, ID, TO_USER_ID as USER_ID, TITLE, MESSAGE, DATE_CREATE as DATE_VIEW, DATE_CREATE, " . "\t" . $sDateFmt . "\t" . $DB->DateToCharFunction("DATE_CREATE", "FULL") . " as DATE_CREATE_FORMAT " . "FROM b_sonet_messages " . "WHERE FROM_USER_ID = " . $currentUserID . " " . ($userID > 0 ? "\tAND TO_USER_ID = " . $userID . " " : "") . "\tAND FROM_DELETED = 'N' " . "\tAND (IS_LOG IS NULL OR NOT IS_LOG = 'Y') " . ($date !== false && $replyMessId <= 0 ? " AND MESSAGE_TYPE = 'P' AND DATE_CREATE > '" . $DB->ForSql($date) . "' " : "") . ($replyMessId > 0 ? " AND MESSAGE_TYPE = 'P' AND ID >= '" . $replyMessId . "' " : "") . "ORDER BY DATE_CREATE " . ($date !== false ? "ASC" : "DESC") . " "; if (is_array($arNavStartParams) && IntVal($arNavStartParams["nTopCount"]) <= 0) { $strSql_tmp = "SELECT COUNT(M.ID) as CNT " . "FROM b_sonet_messages M " . "WHERE (M.TO_USER_ID = " . $currentUserID . " " . ($userID > 0 ? "\tAND M.FROM_USER_ID = " . $userID . " " : "") . "\tAND M.TO_DELETED = 'N' " . "\tOR " . "\tM.FROM_USER_ID = " . $currentUserID . " " . ($userID > 0 ? "\tAND M.TO_USER_ID = " . $userID . " " : "") . "\tAND M.FROM_DELETED = 'N') " . "\tAND (IS_LOG IS NULL OR NOT IS_LOG = 'Y') " . ($date !== false || $replyMessId > 0 ? " AND M.MESSAGE_TYPE = 'P' " : ""); $dbRes = $DB->Query($strSql_tmp, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $cnt = 0; if ($arRes = $dbRes->Fetch()) { $cnt = $arRes["CNT"]; } $dbRes = new CDBResult(); $dbRes->NavQuery($strSql, $cnt, $arNavStartParams); } else { if (is_array($arNavStartParams) && IntVal($arNavStartParams["nTopCount"]) > 0) { $strSql .= "LIMIT " . IntVal($arNavStartParams["nTopCount"]); } $dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); } return $dbRes; }
public static function GetOffset($userId = false) { if (!$userId) { if (!isset(self::$offset)) { if (!CTimeZone::Enabled()) { CTimeZone::Enable(); self::$offset = CTimeZone::GetOffset(); CTimeZone::Disable(); } else { self::$offset = CTimeZone::GetOffset(); } } return self::$offset; } // Fetch recipient timezone if (!isset(self::$arTimezoneOffsets[$userId])) { self::$arTimezoneOffsets[$userId] = CTimeZone::GetOffset($userId); } return self::$arTimezoneOffsets[$userId]; }