Module: Decidim::Admin::NewslettersHelper
- Included in:
- NewslettersController
- Defined in:
- app/helpers/decidim/admin/newsletters_helper.rb
Overview
This module includes helpers to manage newsletters in admin layout
Instance Method Summary collapse
- #find_verification_types_for_select(organization) ⇒ Object
- #newsletter_attention_callout_announcement ⇒ Object
- #newsletter_recipients_count_callout_announcement ⇒ Object
- #organization_participatory_space(manifest_name) ⇒ Object
- #parse_ids(ids) ⇒ Object
- #participatory_space_title(space_type) ⇒ Object
- #participatory_space_types_form_object(form_object, space_type) ⇒ Object
- #participatory_spaces_for_select(form_object) ⇒ Object
- #select_tag_participatory_spaces(manifest_name, spaces, child_form) ⇒ Object
- #selected_verification_types(newsletter) ⇒ Object
- #selective_newsletter_to(newsletter) ⇒ Object
- #sent_to_spaces(newsletter) ⇒ Object
- #sent_to_users(newsletter) ⇒ Object
- #sent_to_verified_users(newsletter) ⇒ Object
- #space_as_option_for_select(space) ⇒ Object
- #spaces_for_select(manifest_name) ⇒ Object
- #spaces_user_can_admin ⇒ Object
Instance Method Details
#find_verification_types_for_select(organization) ⇒ Object
7 8 9 10 11 12 |
# File 'app/helpers/decidim/admin/newsletters_helper.rb', line 7 def find_verification_types_for_select(organization) available_verifications = organization. available_verifications.map do |verification_type| [t("decidim.authorization_handlers.#{verification_type}.name"), verification_type] end end |
#newsletter_attention_callout_announcement ⇒ Object
157 158 159 160 161 |
# File 'app/helpers/decidim/admin/newsletters_helper.rb', line 157 def { body: t("warning", scope: "decidim.admin.newsletters.select_recipients_to_deliver").html_safe } end |
#newsletter_recipients_count_callout_announcement ⇒ Object
163 164 165 166 167 168 169 |
# File 'app/helpers/decidim/admin/newsletters_helper.rb', line 163 def spinner = "<span id='recipients_count_spinner' class='loading-spinner hide'></span>" body = "#{t("recipients_count", scope: "decidim.admin.newsletters.select_recipients_to_deliver", count: recipients_count_query)} #{spinner}" { body: } end |
#organization_participatory_space(manifest_name) ⇒ Object
122 123 124 125 126 127 128 129 |
# File 'app/helpers/decidim/admin/newsletters_helper.rb', line 122 def organization_participatory_space(manifest_name) @organization_participatory_spaces ||= {} @organization_participatory_spaces[manifest_name] ||= Decidim .find_participatory_space_manifest(manifest_name) .participatory_spaces.call(current_organization) .published .sort_by { |space| [space.try(:closed?) ? 1 : 0, space.title[current_locale]] } end |
#parse_ids(ids) ⇒ Object
171 172 173 |
# File 'app/helpers/decidim/admin/newsletters_helper.rb', line 171 def parse_ids(ids) ids.size == 1 && ids.first.is_a?(String) ? ids.first.split.map(&:strip) : ids end |
#participatory_space_title(space_type) ⇒ Object
37 38 39 40 41 42 43 |
# File 'app/helpers/decidim/admin/newsletters_helper.rb', line 37 def participatory_space_title(space_type) return unless space_type content_tag :h4 do t("activerecord.models.decidim/#{space_type.manifest_name.singularize}.other") end end |
#participatory_space_types_form_object(form_object, space_type) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'app/helpers/decidim/admin/newsletters_helper.rb', line 22 def participatory_space_types_form_object(form_object, space_type) return if spaces_user_can_admin[space_type.manifest_name.to_sym].blank? html = "" form_object.fields_for :participatory_space_types do |f| f.fields_for space_type.manifest_name, space_type do |ff| html += participatory_space_title(space_type) html += ff.hidden_field :manifest_name, value: space_type.manifest_name html += select_tag_participatory_spaces(space_type.manifest_name, spaces_for_select(space_type.manifest_name.to_sym), ff) end end html.html_safe end |
#participatory_spaces_for_select(form_object) ⇒ Object
14 15 16 17 18 19 20 |
# File 'app/helpers/decidim/admin/newsletters_helper.rb', line 14 def participatory_spaces_for_select(form_object) content_tag :div do @form.participatory_space_types.each do |space_type| concat participatory_space_types_form_object(form_object, space_type) end end end |
#select_tag_participatory_spaces(manifest_name, spaces, child_form) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'app/helpers/decidim/admin/newsletters_helper.rb', line 45 def select_tag_participatory_spaces(manifest_name, spaces, child_form) return unless spaces raw(cell("decidim/admin/multi_select_picker", nil, context: { select_id: "#{manifest_name}-spaces-select", field_name: "#{child_form.object_name}[ids][]", options_for_select: spaces, selected_values: (:participatory_space_types)[manifest_name] || [], placeholder: t("select_recipients_to_deliver.select_#{manifest_name}", scope: "decidim.admin.newsletters"), class: "mb-2" })) end |
#selected_verification_types(newsletter) ⇒ Object
175 176 177 178 179 |
# File 'app/helpers/decidim/admin/newsletters_helper.rb', line 175 def selected_verification_types() .sent_to_users_with_verification_types&.map do |type| I18n.t("decidim.authorization_handlers.#{type}.name") end&.join(", ") end |
#selective_newsletter_to(newsletter) ⇒ Object
65 66 67 68 69 70 71 72 73 74 |
# File 'app/helpers/decidim/admin/newsletters_helper.rb', line 65 def () return content_tag(:strong, t("index.not_sent", scope: "decidim.admin.newsletters"), class: "text-warning") unless .sent? return content_tag(:strong, t("index.all_users", scope: "decidim.admin.newsletters"), class: "text-success") if .sent? && .extended_data.blank? return sent_to_verified_users() if .sent_to_verified_users? content_tag :div do concat sent_to_users concat sent_to_spaces end end |
#sent_to_spaces(newsletter) ⇒ Object
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'app/helpers/decidim/admin/newsletters_helper.rb', line 100 def sent_to_spaces() html = "<p style='margin-bottom:0;'> " .sent_to_participatory_spaces.try(:each) do |type| next if type["ids"].blank? ids = parse_ids(type["ids"]) html += t("index.segmented_to", scope: "decidim.admin.newsletters", subject: t("activerecord.models.decidim/#{type["manifest_name"].singularize}.other")) if ids.include?("all") html += "<strong> #{t("index.all", scope: "decidim.admin.newsletters")} </strong>" else Decidim.find_participatory_space_manifest(type["manifest_name"].to_sym) .participatory_spaces.call(current_organization).where(id: ids).each do |space| html += "<strong>#{decidim_escape_translated(space.title)}</strong>" end end html += "<br/>" end html += "</p>" html.html_safe end |
#sent_to_users(newsletter) ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'app/helpers/decidim/admin/newsletters_helper.rb', line 76 def sent_to_users() content_tag :p, style: "margin-bottom:0;" do concat content_tag(:strong, t("index.has_been_sent_to", scope: "decidim.admin.newsletters"), class: "text-success") recipients = [] recipients << content_tag(:strong, t("index.all_users", scope: "decidim.admin.newsletters")) if .sent_to_all_users? recipients << content_tag(:strong, t("index.verified_users", scope: "decidim.admin.newsletters")) if .sent_to_verified_users? recipients << content_tag(:strong, t("index.followers", scope: "decidim.admin.newsletters")) if .sent_to_followers? recipients << content_tag(:strong, t("index.participants", scope: "decidim.admin.newsletters")) if .sent_to_participants? recipients << content_tag(:strong, t("index.members", scope: "decidim.admin.newsletters")) if .sent_to_members? concat recipients.join(t("index.and", scope: "decidim.admin.newsletters")).html_safe end end |
#sent_to_verified_users(newsletter) ⇒ Object
92 93 94 95 96 97 98 |
# File 'app/helpers/decidim/admin/newsletters_helper.rb', line 92 def sent_to_verified_users() content_tag :p, style: "margin-bottom:0;" do concat content_tag(:strong, t("index.has_been_sent_to", scope: "decidim.admin.newsletters"), class: "text-success") concat content_tag(:strong, t("index.verified_users", scope: "decidim.admin.newsletters")) concat content_tag(:p, t("index.verification_types", scope: "decidim.admin.newsletters", types: selected_verification_types())) end end |
#space_as_option_for_select(space) ⇒ Object
147 148 149 150 151 152 153 154 155 |
# File 'app/helpers/decidim/admin/newsletters_helper.rb', line 147 def space_as_option_for_select(space) return unless space [ translated_attribute(space.title), space.id, { class: space.try(:closed?) ? "red" : "green", title: translated_attribute(space.title).to_s } ] end |
#spaces_for_select(manifest_name) ⇒ Object
58 59 60 61 62 63 |
# File 'app/helpers/decidim/admin/newsletters_helper.rb', line 58 def spaces_for_select(manifest_name) return unless Decidim.participatory_space_manifests.map(&:name).include?(manifest_name) return spaces_user_can_admin[manifest_name] unless current_user.admin? [[I18n.t("select_recipients_to_deliver.all_spaces", scope: "decidim.admin.newsletters"), "all"]] + spaces_user_can_admin[manifest_name] end |
#spaces_user_can_admin ⇒ Object
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'app/helpers/decidim/admin/newsletters_helper.rb', line 131 def spaces_user_can_admin @spaces_user_can_admin ||= {} Decidim.participatory_space_manifests.each do |manifest| organization_participatory_space(manifest.name)&.each do |space| next unless space.admins.exists?(id: current_user.id) @spaces_user_can_admin[manifest.name] ||= [] space_as_option_for_select_data = space_as_option_for_select(space) @spaces_user_can_admin[manifest.name] << space_as_option_for_select_data unless @spaces_user_can_admin[manifest.name].detect do |x| x == space_as_option_for_select_data end end end @spaces_user_can_admin end |