public function index(Application $app, Request $request, $id)
{
$Order = $app['eccube.repository.order']->find($id);
if (is_null($Order)) {
throw new NotFoundHttpException('order not found.');
}
$MailHistories = $app['eccube.repository.mail_history']->findBy(array('Order' => $id));
$builder = $app['form.factory']->createBuilder('mail');
$event = new EventArgs(array('builder' => $builder, 'Order' => $Order, 'MailHistories' => $MailHistories), $request);
$app['eccube.event.dispatcher']->dispatch(EccubeEvents::ADMIN_ORDER_MAIL_INDEX_INITIALIZE, $event);
$form = $builder->getForm();
if ('POST' === $request->getMethod()) {
$form->handleRequest($request);
$mode = $request->get('mode');
// テンプレート変更の場合は. バリデーション前に内容差し替え.
if ($mode == 'change') {
if ($form->get('template')->isValid()) {
/** @var $data \Eccube\Entity\MailTemplate */
$MailTemplate = $form->get('template')->getData();
$form = $builder->getForm();
$event = new EventArgs(array('form' => $form, 'Order' => $Order, 'MailTemplate' => $MailTemplate), $request);
$app['eccube.event.dispatcher']->dispatch(EccubeEvents::ADMIN_ORDER_MAIL_INDEX_CHANGE, $event);
$form->get('template')->setData($MailTemplate);
$form->get('subject')->setData($MailTemplate->getSubject());
$form->get('header')->setData($MailTemplate->getHeader());
$form->get('footer')->setData($MailTemplate->getFooter());
}
} else {
if ($form->isValid()) {
switch ($mode) {
case 'confirm':
// フォームをFreezeして再生成.
$builder->setAttribute('freeze', true);
$builder->setAttribute('freeze_display_text', true);
$data = $form->getData();
$body = $this->createBody($app, $data['header'], $data['footer'], $Order);
$MailTemplate = $form->get('template')->getData();
$form = $builder->getForm();
$event = new EventArgs(array('form' => $form, 'Order' => $Order, 'MailTemplate' => $MailTemplate), $request);
$app['eccube.event.dispatcher']->dispatch(EccubeEvents::ADMIN_ORDER_MAIL_INDEX_CONFIRM, $event);
$form->setData($data);
$form->get('template')->setData($MailTemplate);
return $app->render('Order/mail_confirm.twig', array('form' => $form->createView(), 'body' => $body, 'Order' => $Order));
break;
case 'complete':
$data = $form->getData();
$body = $this->createBody($app, $data['header'], $data['footer'], $Order);
// メール送信
$app['eccube.service.mail']->sendAdminOrderMail($Order, $data);
// 送信履歴を保存.
$MailTemplate = $form->get('template')->getData();
$MailHistory = new MailHistory();
$MailHistory->setSubject($data['subject'])->setMailBody($body)->setMailTemplate($MailTemplate)->setSendDate(new \DateTime())->setOrder($Order);
$app['orm.em']->persist($MailHistory);
$app['orm.em']->flush($MailHistory);
$event = new EventArgs(array('form' => $form, 'Order' => $Order, 'MailTemplate' => $MailTemplate, 'MailHistory' => $MailHistory), $request);
$app['eccube.event.dispatcher']->dispatch(EccubeEvents::ADMIN_ORDER_MAIL_INDEX_COMPLETE, $event);
return $app->redirect($app->url('admin_order_mail_complete'));
break;
default:
break;
}
}
}
}
return $app->render('Order/mail.twig', array('form' => $form->createView(), 'Order' => $Order, 'MailHistories' => $MailHistories));
}