Class: Decidim::Meetings::Meeting
- Inherits:
-
ApplicationRecord
show all
- Includes:
- ActsAsAuthor, Authorable, Comments::CommentableWithComponent, Comments::HasAvailabilityAttributes, FilterableResource, Followable, Forms::HasQuestionnaire, HasAttachmentCollections, HasAttachments, HasCategory, HasComponent, HasReference, Loggable, Paddable, Publicable, Reportable, Resourceable, ScopableResource, Searchable, SoftDeletable, Taxonomizable, Traceable, TranslatableResource
- Defined in:
- decidim-meetings/app/models/decidim/meetings/meeting.rb
Overview
The data store for a Meeting in the Decidim::Meetings component. It stores a title, description and any other useful information to render a custom meeting.
Constant Summary
collapse
- TYPE_OF_MEETING =
{ in_person: 0, online: 10, hybrid: 20 }.freeze
- REGISTRATION_TYPES =
{ registration_disabled: 0, on_this_platform: 10, on_different_platform: 20 }.freeze
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Publicable
#previously_published?, #publish!, #published?, #unpublish!
#default_locale?
Methods included from Searchable
searchable_resources, searchable_resources_by_type, searchable_resources_of_type_comment, searchable_resources_of_type_component, searchable_resources_of_type_participant, searchable_resources_of_type_participatory_space
Methods included from Followable
#followers
#attachment_context
Class Method Details
.log_presenter_class_for(_log) ⇒ Object
.participants_iframe_embed_types ⇒ Object
159
160
161
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 159
def self.participants_iframe_embed_types
iframe_embed_types.except(:open_in_live_event_page)
end
|
.ransack(params = {}, options = {}) ⇒ Object
393
394
395
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 393
def self.ransack(params = {}, options = {})
MeetingSearch.new(self, params, options)
end
|
.ransackable_associations(_auth_object = nil) ⇒ Object
389
390
391
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 389
def self.ransackable_associations(_auth_object = nil)
%w(taxonomies)
end
|
.ransackable_attributes(auth_object = nil) ⇒ Object
381
382
383
384
385
386
387
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 381
def self.ransackable_attributes(auth_object = nil)
base = %w(description id_string search_text title)
return base unless auth_object&.admin?
base + %w(is_upcoming closed_at)
end
|
.ransackable_scopes(_auth_object = nil) ⇒ Object
377
378
379
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 377
def self.ransackable_scopes(_auth_object = nil)
[:with_any_type, :with_any_date, :with_any_space, :with_any_origin, :with_any_taxonomies, :with_any_global_category]
end
|
.sort_by_translated_title_asc ⇒ Object
355
356
357
358
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 355
def self.sort_by_translated_title_asc
field = Arel::Nodes::InfixOperation.new("->>", arel_table[:title], Arel::Nodes.build_quoted(I18n.locale))
order(Arel::Nodes::InfixOperation.new("", field, Arel.sql("ASC")))
end
|
.sort_by_translated_title_desc ⇒ Object
360
361
362
363
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 360
def self.sort_by_translated_title_desc
field = Arel::Nodes::InfixOperation.new("->>", arel_table[:title], Arel::Nodes.build_quoted(I18n.locale))
order(Arel::Nodes::InfixOperation.new("", field, Arel.sql("DESC")))
end
|
Instance Method Details
Public: Overrides the ‘accepts_new_comments?` CommentableWithComponent concern method.
222
223
224
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 222
def
&& !component.current_settings. &&
end
|
#allow_resource_permissions? ⇒ Boolean
Public: Overrides the ‘allow_resource_permissions?` Resourceable concern method.
227
228
229
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 227
def allow_resource_permissions?
component.settings.resources_permissions_enabled
end
|
#authored_proposals ⇒ Object
312
313
314
315
316
317
318
319
320
321
322
323
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 312
def authored_proposals
return [] unless Decidim::Meetings.enable_proposal_linking
Decidim::Proposals::Proposal
.joins(:coauthorships)
.where(
decidim_coauthorships: {
decidim_author_type: "Decidim::Meetings::Meeting",
decidim_author_id: id
}
)
end
|
#can_be_joined_by?(user) ⇒ Boolean
178
179
180
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 178
def can_be_joined_by?(user)
!started? && registrations_enabled? && can_participate?(user)
end
|
#can_participate?(user) ⇒ Boolean
246
247
248
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 246
def can_participate?(user)
can_participate_in_space?(user) && can_participate_in_meeting?(user)
end
|
#can_register_invitation?(user) ⇒ Boolean
182
183
184
185
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 182
def can_register_invitation?(user)
!closed? && registrations_enabled? &&
can_participate_in_space?(user) && user_has_invitation_for_meeting?(user)
end
|
#closed? ⇒ Boolean
187
188
189
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 187
def closed?
closed_at.present?
end
|
Public: Overrides the ‘comments_have_alignment?` Commentable concern method.
232
233
234
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 232
def
true
end
|
Public: Overrides the ‘comments_have_votes?` Commentable concern method.
237
238
239
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 237
def
true
end
|
#current_user_can_visit_meeting?(user) ⇒ Boolean
250
251
252
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 250
def current_user_can_visit_meeting?(user)
Decidim::Meetings::Meeting.visible_for(user).exists?(id:)
end
|
#emendation? ⇒ Boolean
199
200
201
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 199
def emendation?
false
end
|
#has_attendees? ⇒ Boolean
344
345
346
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 344
def has_attendees?
!!attendees_count && attendees_count.positive?
end
|
#has_available_slots? ⇒ Boolean
203
204
205
206
207
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 203
def has_available_slots?
return true if available_slots.zero?
(available_slots - reserved_slots) > registrations.count
end
|
#has_contributions? ⇒ Boolean
340
341
342
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 340
def has_contributions?
!!contributions_count && contributions_count.positive?
end
|
#has_registration_for?(user) ⇒ Boolean
213
214
215
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 213
def has_registration_for?(user)
registrations.where(user:).any?
end
|
#iframe_access_level_allowed_for_user?(user) ⇒ Boolean
254
255
256
257
258
259
260
261
262
263
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 254
def iframe_access_level_allowed_for_user?(user)
case iframe_access_level
when "all"
true
when "signed_in"
user.present?
else
has_registration_for?(user)
end
end
|
#live? ⇒ Boolean
348
349
350
351
352
353
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 348
def live?
start_time &&
end_time &&
Time.current >= (start_time - 10.minutes) &&
Time.current <= end_time
end
|
#maps_enabled? ⇒ Boolean
217
218
219
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 217
def maps_enabled?
component.settings.maps_enabled?
end
|
#meeting_duration ⇒ Object
Return the duration of the meeting in minutes
266
267
268
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 266
def meeting_duration
@meeting_duration ||= ((end_time - start_time) / 1.minute).abs
end
|
#pad_is_visible? ⇒ Boolean
Overwrites method from Paddable to add custom rules in order to know when to display a pad or not.
298
299
300
301
302
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 298
def pad_is_visible?
return false unless pad
(start_time - Time.current) <= 24.hours
end
|
#pad_is_writable? ⇒ Boolean
Overwrites method from Paddable to add custom rules in order to know when a pad is writable or not.
306
307
308
309
310
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 306
def pad_is_writable?
return false unless pad_is_visible?
(Time.current - end_time) < 72.hours
end
|
#past? ⇒ Boolean
195
196
197
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 195
def past?
end_time < Time.current
end
|
#presenter ⇒ Object
Returns the presenter for this author, to be used in the views. Required by ActsAsAuthor.
#remaining_slots ⇒ Object
209
210
211
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 209
def remaining_slots
available_slots - reserved_slots - registrations.count
end
|
#reported_attributes ⇒ Object
Public: Overrides the ‘reported_attributes` Reportable concern method.
331
332
333
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 331
def reported_attributes
[:description]
end
|
#reported_content_url ⇒ Object
Public: Overrides the ‘reported_content_url` Reportable concern method.
326
327
328
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 326
def reported_content_url
ResourceLocatorPresenter.new(self).url
end
|
Public: Overrides the ‘reported_searchable_content_extras` Reportable concern method.
336
337
338
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 336
def
[author_name]
end
|
#resource_visible? ⇒ Boolean
270
271
272
273
274
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 270
def resource_visible?
return false if hidden?
!private_meeting? || transparent?
end
|
#started? ⇒ Boolean
191
192
193
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 191
def started?
start_time < Time.current
end
|
#user_group_registrations ⇒ Object
Return registrations of a particular meeting made by users representing a group
164
165
166
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 164
def user_group_registrations
registrations.where.not(decidim_user_group_id: nil)
end
|
Public: Override Commentable concern method ‘users_to_notify_on_comment_created`
242
243
244
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 242
def
followers
end
|
#withdraw! ⇒ Object
291
292
293
294
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 291
def withdraw!
self.withdrawn_at = Time.zone.now
save
end
|
#withdrawable_by?(user) ⇒ Boolean
Checks whether the user can withdraw the given meeting.
user - the user to check for withdrawability. past meetings cannot be withdrawn
287
288
289
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 287
def withdrawable_by?(user)
user && !withdrawn? && !past? && authored_by?(user)
end
|
#withdrawn? ⇒ Boolean
Public: Checks if the author has withdrawn the meeting.
Returns Boolean.
279
280
281
|
# File 'decidim-meetings/app/models/decidim/meetings/meeting.rb', line 279
def withdrawn?
withdrawn_at.present?
end
|