Example #1
0
 public static function loadCategoryPathsForArray(&$productArray)
 {
     foreach ($productArray as $product) {
         $cond = lte('Category.lft', $product['Category']['lft']);
         $cond->addAnd(gte('Category.rgt', $product['Category']['rgt']));
         $conditions[] = $cond;
     }
     $filter = select(Condition::mergeFromArray($conditions, true));
     $filter->setOrder(f('Category.lft'));
     $categories = ActiveRecord::getRecordSetArray('Category', $filter);
     foreach ($productArray as &$product) {
         $product['Categories'] = array();
         $names = array();
         foreach ($categories as &$category) {
             if ($category['lft'] <= $product['Category']['lft'] && $category['rgt'] >= $product['Category']['rgt']) {
                 $product['Categories'][] =& $category;
                 $names[] = $category['name_lang'];
             }
         }
         array_shift($names);
         $product['category_path'] = implode(' > ', $names);
         $product['category_path_slash'] = implode(' / ', $names);
         $product['category_name'] = count($names) > 0 ? array_pop($names) : '';
     }
 }
Example #2
0
function select()
{
    return new ARSelectFilter(Condition::mergeFromArray(func_get_args()));
}
Example #3
0
 public static function loadSubConditions(ARSet $conditionSet)
 {
     $cond = array();
     foreach ($conditionSet as $condition) {
         if ($condition->hasSubConditions()) {
             $cond[] = $condition->getChildNodeCondition();
         }
     }
     if (!$cond) {
         return new ARSet();
     }
     $f = new ARSelectFilter(Condition::mergeFromArray($cond, true));
     $subConditions = ActiveRecordModel::getRecordSet(__CLASS__, $f);
     foreach ($subConditions as $condition) {
         $condition->parentNode->get()->registerSubCondition($condition);
     }
     return $subConditions;
 }
Example #4
0
 /**
  * Create an ActiveRecord Condition object to use for product selection
  *
  * @return Condition
  */
 public function getCondition()
 {
     $specField = $this->filterGroup->get()->specField->get();
     // number range
     if ($specField->isSimpleNumbers()) {
         $field = new ARExpressionHandle($this->getJoinAlias() . '.value');
         $conditions = array();
         if ($this->rangeStart->get()) {
             $conditions[] = new EqualsOrMoreCond($field, $this->rangeStart->get());
         }
         if ($this->rangeEnd->get()) {
             $conditions[] = new EqualsOrLessCond($field, $this->rangeEnd->get());
         }
         $cond = Condition::mergeFromArray($conditions);
     } elseif ($specField->isDate()) {
         $field = new ARExpressionHandle($this->getJoinAlias() . '.value');
         $conditions = array();
         if ($this->rangeDateStart->get()) {
             $conditions[] = new EqualsOrMoreCond($field, $this->rangeDateStart->get());
         }
         if ($this->rangeDateEnd->get()) {
             $conditions[] = new EqualsOrLessCond($field, $this->rangeDateEnd->get());
         }
         $cond = Condition::mergeFromArray($conditions);
     } else {
         throw new ApplicationException('Filter type not supported');
     }
     return $cond;
 }
Example #5
0
 protected function getDateCondition(ARFieldHandle $handle)
 {
     $conds = array();
     if ($this->from) {
         $conds[] = new EqualsOrMoreCond($handle, $this->from);
     }
     if ($this->to) {
         $conds[] = new EqualsOrLessCond($handle, $this->to);
     }
     if ($conds) {
         return Condition::mergeFromArray($conds);
     }
 }