<?php
namespace Plugin\Furupo4\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Routing\RouterInterface;
class OrderTemplateSubscriber implements EventSubscriberInterface
{
private $router;
private $translator;
public function __construct(RouterInterface $router)
{
$this->router = $router;
}
public static function getSubscribedEvents()
{
return [
// kernel.response イベントでレスポンス内容を加工する
KernelEvents::RESPONSE => 'onKernelResponse',
];
}
public function onKernelResponse(ResponseEvent $event)
{
$request = $event->getRequest();
$route = $request->attributes->get('_route');
// 管理画面の注文ページ(ルート名が admin_order または admin_order_page)の時のみ処理
if (!in_array($route, ['admin_order', 'admin_order_page'])) {
return;
}
$response = $event->getResponse();
$content = $response->getContent();
// shippingCsvDownload リンクの部分を検出し、その直後に新しいリンクを追加
if (preg_match('#(<a class="dropdown-item".*?id="shippingCsvDownload">.*?</a>)#s', $content, $matches)) {
$shippingLink = $matches[1];
// ルーターと翻訳サービスを使用して、リンクのURLとテキストを取得
$url = $this->router->generate('admin_furupo_export');
$newLink = "<a class=\"dropdown-item\" href=\"{$url}\" id=\"adminFurupoExport\">ふるぽCSV</a>";
$replacement = $shippingLink . $newLink;
$content = str_replace($shippingLink, $replacement, $content);
$response->setContent($content);
}
}
}