<?php
namespace Plugin\NZMailSystem42\Controller\Admin;
use Eccube\Controller\AbstractController;
use Eccube\Repository\OrderRepository;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\EventDispatcher\GenericEvent;
class MailController extends AbstractController
{
private $orderRepository;
public function __construct(OrderRepository $orderRepository)
{
$this->orderRepository = $orderRepository;
}
/**
* @Route("/%eccube_admin_route%/nz_mail/payment_confirm/{id}", name="nz_mail_payment_confirm", methods={"POST"})
*/
public function sendPaymentConfirm(Request $request, $id)
{
$this->isTokenValid();
$Order = $this->orderRepository->find($id);
if (!$Order) {
return new JsonResponse(['success' => false, 'message' => '注文情報が見つかりませんでした'], 404);
}
try {
$event = new GenericEvent(null, ['Order' => $Order]);
$this->eventDispatcher->dispatch($event, 'nz.mail.payment.confirm');
return new JsonResponse(['success' => true, 'message' => '決済確認メールを送信しました']);
} catch (\Exception $e) {
log_error('NZMailSystem42: 決済確認メール送信エラー', ['order_id' => $Order->getId(), 'error' => $e->getMessage()]);
return new JsonResponse(['success' => false, 'message' => 'エラー: ' . $e->getMessage()], 500);
}
}
/**
* @Route("/%eccube_admin_route%/nz_mail/payment_received/{id}", name="nz_mail_payment_received", methods={"POST"})
*/
public function sendPaymentReceived(Request $request, $id)
{
$this->isTokenValid();
$Order = $this->orderRepository->find($id);
if (!$Order) {
return new JsonResponse(['success' => false, 'message' => '注文情報が見つかりませんでした'], 404);
}
try {
$event = new GenericEvent(null, ['Order' => $Order]);
$this->eventDispatcher->dispatch($event, 'nz.mail.payment.received');
log_info('NZMailSystem42: 入金確認済みメール送信', ['order_id' => $Order->getId()]);
return new JsonResponse(['success' => true, 'message' => '入金確認済みメールを送信しました']);
} catch (\Exception $e) {
log_error('NZMailSystem42: 入金確認済みメール送信エラー', ['order_id' => $Order->getId(), 'error' => $e->getMessage(), 'trace' => $e->getTraceAsString()]);
return new JsonResponse(['success' => false, 'message' => 'エラー: ' . $e->getMessage() . ' (行: ' . $e->getLine() . ')'], 500);
}
}
/**
* @Route("/%eccube_admin_route%/nz_mail/cancel/{id}", name="nz_mail_cancel", methods={"POST"})
*/
public function sendCancel(Request $request, $id)
{
$this->isTokenValid();
$Order = $this->orderRepository->find($id);
if (!$Order) {
return new JsonResponse(['success' => false, 'message' => '注文情報が見つかりませんでした'], 404);
}
try {
$event = new GenericEvent(null, ['Order' => $Order]);
$this->eventDispatcher->dispatch($event, 'nz.mail.order.cancel');
log_info('NZMailSystem42: キャンセルメール送信', ['order_id' => $Order->getId()]);
return new JsonResponse(['success' => true, 'message' => 'キャンセルメールを送信しました']);
} catch (\Exception $e) {
log_error('NZMailSystem42: キャンセルメール送信エラー', ['order_id' => $Order->getId(), 'error' => $e->getMessage(), 'trace' => $e->getTraceAsString()]);
return new JsonResponse(['success' => false, 'message' => 'エラー: ' . $e->getMessage() . ' (行: ' . $e->getLine() . ')'], 500);
}
}
/**
* @Route("/%eccube_admin_route%/nz_mail/test/{id}/{type}", name="nz_mail_test", methods={"POST"})
*/
public function sendTestMail(Request $request, $id, $type)
{
$this->isTokenValid();
$Order = $this->orderRepository->find($id);
if (!$Order) {
return new JsonResponse(['success' => false, 'message' => '注文情報が見つかりませんでした'], 404);
}
try {
$event = new GenericEvent(null, ['Order' => $Order, 'mail_type' => $type]);
$this->eventDispatcher->dispatch($event, 'nz.mail.test');
return new JsonResponse(['success' => true, 'message' => 'テストメールを送信しました']);
} catch (\Exception $e) {
log_error('NZMailSystem42: テストメール送信エラー', ['order_id' => $Order->getId(), 'error' => $e->getMessage()]);
return new JsonResponse(['success' => false, 'message' => 'エラー: ' . $e->getMessage()], 500);
}
}
}