/components/bitrix/forum.statistic/component.php
PHP | 269 lines | 216 code | 12 blank | 41 comment | 47 complexity | 582ca5e4157e6cc16516431a15412421 MD5 | raw file
- <?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
- /**
- * @global CMain $APPLICATION
- * @global CUser $USER
- * @param array $arParams
- * @param array $arResult
- * @param string $componentName
- * @param CBitrixComponent $this
- */
- if (!CModule::IncludeModule("forum")):
- ShowError(GetMessage("F_NO_MODULE"));
- return 0;
- endif;
- /********************************************************************
- Input params
- ********************************************************************/
- /***************** BASE ********************************************/
- $arParams["FID"] = (intval($arParams["FID"]) <= 0 ? false : intval($arParams["FID"]));
- $arParams["TID"] = (intval($arParams["TID"]) <= 0 ? false : intval($arParams["TID"]));
- $arParams["TITLE_SEO"] = trim($arParams["TITLE_SEO"]);
- $arParams["TITLE_SEO"] = $arParams["TITLE_SEO"] <> '' ? $arParams["TITLE_SEO"] : trim($_REQUEST["TITLE_SEO"]);
- if ($arParams["TID"] <= 0 && $arParams["TITLE_SEO"] <> '')
- $arParams["TID"] = intval(strtok($arParams["TITLE_SEO"], "-"));
- $arParams["PERIOD"] = (intval($arParams["PERIOD"]) <= 0 ? 10 : intval($arParams["PERIOD"])); // input params in minuts
- $arParams["PERIOD"] *= 60;
- $arParams["SHOW"] = (is_array($arParams["SHOW"]) ? $arParams["SHOW"] : array("BIRTHDAY", "USERS_ONLINE", "STATISTIC"));
- $arParams["SHOW_FORUM_ANOTHER_SITE"] = ($arParams["SHOW_FORUM_ANOTHER_SITE"] == "Y" ? "Y" : "N");
- $arParams["FORUM_ID"] = (is_array($arParams["FORUM_ID"]) ? $arParams["FORUM_ID"] : array());
- /***************** URL *********************************************/
- $URL_NAME_DEFAULT = array(
- "profile_view" => "PAGE_NAME=profile_view&UID=#UID#");
- foreach ($URL_NAME_DEFAULT as $URL => $URL_VALUE)
- {
- if (trim($arParams["URL_TEMPLATES_".mb_strtoupper($URL)]) == '')
- $arParams["URL_TEMPLATES_".mb_strtoupper($URL)] = $APPLICATION->GetCurPage()."?".$URL_VALUE;
- $arParams["~URL_TEMPLATES_".mb_strtoupper($URL)] = $arParams["URL_TEMPLATES_".mb_strtoupper($URL)];
- $arParams["URL_TEMPLATES_".mb_strtoupper($URL)] = htmlspecialcharsbx($arParams["~URL_TEMPLATES_".mb_strtoupper($URL)]);
- }
- /***************** ADDITIONAL **************************************/
- $arParams["WORD_LENGTH"] = intval($arParams["WORD_LENGTH"]);
- $arParams["NAME_TEMPLATE"] = (!empty($arParams["NAME_TEMPLATE"]) ? $arParams["NAME_TEMPLATE"] : false);
- /***************** STANDART ****************************************/
- if ($arParams["CACHE_TYPE"] == "Y" || ($arParams["CACHE_TYPE"] == "A" && COption::GetOptionString("main", "component_cache_on", "Y") == "Y"))
- {
- $arParams["CACHE_TIME"] = intval($arParams["CACHE_TIME"]);
- $arParams["CACHE_TIME_USER_STAT"] = intval($arParams["CACHE_TIME_USER_STAT"]);
- $arParams["CACHE_TIME_FOR_FORUM_STAT"] = intval($arParams["CACHE_TIME_FOR_FORUM_STAT"]);
- }
- else
- {
- $arParams["CACHE_TIME"] = 0;
- $arParams["CACHE_TIME_USER_STAT"] = 0;
- $arParams["CACHE_TIME_FOR_FORUM_STAT"] = 0;
- }
- /********************************************************************
- /Input params
- ********************************************************************/
- /********************************************************************
- Default values
- ********************************************************************/
- $parser = new forumTextParser(LANGUAGE_ID, false, false, "light");
- $parser->MaxStringLen = $arParams["WORD_LENGTH"];
- $arResult["STATISTIC"] = array(
- "FORUMS" => 0,
- "TOPICS" => 0,
- "MESSAGES" => 0,
- "USERS" => 0,
- "USERS_ON_FORUM" => 0,
- "USERS_ON_FORUM_ACTIVE" => 0);
- $arResult["USERS_BIRTHDAY"] = array();
- $arResult["USERS"] = array();
- $arResult["USERS_HIDDEN"] = array();
- $arResult["GUEST"] = 0;
- $arResult["REGISTER"] = 0;
- $arResult["ALL"] = 0;
- $cache = new CPHPCache();
- $cache_path_main = str_replace(array(":", "//"), "/", "/".SITE_ID."/".$componentName."/");
- /********************************************************************
- /Default values
- ********************************************************************/
-
- /********************************************************************
- Data
- ********************************************************************/
- /************** Users Online ***************************************/
- if (in_array("USERS_ONLINE", $arParams["SHOW"]))
- {
- $UserHideOnLine = 0;
- $Guest = 0;
- $arFields = array();
- if ($arParams["FID"] && !$arParams["TID"])
- $arFields["FORUM_ID"] = $arParams["FID"];
- elseif ($arParams["TID"])
- $arFields["TOPIC_ID"] = $arParams["TID"];
- else
- $arFields["SITE_ID"] = SITE_ID;
- $arFields += array("ACTIVE" => "Y", "<=PERIOD" => $arParams["PERIOD"], "COUNT_GUEST" => true);
- $cache_id = "forum_user_online_".serialize(array($arFields, $arParams["URL_TEMPLATES_PROFILE_VIEW"]));
- $cache_path = $cache_path_main."user_online/";
- /* if (!$arParams["TID"] && $arParams["CACHE_TIME_USER_STAT"] > 0 &&
- $cache->InitCache($arParams["CACHE_TIME_USER_STAT"], $cache_id, $cache_path))
- {
- $res = $cache->GetVars();
- if (is_array($res["arUser"]))
- $arUser = $res["arUser"];
- }
- else
- */ {
- $arUser = array(
- "USERS" => array(), "USERS_HIDDEN" => array(),
- "GUEST" => 0, "REGISTER" => 0, "ALL" => 0);
- $db_res = CForumStat::GetListEx(
- array("USER_ID" => "DESC"),
- $arFields,
- array("sNameTemplate" => $arParams["NAME_TEMPLATE"]));
- if ($db_res && ($res = $db_res->GetNext()))
- {
- do
- {
- if ($res["USER_ID"] > 0)
- {
- $res["SHOW_NAME"] = $parser->wrap_long_words($res["SHOW_NAME"]);
- $res["profile_view"] = CComponentEngine::MakePathFromTemplate(
- $arParams["URL_TEMPLATES_PROFILE_VIEW"],
- array("UID" => $res["USER_ID"]));
- if ($res["HIDE_FROM_ONLINE"] != "Y")
- $arUser["USERS"][] = $res;
- else
- $arUser["USERS_HIDDEN"][] = $res;
- }
- else
- $Guest = intval($res["COUNT_USER"]);
- }while ($res = $db_res->GetNext());
-
- $arUser["GUEST"] = $Guest;
- $arUser["REGISTER"] = count($arUser["USERS"]) + count($arUser["USERS_HIDDEN"]);
- $arUser["ALL"] = $arUser["REGISTER"] + $Guest;
- }
- if (!$arParams["TID"] && $arParams["CACHE_TIME_USER_STAT"] > 0)
- {
- $cache->StartDataCache($arParams["CACHE_TIME_USER_STAT"], $cache_id, $cache_path);
- $cache->EndDataCache(array("arUser" => $arUser));
- }
- }
-
- $arResult["USERS"] = $arUser["USERS"];
- $arResult["USERS_HIDDEN"] = $arUser["USERS_HIDDEN"];
- $arResult["GUEST"] = $arUser["GUEST"];
- $arResult["REGISTER"] = $arUser["REGISTER"];
- $arResult["ALL"] = $arUser["ALL"];
- }
- /************** Birthday *******************************************/
- if (in_array("BIRTHDAY", $arParams["SHOW"]))
- {
- $arUserBirthday = false;
- $cache_id = md5(serialize(array(
- "forum_userbirthday_".preg_replace("/\s.,;:!?\#\-\*\|\[\]\(\)\//is", "_", $arParams["URL_TEMPLATES_PROFILE_VIEW"]),
- date("m-d"), CTimeZone::GetOffset())));
- $cache_path = $cache_path_main."birthday/";
- $BIRTHDAY_CACHE_TIME = 60*60*24;
- if ($arParams["CACHE_TIME"] > 0 && $cache->InitCache($BIRTHDAY_CACHE_TIME, $cache_id, $cache_path))
- {
- $res = $cache->GetVars();
- $arTTL = getdate();
- $TTL = mktime(0, 0, 0, $arTTL['mon'], $arTTL['mday'], $arTTL['year']);
- if (is_array($res["arUserBirthday"]) && isset($res['timestamp']) && $TTL < ($res['timestamp']+$BIRTHDAY_CACHE_TIME))
- $arUserBirthday = $res["arUserBirthday"];
- }
- else
- {
- $db_res = CForumUser::GetList(array(), array(
- "ACTIVE" => "Y",
- "PERSONAL_BIRTHDAY_DATE" => Date("m-d"),
- ">=USER_ID" => 1,
- "SHOW_ABC" => ""),
- array("sNameTemplate" => $arParams["NAME_TEMPLATE"]));
- if ($db_res && ($res = $db_res->GetNext()))
- {
- do
- {
- $res["SHOW_NAME"] = $parser->wrap_long_words($res["SHOW_ABC"]);
- $date_birthday = ParseDateTime($res["PERSONAL_BIRTHDAY"]);
- $res["AGE"] = intval(date("Y")) - intval($date_birthday["YYYY"]);
- $res["profile_view"] = CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_PROFILE_VIEW"], array("UID" => $res["USER_ID"]));
- $arUserBirthday[] = $res;
- } while($res = $db_res->GetNext());
- }
- if ($arParams["CACHE_TIME"] > 0)
- {
- $cache->StartDataCache($BIRTHDAY_CACHE_TIME, $cache_id, $cache_path);
- $arTTL = getdate();
- $TTL = mktime(0, 0, 0, $arTTL['mon'], $arTTL['mday'], $arTTL['year']);
- $cache->EndDataCache(array(
- "arUserBirthday" => $arUserBirthday,
- "timestamp" => $TTL
- ));
- }
- }
- if (is_array($arUserBirthday))
- $arResult["USERS_BIRTHDAY"] = $arUserBirthday;
- }
- /************** Forum stats ****************************************/
- if (in_array("STATISTIC", $arParams["SHOW"]))
- {
- $cache_id = serialize(array("forum_user_stat_0", $USER->GetGroups(), $arParams["SHOW_FORUM_ANOTHER_SITE"], $arParams["FORUM_ID"], $arParams["FID"]));
- $cache_path = $cache_path_main."forums/";
- if ($arParams["CACHE_TIME_FOR_FORUM_STAT"] > 0 && $cache->InitCache($arParams["CACHE_TIME_FOR_FORUM_STAT"], $cache_id, $cache_path))
- {
- $res = $cache->GetVars();
- if (is_array($res["STATISTIC"]))
- $arResult["STATISTIC"] = $res["STATISTIC"];
- }
- else
- {
- $arFilter = array();
- if (!CForumUser::IsAdmin())
- {
- $arFilter = array(
- "LID" => SITE_ID,
- "PERMS" => array($USER->GetGroups(), 'A'),
- "ACTIVE" => "Y");
- }
- elseif ($arParams["SHOW_FORUM_ANOTHER_SITE"] == "Y")
- {
- $arFilter["LID"] = SITE_ID;
- }
-
- if (is_array($arParams["FORUM_ID"]) && !empty($arParams["FORUM_ID"]))
- {
- $arFilter["@ID"] = $arParams["FORUM_ID"];
- }
- if (!empty($arParams["FID"]))
- $arFilter["ID"] = $arParams["FID"];
- else
- {
- $arResult["STATISTIC"]["USERS"] = CUser::GetCount();
- $arResult["STATISTIC"]["USERS_ON_FORUM"] = CForumUser::CountUsers(false, array("ACTIVE" => "Y"));
- $arResult["STATISTIC"]["USERS_ON_FORUM_ACTIVE"] = CForumUser::CountUsers(true, array("ACTIVE" => "Y"));
- }
- $db_res = CForumNew::GetListEx(array(), $arFilter);
- if ($db_res && $res = $db_res->GetNext())
- {
- do
- {
- $arResult["STATISTIC"]["FORUMS"]++;
- $arResult["STATISTIC"]["TOPICS"] += intval($res["TOPICS"]);
- $arResult["STATISTIC"]["POSTS"] += intval($res["POSTS"]);
- } while ($res = $db_res->GetNext());
- }
-
- if ($arParams["CACHE_TIME_FOR_FORUM_STAT"] > 0)
- {
- $cache->StartDataCache($arParams["CACHE_TIME_FOR_FORUM_STAT"], $cache_id, $cache_path);
- $cache->EndDataCache(array("STATISTIC" => $arResult["STATISTIC"]));
- }
- }
- }
- /********************************************************************
- Data/
- ********************************************************************/
- $this->IncludeComponentTemplate();
- ?>