Class: Decidim::Events::BaseEvent

Inherits:
Object
  • Object
show all
Extended by:
ActiveModel::Translation
Includes:
SanitizeHelper
Defined in:
lib/decidim/events/base_event.rb

Overview

This class serves as a base for all event classes. Event classes are intended to add more logic to a ‘Decidim::Notification` and are used to render them in the notifications dashboard and to generate other notifications (emails, for example).

Direct Known Subclasses

SimpleEvent

Class Method Summary collapse

Instance Method Summary collapse

Methods included from SanitizeHelper

#decidim_escape_translated, #decidim_html_escape, #decidim_sanitize, #decidim_sanitize_admin, #decidim_sanitize_editor, #decidim_sanitize_editor_admin, #decidim_sanitize_newsletter, #decidim_sanitize_translated, #decidim_url_escape, included

Constructor Details

#initialize(resource:, event_name:, user:, user_role: nil, extra: {}) ⇒ BaseEvent

Initializes the class.

event_name - a String with the name of the event. resource - the resource that received the event user - the User that receives the event user_role - the role the user takes for this event (either ‘:follower` or

`:affected_user`)

extra - a Hash with extra information of the event.



46
47
48
49
50
51
52
# File 'lib/decidim/events/base_event.rb', line 46

def initialize(resource:, event_name:, user:, user_role: nil, extra: {})
  @event_name = event_name
  @resource = resource
  @user = user
  @user_role = user_role
  @extra = extra.with_indifferent_access
end

Class Method Details

.type(type) ⇒ Object

Public: Stores all the notification types this event can create. Please, do not overwrite this method, consider it final. Instead, add values to the array via modules, take the ‘NotificationEvent` module as an example:

Example:

module WebPushNotificationEvent
  extend ActiveSupport::Concern

  included do
    type :web_push_notifications
  end
end

class MyEvent < Decidim::Events::BaseEvent
  include WebPushNotificationEvent
end

MyEvent.types # => [:web_push_notifications]


34
35
36
# File 'lib/decidim/events/base_event.rb', line 34

def self.type(type)
  self.types += Array(type)
end

Instance Method Details

#action_cellnil, String

The cell that will be used to render the action or nil if not action needs to be rendered.

Returns:

  • (nil)
    • if no action needs to be rendered

  • (String)
    • if String, it is the cell to be rendered. Make it return with “decidim/notification_actions/buttons”

    in your event implementation to render the buttons cell



85
# File 'lib/decidim/events/base_event.rb', line 85

def action_cell; end

#action_datanil, Array<Hash{Symbol => String}>

The data that will be passed to the action cell

Returns:

  • (nil)
    • If no data needs to be rendered

  • (Array<Hash{Symbol => String}>)
    • For the buttons cell, it should be an array of hashes with the following keys:

    • url: the URL to which the button will point

    • label: the label of the button (optional if i18n_label is present)

    • i18n_label: the i18n key of the label (optional if label is present)

    • icon: the icon of the button (optional)

    • method: the HTTP method of the request (optional)

    • class: the class of the button (optional)



97
# File 'lib/decidim/events/base_event.rb', line 97

def action_data; end

#content_in_same_language?Boolean

Returns:

  • (Boolean)


107
108
109
# File 'lib/decidim/events/base_event.rb', line 107

def content_in_same_language?
  false
end

#hidden_resource?Boolean

Returns:

  • (Boolean)


133
134
135
# File 'lib/decidim/events/base_event.rb', line 133

def hidden_resource?
  resource.respond_to?(:hidden?) && resource.hidden?
end

#organizationObject



99
100
101
# File 'lib/decidim/events/base_event.rb', line 99

def organization
  resource.try(:organization)
end

#perform_translation?Boolean

Returns:

  • (Boolean)


103
104
105
# File 'lib/decidim/events/base_event.rb', line 103

def perform_translation?
  false
end

#resource_locatorObject

Caches the locator for the given resource, so that we can find the resource URL.



56
57
58
# File 'lib/decidim/events/base_event.rb', line 56

def resource_locator
  @resource_locator ||= Decidim::ResourceLocatorPresenter.new(resource)
end

#resource_pathObject

Caches the path for the given resource.



61
62
63
64
65
66
67
# File 'lib/decidim/events/base_event.rb', line 61

def resource_path
  @resource_path ||= if resource.respond_to?(:polymorphic_resource_path)
                       resource.polymorphic_resource_path(resource_url_params)
                     else
                       resource_locator.path(resource_url_params)
                     end
end

#resource_textObject



78
# File 'lib/decidim/events/base_event.rb', line 78

def resource_text; end

#resource_titleObject



121
122
123
124
125
126
127
128
129
130
131
# File 'lib/decidim/events/base_event.rb', line 121

def resource_title
  return unless resource

  title = if resource.respond_to?(:title)
            decidim_sanitize_translated(resource.title)
          elsif resource.respond_to?(:name)
            decidim_sanitize_translated(resource.name)
          end

  Decidim::ContentProcessor.render_without_format(title, links: false).html_safe
end

#resource_urlObject

Caches the URL for the given resource.



70
71
72
73
74
75
76
# File 'lib/decidim/events/base_event.rb', line 70

def resource_url
  @resource_url ||= if resource.respond_to?(:polymorphic_resource_url)
                      resource.polymorphic_resource_url(resource_url_params)
                    else
                      resource_locator.url(resource_url_params)
                    end
end

#safe_resource_textObject



115
116
117
# File 'lib/decidim/events/base_event.rb', line 115

def safe_resource_text
  translated_attribute(resource_text).to_s.html_safe
end

#safe_resource_translated_textObject



119
# File 'lib/decidim/events/base_event.rb', line 119

def safe_resource_translated_text; end

#translation_missing?Boolean

Returns:

  • (Boolean)


111
112
113
# File 'lib/decidim/events/base_event.rb', line 111

def translation_missing?
  false
end