Class: Decidim::Proposals::ProposalPresenter

Inherits:
ResourcePresenter show all
Includes:
ActionView::Helpers::UrlHelper, SanitizeHelper
Defined in:
decidim-proposals/app/presenters/decidim/proposals/proposal_presenter.rb

Overview

Decorator for proposals

Direct Known Subclasses

CollaborativeDraftPresenter

Instance Method Summary collapse

Methods included from SanitizeHelper

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

Methods inherited from ResourcePresenter

#editor_locales, #handle_locales

Methods included from TranslatableAttributes

#attachment?, #default_locale?

Instance Method Details

#authorObject



13
14
15
16
17
18
19
# File 'decidim-proposals/app/presenters/decidim/proposals/proposal_presenter.rb', line 13

def author
  @author ||= if official?
                Decidim::Proposals::OfficialAuthorPresenter.new
              else
                coauthorships.includes(:author).first.author.presenter
              end
end

#body(links: false, strip_tags: false, all_locales: false) ⇒ Object



46
47
48
49
50
# File 'decidim-proposals/app/presenters/decidim/proposals/proposal_presenter.rb', line 46

def body(links: false, strip_tags: false, all_locales: false)
  return unless proposal

  content_handle_locale(proposal.body, all_locales, links, strip_tags)
end

#display_mentionObject



29
30
31
# File 'decidim-proposals/app/presenters/decidim/proposals/proposal_presenter.rb', line 29

def display_mention
  link_to title, proposal_path
end

#editor_body(all_locales: false) ⇒ Object



52
53
54
# File 'decidim-proposals/app/presenters/decidim/proposals/proposal_presenter.rb', line 52

def editor_body(all_locales: false)
  editor_locales(proposal.body, all_locales)
end

#id_and_title(html_escape: false) ⇒ Object



42
43
44
# File 'decidim-proposals/app/presenters/decidim/proposals/proposal_presenter.rb', line 42

def id_and_title(html_escape: false)
  "##{proposal.id} - #{title(html_escape:)}"
end

#proposalObject



21
22
23
# File 'decidim-proposals/app/presenters/decidim/proposals/proposal_presenter.rb', line 21

def proposal
  __getobj__
end

#proposal_pathObject



25
26
27
# File 'decidim-proposals/app/presenters/decidim/proposals/proposal_presenter.rb', line 25

def proposal_path
  Decidim::ResourceLocatorPresenter.new(proposal).path
end

#resource_manifestObject



82
83
84
# File 'decidim-proposals/app/presenters/decidim/proposals/proposal_presenter.rb', line 82

def resource_manifest
  proposal.class.resource_manifest
end

#title(html_escape: false, all_locales: false) ⇒ Object

Render the proposal title

Returns a String.



36
37
38
39
40
# File 'decidim-proposals/app/presenters/decidim/proposals/proposal_presenter.rb', line 36

def title(html_escape: false, all_locales: false)
  return unless proposal

  super(proposal.title, html_escape, all_locales)
end

#versionsObject

Returns the proposal versions, hiding not published answers

Returns an Array.



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'decidim-proposals/app/presenters/decidim/proposals/proposal_presenter.rb', line 59

def versions
  version_state_published = false
  pending_state_change = nil

  proposal.versions.map do |version|
    state_published_change = version.changeset["state_published_at"]
    version_state_published = state_published_change.last.present? if state_published_change

    if version_state_published
      version.changeset["decidim_proposals_proposal_state_id"] = parsed_state_change(*pending_state_change) if pending_state_change
      pending_state_change = nil
    elsif version.changeset["decidim_proposals_proposal_state_id"]
      pending_state_change = version.changeset.delete("decidim_proposals_proposal_state_id")
    end

    next if version.event == "update" && Decidim::Proposals::DiffRenderer.new(version).diff.empty?

    version
  end.compact
end