Class: Decidim::UserGroup

Inherits:
UserBaseEntity show all
Includes:
ActsAsAuthor, DataPortability, Traceable, UserReportable
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



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

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

.log_presenter_class_for(_log) ⇒ Object



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

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

.user_collection(user) ⇒ Object



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

def self.user_collection(user)
  user.user_groups
end

.with_document_number(organization, number) ⇒ Object



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

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



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

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

#accepted_usersObject

easy way to return all the users accepted in this group



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

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)


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

def accepts_conversation?(_user)
  true
end

#document_numberObject



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

def document_number
  extended_data["document_number"]
end

#non_deleted_membershipsObject



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

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

#pending?Boolean

Public: Checks if the user group is pending.

Returns:

  • (Boolean)


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

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

#phoneObject



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

def phone
  extended_data["phone"]
end

#presenterObject

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



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

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

#reject!Object



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

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)


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

def rejected?
  rejected_at.present?
end

#rejected_atObject



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

def rejected_at
  extended_data["rejected_at"]
end

#unread_messages_count_for(user) ⇒ Object



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

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)


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

def verified?
  verified_at.present?
end

#verified_atObject



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

def verified_at
  extended_data["verified_at"]
end

#verify!Object



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

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