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