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