private function getRatingTypeFilter(Product $product) { $path = $product->getCategory()->getPathNodeArray(Category::INCLUDE_ROOT_NODE); $filter = new ARSelectFilter(); $filter->setOrder(new ARFieldHandle("Category", "lft"), 'ASC'); $filter->setOrder(new ARFieldHandle(__CLASS__, "position"), 'ASC'); $cond = new EqualsCond(new ARFieldHandle(__CLASS__, "categoryID"), $product->getCategory()->getID()); foreach ($path as $node) { $cond->addOR(new EqualsCond(new ARFieldHandle(__CLASS__, "categoryID"), $node['ID'])); } $filter->setCondition($cond); return $filter; }
private static function getCategoryCondition(Category $category) { $own = new EqualsCond(new ARFieldHandle(__CLASS__, 'categoryID'), $category->getID()); $parent = new EqualsOrLessCond(new ARFieldHandle('Category', 'lft'), $category->lft->get()); $parent->addAND(new EqualsOrMoreCond(new ARFieldHandle('Category', 'rgt'), $category->rgt->get())); $parent->addAND(new EqualsCond(new ARFieldHandle(__CLASS__, 'isSubcategories'), true)); $own->addOR($parent); return $own; }
/** * Crates a select filter for specification fields related to category * * @param bool $includeParentFields * @return ARSelectFilter * @todo Order by categories (top-level category fields go first) */ private function getSpecificationFilter($includeParentFields) { $filter = new ARSelectFilter(); $filter->setOrder(new ARFieldHandle("SpecFieldGroup", "position"), 'ASC'); $filter->setOrder(new ARFieldHandle("SpecField", "position"), 'ASC'); $cond = new EqualsCond(new ARFieldHandle("SpecField", "categoryID"), $this->getID()); if ($includeParentFields) { foreach (self::getPathNodeArray(Category::INCLUDE_ROOT_NODE) as $node) { $cond->addOR(new EqualsCond(new ARFieldHandle("SpecField", "categoryID"), $node['ID'])); } } $filter->setCondition($cond); 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; }
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; }
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(); } } }
public static function addNewRolesNames($roleNames, $deleteOther = false) { // unset meta- roles if ($i = array_search('login', $roleNames)) { unset($roleNames[$i]); } if (!is_array($roleNames) || empty($roleNames)) { return; } $filter = new ARSelectFilter(); $deleteFilter = new ARDeleteFilter(); $condition = new EqualsCond(new ARFieldHandle(__CLASS__, "name"), $roleNames[0]); $deleteCondition = new NotEqualsCond(new ARFieldHandle(__CLASS__, "name"), $roleNames[0]); foreach ($roleNames as $roleName) { $condition->addOR(new EqualsCond(new ARFieldHandle(__CLASS__, "name"), $roleName)); $deleteCondition->addAnd(new NotEqualsCond(new ARFieldHandle(__CLASS__, "name"), $roleName)); } $filter->setCondition($condition); $deleteFilter->setCondition($deleteCondition); if ($deleteOther) { self::deleteRecordSet(__CLASS__, $deleteFilter); } // Find new roles $invertedRoleNames = array_flip($roleNames); foreach (self::getRecordSet($filter) as $role) { if (isset($invertedRoleNames[$role->name->get()])) { unset($invertedRoleNames[$role->name->get()]); } } // Add new roles to database foreach ($invertedRoleNames as $role => $value) { if (!empty($role)) { $newRole = Role::getNewInstance($role); $newRole->save(); } } }