PageRenderTime 48ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/components/bitrix/event_list/component.php

https://gitlab.com/alexprowars/bitrix
PHP | 374 lines | 331 code | 29 blank | 14 comment | 62 complexity | 88994b98c660c49dbd46e7bce90cdea2 MD5 | raw file
  1. <?php
  2. if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)
  3. die();
  4. /**
  5. * Bitrix vars
  6. * @global CUser $USER
  7. * @global CMain $APPLICATION
  8. * @var array $arParams
  9. * @var array $arResult
  10. * @var CBitrixComponent $this
  11. */
  12. if(!$USER->CanDoOperation('view_event_log'))
  13. {
  14. ShowError(GetMessage("ACCESS_DENIED"));
  15. return;
  16. }
  17. /** @var CEventMain[] $arModuleObjects */
  18. $arModuleObjects = array();
  19. $arAllFilter = array();
  20. $currentTemplateName = $this->getTemplateName();
  21. if ($currentTemplateName == "grid")
  22. {
  23. $arResult["GRID_ID"] = "event_list_grid";
  24. $arResult["ELEMENTS_ROWS"] = array();
  25. $grid = new CGridOptions($arResult["GRID_ID"]);
  26. $nav = $grid->GetNavParams();
  27. $arParams["PAGE_NUM"] = $nav["nPageSize"];
  28. }
  29. foreach(GetModuleEvents("main", "OnEventLogGetAuditHandlers", true) as $arEvent)
  30. {
  31. $ModuleEvent = ExecuteModuleEventEx($arEvent);
  32. $arModuleObjects[] = $ModuleEvent;
  33. $arAllFilter = $arAllFilter + $ModuleEvent->GetFilter();
  34. }
  35. if (is_array($arParams["FILTER"]))
  36. {
  37. foreach($arParams["FILTER"] as $key => $val)
  38. {
  39. $arResult["ActiveFeatures"][$val] = $arAllFilter[$val];
  40. }
  41. }
  42. if (is_array($arResult["ActiveFeatures"]) && count($arResult["ActiveFeatures"]) > 0)
  43. {
  44. $arResult["NO_ACTIVE_FEATURES"] = false;
  45. if (!isset($_REQUEST["flt_event_id"]))
  46. {
  47. $arParams["EVENT_ID"] = CUserOptions::GetOption("main", "~event_list");
  48. $flt_event_id = (empty($arParams["EVENT_ID"])) ? $arParams["FILTER"] : $arParams["EVENT_ID"];
  49. }
  50. else
  51. {
  52. $arResult["flt_event_id"] = $_REQUEST["flt_event_id"];
  53. if (array_key_exists("flt_event_id_all", $_REQUEST) && $_REQUEST["flt_event_id_all"] == "Y")
  54. {
  55. $arParams["EVENT_ID"] = "";
  56. $flt_event_id = $arParams["FILTER"];
  57. if($USER->IsAuthorized() && check_bitrix_sessid())
  58. CUserOptions::DeleteOption("main", "~event_list");
  59. }
  60. else
  61. {
  62. $flt_event_id = $_REQUEST["flt_event_id"]; // checked events
  63. foreach($flt_event_id as $key => $val)
  64. $flt_event_id[$key] = htmlspecialcharsbx($val);
  65. $arParams["EVENT_ID"] = $flt_event_id;
  66. if($USER->IsAuthorized() && check_bitrix_sessid())
  67. CUserOptions::SetOption("main", "~event_list", $arParams["EVENT_ID"]);
  68. }
  69. }
  70. $arObjectTypes = array(
  71. "USER_AUTHORIZE" => "[USER_AUTHORIZE] ".GetMessage("MAIN_EVENTLOG_USER_AUTHORIZE"),
  72. "USER_DELETE" => "[USER_DELETE] ".GetMessage("MAIN_EVENTLOG_USER_DELETE"),
  73. "USER_INFO" => "[USER_INFO] ".GetMessage("MAIN_EVENTLOG_USER_INFO"),
  74. "USER_LOGIN" => "[USER_LOGIN] ".GetMessage("MAIN_EVENTLOG_USER_LOGIN"),
  75. "USER_LOGINBYHASH" => "[USER_LOGINBYHASH] ".GetMessage("MAIN_EVENTLOG_USER_LOGINBYHASH_FAILED"),
  76. "USER_LOGOUT" => "[USER_LOGOUT] ".GetMessage("MAIN_EVENTLOG_USER_LOGOUT"),
  77. "USER_PASSWORD_CHANGED" => "[USER_PASSWORD_CHANGED] ".GetMessage("MAIN_EVENTLOG_USER_PASSWORD_CHANGED"),
  78. "USER_REGISTER" => "[USER_REGISTER] ".GetMessage("MAIN_EVENTLOG_USER_REGISTER"),
  79. "USER_REGISTER_FAIL" => "[USER_REGISTER_FAIL] ".GetMessage("MAIN_EVENTLOG_USER_REGISTER_FAIL"),
  80. "USER_GROUP_CHANGED" => "[USER_GROUP_CHANGED] ".GetMessage("MAIN_EVENTLOG_GROUP"),
  81. "GROUP_POLICY_CHANGED" => "[GROUP_POLICY_CHANGED] ".GetMessage("MAIN_EVENTLOG_GROUP_POLICY"),
  82. "MODULE_RIGHTS_CHANGED" => "[MODULE_RIGHTS_CHANGED] ".GetMessage("MAIN_EVENTLOG_MODULE"),
  83. "FILE_PERMISSION_CHANGED" => "[FILE_PERMISSION_CHANGED] ".GetMessage("MAIN_EVENTLOG_FILE"),
  84. "TASK_CHANGED" => "[TASK_CHANGED] ".GetMessage("MAIN_EVENTLOG_TASK"),
  85. "MP_MODULE_INSTALLED" => "[MP_MODULE_INSTALLED] ".GetMessage("MAIN_EVENTLOG_MP_MODULE_INSTALLED"),
  86. "MP_MODULE_UNINSTALLED" => "[MP_MODULE_UNINSTALLED] ".GetMessage("MAIN_EVENTLOG_MP_MODULE_UNINSTALLED"),
  87. "MP_MODULE_DELETED" => "[MP_MODULE_DELETED] ".GetMessage("MAIN_EVENTLOG_MP_MODULE_DELETED"),
  88. "MP_MODULE_DOWNLOADED" => "[MP_MODULE_DOWNLOADED] ".GetMessage("MAIN_EVENTLOG_MP_MODULE_DOWNLOADED"),
  89. );
  90. $arFilter["MODULE_ITEM"] = array(); //filter for GetList
  91. if (\Bitrix\Main\ModuleManager::isModuleInstalled("bitrix24"))
  92. {
  93. $arFilter["MODULE_ITEM"][] = array(
  94. "AUDIT_TYPE_ID" => "USER_AUTHORIZE"
  95. );
  96. }
  97. else
  98. {
  99. foreach($arModuleObjects as $key => $val)
  100. {
  101. $arObjectTypes = array_merge($arObjectTypes, $val->GetAuditTypes());
  102. $ar = $val->GetFilter();
  103. $filters = array_keys($ar);
  104. $var = array_intersect($filters, $flt_event_id);
  105. if ($var)
  106. {
  107. if(isset($ar["IBLOCK"]))
  108. {
  109. //iblock has more complex structure because logs are kept for individual blocks
  110. $var = $filters;
  111. }
  112. $arFilter["MODULE_ITEM"] = array_merge($arFilter["MODULE_ITEM"], $val->GetFilterSQL($var));
  113. }
  114. }
  115. }
  116. //USER
  117. if (is_array($_REQUEST["flt_created_by_id"]))
  118. $_REQUEST["flt_created_by_id"] = $_REQUEST["flt_created_by_id"][0];
  119. $find_user_id = "";
  120. if (intval($_REQUEST["flt_created_by_id"]) > 0)
  121. {
  122. $find_user_id = $_REQUEST["flt_created_by_id"];
  123. }
  124. else
  125. {
  126. if (CModule::IncludeModule("socialnetwork"))
  127. {
  128. $arFoundUsers = CSocNetUser::SearchUser($_REQUEST["flt_created_by_id"], false);
  129. if (is_array($arFoundUsers) && count($arFoundUsers) > 0)
  130. $find_user_id = key($arFoundUsers);
  131. }
  132. }
  133. // for date
  134. if (
  135. array_key_exists("flt_date_datesel", $_REQUEST)
  136. && $_REQUEST["flt_date_datesel"] <> ''
  137. )
  138. {
  139. $_REQUEST["flt_date_datesel"] = htmlspecialcharsbx($_REQUEST["flt_date_datesel"]);
  140. switch($_REQUEST["flt_date_datesel"])
  141. {
  142. case "today":
  143. $arParams["LOG_DATE_FROM"] = ConvertTimeStamp(MakeTimeStamp(date("d.m.Y 00:00:00"), "DD.MM.YYYY HH:MI:SS"), "FULL");
  144. $arParams["LOG_DATE_TO"] = ConvertTimeStamp(time(), "FULL");
  145. break;
  146. case "yesterday":
  147. $arParams["LOG_DATE_FROM"] = ConvertTimeStamp(MakeTimeStamp(date("d.m.Y 00:00:00", time() - 86400), "DD.MM.YYYY HH:MI:SS"), "FULL");
  148. $arParams["LOG_DATE_TO"] = ConvertTimeStamp(MakeTimeStamp(date("d.m.Y 23:59:59", time() - 86400), "DD.MM.YYYY HH:MI:SS"), "FULL");
  149. break;
  150. case "week":
  151. $day = date("w");
  152. if($day == 0)
  153. $day = 7;
  154. $arParams["LOG_DATE_FROM"] = ConvertTimeStamp(time()-($day-1)*86400, "FULL");
  155. $arParams["LOG_DATE_TO"] = ConvertTimeStamp(time()+(7-$day)*86400, "FULL");
  156. break;
  157. case "week_ago":
  158. $day = date("w");
  159. if($day == 0)
  160. $day = 7;
  161. $arParams["LOG_DATE_FROM"] = ConvertTimeStamp(time()-($day-1+7)*86400, "FULL");
  162. $arParams["LOG_DATE_TO"] = ConvertTimeStamp(time()-($day)*86400, "FULL");
  163. break;
  164. case "month":
  165. $arParams["LOG_DATE_FROM"] = ConvertTimeStamp(mktime(0, 0, 0, date("n"), 1), "FULL");
  166. $arParams["LOG_DATE_TO"] = ConvertTimeStamp(mktime(0, 0, 0, date("n")+1, 0), "FULL");
  167. break;
  168. case "month_ago":
  169. $arParams["LOG_DATE_FROM"] = ConvertTimeStamp(mktime(0, 0, 0, date("n")-1, 1), "FULL");
  170. $arParams["LOG_DATE_TO"] = ConvertTimeStamp(mktime(0, 0, 0, date("n"), 0), "FULL");
  171. break;
  172. case "days":
  173. $arParams["LOG_DATE_FROM"] = ConvertTimeStamp(time() - intval($_REQUEST["flt_date_days"])*86400, "FULL");
  174. $arParams["LOG_DATE_TO"] = "";
  175. break;
  176. case "exact":
  177. $day = ConvertDateTime($_REQUEST["flt_date_from"], "DD.MM.YYYY");
  178. $arParams["LOG_DATE_FROM"] = ConvertTimeStamp(MakeTimeStamp($day." 00:00:00", "DD.MM.YYYY HH:MI:SS"), "FULL");
  179. $arParams["LOG_DATE_TO"] = ConvertTimeStamp(MakeTimeStamp($day." 23:59:59", "DD.MM.YYYY HH:MI:SS"), "FULL");
  180. break;
  181. case "after":
  182. $arParams["LOG_DATE_FROM"] = $_REQUEST["flt_date_from"];
  183. $arParams["LOG_DATE_TO"] = "";
  184. break;
  185. case "before":
  186. $arParams["LOG_DATE_FROM"] = "";
  187. $arParams["LOG_DATE_TO"] = $_REQUEST["flt_date_to"];
  188. break;
  189. case "interval":
  190. $dayFrom = ConvertDateTime($_REQUEST["flt_date_from"], "DD.MM.YYYY");
  191. $dayTo = ConvertDateTime($_REQUEST["flt_date_to"], "DD.MM.YYYY");
  192. $arParams["LOG_DATE_FROM"] = ConvertTimeStamp(MakeTimeStamp($dayFrom." 00:00:00", "DD.MM.YYYY HH:MI:SS"), "FULL");
  193. $arParams["LOG_DATE_TO"] = ConvertTimeStamp(MakeTimeStamp($dayTo." 23:59:59", "DD.MM.YYYY HH:MI:SS"), "FULL");
  194. break;
  195. }
  196. }
  197. elseif (array_key_exists("flt_date_datesel", $_REQUEST))
  198. {
  199. $arParams["LOG_DATE_FROM"] = "";
  200. $arParams["LOG_DATE_TO"] = "";
  201. }
  202. else
  203. {
  204. if (array_key_exists("flt_date_from", $_REQUEST))
  205. {
  206. $_REQUEST["flt_date_from"] = htmlspecialcharsbx($_REQUEST["flt_date_from"]);
  207. $arParams["LOG_DATE_FROM"] = trim($_REQUEST["flt_date_from"]);
  208. }
  209. if (array_key_exists("flt_date_to", $_REQUEST))
  210. {
  211. $_REQUEST["flt_date_to"] = htmlspecialcharsbx($_REQUEST["flt_date_to"]);
  212. $arParams["LOG_DATE_TO"] = trim($_REQUEST["flt_date_to"]);
  213. }
  214. }
  215. //=============End date
  216. if (
  217. array_key_exists("flt_ip", $_REQUEST)
  218. && $_REQUEST["flt_ip"] <> ''
  219. )
  220. {
  221. $ip = htmlspecialcharsbx($_REQUEST["flt_ip"]);
  222. $arParams["IP"] = trim($ip);
  223. }
  224. function CheckFilter()
  225. {
  226. if($_REQUEST["flt_date_from"] <> '')
  227. {
  228. if(!CheckDateTime($_REQUEST["flt_date_from"], CSite::GetDateFormat("FULL")))
  229. return false;
  230. }
  231. if($_REQUEST["flt_date_to"] <> '')
  232. {
  233. if(!CheckDateTime($_REQUEST["flt_date_to"], CSite::GetDateFormat("FULL")))
  234. return false;
  235. }
  236. return true;
  237. }
  238. if(CheckFilter())
  239. {
  240. if ($arFilter["MODULE_ITEM"] != "")
  241. $arEventFilter["=MODULE_ITEM"] = $arFilter["MODULE_ITEM"];
  242. if ($arParams["LOG_DATE_FROM"] != "")
  243. $arEventFilter["TIMESTAMP_X_1"] = $arParams["LOG_DATE_FROM"];
  244. if ($arParams["LOG_DATE_TO"] != "")
  245. $arEventFilter["TIMESTAMP_X_2"] = $arParams["LOG_DATE_TO"];
  246. if ($arParams["IP"] != "")
  247. $arEventFilter["REMOTE_ADDR"] = $arParams["IP"];
  248. $arEventFilter["USER_ID"] = ($find != '' && $find_type == "user_id" ? $find : $find_user_id);
  249. $nameFormat = CSite::GetNameFormat(false);
  250. $arUsersTmp = array();
  251. $arNavParams = array("nPageSize"=>$arParams["PAGE_NUM"], "bShowAll"=>false);
  252. $arSort = array('TIMESTAMP_X' => 'DESC');
  253. if ($currentTemplateName == "grid")
  254. {
  255. $arSort = $grid->GetSorting(array('sort' => array('TIMESTAMP_X' => 'DESC')));
  256. $arSort = $arSort['sort'];
  257. }
  258. $arResult['SORT'] = $arSort;
  259. $results = CEventLog::GetList($arResult['SORT'], $arEventFilter, $arNavParams);
  260. $results->NavStart($arNavParams); //page navigation
  261. $arResult["NAV"] = $results;
  262. while($row = $results->NavNext())
  263. {
  264. if (!isset($arUsersTmp[$row['USER_ID']]))
  265. {
  266. $arUserInfo = array();
  267. $rsUser = CUser::GetList("", "",
  268. array("ID_EQUAL_EXACT" => intval($row['USER_ID'])),
  269. array("FIELDS" => array('ID', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'LOGIN', 'EMAIL', 'PERSONAL_PHOTO', 'EXTERNAL_AUTH_ID'))
  270. );
  271. if($arUser = $rsUser->GetNext())
  272. {
  273. if (in_array($arUser["EXTERNAL_AUTH_ID"], \Bitrix\Main\UserTable::getExternalUserTypes()))
  274. {
  275. continue;
  276. }
  277. $arUserInfo["ID"] = $row['USER_ID'];
  278. $arUserInfo["FULL_NAME"] = CUser::FormatName($nameFormat, $arUser, true, false);
  279. $arUserInfo['avatar'] = CFile::ResizeImageGet(
  280. $arUser["PERSONAL_PHOTO"],
  281. array("width"=>30, "height"=>30),
  282. BX_RESIZE_IMAGE_EXACT,
  283. false
  284. );
  285. $arUsersTmp[$row['USER_ID']] = $arUserInfo;
  286. }
  287. }
  288. else
  289. {
  290. $arUserInfo = $arUsersTmp[$row['USER_ID']];
  291. }
  292. $dateFormated = FormatDateFromDB($row["TIMESTAMP_X"], CSite::GetDateFormat('SHORT'));
  293. $time = FormatDateFromDB($row["TIMESTAMP_X"], CSite::GetTimeFormat());
  294. foreach($arModuleObjects as $key => $val)
  295. {
  296. if (isset($arObjectTypes[$row['AUDIT_TYPE_ID']]))
  297. {
  298. $res = $val->GetEventInfo($row, $arParams, $arUserInfo, $arResult["ActiveFeatures"]);
  299. $eventName = preg_replace("/^\\[.*?\\]\\s+/", "", $arObjectTypes[$row['AUDIT_TYPE_ID']]);
  300. if (in_array($row['AUDIT_TYPE_ID'], array("PAGE_EDIT", "PAGE_ADD", "PAGE_DELETE")))
  301. {
  302. $path = unserialize($row["DESCRIPTION"], ['allowed_classes' => false]);
  303. $path = $path["path"];
  304. if ($path)
  305. {
  306. $eventName.= ": ".$path;
  307. }
  308. }
  309. //for grid template
  310. if ($currentTemplateName == "grid")
  311. {
  312. $userPath = CComponentEngine::MakePathFromTemplate($arParams["USER_PATH"], array("user_id" => $arUserInfo["ID"], "SITE_ID" => SITE_DIR));
  313. $userVal = "<a href=\"".$userPath."\">".$arUserInfo["FULL_NAME"]."</a>";
  314. $arResult["ELEMENTS_ROWS"][] = array("data" => array(
  315. "ID" => $row["ID"],
  316. "IP" => $row["REMOTE_ADDR"],
  317. "DATE_TIME" => FormatDateFromDB($row["TIMESTAMP_X"], CSite::GetDateFormat()),
  318. "USER_NAME" => $userVal,
  319. "EVENT_NAME" => $eventName
  320. ));
  321. }
  322. else //for default template
  323. {
  324. $res['user'] = array(
  325. "name" => $arUserInfo["FULL_NAME"],
  326. "id" => $arUserInfo["ID"],
  327. "avatar" => $arUserInfo["avatar"]["src"]
  328. );
  329. if (empty($res["eventType"]))
  330. {
  331. $res["eventType"] = $eventName;
  332. }
  333. $arResult['EVENT'][$dateFormated][] = $res;
  334. }
  335. break;
  336. }
  337. }
  338. }
  339. }
  340. }
  341. else
  342. {
  343. $arResult["NO_ACTIVE_FEATURES"] = true;
  344. }
  345. $this->IncludeComponentTemplate();