Eccube\Controller\Admin\Order\MailController::index PHP Method

index() public method

public index ( Application $app, Request $request, $id )
$app Eccube\Application
$request Symfony\Component\HttpFoundation\Request
    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));
    }