/**
  * @since 2.3.0-alpha2
  */
 public function unsubscribeAction()
 {
     $errorMessage = false;
     $newsletterForm = $this->createForm(FrontForm::NEWSLETTER_UNSUBSCRIBE);
     try {
         $form = $this->validateForm($newsletterForm);
         $email = $form->get('email')->getData();
         if (null !== ($newsletter = NewsletterQuery::create()->findOneByEmail($email))) {
             $event = new NewsletterEvent($email, $this->getRequest()->getSession()->getLang()->getLocale());
             $event->setId($newsletter->getId());
             $this->dispatch(TheliaEvents::NEWSLETTER_UNSUBSCRIBE, $event);
             // If a success URL is defined in the form, redirect to it, otherwise use the defaut view
             if ($newsletterForm->hasSuccessUrl() && !$this->getRequest()->isXmlHttpRequest()) {
                 return $this->generateSuccessRedirect($newsletterForm);
             }
         }
     } catch (\Exception $e) {
         $errorMessage = $e->getMessage();
         Tlog::getInstance()->error(sprintf('Error during newsletter unsubscription : %s', $errorMessage));
         $newsletterForm->setErrorMessage($errorMessage);
     }
     // If Ajax Request
     if ($this->getRequest()->isXmlHttpRequest()) {
         return new JsonResponse(["success" => $errorMessage ? false : true, "message" => $errorMessage ? $errorMessage : $this->getTranslator()->trans("Your subscription to our newsletter has been canceled.", [], Front::MESSAGE_DOMAIN)], $errorMessage ? 500 : 200);
     }
     $this->getParserContext()->setGeneralError($errorMessage)->addForm($newsletterForm);
     // If an error URL is defined in the form, redirect to it, otherwise use the defaut view
     if ($errorMessage && $newsletterForm->hasErrorUrl()) {
         return $this->generateErrorRedirect($newsletterForm);
     }
 }
Beispiel #2
0
 /**
  * @depends testUpdate
  * @param NewsletterModel $newsletter
  */
 public function testUnsubscribe(NewsletterModel $newsletter)
 {
     $event = new NewsletterEvent('*****@*****.**', 'en_US');
     $event->setId($newsletter->getId());
     $action = new Newsletter();
     $action->unsubscribe($event);
     $deletedNewsletter = $event->getNewsletter();
     $this->assertInstanceOf('Thelia\\Model\\Newsletter', $deletedNewsletter);
     $this->assertEquals(1, NewsletterQuery::create()->filterByEmail('*****@*****.**')->filterByUnsubscribed(true)->count());
 }
Beispiel #3
0
 /**
  * @depends testUpdate
  */
 public function testUnsubscribe(NewsletterModel $newsletter)
 {
     $event = new NewsletterEvent('*****@*****.**', 'en_US');
     $event->setId($newsletter->getId());
     $action = new Newsletter();
     $action->unsubscribe($event);
     $deletedNewsletter = $event->getNewsletter();
     $this->assertInstanceOf('Thelia\\Model\\Newsletter', $deletedNewsletter);
     $this->assertTrue($deletedNewsletter->isDeleted());
 }
Beispiel #4
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);
         }
     }
 }