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; }