1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
MobilePush.php
См. документацию.
1<?php
2
3namespace Bitrix\Im\V2\Message\Send\Push;
4
5use Bitrix\Im\Text;
6use Bitrix\Im\User;
7use Bitrix\Im\V2\Chat\CommentChat;
8use Bitrix\Im\V2\Message;
9use Bitrix\Main\Localization\Loc;
10use Bitrix\Main\Type\DateTime;
11use Bitrix\Main\Web\Uri;
12
14{
15 protected Message $message;
17 protected bool $importantPush;
18
20 {
21 $this->message = $message;
22 $this->config = $config;
23 $this->importantPush = $this->message->getChat()->getEntityType() === 'ANNOUNCEMENT';
24 }
25
26 public function sendForGroupMessage(array $group): void
27 {
28 [$pushUserSend, $pushUserSkip] = $this->getPushUsers();
29 $userList = array_intersect($pushUserSend, $group['users']);
30 if (empty($userList) || !$this->needToSend())
31 {
32 return;
33 }
34
35 $pushParams = $group['event'];
36 $pushParams = $this->preparePushForChat($pushParams);
37
38 if ($this->importantPush)
39 {
40 $pushParams['push']['important'] = 'Y';
41 }
42
43 $pushParams['skip_users'] = $pushUserSkip;
44
45 if ($this->message->getPushMessage())
46 {
47 $pushParams['push']['message'] = $this->message->getPushMessage();
48 $pushParams['push']['advanced_params']['senderMessage'] = $this->message->getPushMessage();
49 }
50 $pushParams['push']['advanced_params']['counter'] = $group['event']['params']['counter'];
51
52 \Bitrix\Pull\Push::add($userList, $pushParams);
53 }
54
55 public function sendForPrivateMessage(int $userId, array $push): void
56 {
57 if (!$this->config->sendPush())
58 {
59 return;
60 }
61
62 $preparedPush = $this->preparePushForPrivate($push);
63 if ($this->message->getPushMessage())
64 {
65 $preparedPush['push']['message'] = $this->message->getPushMessage();
66 $preparedPush['push']['advanced_params']['senderMessage'] = $this->message->getPushMessage();
67 }
68
69 $preparedPush['push']['advanced_params']['counter'] = $push['params']['counter'];
70 if ($userId === $this->message->getAuthorId())
71 {
72 $preparedPush = array_merge_recursive($preparedPush, [
73 'push' => [
74 'skip_users' => [$userId],
75 'advanced_params' => [
76 "notificationsToCancel" => ['IM_MESS'],
77 ],
78 'send_immediately' => 'Y',
79 ]
80 ]
81 );
82 }
83
84 \Bitrix\Pull\Push::add($userId, $preparedPush);
85 }
86
87 protected function needToSend(): bool
88 {
89 $chat = $this->message->getChat();
90 if ($chat instanceof CommentChat)
91 {
92 return false;
93 }
94
95 return true;
96 }
97
98 protected function getPushUsers(): array
99 {
100 $pushUserSkip = [];
101 $pushUserSend = [];
102 $activeUserRelations = $this->message->getChat()->getRelationsForSendMessage();
103
104 foreach ($activeUserRelations as $relation)
105 {
106 if ($relation->getUserId() === $this->message->getAuthorId())
107 {
108 continue;
109 }
110 if ($relation->getNotifyBlock() && !$this->importantPush)
111 {
112 $pushUserSkip[] = $relation->getUserId();
113 $pushUserSend[] = $relation->getUserId();
114 }
115 elseif ($this->config->sendPush())
116 {
117 $pushUserSend[] = $relation->getUserId();
118 }
119 }
120
121 return [$pushUserSend, $pushUserSkip];
122 }
123
125 {
126 $attachmentSuffix = self::getAttachmentSuffixForPush($params['params']);
127 $pushText = $this->prepareMessageForPush($params['params']);
128 unset($params['params']['message']['text_push']);
129
130 $chatTitle = mb_substr(htmlspecialcharsback($params['params']['chat'][$params['params']['chatId']]['name']), 0, 32);
131 $chatType = $params['params']['chat'][$params['params']['chatId']]['type'];
132 $chatAvatar = $params['params']['chat'][$params['params']['chatId']]['avatar'];
133 $chatTypeLetter = $params['params']['chat'][$params['params']['chatId']]['message_type'];
134
135
136 if (($params['params']['system'] ?? null) === 'Y' || $params['params']['message']['senderId'] <= 0)
137 {
138 $avatarUser = '';
139 $userName = '';
140 }
141 else
142 {
143 $userName = User::getInstance($params['params']['message']['senderId'])->getFullName(false);
144 $avatarUser = User::getInstance($params['params']['message']['senderId'])->getAvatar();
145 if ($avatarUser && mb_strpos($avatarUser, 'http') !== 0)
146 {
147 $avatarUser = \Bitrix\Im\Common::getPublicDomain().$avatarUser;
148 }
149 }
150
151 if (
152 isset(
153 $params['params']['message']['senderId'],
154 $params['params']['users'][$params['params']['message']['senderId']]
155 )
156 && $params['params']['users'][$params['params']['message']['senderId']]
157 )
158 {
159 $params['params']['users'] = [
160 $params['params']['message']['senderId'] => $params['params']['users'][$params['params']['message']['senderId']]
161 ];
162 }
163 else
164 {
165 $params['params']['users'] = [];
166 }
167
168 if ($chatAvatar == '/bitrix/js/im/images/blank.gif')
169 {
170 $chatAvatar = '';
171 }
172 else if ($chatAvatar && mb_strpos($chatAvatar, 'http') !== 0)
173 {
174 $chatAvatar = \Bitrix\Im\Common::getPublicDomain().$chatAvatar;
175 }
176
177 unset($params['extra']);
178
179 array_walk_recursive($params, function(&$item, $key)
180 {
181 if (is_null($item))
182 {
183 $item = false;
184 }
185 else if ($item instanceof DateTime)
186 {
187 $item = date('c', $item->getTimestamp());
188 }
189 });
190
191 $result = [];
192 $result['module_id'] = 'im';
193 $result['push']['type'] = ($chatType === 'open'? 'openChat': $chatType);
194 $result['push']['tag'] = 'IM_CHAT_'.intval($params['params']['chatId']);
195 $result['push']['sub_tag'] = 'IM_MESS';
196 $result['push']['app_id'] = 'Bitrix24';
197 $result['push']['message'] = ($userName? $userName.': ': '').$pushText;
198 $result['push']['advanced_params'] = [
199 'group' => $chatType == 'lines'? 'im_lines_message': 'im_message',
200 'avatarUrl' => $chatAvatar? $chatAvatar: $avatarUser,
201 'senderName' => $chatTitle,
202 'senderMessage' => ($userName? $userName.': ': '').$pushText,
203 'attachmentSuffix' => $attachmentSuffix,
204 'senderCut' => mb_strlen($userName? $userName.': ' : ''),
205 'data' => $this->prepareEventForPush($params['command'], $params['params']),
206 ];
207 $result['push']['params'] = [
208 'TAG' => 'IM_CHAT_'.$params['params']['chatId'],
209 'CHAT_TYPE' => $chatTypeLetter? $chatTypeLetter: 'C',
210 'CATEGORY' => 'ANSWER',
211 'URL' => SITE_DIR.'mobile/ajax.php?mobile_action=im_answer',
212 'PARAMS' => [
213 'RECIPIENT_ID' => 'chat'.$params['params']['chatId'],
214 'MESSAGE_ID' => $params['params']['message']['id']
215 ],
216 ];
217
218 return $result;
219 }
220
222 {
223 $attachmentSuffix = self::getAttachmentSuffixForPush($params['params']);
224 $pushText = $this->prepareMessageForPush($params['params']);
225 unset($params['params']['message']['text_push']);
226
227 if (isset($params['params']['system']) && $params['params']['system'] == 'Y')
228 {
229 $userName = '';
230 $avatarUser = '';
231 }
232 else
233 {
234 $userName = User::getInstance($params['params']['message']['senderId'])->getFullName(false);
235 $avatarUser = User::getInstance($params['params']['message']['senderId'])->getAvatar();
236 if ($avatarUser && mb_strpos($avatarUser, 'http') !== 0)
237 {
238 $avatarUser = \Bitrix\Im\Common::getPublicDomain().$avatarUser;
239 }
240 }
241
242 if ($params['params']['users'][$params['params']['message']['senderId']])
243 {
244 $params['params']['users'] = [
245 $params['params']['message']['senderId'] => $params['params']['users'][$params['params']['message']['senderId']]
246 ];
247 }
248 else
249 {
250 $params['params']['users'] = [];
251 }
252
253 unset($params['extra']);
254
255 array_walk_recursive($params, function(&$item, $key)
256 {
257 if (is_null($item))
258 {
259 $item = false;
260 }
261 else if ($item instanceof DateTime)
262 {
263 $item = date('c', $item->getTimestamp());
264 }
265 });
266
267 $result = [];
268 $result['module_id'] = 'im';
269 $result['push'] = [];
270 $result['push']['type'] = 'message';
271 $result['push']['tag'] = 'IM_MESS_'.(int)$params['params']['message']['senderId'];
272 $result['push']['sub_tag'] = 'IM_MESS';
273 $result['push']['app_id'] = 'Bitrix24';
274 $result['push']['message'] = $pushText;
275 $result['push']['advanced_params'] = [
276 'group' => 'im_message',
277 'avatarUrl' => $avatarUser,
278 'senderName' => $userName,
279 'senderMessage' => $pushText,
280 'attachmentSuffix' => $attachmentSuffix,
281 'data' => $this->prepareEventForPush($params['command'], $params['params']),
282 ];
283 $result['push']['params'] = [
284 'TAG' => 'IM_MESS_'.$params['params']['message']['senderId'],
285 'CATEGORY' => 'ANSWER',
286 'URL' => SITE_DIR. 'mobile/ajax.php?mobile_action=im_answer',
287 'PARAMS' => [
288 'RECIPIENT_ID' => (int)$params['params']['message']['senderId'],
289 'MESSAGE_ID' => $params['params']['message']['id']
290 ],
291 ];
292
293 return $result;
294 }
295
296 private function prepareMessageForPush(array $message): string
297 {
298 Message::loadPhrases();
299
300 $messageText = $message['message']['text'];
301 if (isset($message['message']['text_push']) && $message['message']['text_push'])
302 {
303 $messageText = $message['message']['text_push'];
304 }
305 else
306 {
308 }
309
310 $codeIcon = Text::getEmoji('code', '['.Loc::getMessage('IM_MESSAGE_CODE').']');
311 $quoteIcon = Text::getEmoji('quote', '['.Loc::getMessage('IM_MESSAGE_QUOTE').']');
312
313 $messageText = str_replace("\n", ' ', $messageText);
314 $messageText = preg_replace("/\[CODE\](.*?)\[\/CODE\]/si", ' '.$codeIcon.' ', $messageText);
315 $messageText = preg_replace("/\[s\].*?\[\/s\]/i", '-', $messageText);
316 $messageText = preg_replace("/\[[bui]\](.*?)\[\/[bui]\]/i", "$1", $messageText);
317 $messageText = preg_replace("/\\[url\\](.*?)\\[\\/url\\]/iu", "$1", $messageText);
318 $messageText = preg_replace("/\\[url\\s*=\\s*((?:[^\\[\\]]++|\\[ (?: (?>[^\\[\\]]+) | (?:\\1) )* \\])+)\\s*\\](.*?)\\[\\/url\\]/ixsu", "$2", $messageText);
319 $messageText = preg_replace_callback("/\[USER=([0-9]{1,})\]\[\/USER\]/i", ['\Bitrix\Im\Text', 'modifyShortUserTag'], $messageText);
320 $messageText = preg_replace("/\[USER=([0-9]+)( REPLACE)?](.+?)\[\/USER]/i", "$3", $messageText);
321 $messageText = preg_replace("/\[CHAT=([0-9]{1,})\](.*?)\[\/CHAT\]/i", "$2", $messageText);
322 $messageText = preg_replace("/\[context=(chat\d+|\d+:\d+)\/(\d+)](.*?)\[\/context]/i", "$3", $messageText);
323 $messageText = preg_replace_callback("/\[SEND(?:=(?:.+?))?\](?:.+?)?\[\/SEND]/i", ['\Bitrix\Im\Text', "modifySendPut"], $messageText);
324 $messageText = preg_replace_callback("/\[PUT(?:=(?:.+?))?\](?:.+?)?\[\/PUT]/i", ['\Bitrix\Im\Text', "modifySendPut"], $messageText);
325 $messageText = preg_replace("/\[CALL(?:=(.+?))?\](.+?)?\[\/CALL\]/i", "$2", $messageText);
326 $messageText = preg_replace("/\[PCH=([0-9]{1,})\](.*?)\[\/PCH\]/i", "$2", $messageText);
327 $messageText = preg_replace_callback("/\[ICON\=([^\]]*)\]/i", ['\Bitrix\Im\Text', 'modifyIcon'], $messageText);
328 $messageText = preg_replace_callback('/\[TIMESTAMP=(\d+) FORMAT=([^\]]*)\]/i', [Text::class, 'modifyTimestampCode'], $messageText);
329 $messageText = preg_replace('#\-{54}.+?\-{54}#s', ' '.$quoteIcon.' ', str_replace('#BR#', ' ', $messageText));
330 $messageText = preg_replace('/^(>>(.*)(\n)?)/mi', ' '.$quoteIcon.' ', str_replace('#BR#', ' ', $messageText));
331 $messageText = preg_replace("/\\[color\\s*=\\s*([^\\]]+)\\](.*?)\\[\\/color\\]/isu", "$2", $messageText);
332 $messageText = preg_replace("/\\[size\\s*=\\s*([^\\]]+)\\](.*?)\\[\\/size\\]/isu", "$2", $messageText);
333
334 return trim($messageText);
335 }
336
337 public static function getAttachmentSuffixForPush(array $message): string
338 {
339 Message::loadPhrases();
340
341 $attachmentSuffix = '';
342 $attach = $message['message']['params']['ATTACH'] ?? null;
343 $files = $message['files'] ?? null;
344 $text = $message['message']['text'] ?? null;
345
346 if (!empty($attach) && is_array($attach))
347 {
348 $attachmentSuffix = self::getAttachDescription($attach);
349
350 if (!$attachmentSuffix)
351 {
352 $attachmentSuffix = Text::getEmoji('attach') . ' ' . Loc::getMessage('IM_MESSAGE_ATTACH');
353 }
354 if ($attachmentSuffix === \CIMMessageParamAttach::SKIP_MESSAGE)
355 {
356 $attachmentSuffix = '';
357 }
358 if (!empty($text))
359 {
360 $attachmentSuffix = ' ' . $attachmentSuffix;
361 }
362 }
363
364 if (!empty($files) && is_array($files))
365 {
366 $file = reset($files);
367
368 $attachmentSuffix = match ($file['type'] ?? '')
369 {
370 'image' => Text::getEmoji('image') .' '. Loc::getMessage('IM_MESSAGE_IMAGE'),
371 'audio' => Text::getEmoji('audio') .' '. Loc::getMessage('IM_MESSAGE_AUDIO'),
372 'video' => Text::getEmoji('video') .' '. Loc::getMessage('IM_MESSAGE_VIDEO'),
373 default => Text::getEmoji('file', Loc::getMessage('IM_MESSAGE_FILE') . ':') . ' ' . $file['name'],
374 };
375 }
376
377 return $attachmentSuffix;
378 }
379
380 protected static function getAttachDescription(array $attach): string
381 {
382 $attachItem = reset($attach);
383 if (is_array($attachItem))
384 {
385 return (string)($attachItem['DESCRIPTION'] ?? '');
386 }
387
388 return '';
389 }
390
391 private function prepareEventForPush(string $command, array $event): array
392 {
393 $result = [
394 'cmd' => $command,
395 'chatId' => (int)$event['chatId'],
396 'dialogId' => (string)$event['dialogId'],
397 'counter' => (int)$event['counter'],
398 ];
399
400 if ($event['notify'] !== true)
401 {
402 $result['notify'] = $event['notify'];
403 }
404
405 if (!empty($event['chat'][$event['chatId']]))
406 {
407 $eventChat = $event['chat'][$event['chatId']];
408
409 $chat = [
410 'id' => (int)$eventChat['id'],
411 'name' => (string)$eventChat['name'],
412 'owner' => (int)$eventChat['owner'],
413 'color' => (string)$eventChat['color'],
414 'type' => (string)$eventChat['type'],
415 'date_create' => (string)$eventChat['date_create'],
416 ];
417
418 if (
419 !empty($eventChat['avatar'])
420 && $eventChat['avatar'] !== '/bitrix/js/im/images/blank.gif'
421 )
422 {
423 $chat['avatar'] = $eventChat['avatar'];
424 }
425 if ($eventChat['call'])
426 {
427 $chat['call'] = (string)$eventChat['call'];
428 }
429 if ($eventChat['call_number'])
430 {
431 $chat['call_number'] = (string)$eventChat['call_number'];
432 }
433 if ($eventChat['entity_data_1'])
434 {
435 $chat['entity_data_1'] = (string)$eventChat['entity_data_1'];
436 }
437 if ($eventChat['entity_data_2'])
438 {
439 $chat['entity_data_2'] = (string)$eventChat['entity_data_2'];
440 }
441 if ($eventChat['entity_data_3'])
442 {
443 $chat['entity_data_3'] = (string)$eventChat['entity_data_3'];
444 }
445 if ($eventChat['entity_id'])
446 {
447 $chat['entity_id'] = (string)$eventChat['entity_id'];
448 }
449 if ($eventChat['entity_type'])
450 {
451 $chat['entity_type'] = (string)$eventChat['entity_type'];
452 }
453 if ($eventChat['extranet'])
454 {
455 $chat['extranet'] = true;
456 }
457
458 $result['chat'] = $chat;
459 }
460
461 if (!empty($event['lines']))
462 {
463 $result['lines'] = $event['lines'];
464 }
465
466 if (!empty($event['users'][$event['message']['senderId']]))
467 {
468 $eventUser = $event['users'][$event['message']['senderId']];
469
470 $user = [
471 'id' => (int)$eventUser['id'],
472 'name' => (string)$eventUser['name'],
473 'first_name' => (string)$eventUser['first_name'],
474 'last_name' => (string)$eventUser['last_name'],
475 'color' => (string)$eventUser['color'],
476 ];
477
478 if (
479 !empty($eventUser['avatar'])
480 && $eventUser['avatar'] !== '/bitrix/js/im/images/blank.gif'
481 )
482 {
483 $user['avatar'] = (string)$eventUser['avatar'];
484 }
485
486 if ($eventUser['absent'])
487 {
488 $user['absent'] = true;
489 }
490 if (!$eventUser['active'])
491 {
492 $user['active'] = $eventUser['active'];
493 }
494 if ($eventUser['bot'])
495 {
496 $user['bot'] = true;
497 }
498 if ($eventUser['extranet'])
499 {
500 $user['extranet'] = true;
501 }
502 if ($eventUser['network'])
503 {
504 $user['network'] = true;
505 }
506 if ($eventUser['birthday'])
507 {
508 $user['birthday'] = $eventUser['birthday'];
509 }
510 if ($eventUser['connector'])
511 {
512 $user['connector'] = true;
513 }
514 if ($eventUser['external_auth_id'] !== 'default')
515 {
516 $user['external_auth_id'] = $eventUser['external_auth_id'];
517 }
518 if ($eventUser['gender'] === 'F')
519 {
520 $user['gender'] = 'F';
521 }
522 if ($eventUser['work_position'])
523 {
524 $user['work_position'] = (string)$eventUser['work_position'];
525 }
526
527 $result['users'] = $user;
528 }
529
530 if (!empty($event['files']))
531 {
532 foreach ($event['files'] as $key => $value)
533 {
534 $file = [
535 'id' => (int)$value['id'],
536 'extension' => (string)$value['extension'],
537 'name' => (string)$value['name'],
538 'size' => (int)$value['size'],
539 'type' => (string)$value['type'],
540 'image' => $value['image'],
541 'urlDownload' => '',
542 'urlPreview' => (new Uri($value['urlPreview']))->deleteParams(['fileName'])->getUri(),
543 'urlShow' => (new Uri($value['urlShow']))->deleteParams(['fileName'])->getUri(),
544 ];
545 if ($value['image'])
546 {
547 $file['image'] = $value['image'];
548 }
549 if ($value['progress'] !== 100)
550 {
551 $file['progress'] = (int)$value['progress'];
552 }
553 if ($value['status'] !== 'done')
554 {
555 $file['status'] = $value['status'];
556 }
557
558 $result['files'][$key] = $file;
559 }
560 }
561
562 if (!empty($event['message']))
563 {
564 $eventMessage = $event['message'];
565
566 $message = [
567 'id' => (int)$eventMessage['id'],
568 'date' => (string)$eventMessage['date'],
569 'params' => $eventMessage['params'],
570 'prevId' => (int)$eventMessage['prevId'],
571 'senderId' => (int)$eventMessage['senderId'],
572 ];
573
574 if (isset($message['params']['ATTACH']))
575 {
576 unset($message['params']['ATTACH']);
577 }
578
579 if ($eventMessage['system'] === 'Y')
580 {
581 $message['system'] = 'Y';
582 }
583
584 $result['message'] = $message;
585 }
586
587 $indexToNameMap = [
588 'chat' => 1,
589 'chatId' => 2,
590 'counter' => 3,
591 'dialogId' => 4,
592 'files' => 5,
593 'message' => 6,
594 'users' => 8,
595 'name' => 9,
596 'avatar' => 10,
597 'color' => 11,
598 'notify' => 12,
599 'type' => 13,
600 'extranet' => 14,
601
602 'date_create' => 20,
603 'owner' => 21,
604 'entity_id' => 23,
605 'entity_type' => 24,
606 'entity_data_1' => 203,
607 'entity_data_2' => 204,
608 'entity_data_3' => 205,
609 'call' => 201,
610 'call_number' => 202,
611 'manager_list' => 209,
612 'mute_list' => 210,
613
614 'first_name' => 40,
615 'last_name' => 41,
616 'gender' => 42,
617 'work_position' => 43,
618 'active' => 400,
619 'birthday' => 401,
620 'bot' => 402,
621 'connector' => 403,
622 'external_auth_id' => 404,
623 'network' => 406,
624
625
626 'textLegacy' => 65,
627 'date' => 61,
628 'prevId' => 62,
629 'params' => 63,
630 'senderId' => 64,
631 'system' => 601,
632
633 'extension' => 80,
634 'image' => 81,
635 'progress' => 82,
636 'size' => 83,
637 'status' => 84,
638 'urlDownload' => 85,
639 'urlPreview' => 86,
640 'urlShow' => 87,
641 'width' => 88,
642 'height' => 89,
643 ];
644
645 return $this->changeKeysPushEvent($result, $indexToNameMap);
646 }
647
648 private function changeKeysPushEvent(array $object, array $map): array
649 {
650 $result = [];
651
652 foreach($object as $key => $value)
653 {
654 $index = isset($map[$key]) ? $map[$key] : $key;
655 if (is_null($value))
656 {
657 $value = "";
658 }
659 if (is_array($value))
660 {
661 $result[$index] = $this->changeKeysPushEvent($value, $map);
662 }
663 else
664 {
665 $result[$index] = $value;
666 }
667 }
668
669 return $result;
670 }
671}
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
Определения check_mail.php:18
static getPublicDomain()
Определения common.php:8
static getEmoji($code, $fallbackText='')
Определения text.php:383
static getInstance($userId=null)
Определения user.php:45
static getAttachmentSuffixForPush(array $message)
Определения MobilePush.php:337
Message Send SendingConfig $config
Определения MobilePush.php:16
sendForPrivateMessage(int $userId, array $push)
Определения MobilePush.php:55
sendForGroupMessage(array $group)
Определения MobilePush.php:26
preparePushForPrivate(array $params)
Определения MobilePush.php:221
__construct(Message $message, Message\Send\SendingConfig $config)
Определения MobilePush.php:19
static getAttachDescription(array $attach)
Определения MobilePush.php:380
preparePushForChat(array $params)
Определения MobilePush.php:124
$userList
Определения discount_coupon_list.php:276
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$result
Определения get_property_values.php:14
const SITE_DIR(!defined('LANG'))
Определения include.php:72
htmlspecialcharsback($str)
Определения tools.php:2693
$map
Определения config.php:5
Определения Uuid.php:3
$value
Определения Param.php:39
$user
Определения mysql_to_pgsql.php:33
$files
Определения mysql_to_pgsql.php:30
$message
Определения payment.php:8
$event
Определения prolog_after.php:141
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
if(empty($signedUserToken)) $key
Определения quickway.php:257
$text
Определения template_pdf.php:79
else $userName
Определения order_form.php:75
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799