PageRenderTime 65ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/components/bitrix/calendar.livefeed.view/component.php

https://gitlab.com/alexprowars/bitrix
PHP | 179 lines | 151 code | 26 blank | 2 comment | 31 complexity | c60b6a687ad25d7b47178951e6b895f4 MD5 | raw file
  1. <?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
  2. if (!isset($arParams["CALENDAR_TYPE"]))
  3. $arParams["CALENDAR_TYPE"] = 'user';
  4. if(!CModule::IncludeModule("calendar") || !class_exists("CCalendar"))
  5. return ShowError(GetMessage("EC_CALENDAR_MODULE_NOT_INSTALLED"));
  6. $arParams['EVENT_ID'] = intval($arParams['EVENT_ID']);
  7. $arResult['EVENT'] = false;
  8. $arParams['CUR_USER'] = $USER->GetId();
  9. $events = CCalendarEvent::GetList(
  10. array(
  11. 'arFilter' => array(
  12. "ID" => $arParams['EVENT_ID'],
  13. "DELETED" => false
  14. ),
  15. 'parseRecursion' => false,
  16. 'fetchAttendees' => true,
  17. 'checkPermissions' => true,
  18. 'setDefaultLimit' => false
  19. )
  20. );
  21. if ($events && is_array($events[0]))
  22. $arResult['EVENT'] = $events[0];
  23. if (!$arResult['EVENT'])
  24. {
  25. $events = CCalendarEvent::GetList(
  26. array(
  27. 'arFilter' => array(
  28. "ID" => $arParams['EVENT_ID'],
  29. "DELETED" => false
  30. ),
  31. 'parseRecursion' => false,
  32. 'checkPermissions' => false,
  33. 'setDefaultLimit' => false
  34. )
  35. );
  36. // Clean damaged event from livefeed
  37. if (!$events || !is_array($events[0]))
  38. CCalendarLiveFeed::OnDeleteCalendarEventEntry($arParams['EVENT_ID']);
  39. return false;
  40. }
  41. if (!is_array($arParams['~LIVEFEED_ENTRY_PARAMS']) || !array_key_exists('COMMENT_XML_ID', $arParams['~LIVEFEED_ENTRY_PARAMS']))
  42. {
  43. $arResult['ID'] = 'livefeed'.$arParams['EVENT_ID'];
  44. }
  45. else
  46. {
  47. $arResult['ID'] = 'livefeed_'.$arParams['~LIVEFEED_ENTRY_PARAMS']['COMMENT_XML_ID'];
  48. $arResult['ID'] = mb_strtolower(preg_replace('/[^\d|\w_\-]/', '', $arResult['ID']));
  49. // Instance date for recurcive events, which were commented before
  50. $instanceDate = CCalendarEvent::ExtractDateFromCommentXmlId($arParams['~LIVEFEED_ENTRY_PARAMS']['COMMENT_XML_ID']);
  51. if ($instanceDate && CCalendarEvent::CheckRecurcion($arResult['EVENT']))
  52. {
  53. $instanceDateTs = CCalendar::Timestamp($instanceDate);
  54. $currentFromTs = CCalendar::Timestamp($arResult['EVENT']['DATE_FROM']);
  55. $length = $arResult['EVENT']['DT_LENGTH'];
  56. $arResult['EVENT']['~DATE_FROM'] = $arResult['EVENT']['DATE_FROM'];
  57. $arResult['EVENT']['~DATE_TO'] = $arResult['EVENT']['DATE_TO'];
  58. if ($arResult['EVENT']['DT_SKIP_TIME'] == 'Y')
  59. {
  60. $arResult['EVENT']['DATE_FROM'] = CCalendar::Date($instanceDateTs, false);
  61. $arResult['EVENT']['DATE_TO'] = CCalendar::Date($instanceDateTs + $length - CCalendar::GetDayLen(), false);
  62. }
  63. else
  64. {
  65. $newFromTs = mktime(date("H", $currentFromTs), date("i", $currentFromTs), 0, date("m", $instanceDateTs), date("d", $instanceDateTs), date("Y", $instanceDateTs));
  66. $arResult['EVENT']['DATE_FROM'] = CCalendar::Date($newFromTs);
  67. $arResult['EVENT']['DATE_TO'] = CCalendar::Date($newFromTs + $length);
  68. }
  69. }
  70. }
  71. if ($arResult['EVENT']['LOCATION'] !== '')
  72. $arResult['EVENT']['LOCATION'] = CCalendar::GetTextLocation($arResult['EVENT']["LOCATION"]);
  73. global $USER_FIELD_MANAGER;
  74. $UF = CCalendarEvent::GetEventUserFields($arResult['EVENT']);
  75. $arResult['UF_CRM_CAL_EVENT'] = $UF['UF_CRM_CAL_EVENT'];
  76. if (empty($arResult['UF_CRM_CAL_EVENT']['VALUE']))
  77. $arResult['UF_CRM_CAL_EVENT'] = false;
  78. $arResult['UF_WEBDAV_CAL_EVENT'] = $UF['UF_WEBDAV_CAL_EVENT'];
  79. if (empty($arResult['UF_WEBDAV_CAL_EVENT']['VALUE']))
  80. $arResult['UF_WEBDAV_CAL_EVENT'] = false;
  81. $arParams['ATTENDEES_SHOWN_COUNT'] = 4;
  82. $arParams['ATTENDEES_SHOWN_COUNT_MAX'] = 8;
  83. $arParams['AVATAR_SIZE'] = 30;
  84. if (!isset($arParams['EVENT_TEMPLATE_URL']))
  85. {
  86. $editUrl = CCalendar::GetPath('user', '#USER_ID#');
  87. $arParams['EVENT_TEMPLATE_URL'] = $editUrl.((mb_strpos($editUrl, "?") === false) ? '?' : '&').'EVENT_ID=#EVENT_ID#';
  88. }
  89. $fromDateTs = CCalendar::Timestamp($arResult['EVENT']['DATE_FROM']);
  90. if ($arResult['EVENT']['DT_SKIP_TIME'] !== "Y")
  91. {
  92. $fromDateTs -= $arResult['EVENT']['~USER_OFFSET_FROM'];
  93. }
  94. $arResult['EVENT']['FROM_WEEK_DAY'] = FormatDate('D', $fromDateTs);
  95. $arResult['EVENT']['FROM_MONTH_DAY'] = FormatDate('j', $fromDateTs);
  96. $arResult['ATTENDEES_INDEX'] = [];
  97. $arResult['EVENT']['ACCEPTED_ATTENDEES'] = [];
  98. $arResult['EVENT']['DECLINED_ATTENDEES'] = [];
  99. $arResult['ATTENDEES_INDEX'] = [];
  100. $arResult['EVENT']['ACCEPTED_ATTENDEES'] = [];
  101. $arResult['EVENT']['DECLINED_ATTENDEES'] = [];
  102. if ($arResult['EVENT']['IS_MEETING'])
  103. {
  104. if (is_array($arResult['EVENT']['ATTENDEE_LIST']))
  105. {
  106. $userIndex = CCalendarEvent::getUserIndex();
  107. foreach ($arResult['EVENT']['ATTENDEE_LIST'] as $attendee)
  108. {
  109. if (isset($userIndex[$attendee["id"]]))
  110. {
  111. $arResult['ATTENDEES_INDEX'][$attendee["id"]] = [
  112. "STATUS" => $attendee['status']
  113. ];
  114. if ($attendee['status'] == "Y" || $attendee['status'] == "H")
  115. {
  116. $arResult['EVENT']['ACCEPTED_ATTENDEES'][] = $userIndex[$attendee["id"]];
  117. }
  118. elseif($attendee['status'] == "N")
  119. {
  120. $arResult['EVENT']['DECLINED_ATTENDEES'][] = $userIndex[$attendee["id"]];
  121. }
  122. }
  123. }
  124. }
  125. }
  126. if ($arParams['MOBILE'] == 'Y')
  127. {
  128. $this->setSiteTemplateId('mobile_app');
  129. $arParams['ACTION_URL'] = SITE_DIR.'mobile/index.php?mobile_action=calendar_livefeed';
  130. }
  131. else
  132. {
  133. $arParams['ACTION_URL'] = $this->getPath().'/action.php';
  134. }
  135. ob_start();
  136. $this->IncludeComponentTemplate();
  137. $html_message = ob_get_contents();
  138. ob_end_clean();
  139. $footStr1 = '<!--#BX_FEED_EVENT_FOOTER_MESSAGE#-->';
  140. $footStr2 = '<!--#BX_FEED_EVENT_FOOTER_MESSAGE_END#-->';
  141. $pos1 = mb_strpos($html_message, $footStr1);
  142. $pos2 = mb_strpos($html_message, $footStr2);
  143. if ($footStr1 !== false)
  144. $message = mb_substr($html_message, 0, $pos1);
  145. else
  146. $message = $html_message;
  147. $footer_message = mb_substr($html_message, $pos1 + mb_strlen($footStr1), $pos2 - $pos1 - mb_strlen($footStr1));
  148. return array(
  149. 'MESSAGE' => htmlspecialcharsex($message),
  150. 'FOOTER_MESSAGE' => $footer_message,
  151. 'CACHED_JS_PATH' => $this->getTemplate()->GetFolder().'/script.js' // used for attach js inside cached Live feed
  152. );
  153. ?>