Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ This is the open-source repository for "participa", based on [Decidim](https://g
- `Decidim::Regulations`, adds Regulations, a new type of Participatory process.
- `Decidim::Admin::Extended`, customize admin menu adding custom configurations.
- `Decidim::Recaptcha`, use recaptcha instead invisible captcha.
- Static pages admin: adds attachment and gallery support to `Decidim::Admin::StaticPage` (form, command and controller helper) via decorators.

## Deploying the app

Expand Down
11 changes: 11 additions & 0 deletions app/decorators/decidim/admin/static_pages_controller_decorator.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# frozen_string_literal: true

module Decidim::Admin::StaticPagesControllerDecorator
def self.decorate
Decidim::Admin::StaticPagesController.class_eval do
helper_method :tab_panel_items
end
end
end

Decidim::Admin::StaticPagesControllerDecorator.decorate
16 changes: 16 additions & 0 deletions app/decorators/decidim/admin/static_pages_form_decorator.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# frozen_string_literal: true

module Decidim::Admin::StaticPagesFormDecorator
def self.decorate
Decidim::Admin::StaticPageForm.class_eval do
include Decidim::AttachmentAttributes
include Decidim::HasUploadValidations

attribute :attachment, ::Decidim::AttachmentForm
attachments_attribute :documents
attachments_attribute :photos
end
end
end

Decidim::Admin::StaticPagesFormDecorator.decorate
65 changes: 65 additions & 0 deletions app/decorators/decidim/admin/update_static_page_decorator.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# frozen_string_literal: true

module Decidim::Admin::UpdateStaticPageDecorator
def self.decorate # rubocop:disable Metrics/CyclomaticComplexity
Decidim::Admin::UpdateStaticPage.class_eval do
include ::Decidim::MultipleAttachmentsMethods
include ::Decidim::GalleryMethods

def initialize(form, page)
@form = form
@page = page
@attached_to = page
end

def call
return broadcast(:invalid) if @form.invalid?

if process_attachments?
build_attachments
return broadcast(:invalid) if attachments_invalid?
end

if process_gallery?
build_gallery
return broadcast(:invalid) if gallery_invalid?
end

transaction do
update_static_page
document_cleanup!
photo_cleanup!
create_attachments if process_attachments?
create_gallery if process_gallery?
broadcast(:ok)
end
end

def update_static_page
parsed_content = form.content.transform_values do |value|
Decidim::ContentProcessor.parse(value.to_s, current_organization: form.current_organization).rewrite
end
Decidim.traceability.update!(
page,
form.current_user,
title: form.title,
slug: form.slug,
weight: form.weight,
topic: form.topic,
allow_public_access: form.allow_public_access,
content: parsed_content
)

return unless form.changed_notably

Decidim::Admin::UpdateOrganizationTosVersion.call(form.organization, page, form)
end

private

attr_reader :form, :page
end
end
end

Decidim::Admin::UpdateStaticPageDecorator.decorate
19 changes: 19 additions & 0 deletions app/decorators/decidim/pages_controller_decorator.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# frozen_string_literal: true

module Decidim::PagesControllerDecorator
def self.decorate
Decidim::PagesController.class_eval do
include ::Decidim::AttachmentsHelper

helper_method :tab_panel_items

private

def tab_panel_items
@tab_panel_items ||= attachments_tab_panel_items(@page)
end
end
end
end

Decidim::PagesControllerDecorator.decorate
11 changes: 11 additions & 0 deletions app/decorators/decidim/static_pages_decorator.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# frozen_string_literal: true

module Decidim::StaticPagesDecorator
def self.decorate
Decidim::StaticPage.class_eval do
include Decidim::HasAttachments
end
end
end

Decidim::StaticPagesDecorator.decorate
66 changes: 66 additions & 0 deletions app/views/decidim/admin/static_pages/_form.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
<div class="form__wrapper">
<div class="card pt-4">
<div class="card-section">
<div class="row column">
<%= form.translated :text_field, :title, autofocus: true, aria: { label: :title } %>
</div>

<% if allowed_to? :update_slug, :static_page, static_page: form.object %>
<div class="row column slug">
<div>
<%= form.label :slug %>
</div>
<%= form.text_field :slug, label: false, help_text: t(".slug_help_html", url: decidim_form_slug_url("pages", form.object.slug)) %>
</div>
<% end %>

<div class="row column mt-2">
<%= form.translated :editor, :content, aria: { label: :content } %>
</div>

<div class="row column">
<div>
<%= form.label :topic %>
</div>
<%= form.select :topic_id, form.object.topics.map { |topic| [translated_attribute(topic.title), topic.id] }, include_blank: t(".none"), label: false %>
</div>

<%= render partial: "form_notable_changes", locals: { form: } %>

<div class="row column">
<div>
<%= form.label :weight %>
</div>
<%= form.number_field :weight, label: false %>
</div>

<% unless form.object.slug == "terms-of-service" %>
<div class="row column">
<legend><%= t(".attachment_legend") %></legend>
<%= form.attachment :documents,
multiple: true,
label: t("decidim.admin.static_pages.form.add_documents"),
button_label: t("decidim.admin.static_pages.form.add_documents"),
button_class: "button button__lg button__transparent-secondary w-full",
button_edit_label: t("decidim.admin.static_pages.form.edit_documents"),
help_text: t("decidim.admin.static_pages.form.attachment_legend") %>

<%= form.attachment :photos,
multiple: true,
label: t("decidim.admin.static_pages.form.add_image"),
button_label: t("decidim.admin.static_pages.form.add_image"),
button_class: "button button__lg button__transparent-secondary w-full",
button_edit_label: t("decidim.admin.static_pages.form.edit_image"),
help_text: t("decidim.admin.static_pages.form.image_legend") %>
</div>
<% end %>

<% if form.object.control_public_access? %>
<div class="row column">
<%= form.check_box :allow_public_access %>
</div>
<% end %>

</div>
</div>
</div>
25 changes: 25 additions & 0 deletions app/views/decidim/pages/_standalone.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<%= render layout:"layouts/decidim/shared/layout_center" do %>

<div class="text-center py-12">
<h1 class="h1 decorator inline-block text-left">
<%= title %>
</h1>
</div>

<div class="page__container">
<%= cell "decidim/tos_page", :announcement %>

<div class="editor-content">
<% page_content_blocks.each do |content_block| %>
<%= cell content_block.manifest.cell, content_block %>
<% end %>

<%= decidim_sanitize_editor_admin translated_attribute page.content %>
</div>

<%= cell "decidim/tos_page", :form %>

<%= cell "decidim/tab_panels", tab_panel_items %>
</div>

<% end %>
47 changes: 47 additions & 0 deletions app/views/decidim/pages/_tabbed.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<%# NOTE: the structure of this file is the same as: decidim-core/app/views/layouts/decidim/shared/_layout_user_profile.html.erb %>
<%= render layout:"layouts/decidim/shared/layout_center", locals: { columns: 10 } do %>
<header class="text-center py-10">
<h1 class="title-decorator inline-block text-left mb-12">
<%= title %>
</h1>
<p class="text-lg text-gray-2">
<%= description %>
</p>
</header>

<div class="vertical-tabs">
<nav role="navigation" aria-label="<%= I18n.t("layouts.decidim.navigation.aria_label", title: translated_attribute(page.title)) %>">
<button id="dropdown-trigger-pages" data-component="dropdown" data-target="dropdown-menu-pages" data-open-md="true" data-auto-close="true">
<span>
<%= translated_attribute(page.title) %>
</span>
<%= icon "arrow-down-s-line" %>
<%= icon "arrow-up-s-line" %>
</button>
<ul id="dropdown-menu-pages" class="vertical-tabs__list" role="menu">
<% pages.each do |sibling| %>
<li class="<%= "is-active" if page == sibling %>" role="menuitem">
<%= link_to translated_attribute(sibling.title), page_path(sibling.slug), "aria-current": ("page" if page == sibling) %>
</li>
<% end %>
</ul>
</nav>

<section>
<%= cell "decidim/tos_page", :announcement %>

<h2 class="h2"><%= translated_attribute page.title %></h2>

<div class="editor-content mt-6">
<% page_content_blocks.each do |content_block| %>
<%= cell content_block.manifest.cell, content_block %>
<% end %>

<%= decidim_sanitize_editor_admin translated_attribute page.content %>
</div>
<%= cell "decidim/tos_page", :form %>

<%= cell "decidim/tab_panels", tab_panel_items %>
</section>
</div>
<% end %>
10 changes: 10 additions & 0 deletions config/locales/ca_admin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,13 @@ ca:
file: Fitxer
attachment_collection:
weight: Pes
decidim:
admin:
static_pages:
form:
add_documents: Afegeix documents
edit_documents: Edita documents
attachment_legend: Afegeix els documents que vols que apareguin a la pàgina estàtica. Pots afegir tants com vulguis.
add_image: Afegeix imatge
edit_image: Edita imatge
image_legend: Afegeix les imatges que vols que apareguin a la pàgina estàtica. Pots afegir tantes com vulguis.
10 changes: 10 additions & 0 deletions config/locales/en_admin.yml
Original file line number Diff line number Diff line change
@@ -1 +1,11 @@
en:
decidim:
admin:
static_pages:
form:
add_documents: Add documents
edit_documents: Edit documents
attachment_legend: Add the documents you want to appear on the static page. You can add as many as you want.
add_image: Add image
edit_image: Edit image
image_legend: Add the images you want to appear on the static page. You can add as many as you want.
10 changes: 10 additions & 0 deletions config/locales/es_admin.yml
Original file line number Diff line number Diff line change
@@ -1 +1,11 @@
es:
decidim:
admin:
static_pages:
form:
add_documents: Añadir documentos
edit_documents: Editar documentos
attachment_legend: Añade los documentos que quieres que aparezcan en la página estática. Puedes añadir tantos como quieras.
add_image: Añadir imagen
edit_image: Editar imagen
image_legend: Añade las imágenes que quieres que aparezcan en la página estática. Puedes añadir tantas como quieras.
6 changes: 6 additions & 0 deletions config/locales/oc_admin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -723,6 +723,12 @@ oc:
form:
none: Cap
slug_help: 'Utilitza rutes parcials, no URL complerts aquí. Accepta lletres, números, guions i barres, i ha de començar amb una lletra. Exemple: %{url}'
add_documents: Afegir documents
edit_documents: Editar documents
attachment_legend: Afegir los documents que vòles que apareisson a la pagina estatica. Pòts n'afegir tants coma vòles.
add_image: Afegir imatge
edit_image: Editar imatge
image_legend: Afegir les imatges que vòles que apareisson a la pagina estatica. Pòts n'afegir tantes coma vòles.
index:
last_notable_change: Últims canvis notables
new:
Expand Down
12 changes: 12 additions & 0 deletions docs/HOW_TO_UPGRADE.md
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,18 @@ These are custom modules and this is what you have to keep in mind when updating
* Override to export proposal emails and names from authors
* probably removable from Decidim v0.28 (remember remove test too)

* `app/decorators/decidim/admin/static_pages_form_decorator.rb`
* Adds attachment and gallery attributes (`documents`, `photos`) to `Decidim::Admin::StaticPageForm`
* Includes `Decidim::AttachmentAttributes` and `Decidim::HasUploadValidations`

* `app/decorators/decidim/admin/update_static_page_decorator.rb`
* Overrides `call` to process attachments and gallery before/after updating the page
* Overrides `initialize` to set `@attached_to` required by attachment methods
* Includes `Decidim::MultipleAttachmentsMethods` and `Decidim::GalleryMethods`

* `app/decorators/decidim/admin/static_pages_controller_decorator.rb`
* Exposes `tab_panel_items` as a helper method in `Decidim::Admin::StaticPagesController`

* `lib/decidim/has_private_users.rb`
* Override to allow private space users to acces public view
* Could not use a decorator so the whole class has been copied
Expand Down
Loading
Loading