/** * * @param Database_Query_Builder_Select $query */ public function apply_filters(&$query) { $fk1_alias = ''; foreach ($this->_filters as $filter) { // FOREIGN KEYS $column = $this->_columns[$filter['column']]; if ($column->is_foreign_key()) { $fk1_table = $column->get_referenced_table(); $fk1_title_column = $fk1_table->get_title_column(); $fk1_alias .= 'f'; $query->join(array($fk1_table->get_name(), $fk1_alias), 'LEFT OUTER')->on($this->_name . '.' . $column->get_name(), '=', $fk1_alias . '.id'); $filter['column'] = $fk1_alias . '.' . $fk1_title_column->get_name(); // FK is also an FK? if ($fk1_title_column->is_foreign_key()) { $fk2_table = $fk1_title_column->get_referenced_table(); $fk2_title_column = $fk2_table->get_title_column(); $fk2_alias = $fk1_alias . 'f'; $query->join(array($fk2_table->get_name(), $fk2_alias), 'LEFT OUTER')->on($fk1_alias . '.' . $fk1_title_column->get_name(), '=', $fk2_alias . '.id'); $filter['column'] = $fk2_alias . '.' . $fk2_title_column->get_name(); } } // LIKE or NOT LIKE if ($filter['operator'] == 'like' || $filter['operator'] == 'not like') { $filter['value'] = '%' . $filter['value'] . '%'; $filter['column'] = DB::expr('CONVERT(' . $filter['column'] . ', CHAR)'); } // IS EMPTY if ($filter['operator'] == 'empty') { $query->where($filter['column'], 'IS', NULL); $query->or_where($filter['column'], '=', ''); $filter['column'] = ''; } // IS NOT EMPTY if ($filter['operator'] == 'not empty') { $query->where($filter['column'], 'IS NOT', NULL); $query->and_where($filter['column'], '!=', ''); $filter['column'] = ''; } if (!empty($filter['column'])) { $query->where($filter['column'], $filter['operator'], $filter['value']); } } // end foreach filter // Get WHERE permissions foreach ($this->get_permissions() as $perm) { if (!empty($perm['where_clause'])) { $query->and_where(DB::expr($perm['where_clause'] . ' AND 1'), '=', 1); } } }
/** * Creates a new "AND WHERE" condition for the query. * * @param mixed $column column name or array($column, $alias) or object * @param string $op logic operator * @param mixed $value column value * @return Jelly_Builder */ public function and_where($column, $op, $value) { return parent::and_where($this->_field_alias($column, $value), $op, $value); }