Class: Decidim::ContentBlocks::LastActivityCell

Inherits:
ViewModel
  • Object
show all
Defined in:
app/cells/decidim/content_blocks/last_activity_cell.rb

Overview

A cell to be rendered as a content block with the latest activities performed in a Decidim Organization.

Instance Method Summary collapse

Methods inherited from ViewModel

#call, #current_user

Methods included from MarkupHelper

#element_id

Methods included from ReplaceButtonsHelper

#button_to, #submit_tag

Methods included from ActionAuthorizationHelper

#action_authorized_button_to, #action_authorized_link_to, #logged_button_to, #logged_link_to

Methods included from ScopesHelper

#has_visible_scopes?, #scope_name_for_picker, #scopes_picker_field, #scopes_picker_filter, #scopes_picker_tag

Methods included from TranslatableAttributes

#default_locale?

Methods included from DecidimFormHelper

#areas_for_select, #base_error_messages, #decidim_form_for, #decidim_form_slug_url, #editor_field_tag, #form_field_has_error?, #form_required_explanation, #name_with_locale, #scopes_picker_field_tag, #tab_element_class_for, #translated_field_tag

Methods included from ResourceHelper

#linked_classes_filter_values_for, #linked_classes_for, #linked_resources_for, #resource_locator, #resource_title

Instance Method Details

#showObject



10
11
12
13
14
# File 'app/cells/decidim/content_blocks/last_activity_cell.rb', line 10

def show
  return if valid_activities.empty?

  render
end

#valid_activitiesObject

The activities to be displayed at the content block.

We need to build the collection this way because an ActionLog has polymorphic relations to different kind of models, and these models might not be available (a proposal might have been hidden or withdrawn).

Since these conditions can’t always be filtered with a database search we ask for more activities than we actually need and then loop until there are enough of them.

Returns an Array of ActionLogs.



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'app/cells/decidim/content_blocks/last_activity_cell.rb', line 27

def valid_activities
  return @valid_activities if defined?(@valid_activities)

  valid_activities_count = 0
  @valid_activities = []

  activities.includes([:user]).each do |activity|
    break if valid_activities_count == activities_to_show

    if activity.visible_for?(current_user)
      @valid_activities << activity
      valid_activities_count += 1
    end
  end

  @valid_activities
end