fix error
This commit is contained in:
parent
14038cf90c
commit
aeffcf2630
|
@ -17,9 +17,8 @@ class Admin::UniversalTablesController < OrbitAdminController
|
||||||
if params[:q].present?
|
if params[:q].present?
|
||||||
@entries = search_data(@table)
|
@entries = search_data(@table)
|
||||||
else
|
else
|
||||||
@entries = @table.table_entries.criteria
|
@entries = @table.table_entries.criteria.sorting(params: params,table: @table,page_num: params[:page],per: 10)
|
||||||
end
|
end
|
||||||
@entries = @entries.sorting(params: params,table: @table).page(params[:page]).per(10)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -243,12 +242,8 @@ class Admin::UniversalTablesController < OrbitAdminController
|
||||||
column.each do |c|
|
column.each do |c|
|
||||||
columns = (columns | c.column_entries.any_of(:"text.en" => regex).or(:"text.zh_tw" => regex).or(:"content.en" => regex).or(:"content.zh_tw" => regex))
|
columns = (columns | c.column_entries.any_of(:"text.en" => regex).or(:"text.zh_tw" => regex).or(:"content.en" => regex).or(:"content.zh_tw" => regex))
|
||||||
end
|
end
|
||||||
entry_ids = []
|
columns = Kaminari.paginate_array(columns,limit: columns.count)
|
||||||
columns.each do |column|
|
entries = TableEntry.where(:u_table_id=>table.id).sorting(params: params,table: table,column_entries: columns,page_num: params[:page],per: 10)
|
||||||
entry_ids << column.table_entry_id
|
|
||||||
end
|
|
||||||
entry_ids = entry_ids.uniq
|
|
||||||
entries = TableEntry.where(:id.in=> entry_ids)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def table_params
|
def table_params
|
||||||
|
|
|
@ -188,54 +188,17 @@ class UniversalTablesController < ApplicationController
|
||||||
regexes = keywords.split(/\s+(?=(?:[^"]*"[^"]*")*[^"]*$)/)
|
regexes = keywords.split(/\s+(?=(?:[^"]*"[^"]*")*[^"]*$)/)
|
||||||
regex = Regexp.union(regexes.map{|word| Regexp.new(".*"+word+".*", "i")})
|
regex = Regexp.union(regexes.map{|word| Regexp.new(".*"+word+".*", "i")})
|
||||||
end
|
end
|
||||||
if params["sort"].present?
|
columns = column.column_entries.any_of(:"text.en" => regex).or(:"text.zh_tw" => regex).or(:"content.en" => regex).or(:"content.zh_tw" => regex)
|
||||||
column_to_sort = table.table_columns.where(:key => params["sortcolumn"]).first
|
if paginated
|
||||||
case column_to_sort.type
|
entries = TableEntry.where(:u_table_id=>table.id).sorting(params: params,table: table,column_entries: columns,page_num: params["page_no"],per: OrbitHelper.page_data_count)
|
||||||
when "text"
|
|
||||||
field_name = :text
|
|
||||||
when "editor"
|
|
||||||
field_name = :content
|
|
||||||
when "date"
|
|
||||||
field_name = :date
|
|
||||||
end
|
|
||||||
if params["column"] == params["sortcolumn"]
|
|
||||||
columns = column.column_entries.any_of(:"text.en" => regex).or(:"text.zh_tw" => regex).or(:"content.en" => regex).or(:"content.zh_tw" => regex).order_by(field_name => params["sort"])
|
|
||||||
else
|
|
||||||
temp = column.column_entries.any_of(:"text.en" => regex).or(:"text.zh_tw" => regex).or(:"content.en" => regex).or(:"content.zh_tw" => regex)
|
|
||||||
columns = []
|
|
||||||
temp.each do |c|
|
|
||||||
columns << c.table_entry.column_entries.where(:table_column_id => column_to_sort.id).first
|
|
||||||
end
|
|
||||||
sorted_columns = column_to_sort.column_entries.order_by(field_name => params["sort"]).to_a
|
|
||||||
columns = sorted_columns & columns
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
columns = column.column_entries.any_of(:"text.en" => regex).or(:"text.zh_tw" => regex).or(:"content.en" => regex).or(:"content.zh_tw" => regex)
|
entries = TableEntry.where(:u_table_id=>table.id).sorting(params: params,table: table,column_entries: columns,paginated: false)
|
||||||
end
|
end
|
||||||
columns.each do |column|
|
|
||||||
entries << column.table_entry
|
|
||||||
end
|
|
||||||
entries = entries.sort{|k,v| v["created_at"] <=> k["created_at"]} if !params["sort"].present?
|
|
||||||
entries = Kaminari.paginate_array(entries).page(params["page_no"]).per(OrbitHelper.page_data_count) if(paginated)
|
|
||||||
else
|
else
|
||||||
if params["sort"].present?
|
if paginated
|
||||||
column_to_sort = table.table_columns.where(:key => params["sortcolumn"]).first
|
entries = TableEntry.where(:u_table_id=>table.id).sorting(params: params,table: table,page_num: params["page_no"],per: OrbitHelper.page_data_count)
|
||||||
case column_to_sort.type
|
|
||||||
when "text"
|
|
||||||
field_name = :text
|
|
||||||
when "editor"
|
|
||||||
field_name = :content
|
|
||||||
when "date"
|
|
||||||
field_name = :date
|
|
||||||
end
|
|
||||||
columns = column_to_sort.column_entries.order_by(field_name => params["sort"])
|
|
||||||
columns.each do |column|
|
|
||||||
entries << column.table_entry
|
|
||||||
end
|
|
||||||
|
|
||||||
entries = Kaminari.paginate_array(entries).page(params["page_no"]).per(OrbitHelper.page_data_count) if(paginated)
|
|
||||||
else
|
else
|
||||||
entries = table.table_entries.sorting(params: params,table: table).page(params["page_no"]).per(OrbitHelper.page_data_count) if(paginated)
|
entries = TableEntry.where(:u_table_id=>table.id).sorting(params: params,table: table,paginated: false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
entries
|
entries
|
||||||
|
|
|
@ -17,18 +17,4 @@ class ColumnEntry
|
||||||
def type
|
def type
|
||||||
self.table_column.type
|
self.table_column.type
|
||||||
end
|
end
|
||||||
def sort_value
|
|
||||||
case self.type
|
|
||||||
when "text"
|
|
||||||
self.text
|
|
||||||
when "editor"
|
|
||||||
self.content
|
|
||||||
when "image"
|
|
||||||
self[:image]
|
|
||||||
when "date"
|
|
||||||
self.date
|
|
||||||
when "period"
|
|
||||||
[self.period_from,ce.period_to]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
|
@ -15,4 +15,18 @@ class TableColumn
|
||||||
belongs_to :u_table
|
belongs_to :u_table
|
||||||
|
|
||||||
has_many :column_entries, :dependent => :destroy
|
has_many :column_entries, :dependent => :destroy
|
||||||
|
def sort_hash(direction)
|
||||||
|
case self.type
|
||||||
|
when "text"
|
||||||
|
{text: direction}
|
||||||
|
when "editor"
|
||||||
|
{content: direction}
|
||||||
|
when "image"
|
||||||
|
{image: direction}
|
||||||
|
when "date"
|
||||||
|
{date: direction}
|
||||||
|
when "period"
|
||||||
|
{period_from: direction,period_to: direction}
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
|
@ -15,7 +15,9 @@ class TableEntry
|
||||||
UTable.find(criteria.selector['u_table_id'])
|
UTable.find(criteria.selector['u_table_id'])
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.sorting(params: nil,table: nil,field: nil,direction: nil)
|
def self.sorting(params: nil,table: nil,field: nil,direction: nil,page_num: nil,per: nil,column_entries: nil,paginated: true)
|
||||||
|
page_num = 1 if page_num.blank?
|
||||||
|
page_num = page_num.to_i
|
||||||
if table.nil?
|
if table.nil?
|
||||||
table = u_table
|
table = u_table
|
||||||
end
|
end
|
||||||
|
@ -38,19 +40,36 @@ class TableEntry
|
||||||
end
|
end
|
||||||
|
|
||||||
field = field.to_s
|
field = field.to_s
|
||||||
if field=='created_at' || field == 'sort_number'
|
if (field=='created_at' || field == 'sort_number') && column_entries.nil?
|
||||||
self.order_by({field => direction})
|
values = self.order_by({field => direction})
|
||||||
|
if !per.nil?
|
||||||
|
values = values.page(page_num).per(per)
|
||||||
|
end
|
||||||
else
|
else
|
||||||
values = criteria.to_a
|
column_to_sort = table.table_columns.where(key: field).first || table.table_columns.where(title: field).first
|
||||||
field_id = table.table_columns.where(key: field).first || table.table_columns.where(title: field).first
|
if column_entries.nil?
|
||||||
values.each do |v|
|
if criteria.selector.keys != ['u_table_id']
|
||||||
v.sort_value = v.column_entries.where(:table_column_id=>field_id).first.sort_value
|
column_entries = ColumnEntry.where(:table_column_id=>column_to_sort.id,:table_entry_id.in => criteria.pluck(:id)).order_by(column_to_sort.sort_hash(direction))
|
||||||
|
else
|
||||||
|
column_entries = ColumnEntry.where(:table_column_id=>column_to_sort.id).order_by(column_to_sort.sort_hash(direction))
|
||||||
|
end
|
||||||
|
else
|
||||||
|
column_entries = ColumnEntry.where(:table_column_id=>column_to_sort.id,:table_entry_id.in => (column_entries.class==Kaminari::PaginatableArray ? column_entries.map(&:table_entry_id) : column_entries.pluck(:table_entry_id))).order_by(column_to_sort.sort_hash(direction))
|
||||||
end
|
end
|
||||||
values = values.sort_by{|v| v.sort_value}
|
if !per.nil?
|
||||||
if direction=='desc'
|
total_count = column_entries.count
|
||||||
values = values.reverse
|
column_entries = column_entries.page(page_num).per(per)
|
||||||
|
offset = page_num==0 ? 0 : (page_num-1)*per
|
||||||
|
end_offset = (total_count-offset-per)
|
||||||
|
end_offset = 0 if end_offset<0
|
||||||
|
values = Kaminari.paginate_array([nil]*offset+column_entries.map{|v| v.table_entry}+[nil]*end_offset).page(page_num).per(per)
|
||||||
|
else
|
||||||
|
values = column_entries.map{|v| v.table_entry}
|
||||||
|
if paginated
|
||||||
|
values = Kaminari.paginate_array(values)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
Kaminari.paginate_array(values)
|
|
||||||
end
|
end
|
||||||
|
values
|
||||||
end
|
end
|
||||||
end
|
end
|
Loading…
Reference in New Issue