Esempio n. 1
0
 public function update(NewsletterEvent $event)
 {
     if (null !== ($nl = NewsletterQuery::create()->findPk($event->getId()))) {
         $nl->setEmail($event->getEmail())->setFirstname($event->getFirstname())->setLastname($event->getLastname())->setLocale($event->getLocale())->save();
         $event->setNewsletter($nl);
     }
 }
 /**
  * @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);
     }
 }
Esempio n. 3
0
 public function verifyExistingEmail($value, ExecutionContextInterface $context)
 {
     $customer = NewsletterQuery::create()->filterByUnsubscribed(false)->findOneByEmail($value);
     if ($customer) {
         $context->addViolation(Translator::getInstance()->trans("You are already registered!"));
     }
 }
Esempio n. 4
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());
 }
 /**
  * Performs an INSERT on the database, given a Newsletter or Criteria object.
  *
  * @param mixed               $criteria Criteria or Newsletter object containing data that is used to create the INSERT statement.
  * @param ConnectionInterface $con the ConnectionInterface connection to use
  * @return mixed           The new primary key.
  * @throws PropelException Any exceptions caught during processing will be
  *         rethrown wrapped into a PropelException.
  */
 public static function doInsert($criteria, ConnectionInterface $con = null)
 {
     if (null === $con) {
         $con = Propel::getServiceContainer()->getWriteConnection(NewsletterTableMap::DATABASE_NAME);
     }
     if ($criteria instanceof Criteria) {
         $criteria = clone $criteria;
         // rename for clarity
     } else {
         $criteria = $criteria->buildCriteria();
         // build Criteria from Newsletter object
     }
     if ($criteria->containsKey(NewsletterTableMap::ID) && $criteria->keyContainsValue(NewsletterTableMap::ID)) {
         throw new PropelException('Cannot insert a value for auto-increment primary key (' . NewsletterTableMap::ID . ')');
     }
     // Set the correct dbName
     $query = NewsletterQuery::create()->mergeWith($criteria);
     try {
         // use transaction because $criteria could contain info
         // for more than one table (I guess, conceivably)
         $con->beginTransaction();
         $pk = $query->doInsert($con);
         $con->commit();
     } catch (PropelException $e) {
         $con->rollBack();
         throw $e;
     }
     return $pk;
 }
Esempio n. 6
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);
         }
     }
 }
Esempio n. 7
0
 public function testQuery()
 {
     new Translator(new Container());
     $handler = new CustomerExport(new Container());
     $lang = Lang::getDefaultLanguage();
     $data = $handler->buildData($lang);
     $keys = ["ref", "title", "last_name", "first_name", "email", "label", "discount", "is_registered_to_newsletter", "sign_up_date", "total_orders", "last_order_amount", "last_order_date", "address_first_name", "address_last_name", "company", "address1", "address2", "address3", "zipcode", "city", "country", "phone", "cellphone", "is_default_address", "address_title"];
     sort($keys);
     $rawData = $data->getData();
     $max = CustomerQuery::create()->count();
     /**
      * 30 customers that has more than 1 addresses or enough
      */
     if (30 < $max) {
         $max = 30;
     }
     for ($i = 0; $i < $max;) {
         $row = $rawData[$i];
         $rowKeys = array_keys($row);
         sort($rowKeys);
         $this->assertEquals($rowKeys, $keys);
         $customer = CustomerQuery::create()->findOneByRef($row["ref"]);
         $this->assertNotNull($customer);
         $this->assertEquals($customer->getFirstname(), $row["first_name"]);
         $this->assertEquals($customer->getLastname(), $row["last_name"]);
         $this->assertEquals($customer->getEmail(), $row["email"]);
         $this->assertEquals($customer->getCreatedAt()->format($lang->getDatetimeFormat()), $row["sign_up_date"]);
         $this->assertEquals($customer->getDiscount(), $row["discount"]);
         $title = CustomerTitleQuery::create()->findPk($customer->getTitleId());
         $this->assertEquals($title->getShort(), $row["title"]);
         $total = 0;
         foreach ($customer->getOrders() as $order) {
             $amount = $order->getTotalAmount($tax);
             if (0 < ($rate = $order->getCurrencyRate())) {
                 $amount = round($amount / $rate, 2);
             }
             $total += $amount;
         }
         $defaultCurrencyCode = Currency::getDefaultCurrency()->getCode();
         $this->assertEquals($total . " " . $defaultCurrencyCode, $row["total_orders"]);
         $lastOrder = OrderQuery::create()->filterByCustomer($customer)->orderByCreatedAt(Criteria::DESC)->orderById(Criteria::DESC)->findOne();
         if (null !== $lastOrder) {
             $expectedPrice = $lastOrder->getTotalAmount($tax_) . " " . $lastOrder->getCurrency()->getCode();
             $expectedDate = $lastOrder->getCreatedAt()->format($lang->getDatetimeFormat());
         } else {
             $expectedPrice = "";
             $expectedDate = "";
         }
         $this->assertEquals($expectedPrice, $row["last_order_amount"]);
         $this->assertEquals($expectedDate, $row["last_order_date"]);
         $newsletter = NewsletterQuery::create()->findOneByEmail($customer->getEmail());
         $this->assertEquals($newsletter === null ? 0 : 1, $row["is_registered_to_newsletter"]);
         do {
             $address = AddressQuery::create()->filterByCustomer($customer)->filterByAddress1($rawData[$i]["address1"])->filterByAddress2($rawData[$i]["address2"])->filterByAddress3($rawData[$i]["address3"])->filterByFirstname($rawData[$i]["address_first_name"])->filterByLastname($rawData[$i]["address_last_name"])->filterByCountryId(CountryI18nQuery::create()->filterByLocale($lang->getLocale())->findOneByTitle($rawData[$i]["country"])->getId())->filterByCompany($rawData[$i]["company"])->_if(empty($rawData[$i]["company"]))->_or()->filterByCompany(null, Criteria::ISNULL)->_endif()->filterByZipcode($rawData[$i]["zipcode"])->filterByCity($rawData[$i]["city"])->filterByIsDefault($rawData[$i]["is_default_address"])->filterByCellphone($rawData[$i]["cellphone"])->_if(empty($rawData[$i]["cellphone"]))->_or()->filterByCellphone(null, Criteria::ISNULL)->_endif()->filterByPhone($rawData[$i]["phone"])->_if(empty($rawData[$i]["phone"]))->_or()->filterByPhone(null, Criteria::ISNULL)->_endif()->filterByLabel($rawData[$i]["label"])->_if(empty($rawData[$i]["label"]))->_or()->filterByLabel(null, Criteria::ISNULL)->_endif()->filterByTitleId(CustomerTitleI18nQuery::create()->filterByLocale($lang->getLocale())->findOneByShort($rawData[$i]["address_title"])->getId())->findOne();
             $this->assertNotNull($address);
             $rowKeys = array_keys($rawData[$i]);
             sort($rowKeys);
             $this->assertEquals($rowKeys, $keys);
         } while (isset($rawData[++$i]["ref"]) && $rawData[$i - 1]["ref"] === $rawData[$i]["ref"] && ++$max);
     }
 }
Esempio n. 8
0
 protected function getEmailFromEvent(NewsletterEvent $event)
 {
     return NewsletterQuery::create()->findPk($event->getId())->getEmail();
 }
Esempio n. 9
0
 /**
  * @param  Lang                                            $lang
  * @return array|\Propel\Runtime\ActiveQuery\ModelCriteria
  */
 public function buildDataSet(Lang $lang)
 {
     $newsletter = NewsletterQuery::create()->select([NewsletterTableMap::EMAIL, NewsletterTableMap::LASTNAME, NewsletterTableMap::FIRSTNAME])->find()->toArray();
     return $newsletter;
 }
Esempio n. 10
0
 /**
  * Removes this object from datastore and sets delete attribute.
  *
  * @param      ConnectionInterface $con
  * @return void
  * @throws PropelException
  * @see Newsletter::setDeleted()
  * @see Newsletter::isDeleted()
  */
 public function delete(ConnectionInterface $con = null)
 {
     if ($this->isDeleted()) {
         throw new PropelException("This object has already been deleted.");
     }
     if ($con === null) {
         $con = Propel::getServiceContainer()->getWriteConnection(NewsletterTableMap::DATABASE_NAME);
     }
     $con->beginTransaction();
     try {
         $deleteQuery = ChildNewsletterQuery::create()->filterByPrimaryKey($this->getPrimaryKey());
         $ret = $this->preDelete($con);
         if ($ret) {
             $deleteQuery->delete($con);
             $this->postDelete($con);
             $con->commit();
             $this->setDeleted(true);
         } else {
             $con->commit();
         }
     } catch (Exception $e) {
         $con->rollBack();
         throw $e;
     }
 }
Esempio n. 11
0
 public static function setUpBeforeClass()
 {
     NewsletterQuery::create()->filterByEmail('*****@*****.**')->delete();
 }
 public function verifyExistingEmail($value, ExecutionContextInterface $context)
 {
     if (null === NewsletterQuery::create()->filterByUnsubscribed(false)->findOneByEmail($value)) {
         $context->addViolation(Translator::getInstance()->trans("The email address \"%mail\" was not found.", ['%mail' => $value]));
     }
 }