コード例 #1
0
ファイル: include.php プロジェクト: DarneoStudio/bitrix
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;
}