<?php
use Bitrix\Main\Mail\Internal\EventTypeTable;
use Illuminate\Database\Migrations\Migration;
use App\BitrixCore;
return new class extends Migration {
private const EVENT_NAME = 'PAYMENT_ORDER_FILE_ADDED';
private function getNewFields(): array
{
return [
'ru' => [
'DESCRIPTION' => '#EMAIL_TO# - Email получателя
#ORDER_ID# - ID заказа
#ORDER_ACCOUNT_NUMBER# - Код заказа
#CLIENT_COMPANY_NAME# - Наименование юридического лица
#CLIENT_INN# - ИНН
#INVOICE_PRODUCTS_URL# - Ссылка на счет на товары
#INVOICE_DELIVERY_URL# - Ссылка на счет на доставку',
],
];
}
private function getOldFields(): array
{
return [
'ru' => [
'DESCRIPTION' => '#EMAIL_TO# - Email получателя
#ORDER_ID# - ID заказа
#ORDER_ACCOUNT_NUMBER# - Код заказа
#CLIENT_COMPANY_NAME# - Наименование юридического лица
#CLIENT_INN# - ИНН
#INVOICE_PRODUCTS_URL# - Ссылка на счет на товары
#INVOICE_DELIVERY_URL# - Ссылка на счет на доставку
#PAYMENT_ORDER_URL# - Ссылка на платежное поручение',
],
];
}
public function up(): void
{
BitrixCore::load();
$newFields = $this->getNewFields();
$this->updateEventType($newFields);
}
public function down(): void
{
BitrixCore::load();
$oldFields = $this->getOldFields();
$this->updateEventType($oldFields);
}
/**
* @param array $eventTypeLangs
*
* @return void
*/
private function updateEventType(array $eventTypeLangs): void
{
$langIds = array_keys($eventTypeLangs);
if (count($langIds) <= 0) {
throw new RuntimeException('Пустой массив $eventTypeLangs', 400);
}
$eventTypeObjects = EventTypeTable::query()
->addSelect('ID')
->addSelect('LID')
->where('EVENT_NAME', self::EVENT_NAME)
->whereIn('LID', $langIds)
->fetchCollection();
if ($eventTypeObjects->count() <= 0) {
throw new RuntimeException('Не найдены типы почтовых событий с кодом ' . self::EVENT_NAME . ' и кодам языков: ' . implode(', ', $langIds), 400);
}
foreach ($eventTypeObjects as $eventTypeObject) {
$lid = $eventTypeObject->getLid();
if (!isset($eventTypeLangs[$lid])) {
throw new RuntimeException('Не найдены данные для языка ' . $lid, 400);
}
$result = EventTypeTable::update($eventTypeObject->getId(), $eventTypeLangs[$lid]);
if (!$result->isSuccess()) {
throw new RuntimeException('Не удалось изменить поля типа почтового события ' . self::EVENT_NAME . ' и языка ' . $lid . ': ' . implode(', ', $result->getErrorMessages()), 400);
}
}
}
};