PageRenderTime 64ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/components/bitrix/forum.statistic/component.php

https://gitlab.com/alexprowars/bitrix
PHP | 269 lines | 216 code | 12 blank | 41 comment | 47 complexity | 582ca5e4157e6cc16516431a15412421 MD5 | raw file
  1. <?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
  2. /**
  3. * @global CMain $APPLICATION
  4. * @global CUser $USER
  5. * @param array $arParams
  6. * @param array $arResult
  7. * @param string $componentName
  8. * @param CBitrixComponent $this
  9. */
  10. if (!CModule::IncludeModule("forum")):
  11. ShowError(GetMessage("F_NO_MODULE"));
  12. return 0;
  13. endif;
  14. /********************************************************************
  15. Input params
  16. ********************************************************************/
  17. /***************** BASE ********************************************/
  18. $arParams["FID"] = (intval($arParams["FID"]) <= 0 ? false : intval($arParams["FID"]));
  19. $arParams["TID"] = (intval($arParams["TID"]) <= 0 ? false : intval($arParams["TID"]));
  20. $arParams["TITLE_SEO"] = trim($arParams["TITLE_SEO"]);
  21. $arParams["TITLE_SEO"] = $arParams["TITLE_SEO"] <> '' ? $arParams["TITLE_SEO"] : trim($_REQUEST["TITLE_SEO"]);
  22. if ($arParams["TID"] <= 0 && $arParams["TITLE_SEO"] <> '')
  23. $arParams["TID"] = intval(strtok($arParams["TITLE_SEO"], "-"));
  24. $arParams["PERIOD"] = (intval($arParams["PERIOD"]) <= 0 ? 10 : intval($arParams["PERIOD"])); // input params in minuts
  25. $arParams["PERIOD"] *= 60;
  26. $arParams["SHOW"] = (is_array($arParams["SHOW"]) ? $arParams["SHOW"] : array("BIRTHDAY", "USERS_ONLINE", "STATISTIC"));
  27. $arParams["SHOW_FORUM_ANOTHER_SITE"] = ($arParams["SHOW_FORUM_ANOTHER_SITE"] == "Y" ? "Y" : "N");
  28. $arParams["FORUM_ID"] = (is_array($arParams["FORUM_ID"]) ? $arParams["FORUM_ID"] : array());
  29. /***************** URL *********************************************/
  30. $URL_NAME_DEFAULT = array(
  31. "profile_view" => "PAGE_NAME=profile_view&UID=#UID#");
  32. foreach ($URL_NAME_DEFAULT as $URL => $URL_VALUE)
  33. {
  34. if (trim($arParams["URL_TEMPLATES_".mb_strtoupper($URL)]) == '')
  35. $arParams["URL_TEMPLATES_".mb_strtoupper($URL)] = $APPLICATION->GetCurPage()."?".$URL_VALUE;
  36. $arParams["~URL_TEMPLATES_".mb_strtoupper($URL)] = $arParams["URL_TEMPLATES_".mb_strtoupper($URL)];
  37. $arParams["URL_TEMPLATES_".mb_strtoupper($URL)] = htmlspecialcharsbx($arParams["~URL_TEMPLATES_".mb_strtoupper($URL)]);
  38. }
  39. /***************** ADDITIONAL **************************************/
  40. $arParams["WORD_LENGTH"] = intval($arParams["WORD_LENGTH"]);
  41. $arParams["NAME_TEMPLATE"] = (!empty($arParams["NAME_TEMPLATE"]) ? $arParams["NAME_TEMPLATE"] : false);
  42. /***************** STANDART ****************************************/
  43. if ($arParams["CACHE_TYPE"] == "Y" || ($arParams["CACHE_TYPE"] == "A" && COption::GetOptionString("main", "component_cache_on", "Y") == "Y"))
  44. {
  45. $arParams["CACHE_TIME"] = intval($arParams["CACHE_TIME"]);
  46. $arParams["CACHE_TIME_USER_STAT"] = intval($arParams["CACHE_TIME_USER_STAT"]);
  47. $arParams["CACHE_TIME_FOR_FORUM_STAT"] = intval($arParams["CACHE_TIME_FOR_FORUM_STAT"]);
  48. }
  49. else
  50. {
  51. $arParams["CACHE_TIME"] = 0;
  52. $arParams["CACHE_TIME_USER_STAT"] = 0;
  53. $arParams["CACHE_TIME_FOR_FORUM_STAT"] = 0;
  54. }
  55. /********************************************************************
  56. /Input params
  57. ********************************************************************/
  58. /********************************************************************
  59. Default values
  60. ********************************************************************/
  61. $parser = new forumTextParser(LANGUAGE_ID, false, false, "light");
  62. $parser->MaxStringLen = $arParams["WORD_LENGTH"];
  63. $arResult["STATISTIC"] = array(
  64. "FORUMS" => 0,
  65. "TOPICS" => 0,
  66. "MESSAGES" => 0,
  67. "USERS" => 0,
  68. "USERS_ON_FORUM" => 0,
  69. "USERS_ON_FORUM_ACTIVE" => 0);
  70. $arResult["USERS_BIRTHDAY"] = array();
  71. $arResult["USERS"] = array();
  72. $arResult["USERS_HIDDEN"] = array();
  73. $arResult["GUEST"] = 0;
  74. $arResult["REGISTER"] = 0;
  75. $arResult["ALL"] = 0;
  76. $cache = new CPHPCache();
  77. $cache_path_main = str_replace(array(":", "//"), "/", "/".SITE_ID."/".$componentName."/");
  78. /********************************************************************
  79. /Default values
  80. ********************************************************************/
  81. /********************************************************************
  82. Data
  83. ********************************************************************/
  84. /************** Users Online ***************************************/
  85. if (in_array("USERS_ONLINE", $arParams["SHOW"]))
  86. {
  87. $UserHideOnLine = 0;
  88. $Guest = 0;
  89. $arFields = array();
  90. if ($arParams["FID"] && !$arParams["TID"])
  91. $arFields["FORUM_ID"] = $arParams["FID"];
  92. elseif ($arParams["TID"])
  93. $arFields["TOPIC_ID"] = $arParams["TID"];
  94. else
  95. $arFields["SITE_ID"] = SITE_ID;
  96. $arFields += array("ACTIVE" => "Y", "<=PERIOD" => $arParams["PERIOD"], "COUNT_GUEST" => true);
  97. $cache_id = "forum_user_online_".serialize(array($arFields, $arParams["URL_TEMPLATES_PROFILE_VIEW"]));
  98. $cache_path = $cache_path_main."user_online/";
  99. /* if (!$arParams["TID"] && $arParams["CACHE_TIME_USER_STAT"] > 0 &&
  100. $cache->InitCache($arParams["CACHE_TIME_USER_STAT"], $cache_id, $cache_path))
  101. {
  102. $res = $cache->GetVars();
  103. if (is_array($res["arUser"]))
  104. $arUser = $res["arUser"];
  105. }
  106. else
  107. */ {
  108. $arUser = array(
  109. "USERS" => array(), "USERS_HIDDEN" => array(),
  110. "GUEST" => 0, "REGISTER" => 0, "ALL" => 0);
  111. $db_res = CForumStat::GetListEx(
  112. array("USER_ID" => "DESC"),
  113. $arFields,
  114. array("sNameTemplate" => $arParams["NAME_TEMPLATE"]));
  115. if ($db_res && ($res = $db_res->GetNext()))
  116. {
  117. do
  118. {
  119. if ($res["USER_ID"] > 0)
  120. {
  121. $res["SHOW_NAME"] = $parser->wrap_long_words($res["SHOW_NAME"]);
  122. $res["profile_view"] = CComponentEngine::MakePathFromTemplate(
  123. $arParams["URL_TEMPLATES_PROFILE_VIEW"],
  124. array("UID" => $res["USER_ID"]));
  125. if ($res["HIDE_FROM_ONLINE"] != "Y")
  126. $arUser["USERS"][] = $res;
  127. else
  128. $arUser["USERS_HIDDEN"][] = $res;
  129. }
  130. else
  131. $Guest = intval($res["COUNT_USER"]);
  132. }while ($res = $db_res->GetNext());
  133. $arUser["GUEST"] = $Guest;
  134. $arUser["REGISTER"] = count($arUser["USERS"]) + count($arUser["USERS_HIDDEN"]);
  135. $arUser["ALL"] = $arUser["REGISTER"] + $Guest;
  136. }
  137. if (!$arParams["TID"] && $arParams["CACHE_TIME_USER_STAT"] > 0)
  138. {
  139. $cache->StartDataCache($arParams["CACHE_TIME_USER_STAT"], $cache_id, $cache_path);
  140. $cache->EndDataCache(array("arUser" => $arUser));
  141. }
  142. }
  143. $arResult["USERS"] = $arUser["USERS"];
  144. $arResult["USERS_HIDDEN"] = $arUser["USERS_HIDDEN"];
  145. $arResult["GUEST"] = $arUser["GUEST"];
  146. $arResult["REGISTER"] = $arUser["REGISTER"];
  147. $arResult["ALL"] = $arUser["ALL"];
  148. }
  149. /************** Birthday *******************************************/
  150. if (in_array("BIRTHDAY", $arParams["SHOW"]))
  151. {
  152. $arUserBirthday = false;
  153. $cache_id = md5(serialize(array(
  154. "forum_userbirthday_".preg_replace("/\s.,;:!?\#\-\*\|\[\]\(\)\//is", "_", $arParams["URL_TEMPLATES_PROFILE_VIEW"]),
  155. date("m-d"), CTimeZone::GetOffset())));
  156. $cache_path = $cache_path_main."birthday/";
  157. $BIRTHDAY_CACHE_TIME = 60*60*24;
  158. if ($arParams["CACHE_TIME"] > 0 && $cache->InitCache($BIRTHDAY_CACHE_TIME, $cache_id, $cache_path))
  159. {
  160. $res = $cache->GetVars();
  161. $arTTL = getdate();
  162. $TTL = mktime(0, 0, 0, $arTTL['mon'], $arTTL['mday'], $arTTL['year']);
  163. if (is_array($res["arUserBirthday"]) && isset($res['timestamp']) && $TTL < ($res['timestamp']+$BIRTHDAY_CACHE_TIME))
  164. $arUserBirthday = $res["arUserBirthday"];
  165. }
  166. else
  167. {
  168. $db_res = CForumUser::GetList(array(), array(
  169. "ACTIVE" => "Y",
  170. "PERSONAL_BIRTHDAY_DATE" => Date("m-d"),
  171. ">=USER_ID" => 1,
  172. "SHOW_ABC" => ""),
  173. array("sNameTemplate" => $arParams["NAME_TEMPLATE"]));
  174. if ($db_res && ($res = $db_res->GetNext()))
  175. {
  176. do
  177. {
  178. $res["SHOW_NAME"] = $parser->wrap_long_words($res["SHOW_ABC"]);
  179. $date_birthday = ParseDateTime($res["PERSONAL_BIRTHDAY"]);
  180. $res["AGE"] = intval(date("Y")) - intval($date_birthday["YYYY"]);
  181. $res["profile_view"] = CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_PROFILE_VIEW"], array("UID" => $res["USER_ID"]));
  182. $arUserBirthday[] = $res;
  183. } while($res = $db_res->GetNext());
  184. }
  185. if ($arParams["CACHE_TIME"] > 0)
  186. {
  187. $cache->StartDataCache($BIRTHDAY_CACHE_TIME, $cache_id, $cache_path);
  188. $arTTL = getdate();
  189. $TTL = mktime(0, 0, 0, $arTTL['mon'], $arTTL['mday'], $arTTL['year']);
  190. $cache->EndDataCache(array(
  191. "arUserBirthday" => $arUserBirthday,
  192. "timestamp" => $TTL
  193. ));
  194. }
  195. }
  196. if (is_array($arUserBirthday))
  197. $arResult["USERS_BIRTHDAY"] = $arUserBirthday;
  198. }
  199. /************** Forum stats ****************************************/
  200. if (in_array("STATISTIC", $arParams["SHOW"]))
  201. {
  202. $cache_id = serialize(array("forum_user_stat_0", $USER->GetGroups(), $arParams["SHOW_FORUM_ANOTHER_SITE"], $arParams["FORUM_ID"], $arParams["FID"]));
  203. $cache_path = $cache_path_main."forums/";
  204. if ($arParams["CACHE_TIME_FOR_FORUM_STAT"] > 0 && $cache->InitCache($arParams["CACHE_TIME_FOR_FORUM_STAT"], $cache_id, $cache_path))
  205. {
  206. $res = $cache->GetVars();
  207. if (is_array($res["STATISTIC"]))
  208. $arResult["STATISTIC"] = $res["STATISTIC"];
  209. }
  210. else
  211. {
  212. $arFilter = array();
  213. if (!CForumUser::IsAdmin())
  214. {
  215. $arFilter = array(
  216. "LID" => SITE_ID,
  217. "PERMS" => array($USER->GetGroups(), 'A'),
  218. "ACTIVE" => "Y");
  219. }
  220. elseif ($arParams["SHOW_FORUM_ANOTHER_SITE"] == "Y")
  221. {
  222. $arFilter["LID"] = SITE_ID;
  223. }
  224. if (is_array($arParams["FORUM_ID"]) && !empty($arParams["FORUM_ID"]))
  225. {
  226. $arFilter["@ID"] = $arParams["FORUM_ID"];
  227. }
  228. if (!empty($arParams["FID"]))
  229. $arFilter["ID"] = $arParams["FID"];
  230. else
  231. {
  232. $arResult["STATISTIC"]["USERS"] = CUser::GetCount();
  233. $arResult["STATISTIC"]["USERS_ON_FORUM"] = CForumUser::CountUsers(false, array("ACTIVE" => "Y"));
  234. $arResult["STATISTIC"]["USERS_ON_FORUM_ACTIVE"] = CForumUser::CountUsers(true, array("ACTIVE" => "Y"));
  235. }
  236. $db_res = CForumNew::GetListEx(array(), $arFilter);
  237. if ($db_res && $res = $db_res->GetNext())
  238. {
  239. do
  240. {
  241. $arResult["STATISTIC"]["FORUMS"]++;
  242. $arResult["STATISTIC"]["TOPICS"] += intval($res["TOPICS"]);
  243. $arResult["STATISTIC"]["POSTS"] += intval($res["POSTS"]);
  244. } while ($res = $db_res->GetNext());
  245. }
  246. if ($arParams["CACHE_TIME_FOR_FORUM_STAT"] > 0)
  247. {
  248. $cache->StartDataCache($arParams["CACHE_TIME_FOR_FORUM_STAT"], $cache_id, $cache_path);
  249. $cache->EndDataCache(array("STATISTIC" => $arResult["STATISTIC"]));
  250. }
  251. }
  252. }
  253. /********************************************************************
  254. Data/
  255. ********************************************************************/
  256. $this->IncludeComponentTemplate();
  257. ?>