1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
callback.php
См. документацию.
1<?php
2namespace Bitrix\Rest\Event;
3
4use Bitrix\Rest\AppTable;
5use Bitrix\Rest\EventTable;
6use Bitrix\Rest\Tools\Diagnostics\Event;
7use Bitrix\Rest\Tools\Diagnostics\LoggerManager;
8
17{
28 public static function __callStatic($name, $arguments)
29 {
31 LoggerManager::getInstance()->getLogger()?->info(
32 "\n{delimiter}\n"
33 . "{date} - {host}\n{delimiter}\n"
34 . "Event {eventName} starts. \n{delimiter}\n"
35 . "{arguments}", [
36 'RESPONSE_DATA' => $arguments,
37 'SCOPE' => $event['MODULE_ID'] ?? null,
38 'METHOD' => $event['EVENT'] ?? null,
39 'MESSAGE' => Event\LogType::EVENT_START->value,
40 'eventName' => $event['EVENT'],
41 'arguments' => $arguments,
42 ]);
43
44 $provider = new \CRestProvider();
45 $description = $provider->getDescription();
46
47 foreach($description as $scope => $scopeMethods)
48 {
49 if(
50 array_key_exists(\CRestUtil::EVENTS, $scopeMethods)
51 && is_array($scopeMethods[\CRestUtil::EVENTS])
52 )
53 {
54 foreach($scopeMethods[\CRestUtil::EVENTS] as $key => $restEvent)
55 {
56 if($restEvent[0] == $event['MODULE_ID'] && mb_strtoupper($restEvent[1]) == $event['EVENT'])
57 {
58 $event['EVENT_REST'] = array(
59 'EVENT' => $key,
60 'HANDLER' => $restEvent[2],
61 'ADDITIONAL' => array(),
62 );
63
64 if(isset($restEvent[3]) && is_array($restEvent[3]))
65 {
66 $event['EVENT_REST']['ADDITIONAL'] = $restEvent[3];
67 }
68
69 break;
70 }
71 }
72 }
73
74 if(array_key_exists('EVENT_REST', $event))
75 {
76 break;
77 }
78 }
79
80 $handlerFound = false;
81 $appHoldExceptId = 0;
82 if (!empty($arguments[1]['REST_EVENT_HOLD_EXCEPT_APP']))
83 {
84 $app = AppTable::getByClientId($arguments[1]['REST_EVENT_HOLD_EXCEPT_APP']);
85 if ($app['ID'] > 0)
86 {
87 $appHoldExceptId = $app['ID'];
88 }
89 }
90
91 if(array_key_exists('EVENT_REST', $event))
92 {
93 $filter = [
94 '=EVENT_NAME' => mb_strtoupper($event['EVENT_REST']['EVENT']),
95 ];
96 if ($appHoldExceptId > 0)
97 {
98 $filter['=APP_ID'] = $appHoldExceptId;
99 }
100
101 $dbRes = EventTable::getList(
102 [
103 'filter' => $filter,
104 'select' => [
105 'ID',
106 'APP_ID',
107 'EVENT_NAME',
108 'EVENT_HANDLER',
109 'USER_ID',
110 'APPLICATION_TOKEN',
111 'CONNECTOR_ID',
112 'APP_CODE' => 'REST_APP.CLIENT_ID',
113 'APP_ACTIVE' => 'REST_APP.ACTIVE',
114 'APP_INSTALLED' => 'REST_APP.INSTALLED',
115 ],
116 ]
117 );
118
119 $dataProcessed = !is_array($event['EVENT_REST']['HANDLER']) || !is_callable($event['EVENT_REST']['HANDLER']);
120 $call = array();
121 while ($handler = $dbRes->fetch())
122 {
123 $handlerFound = true;
124
125 LoggerManager::getInstance()->getLogger()?->info(
126 "\n{delimiter}\n"
127 . "{date} - {host}\n{delimiter}\n"
128 . "Event {eventName} handler found. \n{delimiter}\n"
129 . "{handler}", [
130 'RESPONSE_DATA' => $arguments,
131 'CLIENT_ID' => $handler['APP_CODE'] ?? null,
132 'SCOPE' => $event['MODULE_ID'] ?? null,
133 'EVENT_ID' => $handler['ID'] ?? null,
134 'METHOD' => $event['EVENT'] ?? null,
135 'MESSAGE' => Event\LogType::EVENT_HANDLER_FOUND->value,
136 'eventName' => $event['EVENT'] ?? null,
137 'handler' => $handler,
138 ]);
139
140 if (!empty($handler['APP_CODE']))
141 {
142 if (
143 $handler['APP_ACTIVE'] !== AppTable::ACTIVE
144 || $handler['APP_INSTALLED'] !== AppTable::INSTALLED
145 )
146 {
147 LoggerManager::getInstance()->getLogger()?->info(
148 "\n{delimiter}\n"
149 . "{date} - {host}\n{delimiter}\n"
150 . "Event {eventName} skipped because inactive app: \n"
151 . "{handler}", [
152 'RESPONSE_DATA' => $arguments,
153 'SCOPE' => $event['MODULE_ID'] ?? null,
154 'METHOD' => $event['EVENT'] ?? null,
155 'CLIENT_ID' => $handler['APP_CODE'],
156 'EVENT_ID' => $handler['ID'] ?? null,
157 'MESSAGE' => Event\LogType::SKIP_BY_APP_INACTIVE->value,
158 'eventName' => $event['EVENT'] ?? null,
159 'handler' => $handler,
160 ]);
161
162 continue;
163 }
164
165 $appStatus = AppTable::getAppStatusInfo($handler['APP_CODE'], '');
166 if ($appStatus['PAYMENT_EXPIRED'] === 'Y')
167 {
168 LoggerManager::getInstance()->getLogger()?->info(
169 "\n{delimiter}\n"
170 . "{date} - {host}\n{delimiter}\n"
171 . "Event {eventName} skipped because PAYMENT_EXPIRED: \n"
172 . "{appStatus}", [
173 'RESPONSE_DATA' => $arguments,
174 'SCOPE' => $event['MODULE_ID'] ?? null,
175 'METHOD' => $event['EVENT'] ?? null,
176 'CLIENT_ID' => $handler['APP_CODE'],
177 'EVENT_ID' => $handler['ID'] ?? null,
178 'MESSAGE' => Event\LogType::SKIP_BY_PAYMENT_EXPIRED->value,
179 'eventName' => $event['EVENT'] ?? null,
180 'appStatus' => $appStatus,
181 ]);
182
183 continue;
184 }
185 }
186
187 $handlerArguments = $arguments;
188
189 if(!$dataProcessed)
190 {
191 try
192 {
193 $handlerArguments = call_user_func_array($event['EVENT_REST']['HANDLER'], array($handlerArguments, $handler));
194 $call[] = array($handler, $handlerArguments, $event['EVENT_REST']['ADDITIONAL']);
195 }
196 catch(\Exception $e)
197 {
198 LoggerManager::getInstance()->getLogger()?->error(
199 "\n{delimiter}\n"
200 . "{date} - {host}\n{delimiter}\n"
201 . "Event {eventName} exception: \n"
202 . "{errorCode}: {errorMessage}", [
203 'RESPONSE_DATA' => $e->getMessage(),
204 'SCOPE' => $event['MODULE_ID'] ?? null,
205 'METHOD' => $event['EVENT'] ?? null,
206 'CLIENT_ID' => $handler['APP_CODE'] ?? null,
207 'EVENT_ID' => $handler['ID'] ?? null,
208 'RESPONSE_STATUS' => $e->getCode(),
209 'MESSAGE' => Event\LogType::EVENT_EXCEPTION->value,
210 'eventName' => $event['EVENT'],
211 'errorCode' => $e->getCode(),
212 'errorMessage' => $e->getMessage(),
213 ]);
214 }
215 }
216 else
217 {
218 $call[] = array($handler, $handlerArguments, $event['EVENT_REST']['ADDITIONAL']);
219 }
220 }
221
222 if (!empty($call))
223 {
224 Sender::call($call);
225 }
226 }
227
228 if(!$handlerFound)
229 {
230 Sender::unbind($event['MODULE_ID'], $event['EVENT']);
231 }
232 }
233}
if(!Loader::includeModule('messageservice')) $provider
Определения callback_ednaruimhpx.php:21
static getAppStatusInfo($app, $detailUrl)
Определения app.php:713
const INSTALLED
Определения app.php:71
static getByClientId($clientId)
Определения app.php:967
const ACTIVE
Определения app.php:69
static __callStatic($name, $arguments)
Определения callback.php:28
static parseEventName($name)
Определения sender.php:56
static call($handlersList)
Определения sender.php:157
static unbind($moduleId, $eventName)
Определения sender.php:85
</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
$filter
Определения iblock_catalog_list.php:54
$app
Определения proxy.php:8
$name
Определения menu_edit.php:35
$event
Определения prolog_after.php:141
if(empty($signedUserToken)) $key
Определения quickway.php:257
$dbRes
Определения yandex_detail.php:168