diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb new file mode 100644 index 000000000..38c36b7cc --- /dev/null +++ b/app/controllers/users_controller.rb @@ -0,0 +1,54 @@ +class UsersController < ApplicationController + has_filters %w{proposals debates comments}, only: :show + + load_and_authorize_resource + + before_action :set_activity_counts, only: :show + + def show + load_filtered_activity + end + + private + def set_activity_counts + @activity_counts = HashWithIndifferentAccess.new( + proposals: Proposal.where(author_id: @user.id).count, + debates: Debate.where(author_id: @user.id).count, + comments: Comment.where(user_id: @user.id).count) + end + + def load_filtered_activity + case params[:filter] + when "proposals" then load_proposals + when "debates" then load_debates + when "comments" then load_comments + else load_available_activity + end + end + + def load_available_activity + if @activity_counts[:proposals] > 0 + load_proposals + @current_filter = "proposals" + elsif @activity_counts[:debates] > 0 + load_debates + @current_filter = "debates" + elsif @activity_counts[:comments] > 0 + load_comments + @current_filter = "comments" + end + end + + def load_proposals + @proposals = Proposal.where(author_id: @user.id).order(created_at: :desc).page(params[:page]) + end + + def load_debates + @debates = Debate.where(author_id: @user.id).order(created_at: :desc).page(params[:page]) + end + + def load_comments + @comments = Comment.where(user_id: @user.id).includes(:commentable).order(created_at: :desc).page(params[:page]) + end + +end diff --git a/app/models/abilities/everyone.rb b/app/models/abilities/everyone.rb index 5f5de51b7..691735b10 100644 --- a/app/models/abilities/everyone.rb +++ b/app/models/abilities/everyone.rb @@ -5,6 +5,7 @@ module Abilities def initialize(user) can :read, Debate can :read, Proposal + can :read, User end end end diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb new file mode 100644 index 000000000..8850a3586 --- /dev/null +++ b/app/views/users/show.html.erb @@ -0,0 +1,15 @@ +