PageRenderTime 34ms CodeModel.GetById 1ms RepoModel.GetById 0ms app.codeStats 0ms

/components/bitrix/socialnetwork.log.entry/include.php

https://gitlab.com/alexprowars/bitrix
PHP | 967 lines | 873 code | 84 blank | 10 comment | 196 complexity | 41c7c813e4841f09afb2d58b93dd60e2 MD5 | raw file
  1. <?php
  2. if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true)
  3. {
  4. die();
  5. }
  6. use Bitrix\Socialnetwork\Component\LogList;
  7. /** @var CBitrixComponent $this */
  8. /** @var array $arParams */
  9. /** @var array $arResult */
  10. /** @var string $componentPath */
  11. /** @var string $componentName */
  12. /** @var string $componentTemplate */
  13. /** @global CDatabase $DB */
  14. /** @global CUser $USER */
  15. /** @global CMain $APPLICATION */
  16. if (!function_exists('__SLTransportSort'))
  17. {
  18. function __SLTransportSort($a, $b)
  19. {
  20. $arPattern = array("M", "X", "D", "E");
  21. $a_key = array_search($a, $arPattern);
  22. $b_key = array_search($b, $arPattern);
  23. if ($a_key == $b_key)
  24. return 0;
  25. return ($a_key < $b_key) ? -1 : 1;
  26. }
  27. }
  28. if (!function_exists('__SLEGetTransport'))
  29. {
  30. function __SLEGetTransport($arFields, $arCurrentUserSubscribe)
  31. {
  32. $arTransport = array();
  33. if (array_key_exists($arFields["ENTITY_TYPE"]."_".$arFields["ENTITY_ID"]."_".$arFields["EVENT_ID"]."_N_N", $arCurrentUserSubscribe["TRANSPORT"]))
  34. $arTransport[] = $arCurrentUserSubscribe["TRANSPORT"][$arFields["ENTITY_TYPE"]."_".$arFields["ENTITY_ID"]."_".$arFields["EVENT_ID"]."_N_N"];
  35. if (array_key_exists($arFields["ENTITY_TYPE"]."_".$arFields["ENTITY_ID"]."_all_N_N", $arCurrentUserSubscribe["TRANSPORT"]))
  36. $arTransport[] = $arCurrentUserSubscribe["TRANSPORT"][$arFields["ENTITY_TYPE"]."_".$arFields["ENTITY_ID"]."_all_N_N"];
  37. $bHasLogEventCreatedBy = CSocNetLogTools::HasLogEventCreatedBy($arFields["EVENT_ID"]);
  38. if ($bHasLogEventCreatedBy)
  39. {
  40. if ($arFields["EVENT_ID"])
  41. {
  42. if (array_key_exists("U_".$arFields["USER_ID"]."_all_N_Y", $arCurrentUserSubscribe["TRANSPORT"]))
  43. $arTransport[] = $arCurrentUserSubscribe["TRANSPORT"]["U_".$arFields["USER_ID"]."_all_N_Y"];
  44. elseif (array_key_exists("U_".$arFields["USER_ID"]."_all_Y_Y", $arCurrentUserSubscribe["TRANSPORT"]))
  45. $arTransport[] = $arCurrentUserSubscribe["TRANSPORT"]["U_".$arFields["USER_ID"]."_all_Y_Y"];
  46. }
  47. }
  48. if (
  49. !array_key_exists($arFields["ENTITY_TYPE"]."_".$arFields["ENTITY_ID"]."_".$arFields["EVENT_ID"]."_N_N", $arCurrentUserSubscribe["TRANSPORT"])
  50. && !array_key_exists($arFields["ENTITY_TYPE"]."_".$arFields["ENTITY_ID"]."_all_N_N", $arCurrentUserSubscribe["TRANSPORT"])
  51. )
  52. {
  53. if (array_key_exists($arFields["ENTITY_TYPE"]."_0_".$arFields["EVENT_ID"]."_N_N", $arCurrentUserSubscribe["TRANSPORT"]))
  54. $arTransport[] = $arCurrentUserSubscribe["TRANSPORT"][$arFields["ENTITY_TYPE"]."_0_".$arFields["EVENT_ID"]."_N_N"];
  55. elseif (array_key_exists($arFields["ENTITY_TYPE"]."_0_all_N_N", $arCurrentUserSubscribe["TRANSPORT"]))
  56. $arTransport[] = $arCurrentUserSubscribe["TRANSPORT"][$arFields["ENTITY_TYPE"]."_0_all_N_N"];
  57. else
  58. $arTransport[] = "N";
  59. }
  60. $arTransport = array_unique($arTransport);
  61. usort($arTransport, "__SLTransportSort");
  62. return $arTransport;
  63. }
  64. }
  65. if (!function_exists('__SLEGetLogRecord'))
  66. {
  67. function __SLEGetLogRecord($logId, $arParams, $arCurrentUserSubscribe)
  68. {
  69. global $APPLICATION, $CACHE_MANAGER, $USER_FIELD_MANAGER, $DB, $USER;
  70. static
  71. $isExtranetInstalled,
  72. $isExtranetUser,
  73. $arUserIdVisible,
  74. $arAvailableExtranetUserID,
  75. $bCurrentUserIsAdmin,
  76. $arSocNetFeaturesSettings;
  77. if (!$isExtranetInstalled)
  78. {
  79. $isExtranetInstalled = (CModule::IncludeModule("extranet") ? "Y" : "N");
  80. $isExtranetUser = ($isExtranetInstalled == "Y" && !CExtranet::IsIntranetUser() ? "Y" : "N");
  81. $isExtranetAdmin = ($isExtranetInstalled == "Y" && CExtranet::IsExtranetAdmin() ? "Y" : "N");
  82. $bCurrentUserIsAdmin = CSocNetUser::IsCurrentUserModuleAdmin();
  83. $arSocNetFeaturesSettings = CSocNetAllowed::GetAllowedFeatures();
  84. if ($isExtranetUser == "Y")
  85. {
  86. $arUserIdVisible = CExtranet::GetMyGroupsUsersSimple(SITE_ID);
  87. }
  88. elseif (
  89. $isExtranetInstalled == "Y"
  90. && $isExtranetUser != "Y"
  91. )
  92. {
  93. if (
  94. $isExtranetAdmin == "Y"
  95. && $bCurrentUserIsAdmin
  96. )
  97. {
  98. $arAvailableExtranetUserID = CExtranet::GetMyGroupsUsers(SITE_ID);
  99. }
  100. else
  101. {
  102. $arAvailableExtranetUserID = CExtranet::GetMyGroupsUsersSimple(CExtranet::GetExtranetSiteID());
  103. }
  104. }
  105. }
  106. $cacheTime = 31536000;
  107. $arEvent = array();
  108. $cache = new \CPHPCache;
  109. $cachedFields = [];
  110. $arKeys = array(
  111. "AVATAR_SIZE",
  112. "DESTINATION_LIMIT",
  113. "CHECK_PERMISSIONS_DEST",
  114. "NAME_TEMPLATE",
  115. "NAME_TEMPLATE_WO_NOBR",
  116. "SHOW_LOGIN",
  117. "DATE_TIME_FORMAT",
  118. "PATH_TO_USER",
  119. "PATH_TO_GROUP",
  120. "PATH_TO_CONPANY_DEPARTMENT"
  121. );
  122. foreach($arKeys as $param_key)
  123. {
  124. $cachedFields[$param_key] = (array_key_exists($param_key, $arParams) ? $arParams[$param_key] : false);
  125. }
  126. $cacheId = implode('_', [
  127. 'log_post',
  128. $logId,
  129. md5(serialize($cachedFields)),
  130. SITE_TEMPLATE_ID,
  131. SITE_ID,
  132. LANGUAGE_ID,
  133. FORMAT_DATETIME,
  134. \CTimeZone::getOffset()
  135. ]);
  136. $cachePath = '/sonet/log/' . (int)((int)$logId / 1000) . '/' . $logId . '/entry/';
  137. if ($cache->InitCache($cacheTime, $cacheId, $cachePath))
  138. {
  139. $arCacheVars = $cache->GetVars();
  140. $arEvent["FIELDS_FORMATTED"] = $arCacheVars["FIELDS_FORMATTED"];
  141. if (
  142. is_array($arEvent["FIELDS_FORMATTED"])
  143. && array_key_exists("CACHED_CSS_PATH", $arEvent["FIELDS_FORMATTED"])
  144. )
  145. {
  146. if (
  147. !is_array($arEvent["FIELDS_FORMATTED"]["CACHED_CSS_PATH"])
  148. && $arEvent["FIELDS_FORMATTED"]["CACHED_CSS_PATH"] <> ''
  149. )
  150. {
  151. $APPLICATION->SetAdditionalCSS($arEvent["FIELDS_FORMATTED"]["CACHED_CSS_PATH"]);
  152. }
  153. elseif(is_array($arEvent["FIELDS_FORMATTED"]["CACHED_CSS_PATH"]))
  154. {
  155. foreach($arEvent["FIELDS_FORMATTED"]["CACHED_CSS_PATH"] as $css_path)
  156. {
  157. $APPLICATION->SetAdditionalCSS($css_path);
  158. }
  159. }
  160. }
  161. if (
  162. is_array($arEvent["FIELDS_FORMATTED"])
  163. && array_key_exists("CACHED_JS_PATH", $arEvent["FIELDS_FORMATTED"])
  164. )
  165. {
  166. if (
  167. !is_array($arEvent["FIELDS_FORMATTED"]["CACHED_JS_PATH"])
  168. && $arEvent["FIELDS_FORMATTED"]["CACHED_JS_PATH"] !== ''
  169. )
  170. {
  171. $APPLICATION->AddHeadScript($arEvent["FIELDS_FORMATTED"]["CACHED_JS_PATH"]);
  172. }
  173. elseif(is_array($arEvent["FIELDS_FORMATTED"]["CACHED_JS_PATH"]))
  174. {
  175. foreach($arEvent["FIELDS_FORMATTED"]["CACHED_JS_PATH"] as $js_path)
  176. {
  177. $APPLICATION->AddHeadScript($js_path);
  178. }
  179. }
  180. }
  181. }
  182. else
  183. {
  184. $cache->StartDataCache($cacheTime, $cacheId, $cachePath);
  185. $arFilter = array(
  186. "ID" => $logId
  187. );
  188. $arListParams = array(
  189. "CHECK_RIGHTS" => "N",
  190. "USE_FOLLOW" => "N",
  191. "USE_SUBSCRIBE" => "N"
  192. );
  193. $arSelect = array(
  194. "ID", "TMP_ID", "ENTITY_TYPE", "ENTITY_ID", "USER_ID", "EVENT_ID", "LOG_DATE", "LOG_UPDATE", "TITLE_TEMPLATE", "TITLE", "MESSAGE", "TEXT_MESSAGE", "URL", "MODULE_ID", "CALLBACK_FUNC", "EXTERNAL_ID", "SITE_ID", "PARAMS",
  195. "COMMENTS_COUNT", "ENABLE_COMMENTS", "SOURCE_ID",
  196. "GROUP_NAME", "GROUP_OWNER_ID", "GROUP_INITIATE_PERMS", "GROUP_VISIBLE", "GROUP_OPENED", "GROUP_IMAGE_ID",
  197. "USER_NAME", "USER_LAST_NAME", "USER_SECOND_NAME", "USER_LOGIN", "USER_PERSONAL_PHOTO", "USER_PERSONAL_GENDER",
  198. "CREATED_BY_NAME", "CREATED_BY_LAST_NAME", "CREATED_BY_SECOND_NAME", "CREATED_BY_LOGIN", "CREATED_BY_PERSONAL_PHOTO", "CREATED_BY_PERSONAL_GENDER",
  199. "RATING_TYPE_ID", "RATING_ENTITY_ID",
  200. "SOURCE_TYPE"
  201. );
  202. $dbEvent = CSocNetLog::GetList(
  203. array(),
  204. $arFilter,
  205. false,
  206. false,
  207. $arSelect,
  208. $arListParams
  209. );
  210. if ($arEvent = $dbEvent->GetNext())
  211. {
  212. $stub = (
  213. \Bitrix\Main\ModuleManager::isModuleInstalled('bitrix24')
  214. && (
  215. (
  216. in_array($arEvent["EVENT_ID"], array("timeman_entry", "report"))
  217. && !IsModuleInstalled("timeman")
  218. )
  219. || (
  220. in_array($arEvent["EVENT_ID"], array("tasks"))
  221. && !IsModuleInstalled("tasks")
  222. )
  223. || (
  224. in_array($arEvent["EVENT_ID"], array("lists_new_element"))
  225. && !IsModuleInstalled("lists")
  226. )
  227. )
  228. );
  229. if (defined("BX_COMP_MANAGED_CACHE"))
  230. {
  231. $CACHE_MANAGER->StartTagCache($cachePath);
  232. $CACHE_MANAGER->RegisterTag("USER_NAME_".intval($arEvent["USER_ID"]));
  233. $CACHE_MANAGER->RegisterTag("SONET_LOG_".intval($arEvent["ID"]));
  234. if ($arEvent["ENTITY_TYPE"] == SONET_ENTITY_GROUP)
  235. {
  236. $CACHE_MANAGER->RegisterTag("sonet_group_".$arEvent["ENTITY_ID"]);
  237. }
  238. }
  239. $arEvent["EVENT_ID_FULLSET"] = CSocNetLogTools::FindFullSetEventIDByEventID($arEvent["EVENT_ID"]);
  240. if ($arEvent["ENTITY_TYPE"] == SONET_ENTITY_GROUP)
  241. {
  242. static $arSiteWorkgroupsPage;
  243. if (
  244. !$arSiteWorkgroupsPage
  245. && (
  246. IsModuleInstalled("extranet")
  247. || (
  248. is_set($arEvent["URL"])
  249. && (mb_strpos($arEvent["URL"], "#GROUPS_PATH#") !== false)
  250. )
  251. )
  252. )
  253. {
  254. $rsSite = CSite::GetList("sort", "desc", Array("ACTIVE" => "Y"));
  255. while($arSite = $rsSite->Fetch())
  256. {
  257. $arSiteWorkgroupsPage[$arSite["ID"]] = COption::GetOptionString("socialnetwork", "workgroups_page", $arSite["DIR"]."workgroups/", $arSite["ID"]);
  258. }
  259. }
  260. if (
  261. is_set($arEvent["URL"])
  262. && isset($arSiteWorkgroupsPage[SITE_ID])
  263. )
  264. {
  265. $arEvent["URL"] = str_replace("#GROUPS_PATH#", $arSiteWorkgroupsPage[SITE_ID], $arEvent["URL"]);
  266. }
  267. }
  268. if ($stub)
  269. {
  270. $arEvent["FIELDS_FORMATTED"] = SocialnetworkLogEntry::formatStubEvent($arEvent, $arParams);
  271. }
  272. else
  273. {
  274. $arEventTmp = CSocNetLogTools::FindLogEventByID($arEvent["EVENT_ID"], false);
  275. if (
  276. $arEventTmp
  277. && isset($arEventTmp["CLASS_FORMAT"])
  278. && isset($arEventTmp["METHOD_FORMAT"])
  279. )
  280. {
  281. $contentId = \Bitrix\Socialnetwork\Livefeed\Provider::getContentId($arEvent);
  282. if (!empty($contentId['ENTITY_TYPE']))
  283. {
  284. if ($postProvider = \Bitrix\Socialnetwork\Livefeed\Provider::getProvider($contentId['ENTITY_TYPE']))
  285. {
  286. $sourceAdditonalData = $postProvider->getAdditionalData(array(
  287. 'id' => array($arEvent["SOURCE_ID"])
  288. ));
  289. if (
  290. !empty($sourceAdditonalData)
  291. && isset($sourceAdditonalData[$arEvent["SOURCE_ID"]])
  292. )
  293. {
  294. $arEvent['ADDITIONAL_DATA'] = $sourceAdditonalData[$arEvent["SOURCE_ID"]];
  295. }
  296. }
  297. }
  298. $arEvent["UF"] = $USER_FIELD_MANAGER->GetUserFields("SONET_LOG", $arEvent["ID"], LANGUAGE_ID);
  299. $arEvent["FIELDS_FORMATTED"] = call_user_func(array($arEventTmp["CLASS_FORMAT"], $arEventTmp["METHOD_FORMAT"]), $arEvent, $arParams);
  300. if (is_array($arEvent["FIELDS_FORMATTED"]))
  301. {
  302. if (
  303. isset($arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"])
  304. && is_array($arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"])
  305. && isset($arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["MESSAGE"])
  306. )
  307. {
  308. if (in_array($arEvent["EVENT_ID"], array('calendar')))
  309. {
  310. $arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["MESSAGE"] = htmlspecialcharsback($arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["MESSAGE"]);
  311. }
  312. else
  313. {
  314. $arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["MESSAGE"] = CSocNetTextParser::closetags(htmlspecialcharsback($arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["MESSAGE"]));
  315. }
  316. }
  317. if (
  318. isset($arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"])
  319. && is_array($arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"])
  320. )
  321. {
  322. $arFields2Cache = array(
  323. "URL",
  324. "STYLE",
  325. "DESTINATION",
  326. "DESTINATION_MORE",
  327. "TITLE_24",
  328. "TITLE_24_2",
  329. "TITLE_24_2_STYLE",
  330. "IS_IMPORTANT",
  331. "MESSAGE",
  332. "FOOTER_MESSAGE",
  333. "MESSAGE_TITLE_24",
  334. "DATETIME_FORMATTED",
  335. "LOG_DATE_FORMAT",
  336. "MENU",
  337. "COMMENT_URL"
  338. );
  339. foreach ($arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"] as $field => $value)
  340. {
  341. if (!in_array($field, $arFields2Cache))
  342. {
  343. unset($arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"][$field]);
  344. }
  345. }
  346. }
  347. if (
  348. isset($arEvent["FIELDS_FORMATTED"]["EVENT"])
  349. && is_array($arEvent["FIELDS_FORMATTED"]["EVENT"])
  350. )
  351. {
  352. $arFields2Cache = array(
  353. "ID",
  354. "URL",
  355. "USER_ID",
  356. "ENTITY_TYPE",
  357. "ENTITY_ID",
  358. "EVENT_ID",
  359. "EVENT_ID_FULLSET",
  360. "TITLE",
  361. "MESSAGE",
  362. "SOURCE_ID",
  363. "PARAMS",
  364. "RATING_TYPE_ID",
  365. "RATING_ENTITY_ID"
  366. );
  367. foreach ($arEvent["FIELDS_FORMATTED"]["EVENT"] as $field => $value)
  368. {
  369. if (!in_array($field, $arFields2Cache))
  370. {
  371. unset($arEvent["FIELDS_FORMATTED"]["EVENT"][$field]);
  372. }
  373. }
  374. }
  375. if (
  376. isset($arEvent["FIELDS_FORMATTED"]["CREATED_BY"])
  377. && is_array($arEvent["FIELDS_FORMATTED"]["CREATED_BY"])
  378. )
  379. {
  380. $arFields2Cache = array(
  381. "TOOLTIP_FIELDS",
  382. "FORMATTED",
  383. "URL",
  384. "IS_EXTRANET"
  385. );
  386. foreach ($arEvent["FIELDS_FORMATTED"]["CREATED_BY"] as $field => $value)
  387. {
  388. if (!in_array($field, $arFields2Cache))
  389. {
  390. unset($arEvent["FIELDS_FORMATTED"]["CREATED_BY"][$field]);
  391. }
  392. }
  393. if (
  394. isset($arEvent["FIELDS_FORMATTED"]["CREATED_BY"]["TOOLTIP_FIELDS"])
  395. && is_array($arEvent["FIELDS_FORMATTED"]["CREATED_BY"]["TOOLTIP_FIELDS"])
  396. )
  397. {
  398. $arFields2Cache = array(
  399. "ID",
  400. "PATH_TO_SONET_USER_PROFILE",
  401. "NAME",
  402. "LAST_NAME",
  403. "SECOND_NAME",
  404. "LOGIN",
  405. "EMAIL",
  406. "PERSONAL_GENDER"
  407. );
  408. foreach ($arEvent["FIELDS_FORMATTED"]["CREATED_BY"]["TOOLTIP_FIELDS"] as $field => $value)
  409. {
  410. if (!in_array($field, $arFields2Cache))
  411. {
  412. unset($arEvent["FIELDS_FORMATTED"]["CREATED_BY"]["TOOLTIP_FIELDS"][$field]);
  413. }
  414. }
  415. }
  416. }
  417. if (
  418. isset($arEvent["FIELDS_FORMATTED"]["ENTITY"])
  419. && is_array($arEvent["FIELDS_FORMATTED"]["ENTITY"])
  420. )
  421. {
  422. $arFields2Cache = array(
  423. "TOOLTIP_FIELDS",
  424. "FORMATTED",
  425. "URL"
  426. );
  427. foreach ($arEvent["FIELDS_FORMATTED"]["ENTITY"] as $field => $value)
  428. {
  429. if (!in_array($field, $arFields2Cache))
  430. {
  431. unset($arEvent["FIELDS_FORMATTED"]["ENTITY"][$field]);
  432. }
  433. }
  434. if (
  435. isset($arEvent["FIELDS_FORMATTED"]["ENTITY"]["TOOLTIP_FIELDS"])
  436. && is_array($arEvent["FIELDS_FORMATTED"]["ENTITY"]["TOOLTIP_FIELDS"])
  437. )
  438. {
  439. $arFields2Cache = array(
  440. "ID",
  441. "PATH_TO_SONET_USER_PROFILE",
  442. "NAME",
  443. "LAST_NAME",
  444. "SECOND_NAME",
  445. "LOGIN",
  446. "EMAIL",
  447. "PERSONAL_GENDER"
  448. );
  449. foreach ($arEvent["FIELDS_FORMATTED"]["ENTITY"]["TOOLTIP_FIELDS"] as $field => $value)
  450. {
  451. if (!in_array($field, $arFields2Cache))
  452. {
  453. unset($arEvent["FIELDS_FORMATTED"]["ENTITY"]["TOOLTIP_FIELDS"][$field]);
  454. }
  455. }
  456. }
  457. }
  458. $arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["UF"] = $arEvent["UF"];
  459. $arEvent["FIELDS_FORMATTED"]["TAGS"] = array();
  460. $res = \Bitrix\Socialnetwork\LogTagTable::getList(array(
  461. 'filter' => array(
  462. 'LOG_ID' => $logId,
  463. ),
  464. 'select' => array('NAME')
  465. ));
  466. while($logTagFields = $res->fetch())
  467. {
  468. $arEvent["FIELDS_FORMATTED"]["TAGS"][] = array(
  469. 'NAME' => $logTagFields['NAME'],
  470. 'URL' => \CComponentEngine::makePathFromTemplate($arParams["PATH_TO_LOG_TAG"], array("tag" => urlencode($logTagFields["NAME"])))
  471. );
  472. }
  473. }
  474. }
  475. }
  476. if (is_array($arEvent["FIELDS_FORMATTED"]))
  477. {
  478. $dateFormated = FormatDate(
  479. $DB->DateFormatToPHP(FORMAT_DATE),
  480. MakeTimeStamp
  481. (
  482. isset($arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"])
  483. && isset($arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["LOG_DATE_FORMAT"])
  484. ? $arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["LOG_DATE_FORMAT"]
  485. : (
  486. array_key_exists("LOG_DATE_FORMAT", $arEvent)
  487. ? $arEvent["LOG_DATE_FORMAT"]
  488. : $arEvent["LOG_DATE"]
  489. )
  490. )
  491. );
  492. $timeFormated = FormatDateFromDB(
  493. (
  494. isset($arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"])
  495. && isset($arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["LOG_DATE_FORMAT"])
  496. ? $arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["LOG_DATE_FORMAT"]
  497. : (
  498. array_key_exists("LOG_DATE_FORMAT", $arEvent)
  499. ? $arEvent["LOG_DATE_FORMAT"]
  500. : $arEvent["LOG_DATE"]
  501. )
  502. ),
  503. (
  504. mb_stripos($arParams["DATE_TIME_FORMAT"], 'a')
  505. || (
  506. $arParams["DATE_TIME_FORMAT"] == 'FULL'
  507. && IsAmPmMode()
  508. ) !== false
  509. ? (mb_strpos(FORMAT_DATETIME, 'TT') !== false ? 'H:MI TT' : 'H:MI T')
  510. : 'HH:MI'
  511. )
  512. );
  513. $dateTimeFormated = FormatDate(
  514. (
  515. !empty($arParams["DATE_TIME_FORMAT"])
  516. ? ($arParams["DATE_TIME_FORMAT"] == "FULL"
  517. ? $DB->DateFormatToPHP(str_replace(":SS", "", FORMAT_DATETIME))
  518. : $arParams["DATE_TIME_FORMAT"]
  519. )
  520. : $DB->DateFormatToPHP(FORMAT_DATETIME)
  521. ),
  522. MakeTimeStamp(
  523. isset($arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"])
  524. && isset($arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["LOG_DATE_FORMAT"])
  525. ? $arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["LOG_DATE_FORMAT"]
  526. : (
  527. array_key_exists("LOG_DATE_FORMAT", $arEvent)
  528. ? $arEvent["LOG_DATE_FORMAT"]
  529. : $arEvent["LOG_DATE"]
  530. )
  531. )
  532. );
  533. if (strcasecmp(LANGUAGE_ID, 'EN') !== 0 && strcasecmp(LANGUAGE_ID, 'DE') !== 0)
  534. {
  535. $dateTimeFormated = ToLower($dateTimeFormated);
  536. $dateFormated = ToLower($dateFormated);
  537. $timeFormated = ToLower($timeFormated);
  538. }
  539. // strip current year
  540. if (!empty($arParams['DATE_TIME_FORMAT']) && ($arParams['DATE_TIME_FORMAT'] == 'j F Y G:i' || $arParams['DATE_TIME_FORMAT'] == 'j F Y g:i a'))
  541. {
  542. $dateTimeFormated = ltrim($dateTimeFormated, '0');
  543. $curYear = date('Y');
  544. $dateTimeFormated = str_replace(array('-'.$curYear, '/'.$curYear, ' '.$curYear, '.'.$curYear), '', $dateTimeFormated);
  545. }
  546. $arEvent["MESSAGE_FORMAT"] = htmlspecialcharsback($arEvent["MESSAGE"]);
  547. if ($arEvent["CALLBACK_FUNC"] <> '')
  548. {
  549. if ($arEvent["MODULE_ID"] <> '')
  550. CModule::IncludeModule($arEvent["MODULE_ID"]);
  551. $arEvent["MESSAGE_FORMAT"] = call_user_func($arEvent["CALLBACK_FUNC"], $arEvent);
  552. }
  553. $arEvent["FIELDS_FORMATTED"]["LOG_TIME_FORMAT"] = $timeFormated;
  554. $arEvent["FIELDS_FORMATTED"]["LOG_UPDATE_TS"] = MakeTimeStamp($arEvent["LOG_UPDATE"]);
  555. $arEvent["FIELDS_FORMATTED"]["LOG_DATE_TS"] = MakeTimeStamp($arEvent["LOG_DATE"]);
  556. $arEvent["FIELDS_FORMATTED"]["LOG_DATE_DAY"] = ConvertTimeStamp(MakeTimeStamp($arEvent["LOG_DATE"]), "SHORT");
  557. $arEvent["FIELDS_FORMATTED"]["LOG_UPDATE_DAY"] = ConvertTimeStamp(MakeTimeStamp($arEvent["LOG_UPDATE"]), "SHORT");
  558. $arEvent["FIELDS_FORMATTED"]["COMMENTS_COUNT"] = $arEvent["COMMENTS_COUNT"];
  559. $arEvent["FIELDS_FORMATTED"]["TMP_ID"] = $arEvent["TMP_ID"];
  560. $arEvent["FIELDS_FORMATTED"]["DATETIME_FORMATTED"] = $dateTimeFormated;
  561. $arCommentEvent = CSocNetLogTools::FindLogCommentEventByLogEventID($arEvent["EVENT_ID"]);
  562. if (
  563. !array_key_exists("HAS_COMMENTS", $arEvent["FIELDS_FORMATTED"])
  564. || $arEvent["FIELDS_FORMATTED"]["HAS_COMMENTS"] != "N"
  565. )
  566. {
  567. $arEvent["FIELDS_FORMATTED"]["HAS_COMMENTS"] = (
  568. $arCommentEvent
  569. && (
  570. !array_key_exists('ENABLE_COMMENTS', $arEvent)
  571. || $arEvent['ENABLE_COMMENTS'] !== 'N'
  572. )
  573. ? 'Y'
  574. : 'N'
  575. );
  576. }
  577. }
  578. $arEvent['FIELDS_FORMATTED']['closedWorkgroupsOnly'] = false;
  579. if (\Bitrix\Main\Config\Option::get('socialnetwork', 'work_with_closed_groups', 'N') !== 'Y')
  580. {
  581. $groupIdList = [];
  582. $res = \Bitrix\Socialnetwork\LogRightTable::getList([
  583. 'filter' => [
  584. '=LOG_ID' => $logId,
  585. ],
  586. 'select' => [ 'GROUP_CODE' ],
  587. ]);
  588. while ($logRightsFields = $res->fetch())
  589. {
  590. if (!preg_match('/^SG(\d+)/', $logRightsFields['GROUP_CODE'], $matches))
  591. {
  592. continue;
  593. }
  594. $groupIdList[] = (int)$matches[1];
  595. }
  596. if (!empty($groupIdList))
  597. {
  598. $arEvent['FIELDS_FORMATTED']['closedWorkgroupsOnly'] = true;
  599. $res = \Bitrix\Socialnetwork\WorkgroupTable::getList([
  600. 'filter' => [
  601. 'ID' => $groupIdList,
  602. '=CLOSED' => 'N',
  603. ],
  604. 'select' => [ 'ID' ]
  605. ]);
  606. if ($res->fetch())
  607. {
  608. $arEvent['FIELDS_FORMATTED']['closedWorkgroupsOnly'] = false;
  609. }
  610. }
  611. }
  612. }
  613. $arCacheData = [
  614. 'FIELDS_FORMATTED' => $arEvent['FIELDS_FORMATTED'],
  615. ];
  616. $cache->EndDataCache($arCacheData);
  617. if(defined("BX_COMP_MANAGED_CACHE"))
  618. {
  619. $CACHE_MANAGER->EndTagCache();
  620. }
  621. }
  622. if (!is_array($arEvent["FIELDS_FORMATTED"]))
  623. {
  624. return false;
  625. }
  626. $feature = CSocNetLogTools::FindFeatureByEventID($arEvent["FIELDS_FORMATTED"]["EVENT"]["EVENT_ID"]);
  627. if (
  628. $feature
  629. && (
  630. !array_key_exists($feature, $arSocNetFeaturesSettings)
  631. || (
  632. array_key_exists("allowed", $arSocNetFeaturesSettings[$feature])
  633. && is_array($arSocNetFeaturesSettings[$feature]["allowed"])
  634. && !in_array($arEvent["FIELDS_FORMATTED"]["EVENT"]["ENTITY_TYPE"], $arSocNetFeaturesSettings[$feature]["allowed"])
  635. )
  636. )
  637. )
  638. {
  639. return false;
  640. }
  641. if (!array_key_exists("COMMENTS_PARAMS", $arEvent["FIELDS_FORMATTED"]))
  642. {
  643. $arEvent["FIELDS_FORMATTED"]["COMMENTS_PARAMS"] = \Bitrix\Socialnetwork\ComponentHelper::getLFCommentsParams([
  644. "ID" => $arEvent["FIELDS_FORMATTED"]["EVENT"]["ID"],
  645. "EVENT_ID" => $arEvent["FIELDS_FORMATTED"]["EVENT"]["EVENT_ID"],
  646. "ENTITY_TYPE" => $arEvent["FIELDS_FORMATTED"]["EVENT"]["ENTITY_TYPE"],
  647. "ENTITY_ID" => $arEvent["FIELDS_FORMATTED"]["EVENT"]["ENTITY_ID"],
  648. "SOURCE_ID" => $arEvent["FIELDS_FORMATTED"]["EVENT"]["SOURCE_ID"],
  649. "PARAMS" => $arEvent["FIELDS_FORMATTED"]["EVENT"]["PARAMS"]
  650. ]);
  651. }
  652. foreach (GetModuleEvents("socialnetwork", "OnSonetLogEntryMenuCreate", true) as $arModuleEvent) // add menu items
  653. {
  654. if (!array_key_exists("FIELDS_FORMATTED", $arEvent))
  655. {
  656. $arEvent["FIELDS_FORMATTED"] = array();
  657. }
  658. if (!array_key_exists("MENU", $arEvent["FIELDS_FORMATTED"]))
  659. {
  660. $arEvent["FIELDS_FORMATTED"]["MENU"] = array();
  661. }
  662. $arMenuItems = ExecuteModuleEventEx($arModuleEvent, array($arEvent));
  663. if (!empty($arMenuItems))
  664. {
  665. $arEvent["FIELDS_FORMATTED"]["MENU"] = array_merge($arEvent["FIELDS_FORMATTED"]["MENU"], $arMenuItems);
  666. }
  667. }
  668. if (is_array($arCurrentUserSubscribe))
  669. {
  670. $arEvent["FIELDS_FORMATTED"]["TRANSPORT"] = __SLEGetTransport($arEvent, $arCurrentUserSubscribe);
  671. }
  672. $arCommentEvent = CSocNetLogTools::FindLogCommentEventByLogEventID($arEvent["FIELDS_FORMATTED"]["EVENT"]["EVENT_ID"]);
  673. if (!$USER->IsAuthorized())
  674. {
  675. $arEvent["FIELDS_FORMATTED"]["CAN_ADD_COMMENTS"] = "N";
  676. }
  677. elseif (
  678. $arCommentEvent
  679. && array_key_exists("OPERATION_ADD", $arCommentEvent)
  680. && $arCommentEvent["OPERATION_ADD"] == "log_rights"
  681. )
  682. {
  683. $arEvent["FIELDS_FORMATTED"]["CAN_ADD_COMMENTS"] = (CSocNetLogRights::CheckForUser($arEvent["FIELDS_FORMATTED"]["EVENT"]["ID"], $USER->GetID()) ? "Y" : "N");
  684. }
  685. else
  686. {
  687. $array_key = $arEvent["FIELDS_FORMATTED"]["EVENT"]["ENTITY_TYPE"]."_".$arEvent["FIELDS_FORMATTED"]["EVENT"]["ENTITY_ID"]."_".$arEvent["FIELDS_FORMATTED"]["EVENT"]["EVENT_ID"];
  688. if (array_key_exists($array_key, LogList::$canCurrentUserAddComments))
  689. {
  690. $arEvent["FIELDS_FORMATTED"]["CAN_ADD_COMMENTS"] = (LogList::$canCurrentUserAddComments[$array_key] == "Y" && $arEvent["FIELDS_FORMATTED"]["HAS_COMMENTS"] == "Y" ? "Y" : "N");
  691. }
  692. else
  693. {
  694. if (
  695. $feature
  696. && $arCommentEvent
  697. && array_key_exists("OPERATION_ADD", $arCommentEvent)
  698. && $arCommentEvent["OPERATION_ADD"] <> ''
  699. )
  700. {
  701. LogList::$canCurrentUserAddComments[$array_key] = (
  702. CSocNetFeaturesPerms::CanPerformOperation(
  703. $USER->GetID(),
  704. $arEvent["FIELDS_FORMATTED"]["EVENT"]["ENTITY_TYPE"],
  705. $arEvent["FIELDS_FORMATTED"]["EVENT"]["ENTITY_ID"],
  706. ($feature == "microblog" ? "blog" : $feature),
  707. $arCommentEvent["OPERATION_ADD"],
  708. $bCurrentUserIsAdmin
  709. )
  710. ? "Y"
  711. : "N"
  712. );
  713. }
  714. else
  715. {
  716. LogList::$canCurrentUserAddComments[$array_key] = "Y";
  717. }
  718. $arEvent["FIELDS_FORMATTED"]["CAN_ADD_COMMENTS"] = (
  719. LogList::$canCurrentUserAddComments[$array_key] == "Y"
  720. && $arEvent["FIELDS_FORMATTED"]["HAS_COMMENTS"] == "Y"
  721. ? "Y"
  722. : "N"
  723. );
  724. }
  725. }
  726. if (
  727. $arEvent['FIELDS_FORMATTED']['CAN_ADD_COMMENTS'] === 'Y'
  728. && (
  729. isset($arEvent['FIELDS_FORMATTED']['closedWorkgroupsOnly'])
  730. && $arEvent['FIELDS_FORMATTED']['closedWorkgroupsOnly']
  731. )
  732. )
  733. {
  734. $arEvent['FIELDS_FORMATTED']['CAN_ADD_COMMENTS'] = 'N';
  735. }
  736. $arEvent["FIELDS_FORMATTED"]["FAVORITES"] = $arParams["EVENT"]["FAVORITES"];
  737. $arEvent["FIELDS_FORMATTED"]["PINNED"] = $arParams["EVENT"]["PINNED"];
  738. if ($arParams['USE_FOLLOW'] === 'Y')
  739. {
  740. $arEvent["FIELDS_FORMATTED"]["EVENT"]["FOLLOW"] = $arParams["EVENT"]["FOLLOW"];
  741. $arEvent["FIELDS_FORMATTED"]["EVENT"]["DATE_FOLLOW_X1"] = $arParams["EVENT"]["DATE_FOLLOW_X1"];
  742. $arEvent["FIELDS_FORMATTED"]["EVENT"]["DATE_FOLLOW"] = $arParams["EVENT"]["DATE_FOLLOW"];
  743. }
  744. if (
  745. $arParams['CHECK_PERMISSIONS_DEST'] === 'N'
  746. && !$bCurrentUserIsAdmin
  747. && is_object($GLOBALS["USER"])
  748. && is_array($arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"])
  749. && (
  750. (
  751. array_key_exists("DESTINATION", $arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"])
  752. && is_array($arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["DESTINATION"])
  753. )
  754. || (
  755. array_key_exists("DESTINATION_CODE", $arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"])
  756. && is_array($arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["DESTINATION_CODE"])
  757. )
  758. )
  759. )
  760. {
  761. $arEvent['FIELDS_FORMATTED']['EVENT_FORMATTED']['DESTINATION_HIDDEN'] = 0;
  762. $arGroupID = CSocNetLogTools::GetAvailableGroups();
  763. if (
  764. array_key_exists("DESTINATION", $arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"])
  765. && is_array($arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["DESTINATION"])
  766. )
  767. {
  768. foreach($arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["DESTINATION"] as $key => $arDestination)
  769. {
  770. if (
  771. isset($arDestination['TYPE'], $arDestination['ID'])
  772. && (
  773. (
  774. $arDestination['TYPE'] === "SG"
  775. && !in_array((int)$arDestination['ID'], $arGroupID)
  776. )
  777. || (
  778. in_array($arDestination["TYPE"], array("CRMCOMPANY", "CRMLEAD", "CRMCONTACT", "CRMDEAL"))
  779. && (
  780. !isset($arDestination["CRM_USER_ID"])
  781. || $arDestination["CRM_USER_ID"] != $USER->GetId()
  782. )
  783. && (
  784. !CModule::IncludeModule("crm")
  785. || (
  786. in_array($arDestination["TYPE"], array("CRMCOMPANY", "CRMLEAD", "CRMCONTACT"))
  787. && !\Bitrix\Crm\Security\EntityAuthorization::checkReadPermission(
  788. CCrmLiveFeedEntity::ResolveEntityTypeID($arDestination["TYPE"]),
  789. $arDestination["ID"]
  790. )
  791. )
  792. || (
  793. $arDestination['TYPE'] === 'CRMDEAL'
  794. && !CCrmDeal::CheckReadPermission($arDestination["ID"])
  795. )
  796. )
  797. )
  798. || (
  799. in_array($arDestination["TYPE"], array("DR", "D"))
  800. && $isExtranetUser === 'Y'
  801. )
  802. || (
  803. $arDestination['TYPE'] === 'U'
  804. && $arDestination["ID"] != $USER->GetId()
  805. && isset($arUserIdVisible)
  806. && is_array($arUserIdVisible)
  807. && !in_array((int)$arDestination['ID'], $arUserIdVisible)
  808. )
  809. || (
  810. $arDestination['TYPE'] === 'U'
  811. && $arDestination["ID"] != $USER->GetId()
  812. && isset($arDestination["IS_EXTRANET"])
  813. && $arDestination['IS_EXTRANET'] === 'Y'
  814. && isset($arAvailableExtranetUserID)
  815. && is_array($arAvailableExtranetUserID)
  816. && !in_array((int)$arDestination['ID'], $arAvailableExtranetUserID)
  817. )
  818. )
  819. )
  820. {
  821. unset($arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["DESTINATION"][$key]);
  822. $arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["DESTINATION_HIDDEN"]++;
  823. }
  824. elseif (
  825. isset($arParams["PUBLIC_MODE"])
  826. && $arParams['PUBLIC_MODE'] === 'Y'
  827. && !empty($arDestination["URL"])
  828. )
  829. {
  830. $arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["DESTINATION"][$key]["URL"] = "";
  831. }
  832. }
  833. if (
  834. intval($arParams["DESTINATION_LIMIT_SHOW"]) > 0
  835. && count($arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["DESTINATION"]) > $arParams["DESTINATION_LIMIT_SHOW"]
  836. )
  837. {
  838. $arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["DESTINATION_MORE"] = count($arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["DESTINATION"]) - $arParams["DESTINATION_LIMIT_SHOW"];
  839. $arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["DESTINATION"] = array_slice($arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["DESTINATION"], 0, $arParams["DESTINATION_LIMIT_SHOW"]);
  840. }
  841. }
  842. elseif (
  843. array_key_exists("DESTINATION_CODE", $arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"])
  844. && is_array($arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["DESTINATION_CODE"])
  845. )
  846. {
  847. foreach($arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["DESTINATION_CODE"] as $key => $right_tmp)
  848. {
  849. if (
  850. preg_match('/^SG(\d+)$/', $right_tmp, $matches)
  851. && !in_array(intval($matches[1]), $arGroupID)
  852. )
  853. {
  854. unset($arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["DESTINATION_CODE"][$key]);
  855. $arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["DESTINATION_HIDDEN"]++;
  856. }
  857. }
  858. }
  859. }
  860. if (
  861. $arParams["SHOW_RATING"] == "Y"
  862. && $arEvent["FIELDS_FORMATTED"]["EVENT"]["RATING_TYPE_ID"] <> ''
  863. && intval($arEvent["FIELDS_FORMATTED"]["EVENT"]["RATING_ENTITY_ID"]) > 0
  864. )
  865. {
  866. $arEvent["FIELDS_FORMATTED"]["RATING"] = CRatings::GetRatingVoteResult($arEvent["FIELDS_FORMATTED"]["EVENT"]["RATING_TYPE_ID"], $arEvent["FIELDS_FORMATTED"]["EVENT"]["RATING_ENTITY_ID"]);
  867. }
  868. if (
  869. in_array($arEvent["FIELDS_FORMATTED"]["EVENT"]["EVENT_ID"], array("tasks", "crm_activity_add"))
  870. && CModule::IncludeModule('tasks')
  871. )
  872. {
  873. $url = CTaskNotifications::getNotificationPath(
  874. array('ID' => $USER->GetId()),
  875. $arEvent["FIELDS_FORMATTED"]["EVENT"]['SOURCE_ID'],
  876. false
  877. );
  878. $arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["MESSAGE"] = preg_replace('/(<a href=")#USER_PERSONAL_TASK_URL#(">)/', '$1'.$url.'$2', $arEvent["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["MESSAGE"]);
  879. }
  880. return $arEvent["FIELDS_FORMATTED"];
  881. }
  882. }
  883. ?>