Class: Decidim::UserGroup

Inherits:
UserBaseEntity show all
Includes:
ActsAsAuthor, DataPortability, Traceable
Defined in:
app/models/decidim/user_group.rb

Overview

A UserGroup is an organization of citizens

Constant Summary

Constants inherited from UserBaseEntity

Decidim::UserBaseEntity::REGEXP_NAME

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from UserBaseEntity

#following

Methods included from HasUploadValidations

#maximum_avatar_size, #maximum_upload_size

Methods included from Followable

#followers

Class Method Details

.export_serializerObject



72
73
74
# File 'app/models/decidim/user_group.rb', line 72

def self.export_serializer
  Decidim::DataPortabilitySerializers::DataPortabilityUserGroupSerializer
end

.log_presenter_class_for(_log) ⇒ Object



49
50
51
# File 'app/models/decidim/user_group.rb', line 49

def self.log_presenter_class_for(_log)
  Decidim::AdminLog::UserGroupPresenter
end

.user_collection(user) ⇒ Object



68
69
70
# File 'app/models/decidim/user_group.rb', line 68

def self.user_collection(user)
  user.user_groups
end

.with_document_number(organization, number) ⇒ Object



34
35
36
37
# File 'app/models/decidim/user_group.rb', line 34

def self.with_document_number(organization, number)
  where(decidim_organization_id: organization.id)
    .where("extended_data->>'document_number' = ?", number)
end

Instance Method Details

#accepted_membershipsObject

sugar for the memberships query



105
106
107
# File 'app/models/decidim/user_group.rb', line 105

def accepted_memberships
  UserGroups::AcceptedMemberships.for(self)
end

#accepted_usersObject

easy way to return all the users accepted in this group



110
111
112
# File 'app/models/decidim/user_group.rb', line 110

def accepted_users
  accepted_memberships.map(&:user)
end

#accepts_conversation?(_user) ⇒ Boolean

Currently, groups always accept conversations from anyone. This may change in the future in case the desired behaviour is to check if all (or any) of the administrators accepts conversations or there’s simply and option for this in the group preferences.

Returns:

  • (Boolean)


118
119
120
# File 'app/models/decidim/user_group.rb', line 118

def accepts_conversation?(_user)
  true
end

#document_numberObject



76
77
78
# File 'app/models/decidim/user_group.rb', line 76

def document_number
  extended_data["document_number"]
end

#non_deleted_membershipsObject



39
40
41
# File 'app/models/decidim/user_group.rb', line 39

def non_deleted_memberships
  memberships.where(decidim_users: { deleted_at: nil })
end

#pending?Boolean

Public: Checks if the user group is pending.

Returns:

  • (Boolean)


64
65
66
# File 'app/models/decidim/user_group.rb', line 64

def pending?
  verified_at.blank? && rejected_at.blank?
end

#phoneObject



80
81
82
# File 'app/models/decidim/user_group.rb', line 80

def phone
  extended_data["phone"]
end

#presenterObject

Returns the presenter for this author, to be used in the views. Required by ActsAsAuthor.



45
46
47
# File 'app/models/decidim/user_group.rb', line 45

def presenter
  Decidim::UserGroupPresenter.new(self)
end

#reject!Object



92
93
94
95
96
# File 'app/models/decidim/user_group.rb', line 92

def reject!
  extended_data["verified_at"] = nil
  extended_data["rejected_at"] = Time.current
  save!
end

#rejected?Boolean

Public: Checks if the user group is rejected.

Returns:

  • (Boolean)


59
60
61
# File 'app/models/decidim/user_group.rb', line 59

def rejected?
  rejected_at.present?
end

#rejected_atObject



84
85
86
# File 'app/models/decidim/user_group.rb', line 84

def rejected_at
  extended_data["rejected_at"]
end

#unread_messages_count_for(user) ⇒ Object



122
123
124
125
# File 'app/models/decidim/user_group.rb', line 122

def unread_messages_count_for(user)
  @unread_messages_count_for ||= {}
  @unread_messages_count_for[user.id] ||= Decidim::Messaging::Conversation.user_collection(self).unread_messages_by(user).count
end

#verified?Boolean

Public: Checks if the user group is verified.

Returns:

  • (Boolean)


54
55
56
# File 'app/models/decidim/user_group.rb', line 54

def verified?
  verified_at.present?
end

#verified_atObject



88
89
90
# File 'app/models/decidim/user_group.rb', line 88

def verified_at
  extended_data["verified_at"]
end

#verify!Object



98
99
100
101
102
# File 'app/models/decidim/user_group.rb', line 98

def verify!
  extended_data["verified_at"] = Time.current
  extended_data["rejected_at"] = nil
  save!
end