Beispiel #1
0
function filter($filter, $value, $filters = '')
{
    parse_str($filters, $filters);
    // resetting dependencies
    // if ('type'==$filter or 'commercial'==$filter) {
    // 	$filters = reset_dependencies($filters);
    // }
    $type = detect_filter_type($value);
    if ('check' == $type) {
        $is_on = array_key_exists($filter, $filters);
        unset($filters[$filter]);
        $filter_query = implode_assoc('&', $filters);
        if ($is_on) {
            return $filter_query;
        } else {
            return $filter_query . "&{$filter}={$value}";
        }
    } else {
        if ('list' == $type) {
            // $filters[$filter] = [asus;acer;lenovo;toshiba;sony];
            // $value 			 = [asus]
            // $result 			 = [acer;lenovo;toshiba;sony]
            $value = trim($value, '[]');
            $old_filter = trim($filters[$filter], '[]');
            $items = explode(';', $old_filter);
            $is_on = in_array($value, $items);
            $clear_filter = array_values(array_diff($items, [$value]));
            $clear_filter_str = implode(';', $clear_filter);
            unset($filters[$filter]);
            $filter_query = implode_assoc('&', $filters);
            if ($is_on) {
                return $filter_query . "&{$filter}=[{$clear_filter_str}]";
            } else {
                return $filter_query . "&{$filter}=[{$clear_filter_str};{$value}]";
            }
        } else {
            if ('range' == $type) {
                unset($filters[$filter]);
                $filter_query = implode_assoc('&', $filters);
                return $filter_query . "&{$filter}={$value}";
            } else {
                if ('type' == $type) {
                    $is_on = (array_key_exists($filter, $filters) and $filters[$filter] == $value);
                    // important parenthesis
                    unset($filters[$filter]);
                    $filter_query = implode_assoc('&', $filters);
                    if ($is_on) {
                        return $filter_query;
                    } else {
                        return $filter_query . "&{$filter}={$value}";
                    }
                }
            }
        }
    }
}
Beispiel #2
0
function apply_filters(Illuminate\Database\Eloquent\Builder $query, $filters = '')
{
    parse_str($filters, $filters);
    foreach ($filters as $filter => $value) {
        if ('' == $value or ';' == $value or '[]' == $value) {
            continue;
        }
        //resetting dependencies
        // if ('type'==$filter or 'commercial'==$filter) {
        // 	$filters = reset_dependencies($filters);
        // }
        $type = detect_filter_type($value);
        if ('check' == $type) {
            $query->where($filter, 1);
        } else {
            if ('list' == $type) {
                $list = trim($value, '[]');
                $items = explode(';', $list);
                $query->whereIn($filter, $items);
            } else {
                if ('range' == $type) {
                    $range = explode(';', $value);
                    $query->where($filter, '>=', $range[0])->where($filter, '<=', $range[1]);
                } else {
                    if ('type' == $type) {
                        /*------------------------------------------------
                          | JOIN DEPENDENCIES
                          ------------------------------------------------*/
                        if ('town_id' == $filter) {
                            $filter = 'towns.town_id';
                        }
                        if ('district_id' == $filter) {
                            $filter = 'districts.district_id';
                        }
                        /*----------------------------------------------*/
                        $query->where($filter, $value);
                    }
                }
            }
        }
    }
    return $query;
}