Internal API UK: различия между версиями
IronBot (обсуждение | вклад) ([IronBot] Sync EN/UK localization from RU) |
IronBot (обсуждение | вклад) ([IronBot] Fix UK localization text) |
||
| Строка 1: | Строка 1: | ||
[[Internal_API_EN|en]] | '''uk''' | [[Internal_API|ru]] | |||
Custom Events v2 - | Custom Events v2 - це локальна система внутрішніх подій ERP. Вона виконує клієнтський PHP-код усередині поточного PHP-процесу ERP без HTTP-запитів, вебхуків і зовнішніх черг. | ||
Старий механізм <code>legacy/Config/custom_api.txt</code> з функцією <code>api_function(...)</code> залишається legacy-контрактом. У v2 старі назви використовуються лише для карти сумісності. Новий клієнтський код має використовувати константи <code>CustomEvent::...</code>. | |||
== | == Файли == | ||
Робочий клієнтський файл один: | |||
<pre>evolution/CustomEvents/v2/handlers.php</pre> | <pre>evolution/CustomEvents/v2/handlers.php</pre> | ||
Приклад: | |||
<pre>evolution/CustomEvents/v2/handlers.example.php</pre> | <pre>evolution/CustomEvents/v2/handlers.example.php</pre> | ||
Список | Список усіх констант: | ||
<pre>evolution/CustomEvents/Runtime/v2/CustomEvent.php</pre> | <pre>evolution/CustomEvents/Runtime/v2/CustomEvent.php</pre> | ||
Карта | Карта старих назв у нові події: | ||
<pre>evolution/CustomEvents/Runtime/v2/CustomEventLegacyEventMap.php</pre> | <pre>evolution/CustomEvents/Runtime/v2/CustomEventLegacyEventMap.php</pre> | ||
| Строка 31: | Строка 31: | ||
<pre>var/log/custom-events-v2.log</pre> | <pre>var/log/custom-events-v2.log</pre> | ||
== | == Як писати обробники == | ||
Використовується одна функція реєстрації: <code>internal_event(...)</code>. | |||
В | В одному файлі можна зареєструвати кілька обробників поспіль: | ||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
| Строка 51: | Строка 51: | ||
static function ($event): bool|string { | static function ($event): bool|string { | ||
if ((int)$event->get('new_status_id') === 0) { | if ((int)$event->get('new_status_id') === 0) { | ||
return ' | return 'Заборонено переводити абонента в цей статус'; | ||
} | } | ||
| Строка 63: | Строка 63: | ||
$customerId = (int)$event->get('customer_id'); | $customerId = (int)$event->get('customer_id'); | ||
return '<div> | return '<div>Додаткова інформація щодо абонента #' . $customerId . '</div>'; | ||
}, | }, | ||
); | ); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
В | В обробник завжди надходить один параметр: <code>$event</code>. | ||
Дані читаються без типових обгорток: | |||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
| Строка 78: | Строка 78: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Якщо потрібен конкретний тип, приведіть значення у своєму коді: | |||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
| Строка 85: | Строка 85: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Результат | == Результат обробника == | ||
Обробник повертає просте значення: | |||
{| class="wikitable" | {| class="wikitable" | ||
! | ! Повернення | ||
! | ! Значення | ||
|- | |- | ||
| <code>true</code> | | <code>true</code> | ||
| | | Обробник виконано успішно | ||
|- | |- | ||
| <code>false</code> | | <code>false</code> | ||
| Для | | Для події <code>*.before</code> заборонити штатну операцію | ||
|- | |- | ||
| <code>null</code> | | <code>null</code> | ||
| | | Нічого не змінювати | ||
|- | |- | ||
| | | рядок | ||
| Для <code>*.before</code> | | Для <code>*.before</code> заборонити операцію з текстом причини; для <code>*.render</code> вивести рядок або HTML | ||
|} | |} | ||
Події <code>*.before</code> можуть скасовувати штатну операцію. Інші події не повинні скасовувати вже виконану дію. | |||
== | == Приклад заборони операції == | ||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
| Строка 115: | Строка 115: | ||
static function ($event): bool|string { | static function ($event): bool|string { | ||
if ((int)$event->get('new_status_id') === 0) { | if ((int)$event->get('new_status_id') === 0) { | ||
return ' | return 'Заборонено переводити абонента в цей статус'; | ||
} | } | ||
| Строка 123: | Строка 123: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== | == Приклад виведення HTML == | ||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
| Строка 131: | Строка 131: | ||
$customerId = (int)$event->get('customer_id'); | $customerId = (int)$event->get('customer_id'); | ||
return '<div> | return '<div>Додаткова інформація щодо абонента #' . $customerId . '</div>'; | ||
}, | }, | ||
); | ); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== | == Перевірка, кеш і лог == | ||
Після зміни <code>evolution/CustomEvents/v2/handlers.php</code> ERP перевіряє синтаксис через <code>php -l</code>. Якщо синтаксис коректний, файл копіюється до <code>var/cache/CustomEvents/handlers.v2.cache.php</code>. | |||
Runtime-лог | Runtime-лог записується у форматі JSON Lines до <code>var/log/custom-events-v2.log</code>. Один рядок - це один виклик обробника, помилка або факт відсутності обробників. | ||
Приклад рядка: | |||
<syntaxhighlight lang="json"> | <syntaxhighlight lang="json"> | ||
| Строка 148: | Строка 148: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Лог | Лог ротується в: | ||
<pre>var/log/custom-events-v2.log.1</pre> | <pre>var/log/custom-events-v2.log.1</pre> | ||
== | == Помилки == | ||
Якщо в обробнику виникне помилка, ERP запише її в лог і продовжить роботу за правилами конкретної події. | |||
Обробник виконується всередині того самого PHP-процесу, що й ядро ERP. Через ядро проходять тисячі операцій, тому повільний або помилковий клієнтський код може зупинити чи дестабілізувати роботу всієї системи. Не використовуйте <code>exit</code>, <code>die</code>, нескінченні цикли, важкі SQL-запити без обмежень і тривалі зовнішні операції. Тримайте обробники короткими та передбачуваними. | |||
== | == Рекомендації == | ||
* | * Використовуйте лише константи <code>CustomEvent::...</code>. | ||
* Не | * Не пишіть рядок події вручну. | ||
* | * Робіть обробники короткими. | ||
* Не | * Не викликайте HTTP/webhook із високочастотних подій. | ||
* Не | * Не використовуйте <code>exit</code>, <code>die</code>, нескінченні цикли та важкі вибірки без обмежень. | ||
* | * Повертайте <code>true</code>, <code>false</code>, <code>null</code> або рядок. | ||
== | == Усі події == | ||
Нижче перелічені всі події v2. Повний технічний список констант міститься в <code>evolution/CustomEvents/Runtime/v2/CustomEvent.php</code>. | |||
Поля <code>event</code> | Поля <code>event</code> вказані як поточний контракт даних. | ||
=== | === Будинки === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Константа | ! Константа | ||
! | ! Коли викликається | ||
! | ! Дані <code>$event</code> | ||
|- | |- | ||
| <code>CustomEvent::BUILDING_CREATED</code> | | <code>CustomEvent::BUILDING_CREATED</code> | ||
| | | Після створення будинку | ||
| <code>building_id</code>, <code>data</code> | | <code>building_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::BUILDING_CHANGED</code> | | <code>CustomEvent::BUILDING_CHANGED</code> | ||
| | | Після редагування будинку | ||
| <code>building_id</code>, <code>data</code> | | <code>building_id</code>, <code>data</code> | ||
|} | |} | ||
=== | === Комутація === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Константа | ! Константа | ||
! | ! Коли викликається | ||
! | ! Дані <code>$event</code> | ||
|- | |- | ||
| <code>CustomEvent::COMMUTATION_CREATE_BEFORE</code> | | <code>CustomEvent::COMMUTATION_CREATE_BEFORE</code> | ||
| Перед | | Перед створенням комутації між об'єктами | ||
| <code>source_type</code>, <code>source_id</code>, <code>target_type</code>, <code>target_id</code>, <code>data</code> | | <code>source_type</code>, <code>source_id</code>, <code>target_type</code>, <code>target_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::COMMUTATION_DELETE_BEFORE</code> | | <code>CustomEvent::COMMUTATION_DELETE_BEFORE</code> | ||
| Перед | | Перед видаленням комутації між об'єктами | ||
| <code>source_type</code>, <code>source_id</code>, <code>target_type</code>, <code>target_id</code>, <code>data</code> | | <code>source_type</code>, <code>source_id</code>, <code>target_type</code>, <code>target_id</code>, <code>data</code> | ||
|} | |} | ||
=== | === Головна сторінка === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Константа | ! Константа | ||
! | ! Коли викликається | ||
! | ! Дані <code>$event</code> | ||
|- | |- | ||
| <code>CustomEvent::DASHBOARD_TOP_CONTENT_RENDER</code> | | <code>CustomEvent::DASHBOARD_TOP_CONTENT_RENDER</code> | ||
| | | Під час виведення тексту у верхній частині головної сторінки | ||
| <code>employee_id</code>, <code>data</code> | | <code>employee_id</code>, <code>data</code> | ||
|} | |} | ||
=== | === Обладнання === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Константа | ! Константа | ||
! | ! Коли викликається | ||
! | ! Дані <code>$event</code> | ||
|- | |- | ||
| <code>CustomEvent::DEVICE_CHANGED</code> | | <code>CustomEvent::DEVICE_CHANGED</code> | ||
| | | Після редагування обладнання | ||
| <code>device_id</code>, <code>device_type</code>, <code>data</code> | | <code>device_id</code>, <code>device_type</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::DEVICE_NOTIFICATION_DOWN</code> | | <code>CustomEvent::DEVICE_NOTIFICATION_DOWN</code> | ||
| | | Під час фіксації недоступності обладнання | ||
| <code>device_id</code>, <code>device_type</code>, <code>ip</code>, <code>data</code> | | <code>device_id</code>, <code>device_type</code>, <code>ip</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::DEVICE_NOTIFICATION_UP</code> | | <code>CustomEvent::DEVICE_NOTIFICATION_UP</code> | ||
| | | Під час відновлення доступності обладнання | ||
| <code>device_id</code>, <code>device_type</code>, <code>ip</code>, <code>data</code> | | <code>device_id</code>, <code>device_type</code>, <code>ip</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::DEVICE_INTERFACE_PORT_NUMBER_RENDER</code> | | <code>CustomEvent::DEVICE_INTERFACE_PORT_NUMBER_RENDER</code> | ||
| | | Під час виведення номера порту в таблиці інтерфейсів | ||
| <code>device_id</code>, <code>interface_id</code>, <code>port_number</code>, <code>data</code> | | <code>device_id</code>, <code>interface_id</code>, <code>port_number</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::DEVICE_INTERFACE_ADDITIONAL_DATA_RENDER</code> | | <code>CustomEvent::DEVICE_INTERFACE_ADDITIONAL_DATA_RENDER</code> | ||
| | | Під час виведення додаткового вмісту в картці обладнання | ||
| <code>device_id</code>, <code>data</code> | | <code>device_id</code>, <code>data</code> | ||
|} | |} | ||
=== | === Абоненти === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Константа | ! Константа | ||
! | ! Коли викликається | ||
! | ! Дані <code>$event</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_CREATED</code> | | <code>CustomEvent::CUSTOMER_CREATED</code> | ||
| | | Після створення абонента | ||
| <code>customer_id</code>, <code>data</code> | | <code>customer_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_CHANGE_BEFORE</code> | | <code>CustomEvent::CUSTOMER_CHANGE_BEFORE</code> | ||
| Перед | | Перед редагуванням абонента | ||
| <code>customer_id</code>, <code>data</code> | | <code>customer_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_CHANGED</code> | | <code>CustomEvent::CUSTOMER_CHANGED</code> | ||
| | | Після редагування абонента | ||
| <code>customer_id</code>, <code>data</code> | | <code>customer_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_MERGED</code> | | <code>CustomEvent::CUSTOMER_MERGED</code> | ||
| | | Після об'єднання абонентів | ||
| <code>customer_id</code>, <code>target_customer_id</code>, <code>data</code> | | <code>customer_id</code>, <code>target_customer_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_STATUS_CHANGE_BEFORE</code> | | <code>CustomEvent::CUSTOMER_STATUS_CHANGE_BEFORE</code> | ||
| Перед | | Перед зміною статусу абонента | ||
| <code>customer_id</code>, <code>new_status_id</code>, <code>old_status_id</code>, <code>data</code> | | <code>customer_id</code>, <code>new_status_id</code>, <code>old_status_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_STATUS_CHANGED</code> | | <code>CustomEvent::CUSTOMER_STATUS_CHANGED</code> | ||
| | | Після зміни статусу абонента | ||
| <code>customer_id</code>, <code>new_status_id</code>, <code>old_status_id</code>, <code>data</code> | | <code>customer_id</code>, <code>new_status_id</code>, <code>old_status_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_TARIFF_CHANGE_BEFORE</code> | | <code>CustomEvent::CUSTOMER_TARIFF_CHANGE_BEFORE</code> | ||
| Перед | | Перед зміною тарифу абонента | ||
| <code>customer_id</code>, <code>billing_id</code>, <code>new_tariff_id</code>, <code>old_tariff_id</code>, <code>data</code> | | <code>customer_id</code>, <code>billing_id</code>, <code>new_tariff_id</code>, <code>old_tariff_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_TARIFF_CHANGED</code> | | <code>CustomEvent::CUSTOMER_TARIFF_CHANGED</code> | ||
| | | Після зміни тарифу абонента | ||
| <code>customer_id</code>, <code>billing_id</code>, <code>new_tariff_id</code>, <code>old_tariff_id</code>, <code>data</code> | | <code>customer_id</code>, <code>billing_id</code>, <code>new_tariff_id</code>, <code>old_tariff_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_BALANCE_CHANGED</code> | | <code>CustomEvent::CUSTOMER_BALANCE_CHANGED</code> | ||
| | | Під час зміни балансу абонента | ||
| <code>customer_id</code>, <code>amount</code>, <code>data</code> | | <code>customer_id</code>, <code>amount</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_FORMER_TRANSFER_BEFORE</code> | | <code>CustomEvent::CUSTOMER_FORMER_TRANSFER_BEFORE</code> | ||
| Перед | | Перед переведенням абонента в колишні абоненти | ||
| <code>customer_id</code>, <code>data</code> | | <code>customer_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_FORMER_TRANSFERRED</code> | | <code>CustomEvent::CUSTOMER_FORMER_TRANSFERRED</code> | ||
| | | Після переведення абонента в колишні абоненти | ||
| <code>customer_id</code>, <code>data</code> | | <code>customer_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_FORMER_RESTORE_BEFORE</code> | | <code>CustomEvent::CUSTOMER_FORMER_RESTORE_BEFORE</code> | ||
| Перед | | Перед відновленням абонента з колишніх абонентів | ||
| <code>customer_id</code>, <code>data</code> | | <code>customer_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_FORMER_RESTORED</code> | | <code>CustomEvent::CUSTOMER_FORMER_RESTORED</code> | ||
| | | Після відновлення абонента з колишніх абонентів | ||
| <code>customer_id</code>, <code>data</code> | | <code>customer_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_DISCONNECT_PLAN_BEFORE</code> | | <code>CustomEvent::CUSTOMER_DISCONNECT_PLAN_BEFORE</code> | ||
| Перед | | Перед постановкою абонента на відключення | ||
| <code>customer_id</code>, <code>data</code> | | <code>customer_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_DISCONNECT_PLANNED</code> | | <code>CustomEvent::CUSTOMER_DISCONNECT_PLANNED</code> | ||
| | | Після постановки абонента на відключення | ||
| <code>customer_id</code>, <code>data</code> | | <code>customer_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_DISCONNECT_BEFORE</code> | | <code>CustomEvent::CUSTOMER_DISCONNECT_BEFORE</code> | ||
| Перед | | Перед відключенням абонента | ||
| <code>customer_id</code>, <code>data</code> | | <code>customer_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_DISCONNECTED</code> | | <code>CustomEvent::CUSTOMER_DISCONNECTED</code> | ||
| | | Після відключення абонента | ||
| <code>customer_id</code>, <code>data</code> | | <code>customer_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_DISCONNECT_CANCEL_BEFORE</code> | | <code>CustomEvent::CUSTOMER_DISCONNECT_CANCEL_BEFORE</code> | ||
| Перед | | Перед скасуванням відключення абонента | ||
| <code>customer_id</code>, <code>data</code> | | <code>customer_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_DISCONNECT_CANCELLED</code> | | <code>CustomEvent::CUSTOMER_DISCONNECT_CANCELLED</code> | ||
| | | Після скасування відключення абонента | ||
| <code>customer_id</code>, <code>data</code> | | <code>customer_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_SERVICE_ENABLE_BEFORE</code> | | <code>CustomEvent::CUSTOMER_SERVICE_ENABLE_BEFORE</code> | ||
| Перед | | Перед підключенням послуги абоненту | ||
| <code>customer_id</code>, <code>service_id</code>, <code>data</code> | | <code>customer_id</code>, <code>service_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_SERVICE_ENABLED</code> | | <code>CustomEvent::CUSTOMER_SERVICE_ENABLED</code> | ||
| | | Після підключення послуги абоненту | ||
| <code>customer_id</code>, <code>service_id</code>, <code>data</code> | | <code>customer_id</code>, <code>service_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_SERVICE_DISABLE_BEFORE</code> | | <code>CustomEvent::CUSTOMER_SERVICE_DISABLE_BEFORE</code> | ||
| Перед | | Перед відключенням послуги абоненту | ||
| <code>customer_id</code>, <code>service_id</code>, <code>data</code> | | <code>customer_id</code>, <code>service_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_SERVICE_DISABLED</code> | | <code>CustomEvent::CUSTOMER_SERVICE_DISABLED</code> | ||
| | | Після відключення послуги абоненту | ||
| <code>customer_id</code>, <code>service_id</code>, <code>data</code> | | <code>customer_id</code>, <code>service_id</code>, <code>data</code> | ||
|} | |} | ||
| Строка 349: | Строка 349: | ||
{| class="wikitable" | {| class="wikitable" | ||
! Константа | ! Константа | ||
! | ! Коли викликається | ||
! | ! Дані <code>$event</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_IP_ADD_BEFORE</code> | | <code>CustomEvent::CUSTOMER_IP_ADD_BEFORE</code> | ||
| Перед | | Перед додаванням IP/MAC-адреси | ||
| <code>customer_id</code>, <code>ip</code>, <code>mac</code>, <code>subnet_property</code>, <code>data</code> | | <code>customer_id</code>, <code>ip</code>, <code>mac</code>, <code>subnet_property</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_IP_ADDED</code> | | <code>CustomEvent::CUSTOMER_IP_ADDED</code> | ||
| | | Після додавання IP/MAC-адреси | ||
| <code>customer_id</code>, <code>ip</code>, <code>mac</code>, <code>subnet_property</code>, <code>data</code> | | <code>customer_id</code>, <code>ip</code>, <code>mac</code>, <code>subnet_property</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_IP_DELETE_BEFORE</code> | | <code>CustomEvent::CUSTOMER_IP_DELETE_BEFORE</code> | ||
| Перед | | Перед видаленням IP/MAC-адреси | ||
| <code>customer_id</code>, <code>ip</code>, <code>mac</code>, <code>subnet_property</code>, <code>data</code> | | <code>customer_id</code>, <code>ip</code>, <code>mac</code>, <code>subnet_property</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_IP_DELETED</code> | | <code>CustomEvent::CUSTOMER_IP_DELETED</code> | ||
| | | Після видалення IP/MAC-адреси | ||
| <code>customer_id</code>, <code>ip</code>, <code>mac</code>, <code>subnet_property</code>, <code>data</code> | | <code>customer_id</code>, <code>ip</code>, <code>mac</code>, <code>subnet_property</code>, <code>data</code> | ||
|} | |} | ||
==== | ==== Мітки абонента ==== | ||
{| class="wikitable" | {| class="wikitable" | ||
! Константа | ! Константа | ||
! | ! Коли викликається | ||
! | ! Дані <code>$event</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_TAG_ADD_BEFORE</code> | | <code>CustomEvent::CUSTOMER_TAG_ADD_BEFORE</code> | ||
| Перед | | Перед додаванням мітки абоненту | ||
| <code>customer_id</code>, <code>tag_id</code>, <code>data</code> | | <code>customer_id</code>, <code>tag_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_TAG_ADDED</code> | | <code>CustomEvent::CUSTOMER_TAG_ADDED</code> | ||
| | | Після додавання мітки абоненту | ||
| <code>customer_id</code>, <code>tag_id</code>, <code>data</code> | | <code>customer_id</code>, <code>tag_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_TAG_DELETE_BEFORE</code> | | <code>CustomEvent::CUSTOMER_TAG_DELETE_BEFORE</code> | ||
| Перед | | Перед видаленням мітки абонента | ||
| <code>customer_id</code>, <code>tag_id</code>, <code>data</code> | | <code>customer_id</code>, <code>tag_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_TAG_DELETED</code> | | <code>CustomEvent::CUSTOMER_TAG_DELETED</code> | ||
| | | Після видалення мітки абонента | ||
| <code>customer_id</code>, <code>tag_id</code>, <code>data</code> | | <code>customer_id</code>, <code>tag_id</code>, <code>data</code> | ||
|} | |} | ||
==== | ==== Особистий кабінет абонента ==== | ||
{| class="wikitable" | {| class="wikitable" | ||
! Константа | ! Константа | ||
! | ! Коли викликається | ||
! | ! Дані <code>$event</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_PORTAL_REGISTRATION_BEFORE</code> | | <code>CustomEvent::CUSTOMER_PORTAL_REGISTRATION_BEFORE</code> | ||
| Перед | | Перед реєстрацією абонента в особистому кабінеті | ||
| <code>customer_id</code>, <code>data</code> | | <code>customer_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_PORTAL_REGISTERED</code> | | <code>CustomEvent::CUSTOMER_PORTAL_REGISTERED</code> | ||
| | | Після реєстрації абонента в особистому кабінеті | ||
| <code>customer_id</code>, <code>data</code> | | <code>customer_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_PORTAL_LOGIN_BEFORE</code> | | <code>CustomEvent::CUSTOMER_PORTAL_LOGIN_BEFORE</code> | ||
| Перед входом абонента в | | Перед входом абонента в особистий кабінет | ||
| <code>customer_id</code>, <code>data</code> | | <code>customer_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_PORTAL_DASHBOARD_RENDER</code> | | <code>CustomEvent::CUSTOMER_PORTAL_DASHBOARD_RENDER</code> | ||
| | | Під час виведення вмісту на головній сторінці особистого кабінету | ||
| <code>customer_id</code>, <code>data</code> | | <code>customer_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_PORTAL_PAGE_RENDER</code> | | <code>CustomEvent::CUSTOMER_PORTAL_PAGE_RENDER</code> | ||
| | | Під час виведення вмісту на сторінках особистого кабінету | ||
| <code>customer_id</code>, <code>page_mode</code>, <code>page_id</code>, <code>data</code> | | <code>customer_id</code>, <code>page_mode</code>, <code>page_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_PORTAL_HEAD_RENDER</code> | | <code>CustomEvent::CUSTOMER_PORTAL_HEAD_RENDER</code> | ||
| | | Під час виведення вмісту після <code>head</code> в особистому кабінеті | ||
| <code>customer_id</code>, <code>data</code> | | <code>customer_id</code>, <code>data</code> | ||
|} | |} | ||
==== | ==== Картка абонента ==== | ||
{| class="wikitable" | {| class="wikitable" | ||
! Константа | ! Константа | ||
! | ! Коли викликається | ||
! | ! Дані <code>$event</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_CARD_PRIMARY_CONTENT_RENDER</code> | | <code>CustomEvent::CUSTOMER_CARD_PRIMARY_CONTENT_RENDER</code> | ||
| | | Під час виведення основного вмісту в картці абонента | ||
| <code>customer_id</code>, <code>mode</code>, <code>employee_id</code>, <code>data</code> | | <code>customer_id</code>, <code>mode</code>, <code>employee_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_CARD_SECONDARY_CONTENT_RENDER</code> | | <code>CustomEvent::CUSTOMER_CARD_SECONDARY_CONTENT_RENDER</code> | ||
| | | Під час виведення додаткового вмісту в картці абонента | ||
| <code>customer_id</code>, <code>mode</code>, <code>employee_id</code>, <code>ip_mac</code>, <code>data</code> | | <code>customer_id</code>, <code>mode</code>, <code>employee_id</code>, <code>ip_mac</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_CARD_IP_MAC_CONTENT_RENDER</code> | | <code>CustomEvent::CUSTOMER_CARD_IP_MAC_CONTENT_RENDER</code> | ||
| | | Під час виведення інформації біля IP/MAC-адрес абонента | ||
| <code>customer_id</code>, <code>ip</code>, <code>mac</code>, <code>data</code> | | <code>customer_id</code>, <code>ip</code>, <code>mac</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::CUSTOMER_CARD_SMS_CONTENT_RENDER</code> | | <code>CustomEvent::CUSTOMER_CARD_SMS_CONTENT_RENDER</code> | ||
| | | Під час виведення вмісту надсилання SMS у картці абонента | ||
| <code>customer_id</code>, <code>data</code> | | <code>customer_id</code>, <code>data</code> | ||
|} | |} | ||
=== | === Співробітники === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Константа | ! Константа | ||
! | ! Коли викликається | ||
! | ! Дані <code>$event</code> | ||
|- | |- | ||
| <code>CustomEvent::EMPLOYEE_MESSAGE_CREATED</code> | | <code>CustomEvent::EMPLOYEE_MESSAGE_CREATED</code> | ||
| | | Після створення повідомлення співробітнику | ||
| <code>receiver_employee_id</code>, <code>message_id</code>, <code>data</code> | | <code>receiver_employee_id</code>, <code>message_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::EMPLOYEE_CHANGED</code> | | <code>CustomEvent::EMPLOYEE_CHANGED</code> | ||
| | | Після редагування співробітника | ||
| <code>employee_id</code>, <code>data</code> | | <code>employee_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::EMPLOYEE_PERSONAL_SECTION_CONTENT_RENDER</code> | | <code>CustomEvent::EMPLOYEE_PERSONAL_SECTION_CONTENT_RENDER</code> | ||
| | | Під час виведення інформації в персональному розділі співробітника | ||
| <code>employee_id</code>, <code>data</code> | | <code>employee_id</code>, <code>data</code> | ||
|} | |} | ||
==== Табель | ==== Табель робіт ==== | ||
{| class="wikitable" | {| class="wikitable" | ||
! Константа | ! Константа | ||
! | ! Коли викликається | ||
! | ! Дані <code>$event</code> | ||
|- | |- | ||
| <code>CustomEvent::EMPLOYEE_TIMESHEET_PRINT_HEADER_RENDER</code> | | <code>CustomEvent::EMPLOYEE_TIMESHEET_PRINT_HEADER_RENDER</code> | ||
| | | Під час виведення шапки друкованого табеля | ||
| <code>employee_id</code>, <code>period</code>, <code>data</code> | | <code>employee_id</code>, <code>period</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::EMPLOYEE_TIMESHEET_PRINT_FOOTER_RENDER</code> | | <code>CustomEvent::EMPLOYEE_TIMESHEET_PRINT_FOOTER_RENDER</code> | ||
| | | Під час виведення підвала друкованого табеля | ||
| <code>employee_id</code>, <code>period</code>, <code>data</code> | | <code>employee_id</code>, <code>period</code>, <code>data</code> | ||
|} | |} | ||
| Строка 489: | Строка 489: | ||
{| class="wikitable" | {| class="wikitable" | ||
! Константа | ! Константа | ||
! | ! Коли викликається | ||
! | ! Дані <code>$event</code> | ||
|- | |- | ||
| <code>CustomEvent::INVENTORY_TRANSFER_BEFORE</code> | | <code>CustomEvent::INVENTORY_TRANSFER_BEFORE</code> | ||
| Перед | | Перед переміщенням ТМЦ | ||
| <code>inventory_id</code>, <code>operation_id</code>, <code>data</code> | | <code>inventory_id</code>, <code>operation_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::INVENTORY_TRANSFERRED</code> | | <code>CustomEvent::INVENTORY_TRANSFERRED</code> | ||
| | | Після переміщення ТМЦ | ||
| <code>inventory_id</code>, <code>operation_id</code>, <code>data</code> | | <code>inventory_id</code>, <code>operation_id</code>, <code>data</code> | ||
|} | |} | ||
=== | === Завдання === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Константа | ! Константа | ||
! | ! Коли викликається | ||
! | ! Дані <code>$event</code> | ||
|- | |- | ||
| <code>CustomEvent::TASK_CARD_RENDER</code> | | <code>CustomEvent::TASK_CARD_RENDER</code> | ||
| | | Під час виведення вмісту в картці завдання | ||
| <code>task_type_id</code>, <code>task_id</code>, <code>employee_id</code>, <code>data</code> | | <code>task_type_id</code>, <code>task_id</code>, <code>employee_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::TASK_WORK_DATE_RENDER</code> | | <code>CustomEvent::TASK_WORK_DATE_RENDER</code> | ||
| | | Під час виведення вмісту біля дати робіт | ||
| <code>task_type_id</code>, <code>task_id</code>, <code>employee_id</code>, <code>data</code> | | <code>task_type_id</code>, <code>task_id</code>, <code>employee_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::TASK_CREATE_BEFORE</code> | | <code>CustomEvent::TASK_CREATE_BEFORE</code> | ||
| Перед | | Перед створенням завдання | ||
| <code>task_type_id</code>, <code>author_employee_id</code>, <code>data</code> | | <code>task_type_id</code>, <code>author_employee_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::TASK_CREATED</code> | | <code>CustomEvent::TASK_CREATED</code> | ||
| | | Після створення завдання | ||
| <code>task_id</code>, <code>task_type_id</code>, <code>author_employee_id</code>, <code>data</code> | | <code>task_id</code>, <code>task_type_id</code>, <code>author_employee_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::TASK_DELETE_BEFORE</code> | | <code>CustomEvent::TASK_DELETE_BEFORE</code> | ||
| Перед | | Перед видаленням завдання | ||
| <code>task_id</code>, <code>data</code> | | <code>task_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::TASK_CHANGE_BEFORE</code> | | <code>CustomEvent::TASK_CHANGE_BEFORE</code> | ||
| Перед | | Перед редагуванням завдання | ||
| <code>task_id</code>, <code>data</code> | | <code>task_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::TASK_CHANGED</code> | | <code>CustomEvent::TASK_CHANGED</code> | ||
| | | Після редагування завдання | ||
| <code>task_id</code>, <code>data</code> | | <code>task_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::TASK_COMMENT_CREATE_BEFORE</code> | | <code>CustomEvent::TASK_COMMENT_CREATE_BEFORE</code> | ||
| Перед | | Перед додаванням коментаря до завдання | ||
| <code>task_id</code>, <code>comment</code>, <code>data</code> | | <code>task_id</code>, <code>comment</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::TASK_COMMENT_CREATED</code> | | <code>CustomEvent::TASK_COMMENT_CREATED</code> | ||
| | | Після додавання коментаря до завдання | ||
| <code>task_id</code>, <code>comment_id</code>, <code>comment</code>, <code>data</code> | | <code>task_id</code>, <code>comment_id</code>, <code>comment</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::TASK_COMMENT_CHANGED</code> | | <code>CustomEvent::TASK_COMMENT_CHANGED</code> | ||
| | | Після редагування коментаря до завдання | ||
| <code>task_id</code>, <code>comment_id</code>, <code>comment</code>, <code>data</code> | | <code>task_id</code>, <code>comment_id</code>, <code>comment</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::TASK_COMMENT_TEXT_RENDER</code> | | <code>CustomEvent::TASK_COMMENT_TEXT_RENDER</code> | ||
| | | Під час виведення тексту коментаря завдання | ||
| <code>task_id</code>, <code>comment_id</code>, <code>comment</code>, <code>data</code> | | <code>task_id</code>, <code>comment_id</code>, <code>comment</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::TASK_DIVISION_ASSIGN_BEFORE</code> | | <code>CustomEvent::TASK_DIVISION_ASSIGN_BEFORE</code> | ||
| Перед | | Перед додаванням підрозділу до завдання | ||
| <code>task_id</code>, <code>division_id</code>, <code>data</code> | | <code>task_id</code>, <code>division_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::TASK_DIVISION_REMOVE_BEFORE</code> | | <code>CustomEvent::TASK_DIVISION_REMOVE_BEFORE</code> | ||
| Перед | | Перед виключенням підрозділу із завдання | ||
| <code>task_id</code>, <code>division_id</code>, <code>data</code> | | <code>task_id</code>, <code>division_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::TASK_EMPLOYEE_ASSIGN_BEFORE</code> | | <code>CustomEvent::TASK_EMPLOYEE_ASSIGN_BEFORE</code> | ||
| Перед | | Перед додаванням виконавця до завдання | ||
| <code>task_id</code>, <code>employee_id</code>, <code>data</code> | | <code>task_id</code>, <code>employee_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::TASK_EMPLOYEE_REMOVE_BEFORE</code> | | <code>CustomEvent::TASK_EMPLOYEE_REMOVE_BEFORE</code> | ||
| Перед | | Перед виключенням виконавця із завдання | ||
| <code>task_id</code>, <code>employee_id</code>, <code>data</code> | | <code>task_id</code>, <code>employee_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::TASK_WATCHER_DIVISION_ASSIGN_BEFORE</code> | | <code>CustomEvent::TASK_WATCHER_DIVISION_ASSIGN_BEFORE</code> | ||
| Перед | | Перед додаванням підрозділу спостерігачем | ||
| <code>task_id</code>, <code>division_id</code>, <code>data</code> | | <code>task_id</code>, <code>division_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::TASK_WATCHER_EMPLOYEE_ASSIGN_BEFORE</code> | | <code>CustomEvent::TASK_WATCHER_EMPLOYEE_ASSIGN_BEFORE</code> | ||
| Перед | | Перед додаванням співробітника спостерігачем | ||
| <code>task_id</code>, <code>employee_id</code>, <code>data</code> | | <code>task_id</code>, <code>employee_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::TASK_OBJECT_ATTACHED</code> | | <code>CustomEvent::TASK_OBJECT_ATTACHED</code> | ||
| | | Після додавання об'єкта до завдання | ||
| <code>task_id</code>, <code>object_type</code>, <code>object_id</code>, <code>data</code> | | <code>task_id</code>, <code>object_type</code>, <code>object_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::TASK_OBJECT_DETACHED</code> | | <code>CustomEvent::TASK_OBJECT_DETACHED</code> | ||
| | | Після виключення об'єкта із завдання | ||
| <code>task_id</code>, <code>object_type</code>, <code>object_id</code>, <code>data</code> | | <code>task_id</code>, <code>object_type</code>, <code>object_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::TASK_RETURNED_TO_AUTHOR</code> | | <code>CustomEvent::TASK_RETURNED_TO_AUTHOR</code> | ||
| | | Після повернення завдання автору | ||
| <code>task_id</code>, <code>data</code> | | <code>task_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::TASK_STATE_CHANGE_BEFORE</code> | | <code>CustomEvent::TASK_STATE_CHANGE_BEFORE</code> | ||
| Перед | | Перед зміною статусу завдання | ||
| <code>task_id</code>, <code>old_state_id</code>, <code>new_state_id</code>, <code>data</code> | | <code>task_id</code>, <code>old_state_id</code>, <code>new_state_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::TASK_STATE_CHANGED</code> | | <code>CustomEvent::TASK_STATE_CHANGED</code> | ||
| | | Після зміни статусу завдання | ||
| <code>task_id</code>, <code>old_state_id</code>, <code>new_state_id</code>, <code>data</code> | | <code>task_id</code>, <code>old_state_id</code>, <code>new_state_id</code>, <code>data</code> | ||
|} | |} | ||
=== | === Споруди зв'язку === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Константа | ! Константа | ||
! | ! Коли викликається | ||
! | ! Дані <code>$event</code> | ||
|- | |- | ||
| <code>CustomEvent::NODE_CARD_ADDITIONAL_DATA_RENDER</code> | | <code>CustomEvent::NODE_CARD_ADDITIONAL_DATA_RENDER</code> | ||
| | | Під час виведення додаткового вмісту в картці споруди зв'язку | ||
| <code>node_id</code>, <code>data</code> | | <code>node_id</code>, <code>data</code> | ||
|- | |- | ||
| <code>CustomEvent::NODE_CARD_PRIMARY_CONTENT_RENDER</code> | | <code>CustomEvent::NODE_CARD_PRIMARY_CONTENT_RENDER</code> | ||
| | | Під час виведення основного вмісту в картці споруди зв'язку | ||
| <code>node_id</code>, <code>data</code> | | <code>node_id</code>, <code>data</code> | ||
|} | |} | ||
Текущая версия от 19:35, 23 мая 2026
Custom Events v2 - це локальна система внутрішніх подій ERP. Вона виконує клієнтський PHP-код усередині поточного PHP-процесу ERP без HTTP-запитів, вебхуків і зовнішніх черг.
Старий механізм legacy/Config/custom_api.txt з функцією api_function(...) залишається legacy-контрактом. У v2 старі назви використовуються лише для карти сумісності. Новий клієнтський код має використовувати константи CustomEvent::....
Файли
Робочий клієнтський файл один:
evolution/CustomEvents/v2/handlers.php
Приклад:
evolution/CustomEvents/v2/handlers.example.php
Список усіх констант:
evolution/CustomEvents/Runtime/v2/CustomEvent.php
Карта старих назв у нові події:
evolution/CustomEvents/Runtime/v2/CustomEventLegacyEventMap.php
Кеш:
var/cache/CustomEvents/handlers.v2.cache.php
Лог:
var/log/custom-events-v2.log
Як писати обробники
Використовується одна функція реєстрації: internal_event(...).
В одному файлі можна зареєструвати кілька обробників поспіль:
internal_event(
CustomEvent::TASK_CREATED,
static function ($event): bool {
$taskId = $event->get('task_id');
return true;
},
);
internal_event(
CustomEvent::CUSTOMER_STATUS_CHANGE_BEFORE,
static function ($event): bool|string {
if ((int)$event->get('new_status_id') === 0) {
return 'Заборонено переводити абонента в цей статус';
}
return true;
},
);
internal_event(
CustomEvent::CUSTOMER_CARD_PRIMARY_CONTENT_RENDER,
static function ($event): string {
$customerId = (int)$event->get('customer_id');
return '<div>Додаткова інформація щодо абонента #' . $customerId . '</div>';
},
);
В обробник завжди надходить один параметр: $event.
Дані читаються без типових обгорток:
$taskId = $event->get('task_id');
$customerId = $event->get('customer_id');
$data = $event->all();
Якщо потрібен конкретний тип, приведіть значення у своєму коді:
$taskId = (int)$event->get('task_id');
$comment = (string)$event->get('comment');
Результат обробника
Обробник повертає просте значення:
| Повернення | Значення |
|---|---|
true
|
Обробник виконано успішно |
false
|
Для події *.before заборонити штатну операцію
|
null
|
Нічого не змінювати |
| рядок | Для *.before заборонити операцію з текстом причини; для *.render вивести рядок або HTML
|
Події *.before можуть скасовувати штатну операцію. Інші події не повинні скасовувати вже виконану дію.
Приклад заборони операції
internal_event(
CustomEvent::CUSTOMER_STATUS_CHANGE_BEFORE,
static function ($event): bool|string {
if ((int)$event->get('new_status_id') === 0) {
return 'Заборонено переводити абонента в цей статус';
}
return true;
},
);
Приклад виведення HTML
internal_event(
CustomEvent::CUSTOMER_CARD_PRIMARY_CONTENT_RENDER,
static function ($event): string {
$customerId = (int)$event->get('customer_id');
return '<div>Додаткова інформація щодо абонента #' . $customerId . '</div>';
},
);
Перевірка, кеш і лог
Після зміни evolution/CustomEvents/v2/handlers.php ERP перевіряє синтаксис через php -l. Якщо синтаксис коректний, файл копіюється до var/cache/CustomEvents/handlers.v2.cache.php.
Runtime-лог записується у форматі JSON Lines до var/log/custom-events-v2.log. Один рядок - це один виклик обробника, помилка або факт відсутності обробників.
Приклад рядка:
{"ts":"2026-05-10T12:01:03+03:00","event":"task.created","has_handlers":true,"handlers":1,"handler_index":0,"duration_ms":2.341,"memory_kb":18,"result":"allow","message":null}
Лог ротується в:
var/log/custom-events-v2.log.1
Помилки
Якщо в обробнику виникне помилка, ERP запише її в лог і продовжить роботу за правилами конкретної події.
Обробник виконується всередині того самого PHP-процесу, що й ядро ERP. Через ядро проходять тисячі операцій, тому повільний або помилковий клієнтський код може зупинити чи дестабілізувати роботу всієї системи. Не використовуйте exit, die, нескінченні цикли, важкі SQL-запити без обмежень і тривалі зовнішні операції. Тримайте обробники короткими та передбачуваними.
Рекомендації
- Використовуйте лише константи
CustomEvent::.... - Не пишіть рядок події вручну.
- Робіть обробники короткими.
- Не викликайте HTTP/webhook із високочастотних подій.
- Не використовуйте
exit,die, нескінченні цикли та важкі вибірки без обмежень. - Повертайте
true,false,nullабо рядок.
Усі події
Нижче перелічені всі події v2. Повний технічний список констант міститься в evolution/CustomEvents/Runtime/v2/CustomEvent.php.
Поля event вказані як поточний контракт даних.
Будинки
| Константа | Коли викликається | Дані $event
|
|---|---|---|
CustomEvent::BUILDING_CREATED
|
Після створення будинку | building_id, data
|
CustomEvent::BUILDING_CHANGED
|
Після редагування будинку | building_id, data
|
Комутація
| Константа | Коли викликається | Дані $event
|
|---|---|---|
CustomEvent::COMMUTATION_CREATE_BEFORE
|
Перед створенням комутації між об'єктами | source_type, source_id, target_type, target_id, data
|
CustomEvent::COMMUTATION_DELETE_BEFORE
|
Перед видаленням комутації між об'єктами | source_type, source_id, target_type, target_id, data
|
Головна сторінка
| Константа | Коли викликається | Дані $event
|
|---|---|---|
CustomEvent::DASHBOARD_TOP_CONTENT_RENDER
|
Під час виведення тексту у верхній частині головної сторінки | employee_id, data
|
Обладнання
| Константа | Коли викликається | Дані $event
|
|---|---|---|
CustomEvent::DEVICE_CHANGED
|
Після редагування обладнання | device_id, device_type, data
|
CustomEvent::DEVICE_NOTIFICATION_DOWN
|
Під час фіксації недоступності обладнання | device_id, device_type, ip, data
|
CustomEvent::DEVICE_NOTIFICATION_UP
|
Під час відновлення доступності обладнання | device_id, device_type, ip, data
|
CustomEvent::DEVICE_INTERFACE_PORT_NUMBER_RENDER
|
Під час виведення номера порту в таблиці інтерфейсів | device_id, interface_id, port_number, data
|
CustomEvent::DEVICE_INTERFACE_ADDITIONAL_DATA_RENDER
|
Під час виведення додаткового вмісту в картці обладнання | device_id, data
|
Абоненти
| Константа | Коли викликається | Дані $event
|
|---|---|---|
CustomEvent::CUSTOMER_CREATED
|
Після створення абонента | customer_id, data
|
CustomEvent::CUSTOMER_CHANGE_BEFORE
|
Перед редагуванням абонента | customer_id, data
|
CustomEvent::CUSTOMER_CHANGED
|
Після редагування абонента | customer_id, data
|
CustomEvent::CUSTOMER_MERGED
|
Після об'єднання абонентів | customer_id, target_customer_id, data
|
CustomEvent::CUSTOMER_STATUS_CHANGE_BEFORE
|
Перед зміною статусу абонента | customer_id, new_status_id, old_status_id, data
|
CustomEvent::CUSTOMER_STATUS_CHANGED
|
Після зміни статусу абонента | customer_id, new_status_id, old_status_id, data
|
CustomEvent::CUSTOMER_TARIFF_CHANGE_BEFORE
|
Перед зміною тарифу абонента | customer_id, billing_id, new_tariff_id, old_tariff_id, data
|
CustomEvent::CUSTOMER_TARIFF_CHANGED
|
Після зміни тарифу абонента | customer_id, billing_id, new_tariff_id, old_tariff_id, data
|
CustomEvent::CUSTOMER_BALANCE_CHANGED
|
Під час зміни балансу абонента | customer_id, amount, data
|
CustomEvent::CUSTOMER_FORMER_TRANSFER_BEFORE
|
Перед переведенням абонента в колишні абоненти | customer_id, data
|
CustomEvent::CUSTOMER_FORMER_TRANSFERRED
|
Після переведення абонента в колишні абоненти | customer_id, data
|
CustomEvent::CUSTOMER_FORMER_RESTORE_BEFORE
|
Перед відновленням абонента з колишніх абонентів | customer_id, data
|
CustomEvent::CUSTOMER_FORMER_RESTORED
|
Після відновлення абонента з колишніх абонентів | customer_id, data
|
CustomEvent::CUSTOMER_DISCONNECT_PLAN_BEFORE
|
Перед постановкою абонента на відключення | customer_id, data
|
CustomEvent::CUSTOMER_DISCONNECT_PLANNED
|
Після постановки абонента на відключення | customer_id, data
|
CustomEvent::CUSTOMER_DISCONNECT_BEFORE
|
Перед відключенням абонента | customer_id, data
|
CustomEvent::CUSTOMER_DISCONNECTED
|
Після відключення абонента | customer_id, data
|
CustomEvent::CUSTOMER_DISCONNECT_CANCEL_BEFORE
|
Перед скасуванням відключення абонента | customer_id, data
|
CustomEvent::CUSTOMER_DISCONNECT_CANCELLED
|
Після скасування відключення абонента | customer_id, data
|
CustomEvent::CUSTOMER_SERVICE_ENABLE_BEFORE
|
Перед підключенням послуги абоненту | customer_id, service_id, data
|
CustomEvent::CUSTOMER_SERVICE_ENABLED
|
Після підключення послуги абоненту | customer_id, service_id, data
|
CustomEvent::CUSTOMER_SERVICE_DISABLE_BEFORE
|
Перед відключенням послуги абоненту | customer_id, service_id, data
|
CustomEvent::CUSTOMER_SERVICE_DISABLED
|
Після відключення послуги абоненту | customer_id, service_id, data
|
IP/MAC абонента
| Константа | Коли викликається | Дані $event
|
|---|---|---|
CustomEvent::CUSTOMER_IP_ADD_BEFORE
|
Перед додаванням IP/MAC-адреси | customer_id, ip, mac, subnet_property, data
|
CustomEvent::CUSTOMER_IP_ADDED
|
Після додавання IP/MAC-адреси | customer_id, ip, mac, subnet_property, data
|
CustomEvent::CUSTOMER_IP_DELETE_BEFORE
|
Перед видаленням IP/MAC-адреси | customer_id, ip, mac, subnet_property, data
|
CustomEvent::CUSTOMER_IP_DELETED
|
Після видалення IP/MAC-адреси | customer_id, ip, mac, subnet_property, data
|
Мітки абонента
| Константа | Коли викликається | Дані $event
|
|---|---|---|
CustomEvent::CUSTOMER_TAG_ADD_BEFORE
|
Перед додаванням мітки абоненту | customer_id, tag_id, data
|
CustomEvent::CUSTOMER_TAG_ADDED
|
Після додавання мітки абоненту | customer_id, tag_id, data
|
CustomEvent::CUSTOMER_TAG_DELETE_BEFORE
|
Перед видаленням мітки абонента | customer_id, tag_id, data
|
CustomEvent::CUSTOMER_TAG_DELETED
|
Після видалення мітки абонента | customer_id, tag_id, data
|
Особистий кабінет абонента
| Константа | Коли викликається | Дані $event
|
|---|---|---|
CustomEvent::CUSTOMER_PORTAL_REGISTRATION_BEFORE
|
Перед реєстрацією абонента в особистому кабінеті | customer_id, data
|
CustomEvent::CUSTOMER_PORTAL_REGISTERED
|
Після реєстрації абонента в особистому кабінеті | customer_id, data
|
CustomEvent::CUSTOMER_PORTAL_LOGIN_BEFORE
|
Перед входом абонента в особистий кабінет | customer_id, data
|
CustomEvent::CUSTOMER_PORTAL_DASHBOARD_RENDER
|
Під час виведення вмісту на головній сторінці особистого кабінету | customer_id, data
|
CustomEvent::CUSTOMER_PORTAL_PAGE_RENDER
|
Під час виведення вмісту на сторінках особистого кабінету | customer_id, page_mode, page_id, data
|
CustomEvent::CUSTOMER_PORTAL_HEAD_RENDER
|
Під час виведення вмісту після head в особистому кабінеті
|
customer_id, data
|
Картка абонента
| Константа | Коли викликається | Дані $event
|
|---|---|---|
CustomEvent::CUSTOMER_CARD_PRIMARY_CONTENT_RENDER
|
Під час виведення основного вмісту в картці абонента | customer_id, mode, employee_id, data
|
CustomEvent::CUSTOMER_CARD_SECONDARY_CONTENT_RENDER
|
Під час виведення додаткового вмісту в картці абонента | customer_id, mode, employee_id, ip_mac, data
|
CustomEvent::CUSTOMER_CARD_IP_MAC_CONTENT_RENDER
|
Під час виведення інформації біля IP/MAC-адрес абонента | customer_id, ip, mac, data
|
CustomEvent::CUSTOMER_CARD_SMS_CONTENT_RENDER
|
Під час виведення вмісту надсилання SMS у картці абонента | customer_id, data
|
Співробітники
| Константа | Коли викликається | Дані $event
|
|---|---|---|
CustomEvent::EMPLOYEE_MESSAGE_CREATED
|
Після створення повідомлення співробітнику | receiver_employee_id, message_id, data
|
CustomEvent::EMPLOYEE_CHANGED
|
Після редагування співробітника | employee_id, data
|
CustomEvent::EMPLOYEE_PERSONAL_SECTION_CONTENT_RENDER
|
Під час виведення інформації в персональному розділі співробітника | employee_id, data
|
Табель робіт
| Константа | Коли викликається | Дані $event
|
|---|---|---|
CustomEvent::EMPLOYEE_TIMESHEET_PRINT_HEADER_RENDER
|
Під час виведення шапки друкованого табеля | employee_id, period, data
|
CustomEvent::EMPLOYEE_TIMESHEET_PRINT_FOOTER_RENDER
|
Під час виведення підвала друкованого табеля | employee_id, period, data
|
Склад
| Константа | Коли викликається | Дані $event
|
|---|---|---|
CustomEvent::INVENTORY_TRANSFER_BEFORE
|
Перед переміщенням ТМЦ | inventory_id, operation_id, data
|
CustomEvent::INVENTORY_TRANSFERRED
|
Після переміщення ТМЦ | inventory_id, operation_id, data
|
Завдання
| Константа | Коли викликається | Дані $event
|
|---|---|---|
CustomEvent::TASK_CARD_RENDER
|
Під час виведення вмісту в картці завдання | task_type_id, task_id, employee_id, data
|
CustomEvent::TASK_WORK_DATE_RENDER
|
Під час виведення вмісту біля дати робіт | task_type_id, task_id, employee_id, data
|
CustomEvent::TASK_CREATE_BEFORE
|
Перед створенням завдання | task_type_id, author_employee_id, data
|
CustomEvent::TASK_CREATED
|
Після створення завдання | task_id, task_type_id, author_employee_id, data
|
CustomEvent::TASK_DELETE_BEFORE
|
Перед видаленням завдання | task_id, data
|
CustomEvent::TASK_CHANGE_BEFORE
|
Перед редагуванням завдання | task_id, data
|
CustomEvent::TASK_CHANGED
|
Після редагування завдання | task_id, data
|
CustomEvent::TASK_COMMENT_CREATE_BEFORE
|
Перед додаванням коментаря до завдання | task_id, comment, data
|
CustomEvent::TASK_COMMENT_CREATED
|
Після додавання коментаря до завдання | task_id, comment_id, comment, data
|
CustomEvent::TASK_COMMENT_CHANGED
|
Після редагування коментаря до завдання | task_id, comment_id, comment, data
|
CustomEvent::TASK_COMMENT_TEXT_RENDER
|
Під час виведення тексту коментаря завдання | task_id, comment_id, comment, data
|
CustomEvent::TASK_DIVISION_ASSIGN_BEFORE
|
Перед додаванням підрозділу до завдання | task_id, division_id, data
|
CustomEvent::TASK_DIVISION_REMOVE_BEFORE
|
Перед виключенням підрозділу із завдання | task_id, division_id, data
|
CustomEvent::TASK_EMPLOYEE_ASSIGN_BEFORE
|
Перед додаванням виконавця до завдання | task_id, employee_id, data
|
CustomEvent::TASK_EMPLOYEE_REMOVE_BEFORE
|
Перед виключенням виконавця із завдання | task_id, employee_id, data
|
CustomEvent::TASK_WATCHER_DIVISION_ASSIGN_BEFORE
|
Перед додаванням підрозділу спостерігачем | task_id, division_id, data
|
CustomEvent::TASK_WATCHER_EMPLOYEE_ASSIGN_BEFORE
|
Перед додаванням співробітника спостерігачем | task_id, employee_id, data
|
CustomEvent::TASK_OBJECT_ATTACHED
|
Після додавання об'єкта до завдання | task_id, object_type, object_id, data
|
CustomEvent::TASK_OBJECT_DETACHED
|
Після виключення об'єкта із завдання | task_id, object_type, object_id, data
|
CustomEvent::TASK_RETURNED_TO_AUTHOR
|
Після повернення завдання автору | task_id, data
|
CustomEvent::TASK_STATE_CHANGE_BEFORE
|
Перед зміною статусу завдання | task_id, old_state_id, new_state_id, data
|
CustomEvent::TASK_STATE_CHANGED
|
Після зміни статусу завдання | task_id, old_state_id, new_state_id, data
|
Споруди зв'язку
| Константа | Коли викликається | Дані $event
|
|---|---|---|
CustomEvent::NODE_CARD_ADDITIONAL_DATA_RENDER
|
Під час виведення додаткового вмісту в картці споруди зв'язку | node_id, data
|
CustomEvent::NODE_CARD_PRIMARY_CONTENT_RENDER
|
Під час виведення основного вмісту в картці споруди зв'язку | node_id, data
|