Пример #1
0
 /**
  * Filter data
  *
  * @param Table $table
  */
 public function filter(Table $table)
 {
     $filters = $table->getFilters();
     if (count($filters) == 0) {
         return;
     }
     $columns = $table->getColumns();
     $result = [];
     foreach ($this->data as $row) {
         $passedAnds = true;
         foreach ($filters as $id => $filterData) {
             $passedOrs = false;
             foreach ($filterData as $name => $value) {
                 $test = $this->checkFilter($name, $columns[$id]['type'], $value, $row[$id]);
                 if ($test === true) {
                     $passedOrs = true;
                 }
             }
             if (!$passedOrs) {
                 $passedAnds = false;
             }
         }
         if ($passedAnds) {
             $result[] = $row;
         }
     }
     $this->data = $result;
 }
Пример #2
0
 /**
  * Filter data
  *
  * @param Table $table
  */
 public function filter(Table $table)
 {
     $filters = $table->getFilters();
     if (count($filters) == 0) {
         return;
     }
     $columns = $table->getColumns();
     $result = [];
     foreach ($this->data as $row) {
         $passedAnds = true;
         foreach ($filters as $id => $filterData) {
             $passedOrs = false;
             foreach ($filterData as $name => $value) {
                 $real = $row[$id];
                 if ($real && $columns[$id]['type'] == Table::TYPE_DATETIME) {
                     if (is_string($real)) {
                         if ($this->getDbTimezone()) {
                             $real = new \DateTime($real, new \DateTimeZone($this->getDbTimezone()));
                         } else {
                             $real = new \DateTime($real);
                         }
                     } else {
                         if (is_int($real)) {
                             $real = new \DateTime('@' . $real);
                         }
                     }
                     if (date_default_timezone_get()) {
                         $real->setTimezone(new \DateTimeZone(date_default_timezone_get()));
                     }
                 }
                 $test = $this->checkFilter($name, $columns[$id]['type'], $value, $real);
                 if ($test === true) {
                     $passedOrs = true;
                 }
             }
             if (!$passedOrs) {
                 $passedAnds = false;
             }
         }
         if ($passedAnds) {
             $result[] = $row;
         }
     }
     $this->data = $result;
 }
Пример #3
0
 /**
  * Filter data
  *
  * @param Table $table
  */
 public function filter(Table $table)
 {
     $this->sqlWhere = [];
     $this->sqlParams = [];
     $columns = $table->getColumns();
     foreach ($table->getFilters() as $column => $filters) {
         foreach ($filters as $name => $value) {
             $this->buildFilter($columns[$column]['sql_id'], $columns[$column]['type'], $name, $value);
         }
     }
     if (count($this->sqlWhere) == 0) {
         return;
     }
     $ands = [];
     foreach ($this->sqlWhere as $filter => $ors) {
         $ands[] = '(' . join(') OR (', $ors) . ')';
     }
     $qb = $this->getQueryBuilder();
     $qb->andWhere('(' . join(') AND (', $ands) . ')');
     foreach ($this->sqlParams as $name => $value) {
         $qb->setParameter($name, $value);
     }
 }
Пример #4
0
 /**
  * Filter data
  *
  * @param Table $table
  * @return GenericDBAdapter
  */
 public function filter(Table $table)
 {
     $this->sqlAnds = [];
     $this->sqlParams = $this->initialParams;
     $columns = $table->getColumns();
     foreach ($table->getFilters() as $column => $filterData) {
         foreach ($filterData as $name => $value) {
             $this->buildFilter($columns[$column]['sql_id'], $columns[$column]['type'], $name, $value);
         }
     }
     return $this;
 }
 /**
  * Filter data
  *
  * @param Table $table
  */
 public function filter(Table $table)
 {
     $this->andOps = [];
     $columns = $table->getColumns();
     foreach ($table->getFilters() as $column => $filters) {
         foreach ($filters as $name => $value) {
             $this->buildFilter($columns[$column]['field_name'], $columns[$column]['type'], $name, $value);
         }
     }
     if (count($this->andOps) == 0) {
         return;
     }
     $qb = $this->getQueryBuilder();
     foreach ($this->andOps as $field => $orOps) {
         $expr = $qb->expr();
         foreach ($orOps as $op) {
             $operator = $op['operator'];
             if ($operator == 'range') {
                 $value1 = $op['value1'];
                 $value2 = $op['value2'];
                 if (strlen($value1) && strlen($value2)) {
                     $expr->addOr($qb->expr()->field($field)->range($value1 instanceof MongoDate ? $value1 : (int) $value1, $value2 instanceof MongoDate ? $value2 : (int) $value2));
                     $expr->addOr($qb->expr()->field($field)->equals($value2 instanceof MongoDate ? $value2 : (int) $value2));
                 } else {
                     if (strlen($value1)) {
                         $expr->addOr($qb->expr()->field($field)->gte($value1 instanceof MongoDate ? $value1 : (int) $value1));
                     } else {
                         if (strlen($value2)) {
                             $expr->addOr($qb->expr()->field($field)->lte($value2 instanceof MongoDate ? $value2 : (int) $value2));
                         }
                     }
                 }
             } else {
                 $value = $op['value'];
                 $expr->addOr($qb->expr()->field($field)->{$operator}($value));
             }
         }
         $qb->addAnd($expr);
     }
 }