Class: Decidim::User
- Inherits:
-
UserBaseEntity
- Object
- ActiveRecord::Base
- ApplicationRecord
- UserBaseEntity
- Decidim::User
- Includes:
- ActsAsAuthor, DataPortability, Searchable
- Defined in:
- app/models/decidim/user.rb
Overview
A User is a citizen that wants to join the platform to participate.
Defined Under Namespace
Classes: Roles
Constant Summary
Constants inherited from UserBaseEntity
Decidim::UserBaseEntity::REGEXP_NAME
Instance Attribute Summary collapse
-
#invitation_instructions ⇒ Object
Public: Allows customizing the invitation instruction email content when inviting a user.
-
#newsletter_notifications ⇒ Object
Returns the value of attribute newsletter_notifications.
Class Method Summary collapse
- .data_portability_images(user) ⇒ Object
- .export_serializer ⇒ Object
-
.find_for_authentication(warden_conditions) ⇒ Object
Check if the user exists with the given email and the current organization.
-
.has_pending_invitations?(organization_id, email) ⇒ Boolean
Returns the user corresponding to the given
email
if it exists and has pending invitations, otherwise returns nil. - .log_presenter_class_for(_log) ⇒ Object
- .user_collection(user) ⇒ Object
Instance Method Summary collapse
-
#accepted_user_groups ⇒ Object
return the groups where this user has been accepted.
-
#accepts_conversation?(user) ⇒ Boolean
Public: whether the user accepts direct messages from another.
-
#active_role ⇒ Object
Public: Returns the active role of the user.
- #admin_terms_accepted? ⇒ Boolean
- #authenticatable_salt ⇒ Object
- #being_impersonated? ⇒ Boolean
-
#data_portability_file(filename) ⇒ Object
Caches a Decidim::DataPortabilityUploader with the retrieved file.
-
#deleted? ⇒ Boolean
Check if the user account has been deleted or not.
- #follows?(followable) ⇒ Boolean
- #interested_scopes ⇒ Object
- #interested_scopes_ids ⇒ Object
- #invalidate_all_sessions! ⇒ Object
-
#manageable_user_groups ⇒ Object
return the groups where this user has admin permissions.
-
#name ⇒ Object
Public: returns the user’s name or the default one.
-
#officialized? ⇒ Boolean
Public: whether the user has been officialized or not.
-
#presenter ⇒ Object
Returns the presenter for this author, to be used in the views.
-
#role?(role) ⇒ Boolean
Checks if the user has the given ‘role` or not.
- #tos_accepted? ⇒ Boolean
- #unread_conversations ⇒ Object
- #unread_messages_count ⇒ Object
- #user_invited? ⇒ Boolean
-
#verifiable? ⇒ Boolean
Whether this user can be verified against some authorization or not.
Methods included from Searchable
searchable_resources, searchable_resources_of_type_comment, searchable_resources_of_type_component, searchable_resources_of_type_participant, searchable_resources_of_type_participatory_space
Methods inherited from UserBaseEntity
Methods included from HasUploadValidations
#maximum_avatar_size, #maximum_upload_size
Methods included from Followable
Instance Attribute Details
#invitation_instructions ⇒ Object
Public: Allows customizing the invitation instruction email content when inviting a user.
Returns a String.
83 84 85 |
# File 'app/models/decidim/user.rb', line 83 def invitation_instructions @invitation_instructions end |
#newsletter_notifications ⇒ Object
Returns the value of attribute newsletter_notifications.
62 63 64 |
# File 'app/models/decidim/user.rb', line 62 def @newsletter_notifications end |
Class Method Details
.data_portability_images(user) ⇒ Object
172 173 174 |
# File 'app/models/decidim/user.rb', line 172 def self.data_portability_images(user) user_collection(user).map(&:avatar) end |
.export_serializer ⇒ Object
168 169 170 |
# File 'app/models/decidim/user.rb', line 168 def self.export_serializer Decidim::DataPortabilitySerializers::DataPortabilityUserSerializer end |
.find_for_authentication(warden_conditions) ⇒ Object
Check if the user exists with the given email and the current organization
warden_conditions - A hash with the authentication conditions
* email - a String that represents user's email.
* env - A Hash containing environment variables.
Returns a User.
156 157 158 159 160 161 162 |
# File 'app/models/decidim/user.rb', line 156 def self.find_for_authentication(warden_conditions) organization = warden_conditions.dig(:env, "decidim.current_organization") find_by( email: warden_conditions[:email].to_s.downcase, decidim_organization_id: organization.id ) end |
.has_pending_invitations?(organization_id, email) ⇒ Boolean
Returns the user corresponding to the given email
if it exists and has pending invitations,
otherwise returns nil.
87 88 89 |
# File 'app/models/decidim/user.rb', line 87 def self.has_pending_invitations?(organization_id, email) invitation_not_accepted.find_by(decidim_organization_id: organization_id, email: email) end |
.log_presenter_class_for(_log) ⇒ Object
97 98 99 |
# File 'app/models/decidim/user.rb', line 97 def self.log_presenter_class_for(_log) Decidim::AdminLog::UserPresenter end |
.user_collection(user) ⇒ Object
164 165 166 |
# File 'app/models/decidim/user.rb', line 164 def self.user_collection(user) where(id: user.id) end |
Instance Method Details
#accepted_user_groups ⇒ Object
return the groups where this user has been accepted
216 217 218 |
# File 'app/models/decidim/user.rb', line 216 def accepted_user_groups UserGroups::AcceptedUserGroups.for(self) end |
#accepts_conversation?(user) ⇒ Boolean
Public: whether the user accepts direct messages from another
136 137 138 139 140 |
# File 'app/models/decidim/user.rb', line 136 def accepts_conversation?(user) return follows?(user) if == "followed-only" true end |
#active_role ⇒ Object
Public: Returns the active role of the user
112 113 114 |
# File 'app/models/decidim/user.rb', line 112 def active_role admin ? "admin" : roles.first end |
#admin_terms_accepted? ⇒ Boolean
186 187 188 |
# File 'app/models/decidim/user.rb', line 186 def admin_terms_accepted? return true if admin_terms_accepted_at end |
#authenticatable_salt ⇒ Object
225 226 227 |
# File 'app/models/decidim/user.rb', line 225 def authenticatable_salt "#{super}#{session_token}" end |
#being_impersonated? ⇒ Boolean
195 196 197 |
# File 'app/models/decidim/user.rb', line 195 def being_impersonated? ImpersonationLog.active.where(user: self).exists? end |
#data_portability_file(filename) ⇒ Object
Caches a Decidim::DataPortabilityUploader with the retrieved file.
208 209 210 211 212 213 |
# File 'app/models/decidim/user.rb', line 208 def data_portability_file(filename) @data_portability_file ||= DataPortabilityUploader.new.tap do |uploader| uploader.retrieve_from_store!(filename) uploader.cache!(filename) end end |
#deleted? ⇒ Boolean
Check if the user account has been deleted or not
122 123 124 |
# File 'app/models/decidim/user.rb', line 122 def deleted? deleted_at.present? end |
#follows?(followable) ⇒ Boolean
131 132 133 |
# File 'app/models/decidim/user.rb', line 131 def follows?(followable) Decidim::Follow.where(user: self, followable: followable).any? end |
#interested_scopes ⇒ Object
203 204 205 |
# File 'app/models/decidim/user.rb', line 203 def interested_scopes @interested_scopes ||= organization.scopes.where(id: interested_scopes_ids) end |
#interested_scopes_ids ⇒ Object
199 200 201 |
# File 'app/models/decidim/user.rb', line 199 def interested_scopes_ids extended_data["interested_scopes"] || [] end |
#invalidate_all_sessions! ⇒ Object
229 230 231 232 |
# File 'app/models/decidim/user.rb', line 229 def invalidate_all_sessions! self.session_token = SecureRandom.hex save! end |
#manageable_user_groups ⇒ Object
return the groups where this user has admin permissions
221 222 223 |
# File 'app/models/decidim/user.rb', line 221 def manageable_user_groups UserGroups::ManageableUserGroups.for(self) end |
#name ⇒ Object
Public: returns the user’s name or the default one
117 118 119 |
# File 'app/models/decidim/user.rb', line 117 def name super || I18n.t("decidim.anonymous_user") end |
#officialized? ⇒ Boolean
Public: whether the user has been officialized or not
127 128 129 |
# File 'app/models/decidim/user.rb', line 127 def officialized? !officialized_at.nil? end |
#presenter ⇒ Object
Returns the presenter for this author, to be used in the views. Required by ActsAsAuthor.
93 94 95 |
# File 'app/models/decidim/user.rb', line 93 def presenter Decidim::UserPresenter.new(self) end |
#role?(role) ⇒ Boolean
Checks if the user has the given ‘role` or not.
role - a String or a Symbol that represents the role that is being
checked
Returns a boolean.
107 108 109 |
# File 'app/models/decidim/user.rb', line 107 def role?(role) roles.include?(role.to_s) end |
#tos_accepted? ⇒ Boolean
176 177 178 179 180 181 182 183 184 |
# File 'app/models/decidim/user.rb', line 176 def tos_accepted? return true if managed return false if accepted_tos_version.nil? # For some reason, if we don't use `#to_i` here we get some # cases where the comparison returns false, but calling `#to_i` returns # the same number :/ accepted_tos_version.to_i >= organization.tos_version.to_i end |
#unread_conversations ⇒ Object
142 143 144 |
# File 'app/models/decidim/user.rb', line 142 def unread_conversations Decidim::Messaging::Conversation.unread_by(self) end |
#unread_messages_count ⇒ Object
146 147 148 |
# File 'app/models/decidim/user.rb', line 146 def @unread_messages_count ||= Decidim::Messaging::Receipt.unread_count(self) end |
#user_invited? ⇒ Boolean
75 76 77 |
# File 'app/models/decidim/user.rb', line 75 def user_invited? invitation_token_changed? && invitation_accepted_at_changed? end |
#verifiable? ⇒ Boolean
Whether this user can be verified against some authorization or not.
191 192 193 |
# File 'app/models/decidim/user.rb', line 191 def verifiable? confirmed? || managed? || being_impersonated? end |