Merge remote-tracking branch 'upstream/pull/4625'
This commit is contained in:
commit
af5d76ecab
8 changed files with 98 additions and 63 deletions
27
app/controllers/concerns/pagination_methods.rb
Normal file
27
app/controllers/concerns/pagination_methods.rb
Normal file
|
@ -0,0 +1,27 @@
|
|||
module PaginationMethods
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
private
|
||||
|
||||
##
|
||||
# limit selected items to one page, get ids of first item before/after the page
|
||||
def get_page_items(items, includes: [], limit: 20)
|
||||
id_column = "#{items.table_name}.id"
|
||||
page_items = if params[:before]
|
||||
items.where("#{id_column} < ?", params[:before]).order(:id => :desc)
|
||||
elsif params[:after]
|
||||
items.where("#{id_column} > ?", params[:after]).order(:id => :asc)
|
||||
else
|
||||
items.order(:id => :desc)
|
||||
end
|
||||
|
||||
page_items = page_items.limit(limit)
|
||||
page_items = page_items.includes(includes)
|
||||
page_items = page_items.sort.reverse
|
||||
|
||||
newer_items_id = page_items.first.id if page_items.count.positive? && items.exists?(["#{id_column} > ?", page_items.first.id])
|
||||
older_items_id = page_items.last.id if page_items.count.positive? && items.exists?(["#{id_column} < ?", page_items.last.id])
|
||||
|
||||
[page_items, newer_items_id, older_items_id]
|
||||
end
|
||||
end
|
|
@ -1,5 +1,6 @@
|
|||
class DiaryEntriesController < ApplicationController
|
||||
include UserMethods
|
||||
include PaginationMethods
|
||||
|
||||
layout "site", :except => :rss
|
||||
|
||||
|
@ -57,7 +58,7 @@ class DiaryEntriesController < ApplicationController
|
|||
|
||||
@params = params.permit(:display_name, :friends, :nearby, :language)
|
||||
|
||||
@entries, @newer_entries_id, @older_entries_id = get_page_items(entries, [:user, :language])
|
||||
@entries, @newer_entries_id, @older_entries_id = get_page_items(entries, :includes => [:user, :language])
|
||||
end
|
||||
|
||||
def show
|
||||
|
@ -246,7 +247,7 @@ class DiaryEntriesController < ApplicationController
|
|||
|
||||
@params = params.permit(:display_name, :before, :after)
|
||||
|
||||
@comments, @newer_comments_id, @older_comments_id = get_page_items(comments, [:user])
|
||||
@comments, @newer_comments_id, @older_comments_id = get_page_items(comments, :includes => [:user])
|
||||
end
|
||||
|
||||
private
|
||||
|
@ -282,24 +283,4 @@ class DiaryEntriesController < ApplicationController
|
|||
@zoom = 12
|
||||
end
|
||||
end
|
||||
|
||||
def get_page_items(items, includes)
|
||||
id_column = "#{items.table_name}.id"
|
||||
page_items = if params[:before]
|
||||
items.where("#{id_column} < ?", params[:before]).order(:id => :desc)
|
||||
elsif params[:after]
|
||||
items.where("#{id_column} > ?", params[:after]).order(:id => :asc)
|
||||
else
|
||||
items.order(:id => :desc)
|
||||
end
|
||||
|
||||
page_items = page_items.limit(20)
|
||||
page_items = page_items.includes(includes)
|
||||
page_items = page_items.sort.reverse
|
||||
|
||||
newer_items_id = page_items.first.id if page_items.count.positive? && items.exists?(["#{id_column} > ?", page_items.first.id])
|
||||
older_items_id = page_items.last.id if page_items.count.positive? && items.exists?(["#{id_column} < ?", page_items.last.id])
|
||||
|
||||
[page_items, newer_items_id, older_items_id]
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
class TracesController < ApplicationController
|
||||
include UserMethods
|
||||
include PaginationMethods
|
||||
|
||||
layout "site", :except => :georss
|
||||
|
||||
|
@ -60,20 +61,7 @@ class TracesController < ApplicationController
|
|||
|
||||
@params = params.permit(:display_name, :tag, :before, :after)
|
||||
|
||||
@traces = if params[:before]
|
||||
traces.where("gpx_files.id < ?", params[:before]).order(:id => :desc)
|
||||
elsif params[:after]
|
||||
traces.where("gpx_files.id > ?", params[:after]).order(:id => :asc)
|
||||
else
|
||||
traces.order(:id => :desc)
|
||||
end
|
||||
|
||||
@traces = @traces.limit(20)
|
||||
@traces = @traces.includes(:user, :tags)
|
||||
@traces = @traces.sort.reverse
|
||||
|
||||
@newer_traces = @traces.count.positive? && traces.exists?(["gpx_files.id > ?", @traces.first.id])
|
||||
@older_traces = @traces.count.positive? && traces.exists?(["gpx_files.id < ?", @traces.last.id])
|
||||
@traces, @newer_traces_id, @older_traces_id = get_page_items(traces, :includes => [:user, :tags])
|
||||
|
||||
# final helper vars for view
|
||||
@target_user = target_user
|
||||
|
|
|
@ -2,6 +2,7 @@ class UsersController < ApplicationController
|
|||
include EmailMethods
|
||||
include SessionMethods
|
||||
include UserMethods
|
||||
include PaginationMethods
|
||||
|
||||
layout "site"
|
||||
|
||||
|
@ -29,16 +30,14 @@ class UsersController < ApplicationController
|
|||
|
||||
redirect_to url_for(:status => params[:status], :ip => params[:ip], :page => params[:page])
|
||||
else
|
||||
@params = params.permit(:status, :ip)
|
||||
@params = params.permit(:status, :ip, :before, :after)
|
||||
|
||||
conditions = {}
|
||||
conditions[:status] = @params[:status] if @params[:status]
|
||||
conditions[:creation_ip] = @params[:ip] if @params[:ip]
|
||||
users = User.all
|
||||
users = users.where(:status => @params[:status]) if @params[:status]
|
||||
users = users.where(:creation_ip => @params[:ip]) if @params[:ip]
|
||||
|
||||
@user_pages, @users = paginate(:users,
|
||||
:conditions => conditions,
|
||||
:order => :id,
|
||||
:per_page => 50)
|
||||
@users_count = users.count
|
||||
@users, @newer_users_id, @older_users_id = get_page_items(users, :limit => 50)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue