feat: add html editor for telegram messages

This commit is contained in:
2025-12-15 19:38:57 +03:00
parent 32ccb1ef43
commit 97df5b4c0a
11 changed files with 263 additions and 58 deletions

View File

@@ -96,6 +96,7 @@ class ControllerExtensionModuleTgshop extends Controller
public function index(): void
{
$this->runMaintenanceTasks();
$this->injectAssets();
$this->injectVueJs();
$this->showConfigPage();
}
@@ -112,7 +113,7 @@ class ControllerExtensionModuleTgshop extends Controller
$data['themes'] = self::$themes;
$data['telecart_module_version'] = module_version();
$data['shop_base_url'] = HTTPS_CATALOG;
$data['action'] = $this->url->link(
'extension/module/tgshop',
'user_token=' . $this->session->data['user_token'],
@@ -272,4 +273,10 @@ class ControllerExtensionModuleTgshop extends Controller
return $log;
}
private function injectAssets(): void
{
$this->document->addScript('view/javascript/summernote/summernote.js');
$this->document->addStyle('view/javascript/summernote/summernote.css');
}
}

View File

@@ -31,4 +31,6 @@
</div>
</div>
</div>
<script type="text/javascript" src="view/javascript/summernote/summernote.js"></script>
<link href="view/javascript/summernote/summernote.css" rel="stylesheet" />
{{ footer }}

View File

@@ -69,9 +69,6 @@ class SendMessageHandler
$this->telegramService->sendMessage(
$telegramUserId,
$message,
[],
\Openguru\OpenCartFramework\Telegram\Enums\ChatAction::TYPING,
'' // Обычный текст без форматирования
);
$this->logger->info('Message sent to Telegram user', [

View File

@@ -7,6 +7,7 @@ use Exception;
use GuzzleHttp\Exception\ClientException;
use GuzzleHttp\Exception\GuzzleException;
use Openguru\OpenCartFramework\Cache\CacheInterface;
use Openguru\OpenCartFramework\Telegram\Enums\ChatAction;
use Symfony\Component\HttpFoundation\JsonResponse;
use Openguru\OpenCartFramework\Http\Request;
use Symfony\Component\HttpFoundation\Response;

View File

@@ -15,33 +15,34 @@ return [
'telegram' => [
"bot_token" => "",
"chat_id" => null,
"owner_notification_template" => <<<TEXT
*Новый заказ \#{order_id}* в магазине *{store_name}*
"owner_notification_template" => <<<HTML
📦 <b>Новый заказ {order_id}</b>
Магазин: <b>{store_name}</b>
*Покупатель:* {customer}
*Email:* {email}
*Телефон:* {phone}
*IP:* {ip}
<b>Покупатель</b>
Имя: {customer}
Email: {email}
Телефон: {phone}
IP: {ip}
*Адрес доставки:*
{address}
*Комментарий:*
<b>Комментарий к заказу</b>
{comment}
*Сумма заказа:* {total}
*Дата оформления:* {created_at}
TEXT,
"customer_notification_template" => <<<TEXT
Спасибо за Ваш заказ в магазине *{store_name}*
<b>Сумма заказа:</b> {total}
<b>Дата оформления:</b> {created_at}
HTML,
"customer_notification_template" => <<<HTML
<b>Заказ оформлен</b>
*Номер заказа* \#{order_id}
*Сумма заказа:* {total}
*Дата оформления:* {created_at}
Спасибо за ваш заказ в магазине <b>{store_name}</b>.
Мы свяжемся с вами при необходимости\.
Хорошего дня\!
TEXT,
<b>Номер заказа:</b> {order_id}
<b>Сумма заказа:</b> {total}р.
<b>Дата оформления:</b> {created_at}
Информация о заказе сохранена.
При необходимости с вами свяжутся представители магазина.
HTML,
"mini_app_url" => "",
],

View File

@@ -33,6 +33,6 @@ class StartCommand extends TelegramCommand
],
];
$this->telegram->sendMessage($chatId, $message, $buttons, ChatAction::TYPING, 'html');
$this->telegram->sendMessage($chatId, $message, $buttons);
}
}

View File

@@ -27,21 +27,9 @@ class TelegramService
$this->logger = $logger;
}
public function escapeTelegramMarkdownV2(string $text): string
{
$specials = ['_', '*', '[', ']', '(', ')', '~', '`', '>', '#', '+', '-', '=', '|', '{', '}', '.', '!'];
foreach ($specials as $char) {
$text = str_replace($char, '\\' . $char, $text);
}
return $text;
}
public function prepareMessage(string $template, array $variables = []): string
{
$values = array_map([$this, 'escapeTelegramMarkdownV2'], array_values($variables));
return str_replace(array_keys($variables), $values, $template);
return str_replace(array_keys($variables), array_values($variables), $template);
}
/**
@@ -54,7 +42,7 @@ class TelegramService
string $text,
array $replyMarkup = [],
string $chatAction = ChatAction::TYPING,
string $parseMode = 'MarkdownV2'
string $parseMode = 'html'
): void {
if (! $this->botToken) {
return;