decidim-admin 0.0.1.alpha9 → 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +33 -8
  3. data/Rakefile +0 -25
  4. data/app/assets/javascripts/decidim/admin/application.js.es6 +17 -10
  5. data/app/assets/javascripts/decidim/admin/sort_steps.js.es6 +20 -11
  6. data/app/assets/javascripts/decidim/admin/tab_focus.js.es6 +22 -0
  7. data/app/assets/stylesheets/decidim/admin/_forms.scss +10 -0
  8. data/app/assets/stylesheets/decidim/admin/_layout.scss +11 -0
  9. data/app/assets/stylesheets/decidim/admin/_tables.scss +4 -0
  10. data/app/assets/stylesheets/decidim/admin/application.scss +8 -2
  11. data/app/commands/decidim/admin/activate_participatory_process_step.rb +1 -1
  12. data/app/commands/decidim/admin/create_category.rb +44 -0
  13. data/app/commands/decidim/admin/create_feature.rb +48 -0
  14. data/app/commands/decidim/admin/create_participatory_process.rb +3 -6
  15. data/app/commands/decidim/admin/create_participatory_process_admin.rb +51 -0
  16. data/app/commands/decidim/admin/create_participatory_process_attachment.rb +44 -0
  17. data/app/commands/decidim/admin/create_participatory_process_step.rb +3 -3
  18. data/app/commands/decidim/admin/create_scope.rb +38 -0
  19. data/app/commands/decidim/admin/create_static_page.rb +40 -0
  20. data/app/commands/decidim/admin/destroy_category.rb +36 -0
  21. data/app/commands/decidim/admin/destroy_feature.rb +39 -0
  22. data/app/commands/decidim/admin/publish_participatory_process.rb +1 -1
  23. data/app/commands/decidim/admin/reorder_participatory_process_steps.rb +5 -2
  24. data/app/commands/decidim/admin/unpublish_participatory_process.rb +1 -1
  25. data/app/commands/decidim/admin/update_category.rb +48 -0
  26. data/app/commands/decidim/admin/update_organization.rb +49 -0
  27. data/app/commands/decidim/admin/update_participatory_process.rb +2 -2
  28. data/app/commands/decidim/admin/update_participatory_process_attachment.rb +49 -0
  29. data/app/commands/decidim/admin/update_participatory_process_step.rb +1 -1
  30. data/app/commands/decidim/admin/update_scope.rb +43 -0
  31. data/app/commands/decidim/admin/update_static_page.rb +45 -0
  32. data/app/constraints/decidim/admin/organization_dashboard_constraint.rb +5 -1
  33. data/app/controllers/decidim/admin/application_controller.rb +8 -0
  34. data/app/controllers/decidim/admin/categories_controller.rb +90 -0
  35. data/app/controllers/decidim/admin/concerns/participatory_process_admin.rb +31 -0
  36. data/app/controllers/decidim/admin/features_controller.rb +74 -0
  37. data/app/controllers/decidim/admin/organization_controller.rb +40 -0
  38. data/app/controllers/decidim/admin/participatory_process_attachments_controller.rb +84 -0
  39. data/app/controllers/decidim/admin/participatory_process_publications_controller.rb +2 -7
  40. data/app/controllers/decidim/admin/participatory_process_step_activations_controller.rb +6 -8
  41. data/app/controllers/decidim/admin/participatory_process_step_ordering_controller.rb +2 -4
  42. data/app/controllers/decidim/admin/participatory_process_steps_controller.rb +13 -11
  43. data/app/controllers/decidim/admin/participatory_process_user_roles_controller.rb +54 -0
  44. data/app/controllers/decidim/admin/participatory_processes_controller.rb +11 -6
  45. data/app/controllers/decidim/admin/scopes_controller.rb +79 -0
  46. data/app/controllers/decidim/admin/static_pages_controller.rb +94 -0
  47. data/app/forms/decidim/admin/category_form.rb +37 -0
  48. data/app/forms/decidim/admin/feature_form.rb +16 -0
  49. data/app/forms/decidim/admin/organization_form.rb +31 -0
  50. data/app/forms/decidim/admin/participatory_process_attachment_form.rb +19 -0
  51. data/app/forms/decidim/admin/participatory_process_form.rb +4 -7
  52. data/app/forms/decidim/admin/participatory_process_step_form.rb +12 -2
  53. data/app/forms/decidim/admin/participatory_process_user_role_form.rb +15 -0
  54. data/app/forms/decidim/admin/scope_form.rb +24 -0
  55. data/app/forms/decidim/admin/static_page_form.rb +30 -0
  56. data/app/helpers/decidim/admin/application_helper.rb +1 -0
  57. data/app/helpers/decidim/admin/aria_selected_link_to_helper.rb +28 -0
  58. data/app/helpers/decidim/admin/attributes_display_helper.rb +13 -5
  59. data/app/models/decidim/admin/abilities/admin_user.rb +34 -0
  60. data/app/models/decidim/admin/abilities/base.rb +19 -0
  61. data/app/models/decidim/admin/abilities/participatory_process_admin.rb +51 -0
  62. data/app/models/decidim/admin/participatory_process_user_role.rb +14 -0
  63. data/app/queries/decidim/admin/manageable_participatory_processes_for_user.rb +41 -0
  64. data/app/queries/decidim/admin/process_admin_roles_for_process.rb +35 -0
  65. data/app/views/decidim/admin/categories/_form.html.erb +12 -0
  66. data/app/views/decidim/admin/categories/edit.html.erb +9 -0
  67. data/app/views/decidim/admin/categories/index.html.erb +44 -0
  68. data/app/views/decidim/admin/categories/new.html.erb +9 -0
  69. data/app/views/decidim/admin/categories/show.html.erb +14 -0
  70. data/app/views/decidim/admin/features/_feature.html.erb +20 -0
  71. data/app/views/decidim/admin/features/_form.html.erb +3 -0
  72. data/app/views/decidim/admin/features/index.html.erb +23 -0
  73. data/app/views/decidim/admin/features/new.html.erb +9 -0
  74. data/app/views/decidim/admin/organization/_form.html.erb +23 -0
  75. data/app/views/decidim/admin/organization/edit.html.erb +11 -0
  76. data/app/views/decidim/admin/participatory_process_attachments/_form.html.erb +11 -0
  77. data/app/views/decidim/admin/participatory_process_attachments/edit.html.erb +9 -0
  78. data/app/views/decidim/admin/participatory_process_attachments/index.html.erb +37 -0
  79. data/app/views/decidim/admin/participatory_process_attachments/new.html.erb +9 -0
  80. data/app/views/decidim/admin/participatory_process_attachments/show.html.erb +25 -0
  81. data/app/views/decidim/admin/participatory_process_steps/_form.html.erb +2 -2
  82. data/app/views/decidim/admin/participatory_process_steps/edit.html.erb +1 -3
  83. data/app/views/decidim/admin/participatory_process_steps/{_table.html.erb → index.html.erb} +15 -11
  84. data/app/views/decidim/admin/participatory_process_steps/new.html.erb +1 -3
  85. data/app/views/decidim/admin/participatory_process_steps/show.html.erb +1 -4
  86. data/app/views/decidim/admin/participatory_process_user_roles/index.html.erb +34 -0
  87. data/app/views/decidim/admin/participatory_processes/_form.html.erb +2 -2
  88. data/app/views/decidim/admin/participatory_processes/edit.html.erb +13 -3
  89. data/app/views/decidim/admin/participatory_processes/index.html.erb +5 -14
  90. data/app/views/decidim/admin/participatory_processes/show.html.erb +19 -36
  91. data/app/views/decidim/admin/scopes/_form.html.erb +3 -0
  92. data/app/views/decidim/admin/scopes/edit.html.erb +11 -0
  93. data/app/views/decidim/admin/scopes/index.html.erb +38 -0
  94. data/app/views/decidim/admin/scopes/new.html.erb +11 -0
  95. data/app/views/decidim/admin/static_pages/_form.html.erb +13 -0
  96. data/app/views/decidim/admin/static_pages/edit.html.erb +11 -0
  97. data/app/views/decidim/admin/static_pages/index.html.erb +40 -0
  98. data/app/views/decidim/admin/static_pages/new.html.erb +11 -0
  99. data/app/views/decidim/admin/static_pages/show.html.erb +22 -0
  100. data/app/views/layouts/decidim/admin/_application.html.erb +40 -0
  101. data/app/views/layouts/decidim/admin/_sidebar.html.erb +5 -2
  102. data/app/views/layouts/decidim/admin/application.html.erb +3 -40
  103. data/app/views/layouts/decidim/admin/participatory_process.html.erb +54 -0
  104. data/config/i18n-tasks.yml +3 -2
  105. data/config/locales/ca.yml +138 -6
  106. data/config/locales/en.yml +191 -13
  107. data/config/locales/es.yml +139 -7
  108. data/config/routes.rb +23 -1
  109. data/db/migrate/20161102144648_add_admin_participatory_process_user_roles.rb +15 -0
  110. data/db/seeds.rb +21 -0
  111. data/lib/decidim/admin/engine.rb +10 -3
  112. data/lib/decidim/admin/features/base_controller.rb +33 -0
  113. data/lib/decidim/admin/features.rb +10 -0
  114. data/lib/decidim/admin.rb +1 -0
  115. data/vendor/assets/javascripts/html.sortable.js +691 -0
  116. metadata +98 -33
  117. data/LICENSE.txt +0 -619
  118. data/app/models/decidim/admin/abilities/admin.rb +0 -21
  119. data/vendor/assets/javascripts/html.sortable.min.js +0 -2
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ module Admin
4
+ # Module to add the attribute `aria-selected` to links when they are
5
+ # pointing to the current path. Uses the `active_link_to` gem to calculate
6
+ # this.
7
+ #
8
+ module AriaSelectedLinkToHelper
9
+ # Adds the `aria-selected` attribute to a link when it's pointing to the
10
+ # current path. The API is the same than the `link_to` one, and uses this
11
+ # helper internally.
12
+ #
13
+ # text - a String with the link text
14
+ # link - Where the link should point to. Accepts the same value than
15
+ # `link_to` helper.
16
+ # options - An options Hash that will be passed to `link_to`.
17
+ def aria_selected_link_to(text, link, options = {})
18
+ link_to(
19
+ text,
20
+ link,
21
+ options.merge(
22
+ "aria-selected": is_active_link?(link, options[:aria_link_type] || :inclusive)
23
+ )
24
+ )
25
+ end
26
+ end
27
+ end
28
+ end
@@ -31,8 +31,8 @@ module Decidim
31
31
  # attrs - a list of N attributes of the `record`.
32
32
  def display_for(record, *attrs)
33
33
  attrs.map do |attr|
34
- if record.column_for_attribute(attr).type == :hstore
35
- I18n.available_locales.map do |locale|
34
+ if record.column_for_attribute(attr).type == :jsonb
35
+ display_available_locales(record).map do |locale|
36
36
  display_label(record, attr, locale) + display_value(record, attr, locale)
37
37
  end.reduce(:+)
38
38
  else
@@ -51,12 +51,20 @@ module Decidim
51
51
 
52
52
  # Private: Holds the logic to render the attribute value.
53
53
  def display_value(record, attr, locale = nil)
54
- return I18n.with_locale(locale) do
55
- content_tag(:dd, translated_attribute(record.send(attr)).try(:html_safe))
56
- end if locale
54
+ if locale
55
+ return I18n.with_locale(locale) do
56
+ content_tag(:dd, translated_attribute(record.send(attr)).try(:html_safe))
57
+ end
58
+ end
57
59
 
58
60
  content_tag(:dd, record.send(attr).try(:html_safe))
59
61
  end
62
+
63
+ def display_available_locales(record)
64
+ return record.available_locales if record.respond_to?(:available_locales)
65
+ record.organization.available_locales if record.respond_to?(:organization)
66
+ current_organization.available_locales if respond_to?(:current_organization)
67
+ end
60
68
  end
61
69
  end
62
70
  end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ module Admin
4
+ module Abilities
5
+ # Defines the abilities for a user in the admin section. Intended to be
6
+ # used with `cancancan`.
7
+ class AdminUser
8
+ include CanCan::Ability
9
+
10
+ def initialize(user)
11
+ return unless user
12
+ return unless user.role?(:admin)
13
+
14
+ can :manage, ParticipatoryProcess
15
+ can :manage, ParticipatoryProcessStep
16
+ can :manage, Category
17
+ can :manage, ParticipatoryProcessUserRole
18
+ can [:create, :update, :index, :new, :read], StaticPage
19
+ can [:update_slug, :destroy], [StaticPage, StaticPageForm] do |page|
20
+ !StaticPage.default?(page.slug)
21
+ end
22
+ can [:read, :update], Decidim::Organization do |organization|
23
+ organization == user.organization
24
+ end
25
+
26
+ can :manage, Feature
27
+ can :read, :admin_dashboard
28
+ can :manage, ParticipatoryProcessAttachment
29
+ can :manage, Scope
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ module Admin
4
+ module Abilities
5
+ # Defines the abilities for a user in the admin section. Intended to be
6
+ # used with `cancancan`. Extended by both the base `Decidim::Ability`
7
+ # class and other engine-only abilities, like the
8
+ # `ParticipatoryProcessAdmin` ability class.
9
+ class Base
10
+ include CanCan::Ability
11
+
12
+ def initialize(user)
13
+ merge ::Decidim::Ability.new(user)
14
+ merge ParticipatoryProcessAdmin.new(user)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ module Admin
4
+ module Abilities
5
+ # Defines the abilities for a participatory process admin in the admin
6
+ # section. Intended to be used with `cancancan`. This is not intended to
7
+ # extend the base `Decidim::Ability` class, it should only be used in the
8
+ # Admin engine.
9
+ #
10
+ # This ability will not apply to organization admins.
11
+ class ParticipatoryProcessAdmin
12
+ include CanCan::Ability
13
+
14
+ def initialize(user)
15
+ return if user.role?(:admin)
16
+ participatory_processes = ManageableParticipatoryProcessesForUser.for(user)
17
+ return unless participatory_processes.any?
18
+
19
+ can :read, :admin_dashboard
20
+
21
+ can :manage, ParticipatoryProcess do |process|
22
+ participatory_processes.include?(process)
23
+ end
24
+
25
+ cannot :create, ParticipatoryProcess
26
+ cannot :destroy, ParticipatoryProcess
27
+
28
+ can :manage, ParticipatoryProcessUserRole do |role|
29
+ role.user != user
30
+ end
31
+
32
+ can :manage, ParticipatoryProcessAttachment do |step|
33
+ participatory_processes.include?(step.participatory_process)
34
+ end
35
+
36
+ can :manage, ParticipatoryProcessStep do |step|
37
+ participatory_processes.include?(step.participatory_process)
38
+ end
39
+
40
+ can :manage, Feature do |feature|
41
+ participatory_processes.include?(feature.participatory_process)
42
+ end
43
+
44
+ can :manage, Category do |category|
45
+ participatory_processes.include?(category.participatory_process)
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ module Admin
4
+ # Defines a relation between a user and a participatory process, and what
5
+ # kind of relation does the user has.
6
+ class ParticipatoryProcessUserRole < ApplicationRecord
7
+ belongs_to :user, foreign_key: "decidim_user_id", class_name: Decidim::User
8
+ belongs_to :participatory_process, foreign_key: "decidim_participatory_process_id", class_name: Decidim::ParticipatoryProcess
9
+
10
+ ROLES = %w(admin).freeze
11
+ validates :role, inclusion: { in: ROLES }
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ module Admin
4
+ # A class used to find the ParticipatoryProcesses that the given user can
5
+ # manage.
6
+ class ManageableParticipatoryProcessesForUser < Rectify::Query
7
+ # Syntactic sugar to initialize the class and return the queried objects.
8
+ #
9
+ # user - a User that needs to find which processes can manage
10
+ def self.for(user)
11
+ new(user).query
12
+ end
13
+
14
+ # Initializes the class.
15
+ #
16
+ # user - a User that needs to find which processes can manage
17
+ def initialize(user)
18
+ @user = user
19
+ end
20
+
21
+ # Finds the ParticipatoryProcesses that the given user can manage.
22
+ #
23
+ # Returns an ActiveRecord::Relation.
24
+ def query
25
+ return user.organization.participatory_processes if user.role?(:admin)
26
+
27
+ ParticipatoryProcess.where(id: process_ids)
28
+ end
29
+
30
+ private
31
+
32
+ attr_reader :user
33
+
34
+ def process_ids
35
+ ParticipatoryProcessUserRole
36
+ .where(user: user, role: :admin)
37
+ .pluck(:decidim_participatory_process_id)
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ module Admin
4
+ # A class used to find the roles of the users that can manage a given
5
+ # participatory process in a process admin role (that is, processs that are
6
+ # not organization admins).
7
+ class ProcessAdminRolesForProcess < Rectify::Query
8
+ # Syntactic sugar to initialize the class and return the queried objects.
9
+ #
10
+ # process - a process that needs to find its process admins
11
+ def self.for(process)
12
+ new(process).query
13
+ end
14
+
15
+ # Initializes the class.
16
+ #
17
+ # process - a process that needs to find its process admins
18
+ def initialize(process)
19
+ @process = process
20
+ end
21
+
22
+ # Finds the UserRoles of the users that can manage the given process.
23
+ #
24
+ # Returns an ActiveRecord::Relation.
25
+ def query
26
+ ParticipatoryProcessUserRole
27
+ .where(participatory_process: process, role: :admin)
28
+ end
29
+
30
+ private
31
+
32
+ attr_reader :process
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,12 @@
1
+ <div class="field">
2
+ <%= form.translated :text_field, :name, autofocus: true %>
3
+ </div>
4
+
5
+ <div class="field">
6
+ <%= form.translated :editor, :description %>
7
+ </div>
8
+
9
+ <div class="field">
10
+ <%= form.label :parent_id %>
11
+ <%= select :category, :parent_id, @form.parent_categories.collect { |c| [c.name[current_organization.default_locale], c.id] }, include_blank: true %>
12
+ </div>
@@ -0,0 +1,9 @@
1
+ <h3><%= t ".title" %></h3>
2
+
3
+ <%= form_for(@form, url: participatory_process_category_path(@category.participatory_process, @category)) do |f| %>
4
+ <%= render partial: 'form', object: f %>
5
+
6
+ <div class="actions">
7
+ <%= f.submit t(".update") %>
8
+ </div>
9
+ <% end %>
@@ -0,0 +1,44 @@
1
+ <section id="categories">
2
+ <h4><%= t(".categories_title", scope: "decidim.admin") %></h4>
3
+
4
+ <% if can? :create, Decidim::Category %>
5
+ <div class="actions title">
6
+ <%= link_to t("actions.new", scope: "decidim.admin", name: t("models.category.name", scope: "decidim.admin")), new_participatory_process_category_path(participatory_process), class: 'new' %>
7
+ </div>
8
+ <% end %>
9
+
10
+ <% if participatory_process.categories.any? %>
11
+ <table class="stack">
12
+ <thead>
13
+ <tr>
14
+ <th><%= t("models.category.fields.name", scope: "decidim.admin") %></th>
15
+ <th class="actions"><%= t("actions.title", scope: "decidim.admin") %></th>
16
+ </tr>
17
+ </thead>
18
+ <tbody>
19
+ <% participatory_process.categories.first_class.each do |category| %>
20
+ <tr>
21
+ <td>
22
+ <%= link_to translated_attribute(category.name), participatory_process_category_path(participatory_process, category) %><br />
23
+ </td>
24
+ <td class="actions">
25
+ <%= link_to t("actions.edit", scope: "decidim.admin"), edit_participatory_process_category_path(participatory_process, category) if can? :update, category %>
26
+ <%= link_to t("actions.destroy", scope: "decidim.admin"), participatory_process_category_path(participatory_process, category), method: :delete, class: "small alert button", data: { confirm: t("actions.confirm_destroy", scope: "decidim.admin") } if can? :destroy, category %>
27
+ </td>
28
+ </tr>
29
+ <% category.subcategories.each do |subcategory| %>
30
+ <tr class="subcategory">
31
+ <td>
32
+ <%= link_to translated_attribute(subcategory.name), participatory_process_category_path(participatory_process, subcategory) %><br />
33
+ </td>
34
+ <td class="actions">
35
+ <%= link_to t("actions.edit", scope: "decidim.admin"), edit_participatory_process_category_path(participatory_process, subcategory) if can? :update, subcategory %>
36
+ <%= link_to t("actions.destroy", scope: "decidim.admin"), participatory_process_category_path(participatory_process, subcategory), method: :delete, class: "small alert button", data: { confirm: t("actions.confirm_destroy", scope: "decidim.admin") } if can? :destroy, subcategory %>
37
+ </td>
38
+ </tr>
39
+ <% end %>
40
+ <% end %>
41
+ </tbody>
42
+ </table>
43
+ <% end %>
44
+ </section>
@@ -0,0 +1,9 @@
1
+ <h3><%= t ".title" %></h3>
2
+
3
+ <%= form_for(@form, url: participatory_process_categories_path(participatory_process)) do |f| %>
4
+ <%= render partial: 'form', object: f %>
5
+
6
+ <div class="actions">
7
+ <%= f.submit t(".create") %>
8
+ </div>
9
+ <% end %>
@@ -0,0 +1,14 @@
1
+ <h3><%= translated_attribute(@category.name) %></h3>
2
+
3
+ <div class="actions">
4
+ <hr />
5
+ <%= link_to t("decidim.admin.actions.edit"), ['edit', participatory_process, @category] if can? :update, @category %>
6
+ <%= link_to t("decidim.admin.actions.destroy"), [participatory_process, @category], method: :delete, class: "alert button", data: { confirm: t("decidim.admin.actions.confirm_destroy") } if can? :destroy, @category %>
7
+ </div>
8
+
9
+ <dl>
10
+ <%= display_for @category,
11
+ :name,
12
+ :description
13
+ %>
14
+ </dl>
@@ -0,0 +1,20 @@
1
+ <tr class="feature-<%= feature.id %>">
2
+ <td>
3
+ <%= link_to decidim.feature_path(participatory_process, feature), target: "_blank" do %>
4
+ <%= translated_attribute feature.name %>
5
+ <% end %>
6
+ </td>
7
+ <td>
8
+ <%= t "decidim.features.#{feature.manifest.name}.name" %>
9
+ </td>
10
+ <td class="actions">
11
+
12
+ <% if feature.manifest.admin_engine %>
13
+ <%= link_to manage_feature_path(participatory_process, feature), class: "button small" do %>
14
+ <%= t "actions.configure", scope: "decidim.admin" %>
15
+ <% end %>
16
+ <% end %>
17
+
18
+ <%= link_to t("actions.destroy", scope: "decidim.admin"), url_for(action: :destroy, id: feature, controller: "features"), method: :delete, class: "small alert button", data: { confirm: t("actions.confirm_destroy", scope: "decidim.admin") } if can? :destroy, feature %>
19
+ </td>
20
+ </tr>
@@ -0,0 +1,3 @@
1
+ <div class="field">
2
+ <%= form.translated :text_field, :name, autofocus: true %>
3
+ </div>
@@ -0,0 +1,23 @@
1
+ <section id="features">
2
+ <div class="row">
3
+ <div class="columns">
4
+ <h3><%= t("features.title", scope: "decidim.admin") %></h3>
5
+ </div>
6
+ <div class="small-4 columns text-right">
7
+ <button class="dropdown button" data-toggle="add-feature-dropdown"><%= t "features.index.add", scope: "decidim.admin" %></button>
8
+ <div class="dropdown-pane" id="add-feature-dropdown" data-dropdown data-auto-focus="true" data-close-on-click="true">
9
+ <ul class="vertical menu add-features">
10
+ <% @manifests.each do |manifest| %>
11
+ <li><%= link_to t("#{manifest.name}.name", scope: "decidim.features"), new_participatory_process_feature_path(type: manifest.name), class: manifest.name %></li>
12
+ <% end %>
13
+ </ul>
14
+ </div>
15
+ </div>
16
+ </div>
17
+
18
+ <table>
19
+ <tbody>
20
+ <%= render partial: "feature", collection: @features %>
21
+ </tbody>
22
+ </table>
23
+ </section>
@@ -0,0 +1,9 @@
1
+ <h3><%= t ".title", name: t("#{manifest.name}.name", scope: "decidim.features") %></h3>
2
+
3
+ <%= form_for([participatory_process, @form], url: participatory_process_features_path(type: params[:type]), method: "post") do |form| %>
4
+ <%= render partial: 'form', object: form %>
5
+
6
+ <div class="actions">
7
+ <%= form.submit t(".add") %>
8
+ </div>
9
+ <% end %>
@@ -0,0 +1,23 @@
1
+ <div class="field">
2
+ <%= form.text_field :name %>
3
+ </div>
4
+
5
+ <div class="field">
6
+ <%= form.translated :editor, :description %>
7
+ </div>
8
+
9
+ <div class="field">
10
+ <%= form.translated :text_area, :welcome_text %>
11
+ </div>
12
+
13
+ <div class="field">
14
+ <%= form.collection_select :default_locale, localized_locales(current_organization.available_locales), :id, :name %>
15
+ </div>
16
+
17
+ <div class="field">
18
+ <%= form.file_field :homepage_image %>
19
+ </div>
20
+
21
+ <div class="field">
22
+ <%= form.file_field :logo %>
23
+ </div>
@@ -0,0 +1,11 @@
1
+ <% content_for :title do %>
2
+ <h2><%= t ".title" %></h2>
3
+ <% end %>
4
+
5
+ <%= form_for(@form, url: organization_path) do |f| %>
6
+ <%= render partial: 'form', object: f %>
7
+
8
+ <div class="actions">
9
+ <%= f.submit t(".update") %>
10
+ </div>
11
+ <% end %>
@@ -0,0 +1,11 @@
1
+ <div class="field">
2
+ <%= form.translated :text_field, :title, autofocus: true %>
3
+ </div>
4
+
5
+ <div class="field">
6
+ <%= form.translated :editor, :description, toolbar: :full, lines: 20 %>
7
+ </div>
8
+
9
+ <div class="field">
10
+ <%= form.file_field :file %>
11
+ </div>
@@ -0,0 +1,9 @@
1
+ <h3><%= t ".title" %></h3>
2
+
3
+ <%= form_for(@form, url: participatory_process_attachment_path(@participatory_process_attachment.participatory_process, @participatory_process_attachment)) do |f| %>
4
+ <%= render partial: 'form', object: f %>
5
+
6
+ <div class="actions">
7
+ <%= f.submit t(".update") %>
8
+ </div>
9
+ <% end %>
@@ -0,0 +1,37 @@
1
+ <section id="attachments">
2
+ <h4><%= t(".attachments_title", scope: "decidim.admin") %></h4>
3
+
4
+ <% if can? :create, Decidim::ParticipatoryProcessAttachment %>
5
+ <div class="actions title">
6
+ <%= link_to t("actions.new", scope: "decidim.admin", name: t("models.participatory_process_attachment.name", scope: "decidim.admin")), new_participatory_process_attachment_path(participatory_process), class: 'new' %>
7
+ </div>
8
+ <% end %>
9
+
10
+ <% if participatory_process.attachments.any? %>
11
+ <table class="stack">
12
+ <thead>
13
+ <tr>
14
+ <th><%= t("models.participatory_process_attachment.fields.title", scope: "decidim.admin") %></th>
15
+ <th><%= t("models.participatory_process_attachment.fields.content_type", scope: "decidim.admin") %></th>
16
+ <th class="actions"><%= t("actions.title", scope: "decidim.admin") %></th>
17
+ </tr>
18
+ </thead>
19
+ <tbody>
20
+ <% participatory_process.attachments.each do |attachment| %>
21
+ <tr data-id="<%= attachment.id %>">
22
+ <td>
23
+ <%= link_to translated_attribute(attachment.title), participatory_process_attachment_path(participatory_process, attachment) %><br />
24
+ </td>
25
+ <td>
26
+ <%= attachment.file_type %>
27
+ </td>
28
+ <td class="actions">
29
+ <%= link_to t("actions.edit", scope: "decidim.admin"), edit_participatory_process_attachment_path(participatory_process, attachment) if can? :update, attachment %>
30
+ <%= link_to t("actions.destroy", scope: "decidim.admin"), participatory_process_attachment_path(participatory_process, attachment), method: :delete, class: "small alert button", data: { confirm: t("actions.confirm_destroy", scope: "decidim.admin") } if can? :destroy, attachment %>
31
+ </td>
32
+ </tr>
33
+ <% end %>
34
+ </tbody>
35
+ </table>
36
+ <% end %>
37
+ </section>
@@ -0,0 +1,9 @@
1
+ <h3><%= t ".title" %></h3>
2
+
3
+ <%= form_for(@form) do |f| %>
4
+ <%= render partial: 'form', object: f %>
5
+
6
+ <div class="actions">
7
+ <%= f.submit t(".create") %>
8
+ </div>
9
+ <% end %>
@@ -0,0 +1,25 @@
1
+ <h3><%= translated_attribute(@participatory_process_attachment.title) %></h3>
2
+
3
+ <div class="actions">
4
+ <hr />
5
+ <%= link_to t("decidim.admin.actions.edit"), ['edit', @participatory_process_attachment] if can? :update, @participatory_process_attachment %>
6
+ <%= link_to t("decidim.admin.actions.destroy"), @participatory_process_attachment, method: :delete, class: "alert button", data: { confirm: t("decidim.admin.actions.confirm_destroy") } if can? :destroy, @participatory_process_attachment %>
7
+ </div>
8
+
9
+ <dl>
10
+ <%= display_for @participatory_process_attachment,
11
+ :title,
12
+ :description,
13
+ :file_type
14
+ %>
15
+ <dt><%= display_label(@participatory_process_attachment, :file_size) %></dt>
16
+ <dd><%= number_to_human_size(@participatory_process_attachment.file_size) %></dd>
17
+ <dt><%= display_label(@participatory_process_attachment, :file) %></dt>
18
+ <% if @participatory_process_attachment.photo? %>
19
+ <%= link_to @participatory_process_attachment.big_url do %>
20
+ <%= image_tag @participatory_process_attachment.thumbnail_url, class:"thumbnail", alt: strip_tags(translated_attribute(@participatory_process_attachment.description)) %>
21
+ <% end %>
22
+ <% else %>
23
+ <%= link_to @participatory_process_attachment.url, @participatory_process_attachment.file.original_file_name %>
24
+ <% end %>
25
+ </dl>
@@ -3,11 +3,11 @@
3
3
  </div>
4
4
 
5
5
  <div class="field">
6
- <%= form.translated :text_area, :short_description %>
6
+ <%= form.translated :editor, :short_description %>
7
7
  </div>
8
8
 
9
9
  <div class="field">
10
- <%= form.translated :text_area, :description %>
10
+ <%= form.translated :editor, :description, toolbar: :full, lines: 20 %>
11
11
  </div>
12
12
 
13
13
  <div class="field">
@@ -1,6 +1,4 @@
1
- <% content_for :title do %>
2
- <h2><%= t ".title" %></h2>
3
- <% end %>
1
+ <h3><%= t ".title" %></h3>
4
2
 
5
3
  <%= form_for(@form, url: participatory_process_step_path(@participatory_process_step.participatory_process, @participatory_process_step)) do |f| %>
6
4
  <%= render partial: 'form', object: f %>
@@ -3,11 +3,11 @@
3
3
 
4
4
  <% if can? :create, Decidim::ParticipatoryProcessStep %>
5
5
  <div class="actions title">
6
- <%= link_to t("actions.new", scope: "decidim.admin", name: t("models.participatory_process_step.name", scope: "decidim.admin")), new_participatory_process_step_path(@participatory_process), class: 'new' %>
6
+ <%= link_to t("actions.new", scope: "decidim.admin", name: t("models.participatory_process_step.name", scope: "decidim.admin")), new_participatory_process_step_path(participatory_process), class: 'new' %>
7
7
  </div>
8
8
  <% end %>
9
9
 
10
- <% if @participatory_process.steps.any? %>
10
+ <% if participatory_process.steps.any? %>
11
11
  <p><%= t(".steps_hint", scope: "decidim.admin") %></p>
12
12
  <table class="stack">
13
13
  <thead>
@@ -19,31 +19,35 @@
19
19
  <th class="actions"><%= t("actions.title", scope: "decidim.admin") %></th>
20
20
  </tr>
21
21
  </thead>
22
- <tbody class="sortable" data-sort-url="<%= ordering_participatory_process_steps_path(@participatory_process) %>">
23
- <% @participatory_process.steps.each do |step| %>
22
+ <tbody class="sortable" data-sort-url="<%= ordering_participatory_process_steps_path(participatory_process) %>">
23
+ <% participatory_process.steps.each do |step| %>
24
24
  <tr data-id="<%= step.id %>">
25
25
  <td>
26
- <%= link_to translated_attribute(step.title), participatory_process_step_path(@participatory_process, step) %><br />
26
+ <%= link_to translated_attribute(step.title), participatory_process_step_path(participatory_process, step) %><br />
27
27
  </td>
28
28
  <td>
29
- <%= l step.start_date, format: :short %>
29
+ <% if step.start_date %>
30
+ <%= l step.start_date.to_date, format: :long %>
31
+ <% end%>
30
32
  </td>
31
33
  <td>
32
- <%= l step.end_date, format: :short %>
34
+ <% if step.end_date %>
35
+ <%= l step.end_date.to_date, format: :long %>
36
+ <% end%>
33
37
  </td>
34
38
  <td>
35
39
  <%= humanize_boolean step.active? %>
36
40
  </td>
37
41
  <td class="actions">
38
- <%= link_to t("actions.edit", scope: "decidim.admin"), edit_participatory_process_step_path(@participatory_process, step) if can? :update, step %>
42
+ <%= link_to t("actions.edit", scope: "decidim.admin"), edit_participatory_process_step_path(participatory_process, step) if can? :update, step %>
39
43
  <% if can? :activate, step %>
40
44
  <% if step.active? %>
41
- <%= link_to t("actions.deactivate", scope: "decidim.admin"), participatory_process_step_activate_path(@participatory_process, step), method: :delete, class: "small button secondary" %>
45
+ <%= link_to t("actions.deactivate", scope: "decidim.admin"), participatory_process_step_activate_path(participatory_process, step), method: :delete, class: "small button secondary" %>
42
46
  <% else %>
43
- <%= link_to t("actions.activate", scope: "decidim.admin"), participatory_process_step_activate_path(@participatory_process, step), method: :post, class: "small button secondary" %>
47
+ <%= link_to t("actions.activate", scope: "decidim.admin"), participatory_process_step_activate_path(participatory_process, step), method: :post, class: "small button secondary" %>
44
48
  <% end %>
45
49
  <% end %>
46
- <%= link_to t("actions.destroy", scope: "decidim.admin"), participatory_process_step_path(@participatory_process, step), method: :delete, class: "small alert button", data: { confirm: t("actions.confirm_destroy", scope: "decidim.admin") } if can? :destroy, step %>
50
+ <%= link_to t("actions.destroy", scope: "decidim.admin"), participatory_process_step_path(participatory_process, step), method: :delete, class: "small alert button", data: { confirm: t("actions.confirm_destroy", scope: "decidim.admin") } if can? :destroy, step %>
47
51
  </td>
48
52
  </tr>
49
53
  <% end %>
@@ -1,6 +1,4 @@
1
- <% content_for :title do %>
2
- <h2><%= t ".title" %></h2>
3
- <% end %>
1
+ <h3><%= t ".title" %></h3>
4
2
 
5
3
  <%= form_for(@form) do |f| %>
6
4
  <%= render partial: 'form', object: f %>