Esempio n. 1
0
 public function subscribeAction()
 {
     $errorMessage = false;
     $newsletterForm = new NewsletterForm($this->getRequest());
     try {
         $form = $this->validateForm($newsletterForm);
         $event = new NewsletterEvent($form->get('email')->getData(), $this->getRequest()->getSession()->getLang()->getLocale());
         if (null !== ($customer = $this->getSecurityContext()->getCustomerUser())) {
             $event->setFirstname($customer->getFirstname());
             $event->setLastname($customer->getLastname());
         } else {
             $event->setFirstname($form->get('firstname')->getData());
             $event->setLastname($form->get('lastname')->getData());
         }
         $this->dispatch(TheliaEvents::NEWSLETTER_SUBSCRIBE, $event);
     } catch (\Exception $e) {
         $errorMessage = $e->getMessage();
         Tlog::getInstance()->error(sprintf('Error during newsletter subscription : %s', $errorMessage));
     }
     // If Ajax Request
     if ($this->getRequest()->isXmlHttpRequest()) {
         $response = new JsonResponse();
         if ($errorMessage) {
             $response = $response->setContent(array("success" => false, "message" => $errorMessage));
         } else {
             $response = $response->setContent(array("success" => true, "message" => $this->getTranslator()->trans("Thanks for signing up! We'll keep you posted whenever we have any new updates.")));
         }
         return $response;
     } else {
         $newsletterForm->setErrorMessage($errorMessage);
         $this->getParserContext()->addForm($newsletterForm)->setGeneralError($errorMessage);
     }
 }
Esempio n. 2
0
 public function updateAction()
 {
     if ($this->getSecurityContext()->hasCustomerUser()) {
         $message = false;
         $customerProfileUpdateForm = new CustomerProfileUpdateForm($this->getRequest());
         try {
             $customer = $this->getSecurityContext()->getCustomerUser();
             $newsletterOldEmail = $customer->getEmail();
             $form = $this->validateForm($customerProfileUpdateForm, "post");
             $customerChangeEvent = $this->createEventInstance($form->getData());
             $customerChangeEvent->setCustomer($customer);
             // We do not allow customer email modification
             $customerChangeEvent->setEmailUpdateAllowed(false);
             $this->dispatch(TheliaEvents::CUSTOMER_UPDATEPROFILE, $customerChangeEvent);
             $updatedCustomer = $customerChangeEvent->getCustomer();
             // Newsletter
             if (true === $form->get('newsletter')->getData()) {
                 $nlEvent = new NewsletterEvent($updatedCustomer->getEmail(), $this->getRequest()->getSession()->getLang()->getLocale());
                 $nlEvent->setFirstname($updatedCustomer->getFirstname());
                 $nlEvent->setLastname($updatedCustomer->getLastname());
                 if (null !== ($newsletter = NewsletterQuery::create()->findOneByEmail($newsletterOldEmail))) {
                     $nlEvent->setId($newsletter->getId());
                     $this->dispatch(TheliaEvents::NEWSLETTER_UPDATE, $nlEvent);
                 } else {
                     $this->dispatch(TheliaEvents::NEWSLETTER_SUBSCRIBE, $nlEvent);
                 }
             } else {
                 if (null !== ($newsletter = NewsletterQuery::create()->findOneByEmail($newsletterOldEmail))) {
                     $nlEvent = new NewsletterEvent($updatedCustomer->getEmail(), $this->getRequest()->getSession()->getLang()->getLocale());
                     $nlEvent->setId($newsletter->getId());
                     $this->dispatch(TheliaEvents::NEWSLETTER_UNSUBSCRIBE, $nlEvent);
                 }
             }
             $this->processLogin($updatedCustomer);
             return $this->generateSuccessRedirect($customerProfileUpdateForm);
         } catch (FormValidationException $e) {
             $message = $this->getTranslator()->trans("Please check your input: %s", ['%s' => $e->getMessage()], Front::MESSAGE_DOMAIN);
         } catch (\Exception $e) {
             $message = $this->getTranslator()->trans("Sorry, an error occured: %s", ['%s' => $e->getMessage()], Front::MESSAGE_DOMAIN);
         }
         if ($message !== false) {
             Tlog::getInstance()->error(sprintf("Error during customer modification process : %s.", $message));
             $customerProfileUpdateForm->setErrorMessage($message);
             $this->getParserContext()->addForm($customerProfileUpdateForm)->setGeneralError($message);
         }
     }
 }