1+ # frozen_string_literal: true
2+
3+ module Decidim
4+ # The controller to handle the user's public profile page.
5+ #
6+ # i18n-tasks-use t('decidim.profiles.show.badges')
7+ # i18n-tasks-use t('decidim.profiles.show.groups')
8+ # i18n-tasks-use t('decidim.profiles.show.group_admins')
9+ # i18n-tasks-use t('decidim.profiles.show.group_members')
10+ class ProfilesController < Decidim ::ApplicationController
11+ include UserGroups
12+ include Flaggable
13+ include HasProfileBreadcrumb
14+
15+ helper Decidim ::Messaging ::ConversationHelper
16+
17+ helper_method :profile_holder , :active_content , :context_menu
18+
19+ before_action :ensure_profile_holder
20+ before_action :ensure_profile_holder_is_a_group , only : [ :members ]
21+ before_action :ensure_profile_holder_is_a_user , only : [ :groups , :following ]
22+ before_action :ensure_user_not_blocked
23+
24+ def show
25+ return redirect_to profile_members_path if profile_holder . is_a? ( Decidim ::UserGroup )
26+
27+ redirect_to profile_activity_path ( nickname : params [ :nickname ] . downcase )
28+ end
29+
30+ def tooltip
31+ render json : { data : cell ( "decidim/author" , profile_holder . presenter ) . profile_minicard }
32+ end
33+
34+ def following
35+ @content_cell = "decidim/following"
36+ @title_key = "following"
37+ render :show
38+ end
39+
40+ def followers
41+ @content_cell = "decidim/followers"
42+ @title_key = "followers"
43+ render :show
44+ end
45+
46+ def badges
47+ @content_cell = "decidim/badges"
48+ @title_key = "badges"
49+ render :show
50+ end
51+
52+ def groups
53+ enforce_user_groups_enabled
54+
55+ @content_cell = "decidim/groups"
56+ @title_key = "groups"
57+ render :show
58+ end
59+
60+ def members
61+ enforce_user_groups_enabled
62+
63+ @content_cell = "decidim/members"
64+ @title_key = "members"
65+ render :show
66+ end
67+
68+ def group_admins
69+ enforce_permission_to :manage , :user_group , user_group : profile_holder
70+
71+ @content_cell = "decidim/group_admins"
72+ @title_key = "group_admins"
73+ render :show
74+ end
75+
76+ def group_members
77+ enforce_permission_to :manage , :user_group , user_group : profile_holder
78+
79+ @content_cell = "decidim/group_members"
80+ @title_key = "group_members"
81+ render :show
82+ end
83+
84+ def group_invites
85+ enforce_permission_to :manage , :user_group , user_group : profile_holder
86+
87+ @content_cell = "decidim/group_invites"
88+ @title_key = "group_invites"
89+ render :show
90+ end
91+
92+ def activity
93+ @content_cell = "decidim/user_activity"
94+ @title_key = "activity"
95+ render :show
96+ end
97+
98+ def proposals
99+ enforce_user_groups_enabled
100+
101+ @content_cell = "decidim/proposals"
102+ @title_key = "proposals"
103+ render :show
104+ end
105+
106+ private
107+
108+ def ensure_user_not_blocked
109+ raise ActionController ::RoutingError , "Blocked User" if profile_holder &.blocked? && !current_user &.admin?
110+ end
111+
112+ def ensure_profile_holder_is_a_group
113+ raise ActionController ::RoutingError , "No user group with the given nickname" unless profile_holder . is_a? ( Decidim ::UserGroup )
114+ end
115+
116+ def ensure_profile_holder_is_a_user
117+ raise ActionController ::RoutingError , "No user with the given nickname" unless profile_holder . is_a? ( Decidim ::User )
118+ end
119+
120+ def ensure_profile_holder
121+ raise ActionController ::RoutingError , "No user or user group with the given nickname" if !profile_holder || profile_holder . nickname . blank?
122+ end
123+
124+ def profile_holder
125+ return if params [ :nickname ] . blank?
126+
127+ @profile_holder ||= Decidim ::UserBaseEntity . find_by ( "nickname = ? AND decidim_organization_id = ?" , params [ :nickname ] . downcase , current_organization . id )
128+ end
129+ end
130+ end
0 commit comments