From 7f1fe034a30993cf171615e16e5afabcc2ca8043 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Baza=CC=81n?= Date: Thu, 29 Oct 2015 18:26:33 +0100 Subject: [PATCH] adds user's public show page --- app/controllers/users_controller.rb | 54 +++++++++++++++++++++++++++++ app/models/abilities/everyone.rb | 1 + app/views/users/show.html.erb | 15 ++++++++ config/locales/en.yml | 13 +++++++ config/locales/es.yml | 13 +++++++ config/routes.rb | 2 ++ 6 files changed, 98 insertions(+) create mode 100644 app/controllers/users_controller.rb create mode 100644 app/views/users/show.html.erb 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 @@ +

<%= avatar_image(@user, seed: @user.id, size: 60) %> <%= @user.name %>

+ + \ No newline at end of file diff --git a/config/locales/en.yml b/config/locales/en.yml index 2d963f3be..d4e838961 100755 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -324,6 +324,19 @@ en: check: "Select" check_all: "All" check_none: "None" + users: + show: + filters: + proposals: + one: "1 Proposal" + other: "%{count} Proposals" + debates: + one: "1 Debate" + other: "%{count} Debates" + comments: + one: "1 Comment" + other: "%{count} Comments" + no_activity: "Usuario sin actividad pública" unauthorized: default: "You do not have permission to access this page." manage: diff --git a/config/locales/es.yml b/config/locales/es.yml index 34871cce8..90c80f8b5 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -324,6 +324,19 @@ es: check: "Seleccionar" check_all: "Todos" check_none: "Ninguno" + users: + show: + filters: + proposals: + one: "1 Propuesta" + other: "%{count} Propuestas" + debates: + one: "1 Debate" + other: "%{count} Debates" + comments: + one: "1 Comentario" + other: "%{count} Comentarios" + no_activity: "Usuario sin actividad pública" unauthorized: default: "No tienes permiso para acceder a esta página." manage: diff --git a/config/routes.rb b/config/routes.rb index 3a63fa3b1..cb42ef6da 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -61,6 +61,8 @@ Rails.application.routes.draw do end end + resources :users, only: [:show] + resource :account, controller: "account", only: [:show, :update, :delete] do collection { get :erase } end