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 do not 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, ChangeNicknameEvent, 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_admin, #decidim_sanitize_editor, #decidim_sanitize_editor_admin, #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

#content_in_same_language?, #initialize, #organization, #perform_translation?, #resource_locator, #resource_title, #safe_resource_text, #safe_resource_translated_text, #translation_missing?, 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


32
33
34
# File 'decidim-core/lib/decidim/events/simple_event.rb', line 32

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

Instance Method Details

#email_introObject



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

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

#email_outroObject



51
52
53
# File 'decidim-core/lib/decidim/events/simple_event.rb', line 51

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

#email_subjectObject



36
37
38
# File 'decidim-core/lib/decidim/events/simple_event.rb', line 36

def email_subject
  I18n.t("email_subject", **email_subject_i18n_options).html_safe
end

#email_subject_i18n_optionsObject



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

def email_subject_i18n_options
  sanitized_values = { resource_title: decidim_sanitize(resource_title) }
  sanitized_values[:mentioned_proposal_title] = decidim_sanitize(mentioned_proposal_title) if i18n_options.has_key?(:mentioned_proposal_title)
  sanitized_values[:participatory_space_title] = decidim_sanitize(participatory_space_title) if i18n_options.has_key?(:participatory_space_title)
  i18n_options.merge(sanitized_values)
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)


74
75
76
# File 'decidim-core/lib/decidim/events/simple_event.rb', line 74

def event_has_roles?
  false
end

#i18n_optionsObject

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



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

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.



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

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

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

#notification_titleObject



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

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

#participatory_space_urlObject

Caches the URL for the resource’s participatory space.



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

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 is a Decidim::Component.



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

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.



115
116
117
# File 'decidim-core/lib/decidim/events/simple_event.rb', line 115

def resource_text
  nil
end

#resource_urlObject

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



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

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

  @resource_url ||= main_component_url(resource)
end