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); } }
public function verifyExistingEmail($value, ExecutionContextInterface $context) { $customer = NewsletterQuery::create()->filterByUnsubscribed(false)->findOneByEmail($value); if ($customer) { $context->addViolation(Translator::getInstance()->trans("You are already registered!")); } }
/** * @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; }
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); } } }
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); } }
protected function getEmailFromEvent(NewsletterEvent $event) { return NewsletterQuery::create()->findPk($event->getId())->getEmail(); }
/** * @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; }
/** * 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; } }
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])); } }