1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
event.php
См. документацию.
1<?php
2
4
11
12Loc::loadLanguageFile(__FILE__);
13
14class Event
15{
16 public static function buildPreview(array $params)
17 {
18 global $APPLICATION;
19 $eventId = (int)$params['eventId'];
20 if(!$eventId)
21 {
22 return '';
23 }
24
25 ob_start();
26 $APPLICATION->IncludeComponent(
27 'bitrix:calendar.event.preview',
28 '',
30 );
31 return ob_get_clean();
32 }
33
34 public static function checkUserReadAccess(array $params): bool
35 {
36 $eventId = (int)$params['eventId'];
37 if(
38 !$eventId
39 || !Loader::includeModule('calendar')
40 )
41 {
42 return false;
43 }
44
45 $events = \CCalendarEvent::getList(
46 [
47 'arFilter' => [
48 'ID' => $eventId,
49 'DELETED' => false,
50 ],
51 'parseRecursion' => false,
52 'fetchAttendees' => true,
53 'checkPermissions' => true,
54 'setDefaultLimit' => false
55 ]
56 );
57
58 return ($events && is_array($events[0]));
59 }
60
61 public static function getImAttach(array $params): false|\CIMMessageParamAttach
62 {
63 if (!Loader::includeModule('im'))
64 {
65 return false;
66 }
67
68 if (!($params['eventId'] ?? null) || !($eventId = (int)$params['eventId']))
69 {
70 return false;
71 }
72
74 $mapperFactory = ServiceLocator::getInstance()->get('calendar.service.mappers.factory');
76 $eventObject = $mapperFactory->getEvent()->getById($eventId);
77 $eventOptions = $eventObject->getEventOption();
78 $eventForView = \CCalendarEvent::getEventForViewInterface($eventId, [
79 'userId' => \CCalendar::GetCurUserId(),
80 'eventDate' => $params['eventDate'] ?? null,
81 ]);
82
83 if (
84 !$eventForView
85 || !self::shouldShowAttach($eventForView)
86 )
87 {
88 return false;
89 }
90
91 $attach = new \CIMMessageParamAttach(1, $eventObject->getColor());
92 $attach->AddLink([
93 'NAME' => $eventForView['NAME'],
94 'LINK' => EventHelper::getViewUrl($eventObject),
95 ]);
96
97 $attach->AddDelimiter();
98 $attach->AddGrid(self::getImAttachGrid($eventForView, $eventOptions));
99
100 return $attach;
101 }
102
103 public static function getImRich(array $params)
104 {
105 if (!Loader::includeModule('im'))
106 {
107 return false;
108 }
109
110 if (!class_exists('\Bitrix\Im\V2\Entity\Url\RichData'))
111 {
112 return false;
113 }
114
115 return (new \Bitrix\Im\V2\Entity\Url\RichData())->setType(\Bitrix\Im\V2\Entity\Url\RichData::CALENDAR_TYPE);
116 }
117
118 protected static function getUser()
119 {
120 global $USER;
121
122 return $USER;
123 }
124
125 private static function getImAttachGrid(array $eventForView, ?EventOption $eventOption = null): array
126 {
127 $grid = [];
128 $display = 'COLUMN';
129 $columnWidth = 120;
130
131 if ($categoryName = $eventOption?->getCategory()->getName())
132 {
133 $grid[] = [
134 'NAME' => Loc::getMessage('CALENDAR_PREVIEW_ATTACH_CATEGORY'),
135 'VALUE' => $categoryName,
136 'DISPLAY' => $display,
137 'WIDTH' => $columnWidth,
138 ];
139 }
140
141 $grid[] = [
142 'NAME' => Loc::getMessage('CALENDAR_PREVIEW_ATTACH_TIME'),
143 'VALUE' => self::getDateString($eventForView),
144 'DISPLAY' => $display,
145 'WIDTH' => $columnWidth,
146 ];
147
148 if ($roomName = \CCalendar::GetTextLocation($eventForView['LOCATION'] ?? null))
149 {
150 $grid[] = [
151 'NAME' => Loc::getMessage('CALENDAR_PREVIEW_ATTACH_ROOM'),
152 'VALUE' => $roomName,
153 'DISPLAY' => $display,
154 'WIDTH' => $columnWidth,
155 ];
156 }
157
158 $creator = self::getMeetingCreator($eventForView);
159 $grid[] = [
160 'NAME' => Loc::getMessage('CALENDAR_PREVIEW_ATTACH_CREATOR'),
161 'VALUE' => $creator['DISPLAY_NAME'],
162 'USER_ID' => $creator['ID'],
163 'DISPLAY' => $display,
164 'WIDTH' => $columnWidth,
165 ];
166
167 if ($description = ($eventForView['~DESCRIPTION'] ?? null))
168 {
169 $grid[] = [
170 'NAME' => Loc::getMessage('CALENDAR_PREVIEW_ATTACH_DESCRIPTION'),
171 'VALUE' => HTMLToTxt($description),
172 'DISPLAY' => $display,
173 'WIDTH' => $columnWidth,
174 ];
175 }
176
177 return $grid;
178 }
179
180 private static function shouldShowAttach(array $eventForView): bool
181 {
182 // previously this method test:
183 // - event is open event
184 // - event is collab event
185 //
186 // for now rich message should show for every event,
187 // but if this will cause performance impact, we should go back to event type check
188 return true;
189 }
190
191 private static function getDateString(array $eventForView): string
192 {
193 $skipTime = $eventForView['DT_SKIP_TIME'] === 'Y';
194 $fromTs = \CCalendar::Timestamp($eventForView['DATE_FROM']);
195 $toTs = \CCalendar::Timestamp($eventForView['DATE_TO']);
196 if ($skipTime)
197 {
198 $toTs += \CCalendar::DAY_LENGTH;
199 }
200 else
201 {
202 $fromTs -= $eventForView['~USER_OFFSET_FROM'];
203 $toTs -= $eventForView['~USER_OFFSET_TO'];
204 }
205
206 return \CCalendar::GetFromToHtml($fromTs, $toTs, $skipTime, $eventForView['DT_LENGTH']);
207 }
208
209 private static function getMeetingCreator(array $eventForView): ?array
210 {
211 $meetingCreator = [];
212
213 if (
214 $eventForView['IS_MEETING']
215 && $eventForView['MEETING']['MEETING_CREATOR']
216 && $eventForView['MEETING']['MEETING_CREATOR'] !== $eventForView['MEETING_HOST']
217 )
218 {
219 $meetingCreator = \CCalendar::GetUser($eventForView['MEETING']['MEETING_CREATOR'], true);
220 $meetingCreator['DISPLAY_NAME'] = \CCalendar::GetUserName($meetingCreator);
221 }
222
223 if (!$meetingCreator)
224 {
225 $meetingCreator = \CCalendar::GetUser($eventForView['MEETING_HOST'], true);
226 $meetingCreator['DISPLAY_NAME'] = \CCalendar::GetUserName($meetingCreator);
227 }
228
229 return $meetingCreator;
230 }
231}
global $APPLICATION
Определения include.php:80
static getViewUrl(Event $event)
Определения EventHelper.php:32
static checkUserReadAccess(array $params)
Определения event.php:34
static buildPreview(array $params)
Определения event.php:16
static getImRich(array $params)
Определения event.php:103
static getUser()
Определения event.php:118
Определения loader.php:13
const DAY_LENGTH
Определения calendar.php:57
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
if(Loader::includeModule( 'bitrix24')) elseif(Loader::includeModule('intranet') &&CIntranetUtils::getPortalZone() !=='ru') $description
Определения .description.php:24
global $USER
Определения csv_new_run.php:40
HTMLToTxt($str, $strSiteUrl="", $aDelete=[], $maxlen=70)
Определения tools.php:2587
Определения ufield.php:9
return false
Определения prolog_main_admin.php:185
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799