public static function deleteByID($className, $id, $foreignKeyName) { $inst = ActiveRecordModel::getInstanceById($className, $id, ActiveRecordModel::LOAD_DATA); $inst->getOwner()->load(); $inst->deleteImageFiles(); // check if main image is being deleted $owner = $inst->getOwner(); $owner->load(array(get_class($inst))); if ($owner->defaultImage->get()->getID() == $id) { // set next image (by position) as the main image $f = new ARSelectFilter(); $cond = new EqualsCond(new ARFieldHandle(get_class($inst), $foreignKeyName), $owner->getID()); $cond->addAND(new NotEqualsCond(new ARFieldHandle(get_class($inst), 'ID'), $inst->getID())); $f->setCondition($cond); $f->setOrder(new ARFieldHandle(get_class($inst), 'position')); $f->setLimit(1); $newDefaultImage = ActiveRecordModel::getRecordSet(get_class($inst), $f); if ($newDefaultImage->size() > 0) { $owner->defaultImage->set($newDefaultImage->get(0)); $owner->save(); } } ActiveRecordModel::executeUpdate('SET FOREIGN_KEY_CHECKS=0'); ActiveRecordModel::executeUpdate('UPDATE ' . $className . ' SET ' . $foreignKeyName . '=NULL , protectedFields="|' . $foreignKeyName . '|" WHERE ID=' . $id); //return parent::deleteByID($className, $id); }
public static function getInstance(Product $product, Currency $currency, $recurring = null, $type = 0) { $filter = new ARSelectFilter(); $cond = new EqualsCond(new ARFieldHandle('ProductPrice', 'productID'), $product->getID()); $cond->addAND(new EqualsCond(new ARFieldHandle('ProductPrice', 'currencyID'), $currency->getID())); $cond->addAND(new EqualsCond(new ARFieldHandle('ProductPrice', 'type'), $type)); if ($recurring) { $cond->addAND(new EqualsCond(new ARFieldHandle('ProductPrice', 'recurringID'), $recurring->getID())); } $filter->setCondition($cond); $set = parent::getRecordSet('ProductPrice', $filter); if ($set->size() > 0) { $instance = $set->get(0); } else { $instance = self::getNewInstance($product, $currency, $recurring, $type); } return $instance; }
/** * Gets an instance of user by using login information * * @param string $email * @param string $password * @return mixed User instance or null if user is not found */ public static function getInstanceByLogin($email, $password) { $loginCond = new EqualsCond(new ARFieldHandle('User', 'email'), $email); //$loginCond->addAND(new EqualsCond(new ARFieldHandle('User', 'password'), md5($password))); $loginCond->addAND(new EqualsCond(new ARFieldHandle('User', 'isEnabled'), true)); $recordSet = ActiveRecordModel::getRecordSet(__CLASS__, new ARSelectFilter($loginCond)); if (!$recordSet->size()) { return null; } else { $user = $recordSet->get(0); return $user->isPasswordValid($password) ? $user : null; } }
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; }
/** * * * @param bool $loadSelf * @return ARSelectFilter */ private function getSiblingFilter($loadSelf) { $filter = new ARSelectFilter(); $cond = new EqualsCond(new ARFieldHandle('Category', 'parentNodeID'), $this->parentNode->get()->getID()); $cond->addAND(new EqualsCond(new ARFieldHandle('Category', 'isEnabled'), 1)); if (!$loadSelf) { $cond->addAND(new NotEqualsCond(new ARFieldHandle('Category', 'ID'), $this->getID())); } $filter->setCondition($cond); $filter->setOrder(new ARFieldHandle('Category', 'lft'), 'ASC'); return $filter; }
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; }
/** * Validates specification field form * * @param array $values List of values to validate. * @param array $config * @return array List of all errors */ protected function validate($values = array(), $languageCodes) { $errors = array(); if (!isset($values['name']) || $values['name'] == '') { $errors['name'] = '_error_name_empty'; } if (!isset($values['handle']) || $values['handle'] == '' || preg_match('/[^\\w\\d_.]/', $values['handle'])) { $errors['handle'] = '_error_handle_invalid'; } else { $values['ID'] = !isset($values['ID']) ? -1 : $values['ID']; $filter = new ARSelectFilter(); $handleCond = new EqualsCond(new ARFieldHandle($this->getFieldClass(), 'handle'), $values['handle']); $handleCond->addAND(new EqualsCond(new ARFieldHandle($this->getFieldClass(), call_user_func(array($this->getFieldClass(), 'getOwnerIDColumnName'))), $values['categoryID'])); $handleCond->addAND(new NotEqualsCond(new ARFieldHandle($this->getFieldClass(), 'ID'), $values['ID'])); $filter->setCondition($handleCond); if (count(ActiveRecordModel::getRecordSetArray($this->getFieldClass(), $filter)) > 0) { $errors['handle'] = '_error_handle_exists'; } } if (!isset($values['handle']) || $values['handle'] == '') { $errors['handle'] = '_error_handle_empty'; } if (in_array($values['type'], EavFieldCommon::getSelectorValueTypes()) && isset($values['values']) && is_array($values['values'])) { $countValues = count($values['values']); $i = 0; foreach ($values['values'] as $key => $v) { $i++; if ($countValues == $i && preg_match('/new/', $key) && empty($v[$languageCodes[0]])) { continue; } else { if (!strlen($v[$languageCodes[0]])) { $errors["values[{$key}][{$languageCodes[0]}]"] = '_error_value_empty'; } else { if (EavFieldCommon::getDataTypeFromType($values['type']) == 2 && !is_numeric($v[$languageCodes[0]])) { $errors["values[{$key}][{$languageCodes[0]}]"] = '_error_value_is_not_a_number'; } } } } } return $errors; }
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; default: return; } $filters = $this->request->get('filters'); if (!in_array($type, array(self::TYPE_CANCELLED, self::TYPE_ALL, self::TYPE_SHIPPED, self::TYPE_RETURNED))) { $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isCancelled"), 0)); } return $cond; }
protected final function loadData($loadReferencedRecords, ARSelectQueryBuilder $query) { $className = get_class($this); $PKCond = null; foreach ($this->schema->getPrimaryKeyList() as $name => $PK) { if ($PK instanceof ARForeignKey) { $PKValue = $this->data[$name]->get()->getID(); } else { $PKValue = $this->data[$name]->get(); } if ($PKCond == null) { $PKCond = new EqualsCond(new ARFieldHandle($className, $name), $PKValue); } else { $PKCond->addAND(new EqualsCond(new ARFieldHandle($className, $name), $PKValue)); } } $query->getFilter()->mergeCondition($PKCond); $rowDataArray = self::fetchDataFromDB($query); if (empty($rowDataArray)) { throw new ARNotFoundException($className, $this->getID()); } if (count($rowDataArray) > 1) { throw new ARException("Unexpected behavior: got more than one record from a database while loading single instance data"); } $parsedRowData = self::prepareDataArray($className, $this->schema, $rowDataArray[0], $loadReferencedRecords); $this->createDataAccessVariables($parsedRowData['recordData'], $this->getID()); if (!empty($parsedRowData['miscData'])) { $this->miscRecordDataHandler($parsedRowData['miscData']); } }
private function getSibling($count = 0, $direction = self::DIRECTION_RIGHT, $loadReferencedRecords = false) { if (!$this->isLoaded()) { $this->load(); } $className = get_class($this); $filter = new ARSelectFilter(); $cond = new EqualsCond(new ARFieldHandle($className, self::PARENT_NODE_FIELD_NAME), $this->getField(self::PARENT_NODE_FIELD_NAME)->get()->getID()); $cond->addAND(new OperatorCond(new ArFieldHandle($className, self::LEFT_NODE_FIELD_NAME), $this->getField(self::LEFT_NODE_FIELD_NAME)->get(), self::DIRECTION_RIGHT == $direction ? "<" : ">")); $filter->setCondition($cond); $filter->setOrder(new ArFieldHandle($className, self::LEFT_NODE_FIELD_NAME), self::DIRECTION_RIGHT == $direction ? ARSelectFilter::ORDER_DESC : ARSelectFilter::ORDER_ASC); $filter->setLimit(1, $count); $recordSet = ActiveRecord::getRecordSet($className, $filter, $loadReferencedRecords); foreach ($recordSet as $record) { return $record; } return null; }
public static function getInstanceByCoupon($code) { $c = new EqualsCond(new ARFieldHandle(__CLASS__, 'couponCode'), $code); $c->addAND(new EqualsCond(new ARFieldHandle(__CLASS__, 'isEnabled'), 1)); $set = ActiveRecordModel::getRecordSet(__CLASS__, new ARSelectFilter($c)); if ($set->size()) { return $set->get(0); } }
private function updateRoles() { @unlink($this->getRoleCacheFile()); if (count($this->canceledRoles) > 0) { // Delete canceled associations $deleteFilter = new ARDeleteFilter(); $condition = new EqualsCond(new ARFieldHandle('AccessControlAssociation', "userGroupID"), $this->getID()); $roleConditions = new EqualsCond(new ARFieldHandle('AccessControlAssociation', "roleID"), reset($this->canceledRoles)->getID()); foreach ($this->canceledRoles as $key => $role) { if ($role->isExistingRecord()) { $roleConditions->addOR(new EqualsCond(new ARFieldHandle('AccessControlAssociation', "roleID"), $role->getID())); } else { unset($this->canceledRoles[$key]); } } $condition->addAND($roleConditions); $deleteFilter->setCondition($condition); if (!empty($this->canceledRoles)) { AccessControlAssociation::deleteRecordSet('AccessControlAssociation', $deleteFilter); } } if (count($this->appliedRoles) > 0 && is_object(reset($this->appliedRoles))) { // adding new associations is a bit trickier // First, find all nodes that are already in DB // There is no point to apply them $appliedRolesFilter = new ARSelectFilter(); $appliedIDs = array(); $condition = new EqualsCond(new ARFieldHandle('AccessControlAssociation', "userGroupID"), $this->getID()); $roleConditions = new EqualsCond(new ARFieldHandle('AccessControlAssociation', "roleID"), reset($this->appliedRoles)->getID()); foreach ($this->appliedRoles as $key => $role) { if (is_object($role) && $role->isExistingRecord()) { $roleConditions->addOR(new EqualsCond(new ARFieldHandle('AccessControlAssociation', "roleID"), $role->getID())); } else { unset($this->appliedRoles[$key]); } } $condition->addAND($roleConditions); $appliedRolesFilter->setCondition($condition); // Unset already applied nodes foreach (AccessControlAssociation::getRecordSetByUserGroup($this, $appliedRolesFilter, self::LOAD_REFERENCES) as $assoc) { unset($this->appliedRoles[$assoc->role->get()->getID()]); } // Apply roles foreach ($this->appliedRoles as $role) { $assoc = AccessControlAssociation::getNewInstance($this, $role); $assoc->save(); } } }