src/Controller/NewsletterController.php line 36

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Form\NewsletterFormType;
  4. use Factory\SupportBundle\Repository\FormRepository;
  5. use Pimcore\Model\DataObject\IContact;
  6. use App\Classes\Controller\AbstractFrontController as AbstractFrontController;
  7. use App\Classes\DataMapper\Newsletter\NewsletterListingDataMapper;
  8. use App\Classes\IContact\iContactApi;
  9. use App\Service\Contract\RecaptchaValidationServiceInterface;
  10. use App\Traits\ControllerSidebarLinks;
  11. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. class NewsletterController extends AbstractFrontController
  15. {
  16.     use ControllerSidebarLinks;
  17.     /**
  18.      * @var FormRepository
  19.      */
  20.     protected $formRepository;
  21.     protected $recaptchaValidationService;
  22.     public function __construct(
  23.         FormRepository $formRepository,
  24.         RecaptchaValidationServiceInterface $recaptchaValidationService
  25.     ) {
  26.         $this->formRepository $formRepository;
  27.         $this->recaptchaValidationService $recaptchaValidationService;
  28.     }
  29.     #[Template()]
  30.     public function indexAction(Request $request)
  31.     {
  32.         $lists = [];
  33.         $IContact IContact::getList()->current();
  34.         if ($IContact) {
  35.             $lists $IContact->getLists();
  36.         }
  37.         $formAction $this->generateUrl('newsletter_subscribe');
  38.         $newsletterForm $this->formRepository->createForm(
  39.             NewsletterFormType::class,
  40.             null,
  41.             ['action' => $formAction]
  42.         );
  43.         $this->view->newsletterForm $newsletterForm->createView();
  44.         $this->view->lists NewsletterListingDataMapper::list($lists)->all($request);
  45.     }
  46.     /**
  47.      * @Route("newsletter/subscribe", name="newsletter_subscribe", methods={"POST"})
  48.      *
  49.      * @param Request $request
  50.      */
  51.     public function send(Request $request)
  52.     {
  53.         $listIDs $request->get('lists');
  54.         if (!$listIDs) {
  55.             $payload array_merge(
  56.                 $request->query->all(),
  57.                 $request->request->all()
  58.             );
  59.             $this->addFlash('_oldFormData'serialize($payload));
  60.             $this->addFlash('error'$this->trans('newsletter.lists.empty'));
  61.             return $this->redirectBack($request);
  62.         }
  63.         $form $this->createForm(
  64.             NewsletterFormType::class
  65.         );
  66.         $form->handleRequest($request);
  67.         if ($form->isSubmitted() && !$form->isValid()) {
  68.             $payload array_merge(
  69.                 $request->query->all(),
  70.                 $request->request->all()
  71.             );
  72.             $this->addFlash('_oldFormData'serialize($payload));
  73.             return $this->redirectBack($request);
  74.         }
  75.         $data $form->getData();
  76.         if (!$this->recaptchaValidationService->isValid($data)) {
  77.             $payload array_merge(
  78.                 $request->query->all(),
  79.                 $request->request->all()
  80.             );
  81.             $this->addFlash('_oldFormData'serialize($payload));
  82.             $this->addFlash('error''stoelting.recaptcha-failed.error');
  83.             return $this->redirectBack($request);
  84.         }
  85.         $IContact IContact::getList()->current();
  86.         if ($IContact) {
  87.             if (!empty($IContact->getAppID()) && !empty($IContact->getPassword()) && !empty($IContact->getUsername())) {
  88.                 iContactApi::getInstance()->setConfig(array(
  89.                     'appId'       => $IContact->getAppID(),
  90.                     'apiPassword' => $IContact->getPassword(),
  91.                     'apiUsername' => $IContact->getUsername()
  92.                 ));
  93.                 $oiContact iContactApi::getInstance();
  94.                 try {
  95.                     $data $form->getData();
  96.                     $newContact $oiContact->addContact($data['Email'], nullnull$data['Firstname']);
  97.                     if ($newContact) {
  98.                         if ($newContact->email == 'Removed') {
  99.                             $this->addFlash('error'$this->trans('newsletter.contact.removed'));
  100.                         } else {
  101.                             foreach ($listIDs as $listID) {
  102.                                 $oiContact->subscribeContactToList($newContact->contactId$listID);
  103.                             }
  104.                         }
  105.                     } else {
  106.                         if ($oiContact->getErrors()) {
  107.                             $this->addFlash('error'$this->trans('newsletter.contact.empty'));
  108.                             return $this->redirectBack($request);
  109.                         }
  110.                     }
  111.                 } catch (\Exception $oException) {
  112.                     $errorMsg '';
  113.                     foreach($oiContact->getErrors() as $error){
  114.                         $errorMsg .= $error;
  115.                     }
  116.                     $payload array_merge(
  117.                         $request->query->all(),
  118.                         $request->request->all()
  119.                     );
  120.                     $this->addFlash('error'$error);
  121.                     $this->addFlash('_oldFormData'serialize($payload));
  122.                     return $this->redirectBack($request);
  123.                 }
  124.             }
  125.         }
  126.         $this->addFlash('success'$this->trans('newsletter.subscribed.message'));
  127.         return $this->redirectBack($request);
  128.     }
  129. }