Query::get_filter_cond PHP Method

get_filter_cond() public method

#
public get_filter_cond ( $model, $field, $operator, $values )
    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
    }