/**
  * Prepare and handle a CustomForm Form then send a confirm email.
  *
  * * This method will return an assignation **array** if form is not validated.
  *     * customForm
  *     * fields
  *     * form
  * * If form is validated, **RedirectResponse** will be returned.
  *
  * @param Symfony\Component\HttpFoundation\Request          $request
  * @param RZ\Roadiz\Core\Entities\CustomForm                $customFormsEntity
  * @param Symfony\Component\Form\FormFactoryInterface       $formFactory
  * @param Doctrine\ORM\EntityManager                        $em
  * @param \Twig_Environment                                 $twigEnv
  * @param \Swift_Mailer                                     $mailer
  * @param Symfony\Component\Translation\Translator          $translator
  * @param Symfony\Component\HttpFoundation\RedirectResponse $redirection
  * @param Psr\Log\LoggerInterface|null                      $logger
  * @param boolean                                           $forceExpanded
  * @param string|null                                       $emailSender
  *
  * @return array|Symfony\Component\HttpFoundation\RedirectResponse
  */
 public static function prepareAndHandleCustomFormAssignation(Request $request, CustomForm $customFormsEntity, FormFactoryInterface $formFactory, EntityManager $em, \Twig_Environment $twigEnv, \Swift_Mailer $mailer, Translator $translator, RedirectResponse $redirection, LoggerInterface $logger = null, $forceExpanded = false, $emailSender = null)
 {
     $assignation = [];
     $assignation['customForm'] = $customFormsEntity;
     $assignation['fields'] = $customFormsEntity->getFields();
     $form = static::buildForm($request, $customFormsEntity, $formFactory, $forceExpanded);
     $form->handleRequest($request);
     if ($form->isValid()) {
         try {
             $data = $form->getData();
             $data["ip"] = $request->getClientIp();
             /*
              * add custom form answer
              */
             $assignation["emailFields"] = static::addCustomFormAnswer($data, $customFormsEntity, $em);
             $msg = $translator->trans('customForm.%name%.send', ['%name%' => $customFormsEntity->getDisplayName()]);
             $request->getSession()->getFlashBag()->add('confirm', $msg);
             if (null !== $logger) {
                 $logger->info($msg);
             }
             $assignation['title'] = $translator->trans('new.answer.form.%site%', ['%site%' => $customFormsEntity->getDisplayName()]);
             if (null !== $emailSender && false !== filter_var($emailSender, FILTER_VALIDATE_EMAIL)) {
                 $assignation['mailContact'] = $emailSender;
             } else {
                 $assignation['mailContact'] = SettingsBag::get('email_sender');
             }
             /*
              * Send answer notification
              */
             static::sendAnswer(['mailContact' => $assignation['mailContact'], 'fields' => $assignation["emailFields"], 'customForm' => $customFormsEntity, 'title' => $translator->trans('new.answer.form.%site%', ['%site%' => $customFormsEntity->getDisplayName()])], $customFormsEntity->getEmail(), $twigEnv, $mailer);
             return $redirection;
         } catch (EntityAlreadyExistsException $e) {
             $request->getSession()->getFlashBag()->add('error', $e->getMessage());
             if (null !== $logger) {
                 $logger->warning($e->getMessage());
             }
             return $redirection;
         }
     }
     $assignation['form'] = $form->createView();
     return $assignation;
 }
 /**
  * @param RZ\Roadiz\Core\Entities\CustomForm $customForm
  *
  * @return \Symfony\Component\Form\Form
  */
 private function buildDeleteForm(CustomForm $customForm)
 {
     $builder = $this->createFormBuilder()->add('customFormId', 'hidden', ['data' => $customForm->getId(), 'constraints' => [new NotBlank()]]);
     return $builder->getForm();
 }