Миграции Bitrix Phinx. Изменить тип почтового события

<?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);
            }
        }
    }
};

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *