function get_filter_cond($model, $field, $operator, $values)
{
$negation = false;
switch ($operator) {
case '=':
$operator = '';
break;
case '<=':
case '>=':
return array($model . '.' . $field . ' ' . $operator => $values);
break;
case '!':
$operator = '';
$negation = true;
break;
case '*':
return null;
break;
case '!*':
return array('or' => array($field . ' !=' => null, $field => ''));
break;
case 'o':
if ($field != 'status_id') {
return;
}
$model = 'Status';
$field = 'is_closed';
$operator = '';
$values = false;
break;
case 'c':
if ($field != 'status_id') {
return;
}
$model = 'Status';
$field = 'is_closed';
$operator = '';
$values = true;
break;
case '>t-':
return $this->date_range_clause($model, $field, -$values, 0);
case '<t-':
return $this->date_range_clause($model, $field, null, -$values);
case 't-':
return $this->date_range_clause($model, $field, $values, -$values);
case '>t+':
return $this->date_range_clause($model, $field, $values, null);
case '<t+':
return $this->date_range_clause($model, $field, 0, $values);
case 't+':
return $this->date_range_clause($model, $field, $values, $values);
case 't':
return $this->date_range_clause($model, $field, 0, 0);
case 'w':
$from = __("'7'") == '7' ? date('N') == 7 ? date('Y-m-d 00:00:00') : date('Y-m-d 00:00:00', time() - date('w') * 86400 - 86400) : date('Y-m-d 00:00:00', time() - date('w') * 86400);
return array($model . '.' . $field . ' BETWEEN ? AND ?' => array($from, date('Y-m-d H:i:s', strtotime($from) + 7 * 86400)));
# from = l(:general_first_day_of_week) == '7' ?
# # week starts on sunday
# ((Date.today.cwday == 7) ? Time.now.at_beginning_of_day : Time.now.at_beginning_of_week - 1.day) :
# # week starts on monday (Rails default)
# Time.now.at_beginning_of_week
# sql = "#{db_table}.#{db_field} BETWEEN '%s' AND '%s'" % [connection.quoted_date(from), connection.quoted_date(from + 7.days)]
# from = l(:general_first_day_of_week) == '7' ?
# # week starts on sunday
# ((Date.today.cwday == 7) ? Time.now.at_beginning_of_day : Time.now.at_beginning_of_week - 1.day) :
# # week starts on monday (Rails default)
# Time.now.at_beginning_of_week
# sql = "#{db_table}.#{db_field} BETWEEN '%s' AND '%s'" % [connection.quoted_date(from), connection.quoted_date(from + 7.days)]
case '~':
$operator = ' like';
$values = '%' . str_replace('%', '%%', $values) . '%';
break;
case '!~':
$operator = 'like';
$values = '%' . str_replace('%', '%%', $values) . '%';
return array('not' => array($model . '.' . $field . ' ' . $operator => $values));
break;
}
if (!$negation) {
return array($model . '.' . $field . (strlen($operator) ? $operator : '') => $values);
} else {
return array('NOT' => array($model . '.' . $field . (strlen($operator) ? $operator : '') => $values));
}
# def sql_for_field(field, value, db_table, db_field, is_custom_filter)
# sql = ''
# case operator_for field
# when "="
# sql = "#{db_table}.#{db_field} IN (" + value.collect{|val| "'#{connection.quote_string(val)}'"}.join(",") + ")"
# when "!"
# sql = "(#{db_table}.#{db_field} IS NULL OR #{db_table}.#{db_field} NOT IN (" + value.collect{|val| "'#{connection.quote_string(val)}'"}.join(",") + "))"
# when "!*"
# sql = "#{db_table}.#{db_field} IS NULL"
# sql << " OR #{db_table}.#{db_field} = ''" if is_custom_filter
# when "*"
# sql = "#{db_table}.#{db_field} IS NOT NULL"
# sql << " AND #{db_table}.#{db_field} <> ''" if is_custom_filter
# when ">="
# sql = "#{db_table}.#{db_field} >= #{value.first.to_i}"
# when "<="
# sql = "#{db_table}.#{db_field} <= #{value.first.to_i}"
# when "o"
# sql = "#{IssueStatus.table_name}.is_closed=#{connection.quoted_false}" if field == "status_id"
# when "c"
# sql = "#{IssueStatus.table_name}.is_closed=#{connection.quoted_true}" if field == "status_id"
# when ">t-"
# sql = date_range_clause(db_table, db_field, - value.first.to_i, 0)
# when "<t-"
# sql = date_range_clause(db_table, db_field, nil, - value.first.to_i)
# when "t-"
# sql = date_range_clause(db_table, db_field, - value.first.to_i, - value.first.to_i)
# when ">t+"
# sql = date_range_clause(db_table, db_field, value.first.to_i, nil)
# when "<t+"
# sql = date_range_clause(db_table, db_field, 0, value.first.to_i)
# when "t+"
# sql = date_range_clause(db_table, db_field, value.first.to_i, value.first.to_i)
# when "t"
# sql = date_range_clause(db_table, db_field, 0, 0)
# when "w"
# from = l(:general_first_day_of_week) == '7' ?
# # week starts on sunday
# ((Date.today.cwday == 7) ? Time.now.at_beginning_of_day : Time.now.at_beginning_of_week - 1.day) :
# # week starts on monday (Rails default)
# Time.now.at_beginning_of_week
# sql = "#{db_table}.#{db_field} BETWEEN '%s' AND '%s'" % [connection.quoted_date(from), connection.quoted_date(from + 7.days)]
# when "~"
# sql = "#{db_table}.#{db_field} LIKE '%#{connection.quote_string(value.first)}%'"
# when "!~"
# sql = "#{db_table}.#{db_field} NOT LIKE '%#{connection.quote_string(value.first)}%'"
# end
#
# return sql
# end
}