Example #1
0
 public function postActivation(ConnectionInterface $con = null)
 {
     $languages = LangQuery::create()->find();
     ConfigQuery::write(self::CONFIG_ENABLED, self::DEFAULT_ENABLED);
     ConfigQuery::write(self::CONFIG_THRESHOLD, self::DEFAULT_THRESHOLD);
     ConfigQuery::write(self::CONFIG_EMAILS, self::DEFAULT_EMAILS);
     // create new message
     if (null === MessageQuery::create()->findOneByName('stockalert_customer')) {
         $message = new Message();
         $message->setName('stockalert_customer')->setHtmlTemplateFileName('alert-customer.html')->setHtmlLayoutFileName('')->setTextTemplateFileName('alert-customer.txt')->setTextLayoutFileName('')->setSecured(0);
         foreach ($languages as $language) {
             $locale = $language->getLocale();
             $message->setLocale($locale);
             $message->setTitle($this->trans('Stock Alert - Customer', [], $locale));
             $message->setSubject($this->trans('Product {$product_title} is available again', [], $locale));
         }
         $message->save();
         $message = new Message();
         $message->setName('stockalert_administrator')->setHtmlTemplateFileName('alert-administrator.html')->setHtmlLayoutFileName('')->setTextTemplateFileName('alert-administrator.txt')->setTextLayoutFileName('')->setSecured(0);
         foreach ($languages as $language) {
             $locale = $language->getLocale();
             $message->setLocale($locale);
             $message->setTitle($this->trans('Stock Alert - Administrator', [], $locale));
             $message->setSubject($this->trans('Product {$product_title} is (nearly) out of stock', [], $locale));
         }
         $message->save();
     }
     try {
         RestockingAlertQuery::create()->findOne();
     } catch (\Exception $e) {
         $database = new Database($con);
         $database->insertSql(null, [__DIR__ . '/Config/thelia.sql']);
     }
 }
 /**
  * this method returns a Propel ModelCriteria
  *
  * @return \Propel\Runtime\ActiveQuery\ModelCriteria
  */
 public function buildModelCriteria()
 {
     $query = RestockingAlertQuery::create();
     $id = $this->getArgValue('id');
     if (!empty($id)) {
         $query->filterById($id, Criteria::IN);
     }
     $email = $this->getArgValue('email');
     if (!empty($email)) {
         $query->filterByEmail('%' . $email . '%', Criteria::LIKE);
     }
     $id = $this->getArgValue('product_sale_element');
     if (!empty($id)) {
         $query->filterByProductSaleElementsId($id, Criteria::IN);
     }
     $orders = $this->getArgValue('order');
     foreach ($orders as $order) {
         switch ($order) {
             case "id":
                 $query->orderById(Criteria::ASC);
                 break;
             case "id_reverse":
                 $query->orderById(Criteria::DESC);
                 break;
             case "product_sale_element_id":
                 $query->orderByProductSaleElementsId(Criteria::ASC);
                 break;
             case "product_sale_element_id_reverse":
                 $query->orderByProductSaleElementsId(Criteria::DESC);
                 break;
             case "email_id":
                 $query->orderByEmail(Criteria::ASC);
                 break;
             case "email_reverse":
                 $query->orderByEmail(Criteria::DESC);
                 break;
             case "created":
                 $query->addAscendingOrderByColumn('created_at');
                 break;
             case "created_reverse":
                 $query->addDescendingOrderByColumn('created_at');
                 break;
             case "updated":
                 $query->addAscendingOrderByColumn('updated_at');
                 break;
             case "updated_reverse":
                 $query->addDescendingOrderByColumn('updated_at');
                 break;
             case "random":
                 $query->clearOrderByColumns();
                 $query->addAscendingOrderByColumn('RAND()');
                 break 2;
         }
     }
     return $query;
 }
 public function checkStock(ProductSaleElementUpdateEvent $productSaleElementUpdateEvent)
 {
     if ($productSaleElementUpdateEvent->getQuantity() > 0) {
         // add extra checking
         $pse = ProductSaleElementsQuery::create()->findPk($productSaleElementUpdateEvent->getProductSaleElementId());
         $availabilityEvent = new ProductSaleElementAvailabilityEvent($pse);
         $productSaleElementUpdateEvent->getDispatcher()->dispatch(StockAlertEvents::STOCK_ALERT_CHECK_AVAILABILITY, $availabilityEvent);
         if ($availabilityEvent->isAvailable()) {
             $subscribers = RestockingAlertQuery::create()->filterByProductSaleElementsId($productSaleElementUpdateEvent->getProductSaleElementId())->find();
             if (null !== $subscribers) {
                 foreach ($subscribers as $subscriber) {
                     try {
                         $this->sendEmail($subscriber);
                         $subscriber->delete();
                     } catch (\Exception $ex) {
                     }
                 }
             }
         }
     }
 }
 /**
  * Performs an INSERT on the database, given a RestockingAlert or Criteria object.
  *
  * @param mixed               $criteria Criteria or RestockingAlert 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(RestockingAlertTableMap::DATABASE_NAME);
     }
     if ($criteria instanceof Criteria) {
         $criteria = clone $criteria;
         // rename for clarity
     } else {
         $criteria = $criteria->buildCriteria();
         // build Criteria from RestockingAlert object
     }
     if ($criteria->containsKey(RestockingAlertTableMap::ID) && $criteria->keyContainsValue(RestockingAlertTableMap::ID)) {
         throw new PropelException('Cannot insert a value for auto-increment primary key (' . RestockingAlertTableMap::ID . ')');
     }
     // Set the correct dbName
     $query = RestockingAlertQuery::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;
 }