class IssuesController < ApplicationController
+ include PaginationMethods
+
layout "site"
before_action :authorize_web
before_action :check_database_writable, :only => [:resolve, :ignore, :reopen]
def index
+ @params = params.permit(:before, :after, :limit, :status, :search_by_user, :issue_type, :last_updated_by)
+ @params[:limit] ||= 50
@title = t ".title"
@issue_types = []
@issue_types.push("DiaryEntry", "DiaryComment", "User") if current_user.administrator?
@users = User.joins(:roles).where(:user_roles => { :role => current_user.roles.map(&:role) }).distinct
- @issues = Issue.visible_to(current_user).order(:updated_at => :desc)
+ @issues = Issue.visible_to(current_user)
# If search
if params[:search_by_user].present?
last_updated_by = params[:last_updated_by].to_s == "nil" ? nil : params[:last_updated_by].to_i
@issues = @issues.where(:updated_by => last_updated_by)
end
+
+ @issues, @newer_issues_id, @older_issues_id = get_page_items(@issues, :limit => @params[:limit])
end
def show
--- /dev/null
+<table class="table table-sm">
+ <thead>
+ <tr>
+ <th><%= t ".status" %></th>
+ <th><%= t ".reports" %></th>
+ <th><%= t ".reported_item" %></th>
+ <th><%= t ".reported_user" %></th>
+ <th><%= t ".last_updated" %></th>
+ </tr>
+ </thead>
+ <tbody>
+ <% @issues.each do |issue| %>
+ <tr>
+ <td><%= t ".states.#{issue.status}" %></td>
+ <td class="text-nowrap"><%= link_to t(".reports_count", :count => issue.reports_count), issue %></td>
+ <td><%= link_to reportable_title(issue.reportable), reportable_url(issue.reportable) %></td>
+ <td><%= link_to issue.reported_user.display_name, issue.reported_user if issue.reported_user %></td>
+ <td>
+ <% if issue.user_updated %>
+ <%= t ".last_updated_time_ago_user_html", :user => link_to(issue.user_updated.display_name, issue.user_updated),
+ :time_ago => friendly_date_ago(issue.updated_at) %>
+ <% else %>
+ <%= friendly_date_ago(issue.updated_at) %>
+ <% end %>
+ </td>
+ </tr>
+ <% end %>
+ </tbody>
+</table>
+<%= render "shared/pagination",
+ :newer_key => "issues.page.newer_issues",
+ :older_key => "issues.page.older_issues",
+ :newer_id => @newer_issues_id,
+ :older_id => @older_issues_id %>
<% if @issues.length == 0 %>
<p><%= t ".issues_not_found" %></p>
<% else %>
- <table class="table table-sm">
- <thead>
- <tr>
- <th><%= t ".status" %></th>
- <th><%= t ".reports" %></th>
- <th><%= t ".reported_item" %></th>
- <th><%= t ".reported_user" %></th>
- <th><%= t ".last_updated" %></th>
- </tr>
- </thead>
- <tbody>
- <% @issues.each do |issue| %>
- <tr>
- <td><%= t ".states.#{issue.status}" %></td>
- <td class="text-nowrap"><%= link_to t(".reports_count", :count => issue.reports_count), issue %></td>
- <td><%= link_to reportable_title(issue.reportable), reportable_url(issue.reportable) %></td>
- <td><%= link_to issue.reported_user.display_name, issue.reported_user if issue.reported_user %></td>
- <td>
- <% if issue.user_updated %>
- <%= t ".last_updated_time_ago_user_html", :user => link_to(issue.user_updated.display_name, issue.user_updated),
- :time_ago => friendly_date_ago(issue.updated_at) %>
- <% else %>
- <%= friendly_date_ago(issue.updated_at) %>
- <% end %>
- </td>
- </tr>
- <% end %>
- </tbody>
- </table>
+ <%= render :partial => "page" %>
<% end %>
search_guidance: "Search Issues:"
user_not_found: User does not exist
issues_not_found: No such issues found
+ link_to_reports: View Reports
+ states:
+ ignored: Ignored
+ open: Open
+ resolved: Resolved
+ page:
+ reported_user: Reported User
status: Status
reports: Reports
last_updated: Last Updated
last_updated_time_ago_user_html: "%{time_ago} by %{user}"
- link_to_reports: View Reports
reports_count:
one: "%{count} Report"
other: "%{count} Reports"
ignored: Ignored
open: Open
resolved: Resolved
+ older_issues: Older Issues
+ newer_issues: Newer Issues
show:
title: "%{status} Issue #%{issue_id}"
reports:
visit issues_path
- assert_link I18n.t("issues.index.reports_count", :count => issue1.reports_count), :href => issue_path(issue1)
- assert_link I18n.t("issues.index.reports_count", :count => issue2.reports_count), :href => issue_path(issue2)
+ assert_link I18n.t("issues.page.reports_count", :count => issue1.reports_count), :href => issue_path(issue1)
+ assert_link I18n.t("issues.page.reports_count", :count => issue2.reports_count), :href => issue_path(issue2)
+ end
+
+ def test_issues_pagination
+ 1.upto(80).each do
+ user = create(:user)
+ create(:issue, :reportable => user, :reported_user => user, :assigned_role => "administrator")
+ end
+
+ sign_in_as(create(:administrator_user))
+
+ visit issues_path
+
+ # First Page
+ assert_no_content I18n.t("issues.index.user_not_found")
+ assert_no_content I18n.t("issues.index.issues_not_found")
+ assert_css "tr", :count => 51
+
+ # Second Page
+ click_on I18n.t("issues.page.older_issues")
+ assert_no_content I18n.t("issues.index.user_not_found")
+ assert_no_content I18n.t("issues.index.issues_not_found")
+ assert_css "tr", :count => 31, :wait => 1
+
+ # Back to First Page
+ click_on I18n.t("issues.page.newer_issues")
+ assert_no_content I18n.t("issues.index.user_not_found")
+ assert_no_content I18n.t("issues.index.issues_not_found")
+ assert_css "tr", :count => 51, :wait => 1
end
end