function ForumInitParams() { // unset($_SESSION["FORUM"]); $UserLogin = "******"; $LastVisit = time() + CTimeZone::GetOffset(); if ($GLOBALS["USER"]->IsAuthorized()) { if (!is_array($_SESSION["FORUM"]["USER"]) || $_SESSION["FORUM"]["USER"]["USER_ID"] != $GLOBALS["USER"]->GetID()) { $_SESSION["FORUM"]["USER"] = CForumUser::GetByUSER_ID($GLOBALS["USER"]->GetID()); if ($_SESSION["FORUM"]["USER"]) { $_SESSION["FORUM"]["USER"]["LAST_VISIT_TIMESTAMP"] = MakeTimeStamp($_SESSION["FORUM"]["USER"]["LAST_VISIT"]); } else { $_SESSION["FORUM"]["USER"] = array(); $_SESSION["FORUM"]["USER"]["LAST_VISIT_TIMESTAMP"] = CForumNew::GetNowTime("timestamp"); } } elseif (empty($_SESSION["FORUM"]["USER"]["LAST_VISIT_TIMESTAMP"])) { $_SESSION["FORUM"]["USER"]["LAST_VISIT_TIMESTAMP"] = CForumNew::GetNowTime("timestamp"); } $arUser = $_SESSION["FORUM"]["USER"]; $UserLogin = $GLOBALS["USER"]->GetLogin(); $LastVisit = $_SESSION["FORUM"]["USER"]["LAST_VISIT_TIMESTAMP"]; // if info for this user is not exist that info gets from DB if (!is_array($_SESSION["FORUM"][$UserLogin]) || intVal($_SESSION["FORUM"][$UserLogin][0]) <= 0) { $_SESSION["FORUM"][$UserLogin] = array(); $db_res = CForumUser::GetListUserForumLastVisit(array(), array("USER_ID" => $GLOBALS["USER"]->GetID())); if ($db_res && ($res = $db_res->Fetch())) { do { $_SESSION["FORUM"][$UserLogin][intVal($res["FORUM_ID"])] = MakeTimeStamp($res["LAST_VISIT"]); } while ($res = $db_res->Fetch()); } if (intVal($_SESSION["FORUM"][$UserLogin][0]) <= 0) { $_SESSION["FORUM"][$UserLogin] = array(); CForumUser::SetUserForumLastVisit($GLOBALS["USER"]->GetID(), 0, false); $db_res = CForumUser::GetListUserForumLastVisit(array(), array("USER_ID" => $GLOBALS["USER"]->GetID(), "FORUM_ID" => 0)); if ($db_res && ($res = $db_res->Fetch())) { $_SESSION["FORUM"][$UserLogin][0] = MakeTimeStamp($res["LAST_VISIT"]); } else { $_SESSION["FORUM"][$UserLogin][0] = $LastVisit; } } } // synhronize guest session with authorized user session if (is_array($_SESSION["FORUM"]["GUEST_TID"]) && !empty($_SESSION["FORUM"]["GUEST_TID"])) { foreach ($_SESSION["FORUM"]["GUEST_TID"] as $key => $val) { CForumTopic::SetReadLabelsNew($key, false, $val, array("UPDATE_TOPIC_VIEWS" => "N")); } } // if (is_array($_SESSION["FORUM"]["GUEST"]) && (!empty($_SESSION["FORUM"]["GUEST"]))) // { // foreach ($_SESSION["FORUM"]["GUEST"] as $key => $val) // { // if (intVal($val) > intVal($_SESSION["FORUM"][$UserLogin][intVal($key)])) // $_SESSION["FORUM"][$UserLogin][intVal($key)] = intVal($val); // } // } unset($_SESSION["FORUM"]["GUEST_TID"]); unset($_SESSION["FORUM"]["GUEST"]); } else { if (!isset($_SESSION["FORUM"]["GUEST"]) || !is_array($_SESSION["FORUM"]["GUEST"])) { $forum_cookie = COption::GetOptionString("main", "cookie_name", "BITRIX_SM") . "_FORUM_GUEST"; if (isset($_COOKIE[$forum_cookie]) && strlen($_COOKIE[$forum_cookie]) > 0) { $arForum = explode("/", $_COOKIE[$forum_cookie]); if (is_array($arForum) && count($arForum) > 0) { foreach ($arForum as $forumInfo) { list($f, $lv) = explode("-", $forumInfo); $_SESSION["FORUM"]["GUEST"][intVal($f)] = intVal($lv); } } } } if (!isset($_SESSION["FORUM"]["GUEST"]) || !is_array($_SESSION["FORUM"]["GUEST"]) || intVal($_SESSION["FORUM"]["GUEST"][0]) < 0) { $_SESSION["FORUM"]["GUEST"] = array(); $_SESSION["FORUM"]["GUEST"][0] = CForumNew::GetNowTime(); } // All geting info put in cookies if (COption::GetOptionString("forum", "USE_COOKIE", "N") == "Y") { $arCookie = array(); foreach ($_SESSION["FORUM"]["GUEST"] as $key => $val) { $arCookie[] = $key . "-" . $val; } $GLOBALS["APPLICATION"]->set_cookie("FORUM_GUEST", implode("/", $arCookie), false, "/", false, false, "Y", false); } // It need to save info about visited topics for GUEST in cookies if (!isset($_SESSION["FORUM"]["GUEST_TID"]) || !is_array($_SESSION["FORUM"]["GUEST_TID"])) { $_SESSION["FORUM"]["GUEST_TID"] = array(); $topic_cookie = COption::GetOptionString("main", "cookie_name", "BITRIX_SM") . "_FORUM_GUEST_TID"; if (isset($_COOKIE[$topic_cookie]) && strlen($_COOKIE[$topic_cookie]) > 0) { $arTopic = explode("/", $_COOKIE[$topic_cookie]); if (is_array($arTopic) && count($arTopic) > 0) { foreach ($arTopic as $topicInfo) { list($f, $lv) = explode("-", $topicInfo); $_SESSION["FORUM"]["GUEST_TID"][intVal($f)] = intVal($lv); } } } } } // cleaning session date. if (is_array($_SESSION["FORUM"])) { foreach ($_SESSION["FORUM"] as $key => $val) { if (substr($key, 0, strLen("LAST_VISIT_FORUM_")) == "LAST_VISIT_FORUM_") { unset($_SESSION["FORUM"][$key]); } } } // and put info in public variable if (is_array($_SESSION["FORUM"][$UserLogin])) { foreach ($_SESSION["FORUM"][$UserLogin] as $key => $val) { $_SESSION["FORUM"]["LAST_VISIT_FORUM_" . $key] = $val; } } else { $_SESSION["FORUM"]["LAST_VISIT_FORUM_0"] = CForumNew::GetNowTime(); } return $_SESSION; }