Class: Decidim::Events::SimpleEvent

Inherits:
BaseEvent
  • Object
show all
Includes:
ComponentPathHelper, EmailEvent, NotificationEvent, SanitizeHelper
Defined in:
decidim-core/lib/decidim/events/simple_event.rb

Overview

Extends the BaseEvent to add common components to most events so you don't need to write each time the same code.

The only convention you need to keep in mind is that the event name will be used as the i18n scope to search for the keys.

Direct Known Subclasses

Accountability::ProposalLinkedEvent, Accountability::ResultProgressUpdatedEvent, Amendable::AmendmentBaseEvent, Assemblies::CreateAssemblyMemberEvent, AttachmentCreatedEvent, Blogs::CreatePostEvent, Comments::CommentByFollowedUserEvent, Comments::CommentByFollowedUserGroupEvent, Comments::CommentCreatedEvent, Comments::CommentVotedEvent, Comments::ReplyCreatedEvent, Comments::UserGroupMentionedEvent, Comments::UserMentionedEvent, ComponentPublishedEvent, Conferences::ConferenceRegistrationsEnabledEvent, Conferences::ConferenceRegistrationsOverPercentageEvent, Conferences::ConferenceRoleAssignedEvent, Conferences::UpcomingConferenceEvent, Conferences::UpdateConferenceEvent, Debates::CloseDebateEvent, Debates::CreateDebateEvent, Debates::CreationDisabledEvent, Debates::CreationEnabledEvent, DemotedMembershipEvent, Decidim::Elections::ElectionPublishedEvent, Decidim::Elections::Trustees::NotifyNewTrusteeEvent, Decidim::Elections::Trustees::NotifyTrusteeNewElectionEvent, Decidim::Elections::Votes::VoteAcceptedEvent, Gamification::BaseEvent, Initiatives::Admin::InitiativeSentToTechnicalValidationEvent, Initiatives::Admin::SupportThresholdReachedEvent, Initiatives::EndorseInitiativeEvent, Initiatives::ExtendInitiativeEvent, Initiatives::InitiativeSentToTechnicalValidationEvent, Initiatives::MilestoneCompletedEvent, InvitedToGroupEvent, JoinRequestAcceptedEvent, JoinRequestCreatedEvent, JoinRequestRejectedEvent, Meetings::CloseMeetingEvent, Meetings::CreateMeetingEvent, Meetings::MeetingRegistrationsEnabledEvent, Meetings::MeetingRegistrationsOverPercentageEvent, Meetings::RegistrationCodeValidatedEvent, Meetings::UpcomingMeetingEvent, Meetings::UpdateMeetingEvent, ParticipatoryProcessRoleAssignedEvent, ParticipatoryProcessStepActivatedEvent, ParticipatoryProcessStepChangedEvent, ProfileUpdatedEvent, PromotedToAdminEvent, Proposals::AcceptedProposalEvent, Proposals::Admin::ProposalNoteCreatedEvent, Proposals::Admin::UpdateProposalCategoryEvent, Proposals::Admin::UpdateProposalScopeEvent, Proposals::CollaborativeDraftAccessRequestEvent, Proposals::CollaborativeDraftAccessRequesterAcceptedEvent, Proposals::CollaborativeDraftAccessRequesterRejectedEvent, Proposals::CollaborativeDraftWithdrawnEvent, Proposals::CreationEnabledEvent, Proposals::EndorsingEnabledEvent, Proposals::EvaluatingProposalEvent, Proposals::ProposalEndorsedEvent, Proposals::ProposalMentionedEvent, Proposals::PublishProposalEvent, Proposals::RejectedProposalEvent, Proposals::VotingEnabledEvent, RemovedFromGroupEvent, ResourceEndorsedEvent, ResourceHiddenEvent, RoleAssignedToAssemblyEvent, Sortitions::CreateSortitionEvent, Surveys::ClosedSurveyEvent, Surveys::OpenedSurveyEvent, UserGroupAdminEvent, Verifications::ManagedUserErrorEvent, Votings::PollingOfficers::PollingStationAssignedEvent

Class Method Summary collapse

Instance Method Summary collapse

Methods included from SanitizeHelper

#decidim_html_escape, #decidim_sanitize, #decidim_sanitize_newsletter, #decidim_url_escape, included

Methods included from ComponentPathHelper

#can_be_managed?, #main_component_path, #main_component_url, #manage_component_path

Methods inherited from BaseEvent

#initialize, #resource_locator, #resource_title, #safe_resource_text, type

Methods included from TranslatableAttributes

#default_locale?

Constructor Details

This class inherits a constructor from Decidim::Events::BaseEvent

Class Method Details

.i18n_attributes(*attributes) ⇒ Object

Public: A method to add values to pass as interpolations to the I18n.t method.

By default the resource_path, resource_title and resource_url are already included.

attribute - A Symbol of the method name (and interpolation value) to add.

Example:

class MyEvent < Decidim::Events::SimpleEvent
  i18n_attributes :participatory_space_title
end

30
31
32
# File 'decidim-core/lib/decidim/events/simple_event.rb', line 30

def self.i18n_attributes(*attributes)
  self.i18n_interpolations += Array(attributes)
end

Instance Method Details

#email_introObject


38
39
40
# File 'decidim-core/lib/decidim/events/simple_event.rb', line 38

def email_intro
  I18n.t("email_intro", i18n_options).html_safe
end

#email_outroObject


42
43
44
# File 'decidim-core/lib/decidim/events/simple_event.rb', line 42

def email_outro
  I18n.t("email_outro", i18n_options).html_safe
end

#email_subjectObject


34
35
36
# File 'decidim-core/lib/decidim/events/simple_event.rb', line 34

def email_subject
  I18n.t("email_subject", i18n_options).html_safe
end

#event_has_roles?Boolean

Public: Whether the event differentiates between different user roles. This will change the default i18n scope.

Returns a boolean.

Returns:

  • (Boolean)

65
66
67
# File 'decidim-core/lib/decidim/events/simple_event.rb', line 65

def event_has_roles?
  false
end

#i18n_optionsObject

Public: The Hash of options to pass to the I18.t method.


70
71
72
73
74
75
76
77
78
# File 'decidim-core/lib/decidim/events/simple_event.rb', line 70

def i18n_options
  default_i18n_options.merge(event_interpolations).transform_values do |value|
    if value.is_a?(String)
      decidim_html_escape(value)
    else
      value
    end
  end
end

#i18n_scopeObject

Public: The String to use as scope to search for the keys when using I18n.t

By default is the same value as the event name. If the event has roles, then the role is appended to the i18n scope.


55
56
57
58
59
# File 'decidim-core/lib/decidim/events/simple_event.rb', line 55

def i18n_scope
  return event_name if user_role.blank? || !event_has_roles?

  "#{event_name}.#{user_role}"
end

#notification_titleObject


46
47
48
# File 'decidim-core/lib/decidim/events/simple_event.rb', line 46

def notification_title
  I18n.t("notification_title", i18n_options).html_safe
end

#participatory_space_urlObject

Caches the URL for the resource's participatory space.


95
96
97
98
99
# File 'decidim-core/lib/decidim/events/simple_event.rb', line 95

def participatory_space_url
  return unless participatory_space

  @participatory_space_url ||= ResourceLocatorPresenter.new(participatory_space).url
end

#resource_pathObject

Caches the path for the given resource when it's a Decidim::Component.


81
82
83
84
85
# File 'decidim-core/lib/decidim/events/simple_event.rb', line 81

def resource_path
  return super unless resource.is_a?(Decidim::Component)

  @resource_path ||= main_component_path(resource)
end

#resource_textObject

Caches the text to render as a quote in the email. It will appear, if present, after the `intro` section. This method is intended to be overwritten by each event class.

Returns a string.


106
107
108
# File 'decidim-core/lib/decidim/events/simple_event.rb', line 106

def resource_text
  nil
end

#resource_urlObject

Caches the URL for the given resource when it's a Decidim::Component.


88
89
90
91
92
# File 'decidim-core/lib/decidim/events/simple_event.rb', line 88

def resource_url
  return super unless resource.is_a?(Decidim::Component)

  @resource_url ||= main_component_url(resource)
end