25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
# File 'lib/atomic_admin/filtering.rb', line 25
def filter(relation)
params = query_params
allowed_search_columns = self.class.class_variable_get(:@@allowed_search_columns)
if params[:search].present? && params[:search_on].present? && allowed_search_columns.include?(params[:search_on])
table_name = relation.table_name
relation = relation.where("lower(#{table_name}.#{params[:search_on]}) LIKE ?", "%#{params[:search].downcase}%")
end
allowed_sort_columns = self.class.class_variable_get(:@@allowed_sort_columns)
if params[:sort_on].present? && allowed_sort_columns.include?(params[:sort_on])
sort_col = params[:sort_on]
sort_dir = params[:sort_direction]
sort_dir = "asc" if sort_dir == "ascending"
sort_dir = "desc" if sort_dir == "descending"
relation = relation.order({sort_col => sort_dir})
end
relation = relation.paginate(page: params[:page], per_page: params[:per_page])
meta = {
current_page: relation.current_page,
next_page: relation.next_page,
prev_page: relation.previous_page,
total_pages: relation.total_pages,
total_items: relation.total_entries,
}
[relation, meta]
end
|