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

<?php

/** @noinspection PhpUnused */

use App\BitrixCore;
use Bitrix\Main\Mail\Internal\EventMessageTable;
use Illuminate\Database\Migrations\Migration;

/**
 * Изменение текста почтового шаблона
 */
return new class extends Migration {

    private const EVENT_NAME = 'SALE_STATUS_CHANGED_DP';
    private const EVENT_MESSAGE_ID = 90;

    private function getNewFieldValues(): array
    {
        return [
            'MESSAGE' => $this->getNewMessageText(),
        ];
    }

    private function getOldFieldValues(): array
    {
        return [
            'MESSAGE' => $this->getOldMessageText(),
        ];
    }

    public function up(): void
    {
        $this->init();
        $params = $this->getNewFieldValues();
        $this->updateEventMessage($params);
    }

    /**
     * @return void
     */
    public function down(): void
    {
        $this->init();
        $params = $this->getOldFieldValues();
        $this->updateEventMessage($params);
    }

    private function getMessageId(): int
    {
        $eventId = EventMessageTable::query()
            ->addSelect('ID')
            ->where('EVENT_NAME', self::EVENT_NAME)
            ->where('ID', self::EVENT_MESSAGE_ID)
            ->setLimit(1)
            ->fetchObject()
            ?->getId();
        if ($eventId === null) {
            throw new RuntimeException('Не найден почтовый шаблон ID ' . self::EVENT_MESSAGE_ID . ' для почтового события ' . self::EVENT_NAME, 400);
        }
        return $eventId;
    }

    private function updateEventMessage(array $fieldValues): void
    {
        $messageId = $this->getMessageId();
        /**
         * использую старый API вместо  \Bitrix\Main\Mail\Internal\EventMessageTable, так как в старом API не просто обновление поля происходит, а например, формирование поля MESSAGE_PHP
         */
        $eventMessageObject = new CEventMessage();
        $updated = $eventMessageObject->Update($messageId, $fieldValues);
        if (!$updated) {
            throw new RuntimeException('Не удалось обновить почтовый шаблон с ID ' . $messageId . ': ' . $eventMessageObject->LAST_ERROR, 400);
        }
    }

    private function getNewMessageText(): string
    {
        return 'Ваш заказ #ORDER_ID# от #ORDER_DATE# сменил статус на "#ORDER_STATUS#".<br>
 <br>
 
 Пожалуйста, при обращении к администрации сайта Интернет-магазин  ОБЯЗАТЕЛЬНО указывайте номер Вашего заказа - #ORDER_ID#.<br>
 <br>
 
 <br>
 Спасибо за покупку!<br>
 С уважением,<br>
 администрация&nbsp;Официального интернет-магазина смазочных материалов ЛУКОЙЛ<br>
 E-mail:&nbsp;<a href="mailto:help@b2b.lukoil-shop.ru">help@b2b.lukoil-shop.ru</a>';
    }

    private function getOldMessageText(): string
    {
        return 'Ваш заказ #ORDER_ID# от #ORDER_DATE# сменил статус на "#ORDER_STATUS#".<br>
 <br>
 За выполнением своего заказа Вы можете следить в&nbsp;<a href="https://b2b.lukoil-shop.ru/personal/orders/">Персональном разделе сайта</a>. Обратите внимание, что для входа в этот раздел вам необходимо будет ввести логин и пароль пользователя сайта.<br>
 <br>
 Пожалуйста, при обращении к администрации сайта Интернет-магазин смазочных материалов ЛУКОЙЛ ОБЯЗАТЕЛЬНО указывайте номер Вашего заказа - #ORDER_ID#.<br>
 <br>
 Спасибо за покупку!<br>
 С уважением,<br>
 администрация&nbsp;Официального интернет-магазина смазочных материалов ЛУКОЙЛ<br>
 E-mail:&nbsp;<a href="mailto:help@b2b.lukoil-shop.ru">help@b2b.lukoil-shop.ru</a>';
    }

    private function init(): void
    {
        BitrixCore::load();
    }
};

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

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