Пример #1
0
 public function info()
 {
     ClassLoader::importNow("application.helper.getDateFromString");
     $product = Product::getInstanceById($this->request->get('id'), ActiveRecord::LOAD_DATA, array('DefaultImage' => 'ProductImage', 'Manufacturer', 'Category'));
     $thisMonth = date('m');
     $lastMonth = date('Y-m', strtotime(date('m') . '/15 -1 month'));
     $periods = array('_last_1_h' => "-1 hours | now", '_last_3_h' => "-3 hours | now", '_last_6_h' => "-6 hours | now", '_last_12_h' => "-12 hours | now", '_last_24_h' => "-24 hours | now", '_last_3_d' => "-3 days | now", '_this_week' => "w:Monday | now", '_last_week' => "w:Monday ~ -1 week | w:Monday", '_this_month' => $thisMonth . "/1 | now", '_last_month' => $lastMonth . "-1 | " . $lastMonth . "/1", '_this_year' => "January 1 | now", '_last_year' => "January 1 last year | January 1", '_overall' => "now | now");
     $purchaseStats = array();
     $prevCount = 0;
     foreach ($periods as $key => $period) {
         list($from, $to) = explode(' | ', $period);
         $cond = new EqualsCond(new ARFieldHandle('OrderedItem', 'productID'), $product->getID());
         if ('now' != $from) {
             $cond->addAND(new EqualsOrMoreCond(new ARFieldHandle('CustomerOrder', 'dateCompleted'), getDateFromString($from)));
         }
         if ('now' != $to) {
             $cond->addAnd(new EqualsOrLessCond(new ARFieldHandle('CustomerOrder', 'dateCompleted'), getDateFromString($to)));
         }
         $f = new ARSelectFilter($cond);
         $f->mergeCondition(new EqualsCond(new ARFieldHandle('CustomerOrder', 'isFinalized'), true));
         $f->removeFieldList();
         $f->addField('SUM(OrderedItem.count)');
         $query = new ARSelectQueryBuilder();
         $query->setFilter($f);
         $query->includeTable('OrderedItem');
         $query->joinTable('CustomerOrder', 'OrderedItem', 'ID', 'customerOrderID');
         if (($count = array_shift(array_shift(ActiveRecordModel::getDataBySql($query->getPreparedStatement(ActiveRecord::getDBConnection()))))) && ($count > $prevCount || '_overall' == $key)) {
             $purchaseStats[$key] = $count;
         }
         if ($count > $prevCount) {
             $prevCount = $count;
         }
     }
     $response = new ActionResponse();
     $response->set('together', $product->getProductsPurchasedTogether(10));
     $response->set('product', $product->toArray());
     $response->set('purchaseStats', $purchaseStats);
     return $response;
 }
Пример #2
0
 private function isRated(Product $product, $isRating = false)
 {
     if (!empty($_COOKIE['rating_' . $product->getID()])) {
         return true;
     }
     if ($isRating) {
         ClassLoader::importNow("application.helper.getDateFromString");
         $f = new ARSelectFilter(new EqualsCond(new ARFieldHandle('ProductRating', 'productID'), $product->getID()));
         if (!$this->user->isAnonymous()) {
             $cond = new EqualsCond(new ARFieldHandle('ProductRating', 'userID'), $this->user->getID());
         } else {
             if ($hours = $this->config->get('RATING_SAME_IP_TIME')) {
                 $cond = new EqualsCond(new ARFieldHandle('ProductRating', 'ip'), $this->request->getIPLong());
                 $cond->addAnd(new MoreThanCond(new ARFieldHandle('ProductRating', 'dateCreated'), getDateFromString('-' . $hours . ' hours')));
             }
         }
         if (isset($cond)) {
             $f->mergeCondition($cond);
             return ActiveRecordModel::getRecordCount('ProductRating', $f) > 0;
         }
     }
 }
Пример #3
0
 private function getTypeCondition($type)
 {
     switch ($type) {
         case self::TYPE_ALL:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1);
             break;
         case self::TYPE_CURRENT:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1);
             $cond2 = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_PROCESSING);
             // @todo fix NEW status = NULL bug
             $cond2->addOR(new IsNullCond(new ARFieldHandle('CustomerOrder', "status")));
             $cond2->addOR(new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_AWAITING));
             $cond2->addOR(new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_NEW));
             $cond->addAND($cond2);
             break;
         case self::TYPE_NEW:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1);
             $cond2 = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_NEW);
             // @todo fix NEW status = NULL bug
             $cond2->addOR(new IsNullCond(new ARFieldHandle('CustomerOrder', "status")));
             $cond->addAND($cond2);
             break;
         case self::TYPE_PROCESSING:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_PROCESSING);
             $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1));
             break;
         case self::TYPE_AWAITING:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_AWAITING);
             $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1));
             break;
         case self::TYPE_SHIPPED:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_SHIPPED);
             $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1));
             break;
         case self::TYPE_RETURNED:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_RETURNED);
             $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1));
             break;
         case self::TYPE_CANCELLED:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "isCancelled"), true);
             $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1));
             break;
         case self::TYPE_CARTS:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 0);
             break;
         case self::TYPE_RECURRING:
             $cond = new AndChainCondition(array(new EqualsCond(new ARFieldHandle('CustomerOrder', 'isFinalized'), 1), new EqualsCond(new ARFieldHandle('CustomerOrder', 'isRecurring'), 1), new OrChainCondition(array(new MoreThanCond(new ARFieldHandle('CustomerOrder', 'rebillsLeft'), 0), new IsNullCond(new ARFieldHandle('CustomerOrder', 'isRecurring'))))));
             break;
         case self::TYPE_RECURRING_ALL:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', 'isRecurring'), 1);
             $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', 'isFinalized'), 1));
             $cond->addAND(new IsNullCond(new ARFieldHandle('CustomerOrder', 'parentID')));
             break;
         case self::TYPE_RECURRING_EXPIRED:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', 'isRecurring'), 1);
             $cond->addAnd(new EqualsOrLessCond(new ARFieldHandle('CustomerOrder', 'rebillsLeft'), 0));
             $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', 'isFinalized'), 1));
             $cond->addAND(new IsNullCond(new ARFieldHandle('CustomerOrder', 'parentID')));
             break;
         case self::TYPE_RECURRING_CANCELLED:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', 'isRecurring'), 1);
             $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', 'isCancelled'), 1));
             $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', 'isFinalized'), 1));
             $cond->addAND(new IsNullCond(new ARFieldHandle('CustomerOrder', 'parentID')));
             break;
         case self::TYPE_RECURRING_WITH_PARENT:
             $parentID = $this->getRequest()->get('parentID');
             if (!$parentID) {
                 $parentID = -1;
             }
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', 'isRecurring'), 1);
             $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', 'parentID'), $parentID));
             break;
         default:
             return;
     }
     $filters = $this->request->get('filters');
     if (!in_array($type, array(self::TYPE_CANCELLED, self::TYPE_ALL, self::TYPE_SHIPPED, self::TYPE_RETURNED, self::TYPE_RECURRING_CANCELLED))) {
         $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isCancelled"), 0));
     }
     // $f  = new ARSelectFilter();
     // $f->setCondition($cond);
     // pp($f->createString());
     return $cond;
 }