Module: Decidim::Amendable

Extended by:
ActiveSupport::Concern
Included in:
DummyResources::DummyResource, Proposals::Proposal
Defined in:
decidim-core/lib/decidim/amendable.rb,
decidim-core/app/forms/decidim/amendable/form.rb,
decidim-core/app/commands/decidim/amendable/accept.rb,
decidim-core/app/commands/decidim/amendable/reject.rb,
decidim-core/app/forms/decidim/amendable/edit_form.rb,
decidim-core/app/commands/decidim/amendable/promote.rb,
decidim-core/app/commands/decidim/amendable/withdraw.rb,
decidim-core/app/forms/decidim/amendable/create_form.rb,
decidim-core/app/forms/decidim/amendable/reject_form.rb,
decidim-core/app/forms/decidim/amendable/review_form.rb,
decidim-core/app/forms/decidim/amendable/promote_form.rb,
decidim-core/app/forms/decidim/amendable/publish_form.rb,
decidim-core/app/cells/decidim/amendable/amendments_cell.rb,
decidim-core/app/commands/decidim/amendable/create_draft.rb,
decidim-core/app/commands/decidim/amendable/update_draft.rb,
decidim-core/app/commands/decidim/amendable/destroy_draft.rb,
decidim-core/app/commands/decidim/amendable/publish_draft.rb,
decidim-core/app/cells/decidim/amendable/announcement_cell.rb,
decidim-core/app/cells/decidim/amendable/wizard_step_form_cell.rb,
decidim-core/app/events/decidim/amendable/amendment_base_event.rb,
decidim-core/app/cells/decidim/amendable/amend_button_card_cell.rb,
decidim-core/app/cells/decidim/amendable/emendation_actions_cell.rb,
decidim-core/app/cells/decidim/amendable/promote_button_card_cell.rb,
decidim-core/app/events/decidim/amendable/amendment_created_event.rb,
decidim-core/app/events/decidim/amendable/amendment_accepted_event.rb,
decidim-core/app/events/decidim/amendable/amendment_rejected_event.rb,
decidim-core/app/events/decidim/amendable/emendation_promoted_event.rb

Overview

This concern contains the logic related to amendable resources.

Defined Under Namespace

Classes: Accept, AmendButtonCardCell, AmendmentAcceptedEvent, AmendmentBaseEvent, AmendmentCreatedEvent, AmendmentRejectedEvent, AmendmentsCell, AnnouncementCell, CreateDraft, CreateForm, DestroyDraft, EditForm, EmendationActionsCell, EmendationPromotedEvent, Form, Promote, PromoteButtonCardCell, PromoteForm, PublishDraft, PublishForm, Reject, RejectForm, ReviewForm, UpdateDraft, Withdraw, WizardStepFormCell

Instance Method Summary collapse

Instance Method Details

#add_author(author, user_group = nil) ⇒ Object

Handles the logic to assign an author to the resource, be it Authorable or Coauthorable.



151
152
153
154
155
156
157
158
159
160
161
162
# File 'decidim-core/lib/decidim/amendable.rb', line 151

def add_author(author, user_group = nil)
  if is_a?(Decidim::Authorable)
    if persisted?
      update(author: user_group || author)
    else
      self.author = user_group || author
    end
  else # Assume is_a?(Decidim::Coauthorable)
    coauthorships.clear
    add_coauthor(author, user_group:)
  end
end

#amendable?Boolean

Checks if the resource CAN be amended by other resources. Returns true or false.

Returns:

  • (Boolean)


110
111
112
# File 'decidim-core/lib/decidim/amendable.rb', line 110

def amendable?
  amendable.blank?
end

#amendable_fieldsObject

Returns the fields that can be amended.



86
87
88
# File 'decidim-core/lib/decidim/amendable.rb', line 86

def amendable_fields
  self.class.amendable_options[:fields]
end

#amendable_formObject

Returns the form used for the validation and creation of the emendation.



91
92
93
# File 'decidim-core/lib/decidim/amendable.rb', line 91

def amendable_form
  self.class.amendable_options[:form].constantize
end

#amendmentObject

Returns the polymorphic association.



96
97
98
99
100
# File 'decidim-core/lib/decidim/amendable.rb', line 96

def amendment
  associated_resource = emendation? ? :emendation : :amendable

  Decidim::Amendment.find_by(associated_resource => id)
end

#emendation?Boolean

Checks if the resource HAS amended another resource. Returns true or false.

Returns:

  • (Boolean)


104
105
106
# File 'decidim-core/lib/decidim/amendable.rb', line 104

def emendation?
  amendable.present?
end

#linked_promoted_resourceObject

Returns the linked resource to or from this model for the given resource name and link name. See Decidim::Resourceable#link_resources



124
125
126
# File 'decidim-core/lib/decidim/amendable.rb', line 124

def linked_promoted_resource
  linked_resources(self.class, "created_from_rejected_emendation").first
end

#notifiable_identitiesObject

Returns an Array of Decidim::User.



168
169
170
171
172
173
174
# File 'decidim-core/lib/decidim/amendable.rb', line 168

def notifiable_identities
  if is_a?(Decidim::Authorable)
    [author]
  else # Assume is_a?(Decidim::Coauthorable)
    super
  end
end

#process_amendment_state_change!Object

Callback called when amendment state is updated



165
# File 'decidim-core/lib/decidim/amendable.rb', line 165

def process_amendment_state_change!; end

#stateObject

Returns the state of the amendment or the state of the resource.



115
116
117
118
119
# File 'decidim-core/lib/decidim/amendable.rb', line 115

def state
  return amendment.state if emendation?

  attributes["state"]
end

#visible_amendments_for(user) ⇒ Object

Returns the amendments (polymorphic association) of the emendations that are visible to the user based on the component’s amendments settings.



146
147
148
# File 'decidim-core/lib/decidim/amendable.rb', line 146

def visible_amendments_for(user)
  amendments.where(emendation: visible_emendations_for(user))
end

#visible_emendations_for(user) ⇒ Object

Returns the emendations of an amendable that are visible to the user based on the component’s amendments settings and filtering out the “drafts”.



130
131
132
133
134
135
136
137
138
139
140
141
142
# File 'decidim-core/lib/decidim/amendable.rb', line 130

def visible_emendations_for(user)
  published_emendations = emendations.published
  return published_emendations unless component.settings.amendments_enabled

  case component.current_settings.amendments_visibility
  when "participants"
    return self.class.none unless user

    published_emendations.where(decidim_amendments: { decidim_user_id: user.id })
  else # Assume 'all'
    published_emendations
  end
end