decidim-admin 0.0.1 → 0.0.2

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.

Potentially problematic release.


This version of decidim-admin might be problematic. Click here for more details.

Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +1 -1
  3. data/app/assets/javascripts/decidim/admin/application.js.es6 +0 -1
  4. data/app/assets/stylesheets/decidim/admin/_foundation_and_overrides.scss +1 -0
  5. data/app/assets/stylesheets/decidim/admin/_icons.scss +9 -0
  6. data/app/assets/stylesheets/decidim/admin/application.scss +1 -0
  7. data/app/commands/decidim/admin/create_feature.rb +3 -1
  8. data/app/commands/decidim/admin/create_participatory_process.rb +26 -14
  9. data/app/commands/decidim/admin/destroy_feature.rb +5 -0
  10. data/app/commands/decidim/admin/destroy_participatory_process_step.rb +29 -0
  11. data/app/commands/decidim/admin/update_feature.rb +47 -0
  12. data/app/commands/decidim/admin/update_organization.rb +3 -1
  13. data/app/controllers/decidim/admin/features_controller.rb +37 -2
  14. data/app/controllers/decidim/admin/participatory_process_step_activations_controller.rb +0 -16
  15. data/app/controllers/decidim/admin/participatory_process_steps_controller.rb +10 -3
  16. data/app/controllers/decidim/admin/static_pages_controller.rb +4 -4
  17. data/app/controllers/decidim/admin/user_groups_controller.rb +32 -0
  18. data/app/controllers/decidim/admin/users_controller.rb +87 -0
  19. data/app/forms/decidim/admin/category_form.rb +1 -7
  20. data/app/forms/decidim/admin/feature_form.rb +26 -0
  21. data/app/forms/decidim/admin/organization_form.rb +2 -0
  22. data/app/forms/decidim/admin/participatory_process_step_form.rb +1 -1
  23. data/app/forms/decidim/admin/static_page_form.rb +2 -3
  24. data/app/models/decidim/admin/abilities/admin_user.rb +6 -0
  25. data/app/views/decidim/admin/features/_feature.html.erb +4 -1
  26. data/app/views/decidim/admin/features/_form.html.erb +49 -0
  27. data/app/views/decidim/admin/features/_settings_fields.html.erb +5 -0
  28. data/app/views/decidim/admin/features/edit.html.erb +9 -0
  29. data/app/views/decidim/admin/features/index.html.erb +6 -0
  30. data/app/views/decidim/admin/features/new.html.erb +1 -1
  31. data/app/views/decidim/admin/organization/_form.html.erb +8 -0
  32. data/app/views/decidim/admin/participatory_process_attachments/_form.html.erb +1 -1
  33. data/app/views/decidim/admin/participatory_process_steps/index.html.erb +2 -6
  34. data/app/views/decidim/admin/user_groups/index.html.erb +32 -0
  35. data/app/views/decidim/admin/users/_form.html.erb +6 -0
  36. data/app/views/decidim/admin/users/index.html.erb +54 -0
  37. data/app/views/decidim/admin/users/new.html.erb +11 -0
  38. data/app/views/layouts/decidim/admin/_sidebar.html.erb +2 -0
  39. data/app/views/layouts/decidim/admin/participatory_process.html.erb +1 -1
  40. data/config/i18n-tasks.yml +1 -0
  41. data/config/locales/ca.yml +103 -5
  42. data/config/locales/en.yml +57 -4
  43. data/config/locales/es.yml +103 -5
  44. data/config/routes.rb +11 -0
  45. data/lib/decidim/admin/features/base_controller.rb +7 -3
  46. data/lib/decidim/admin/test/factories.rb +8 -0
  47. metadata +23 -25
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 46d6185dd125a2294268f3ecd81a04bda650cd19
4
- data.tar.gz: 7285fb73b6dc707318b4aa7e6521361bc3324e8a
3
+ metadata.gz: 43ab0a410b437196f1663001c22cf03810aed689
4
+ data.tar.gz: 9b110d4bc37e0483b6e6c9756448701115261fb8
5
5
  SHA512:
6
- metadata.gz: 3ea15149f26cb7988fd7493bd77f194b7a2eb7b2b52dfa8b1d77f68e9390a5a601ef37301d5694827fa90f93ef77b66161e245c6c7568209dbb9016053647213
7
- data.tar.gz: 3b828b9ce5ba8de78d7340c1272f7fddace5f5221a2ce0c4f99369ba9338a7e12d9ff21dde3fc6300abc06b41e4a8b73b73fa3a45f4f64f4222a1c279e50c7c7
6
+ metadata.gz: 9abf94828b7d759eb50dbb978b7d53c6262c7f37dd78f18d4ad64cca1513c5ca8433d3acd6a75bb8839b49a945e3f88b363522e7a7e91e322d570299240f71f1
7
+ data.tar.gz: f45d28ff90b26b40234b2a4371d90e30ae7c900171a8278fc08d30e595996458d45fb45f680313b84ac2c05a3eadd4c5d7d67e8630ace71ee5828aa0cefe6b6c
data/Rakefile CHANGED
@@ -1,2 +1,2 @@
1
1
  # frozen_string_literal: true
2
- require "decidim/common_rake"
2
+ require "decidim/dev/common_rake"
@@ -16,4 +16,3 @@ const pageLoad = () => {
16
16
  };
17
17
 
18
18
  $(document).on('turbolinks:load', pageLoad);
19
- $(pageLoad);
@@ -22,6 +22,7 @@
22
22
  @include foundation-breadcrumbs;
23
23
  @include foundation-button-group;
24
24
  @include foundation-callout;
25
+ @include foundation-card;
25
26
  @include foundation-close-button;
26
27
  @include foundation-drilldown-menu;
27
28
  @include foundation-dropdown;
@@ -0,0 +1,9 @@
1
+ .icon{
2
+ height: 0.8em;
3
+ width: 0.8em;
4
+ display: inline;
5
+ vertical-align: middle;
6
+ fill: currentColor;
7
+ margin-left: .1rem;
8
+ margin-right: .1rem;
9
+ }
@@ -5,6 +5,7 @@
5
5
  @import "tables";
6
6
  @import "actions";
7
7
  @import "forms";
8
+ @import "icons";
8
9
 
9
10
  @import "decidim/editor";
10
11
  @import "decidim/utils/fontface";
@@ -36,7 +36,9 @@ module Decidim
36
36
  @feature = Feature.create!(
37
37
  manifest_name: manifest.name,
38
38
  name: form.name,
39
- participatory_process: participatory_process
39
+ participatory_process: participatory_process,
40
+ settings: @form.settings,
41
+ step_settings: form.step_settings
40
42
  )
41
43
  end
42
44
 
@@ -20,8 +20,8 @@ module Decidim
20
20
  def call
21
21
  return broadcast(:invalid) if form.invalid?
22
22
 
23
- create_participatory_process
24
- broadcast(:ok)
23
+ process = create_participatory_process
24
+ broadcast(:ok, process)
25
25
  end
26
26
 
27
27
  private
@@ -29,18 +29,30 @@ module Decidim
29
29
  attr_reader :form
30
30
 
31
31
  def create_participatory_process
32
- ParticipatoryProcess.create!(
33
- title: form.title,
34
- subtitle: form.subtitle,
35
- slug: form.slug,
36
- hashtag: form.hashtag,
37
- description: form.description,
38
- short_description: form.short_description,
39
- hero_image: form.hero_image,
40
- banner_image: form.banner_image,
41
- promoted: form.promoted,
42
- organization: form.current_organization
43
- )
32
+ transaction do
33
+ process = ParticipatoryProcess.create!(
34
+ title: form.title,
35
+ subtitle: form.subtitle,
36
+ slug: form.slug,
37
+ hashtag: form.hashtag,
38
+ description: form.description,
39
+ short_description: form.short_description,
40
+ hero_image: form.hero_image,
41
+ banner_image: form.banner_image,
42
+ promoted: form.promoted,
43
+ organization: form.current_organization
44
+ )
45
+
46
+ process.steps.create!(
47
+ title: TranslationsHelper.multi_translation(
48
+ "decidim.admin.participatory_process_steps.default_title",
49
+ form.current_organization.available_locales
50
+ ),
51
+ active: true
52
+ )
53
+
54
+ process
55
+ end
44
56
  end
45
57
  end
46
58
  end
@@ -26,11 +26,16 @@ module Decidim
26
26
 
27
27
  def destroy_feature
28
28
  transaction do
29
+ run_before_hooks
29
30
  @feature.destroy!
30
31
  run_hooks
31
32
  end
32
33
  end
33
34
 
35
+ def run_before_hooks
36
+ @feature.manifest.run_hooks(:before_destroy, @feature)
37
+ end
38
+
34
39
  def run_hooks
35
40
  @feature.manifest.run_hooks(:destroy, @feature)
36
41
  end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ module Admin
4
+ # A command that sets all steps in a participatory process as inactive
5
+ class DestroyParticipatoryProcessStep < Rectify::Command
6
+ # Public: Initializes the command.
7
+ #
8
+ # step - A ParticipatoryProcessStep that will be deactivated
9
+ def initialize(step)
10
+ @step = step
11
+ @participatory_process = step.participatory_process
12
+ end
13
+
14
+ # Executes the command. Broadcasts these events:
15
+ #
16
+ # - :ok when everything is valid.
17
+ # - :invalid if the data wasn't valid and we couldn't proceed.
18
+ #
19
+ # Returns nothing.
20
+ def call
21
+ return broadcast(:invalid, :last_step) if @participatory_process.steps.count == 1
22
+ return broadcast(:invalid, :active_step) if @step.active?
23
+
24
+ @step.destroy!
25
+ broadcast(:ok)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ module Admin
4
+ # This command gets called when a feature is created from the admin panel.
5
+ class UpdateFeature < Rectify::Command
6
+ attr_reader :form, :feature
7
+
8
+ # Public: Initializes the command.
9
+ #
10
+ # form - The form from which the data in this feature comes from.
11
+ # feature - The feature to update.
12
+ def initialize(form, feature)
13
+ @manifest = feature.manifest
14
+ @form = form
15
+ @feature = feature
16
+ end
17
+
18
+ # Public: Creates the Feature.
19
+ #
20
+ # Broadcasts :ok if created, :invalid otherwise.
21
+ def call
22
+ return broadcast(:invalid) if form.invalid?
23
+
24
+ transaction do
25
+ update_feature
26
+ run_hooks
27
+ end
28
+
29
+ broadcast(:ok)
30
+ end
31
+
32
+ private
33
+
34
+ def update_feature
35
+ @feature.update_attributes(
36
+ name: form.name,
37
+ settings: form.settings,
38
+ step_settings: form.step_settings
39
+ )
40
+ end
41
+
42
+ def run_hooks
43
+ @manifest.run_hooks(:update, @feature)
44
+ end
45
+ end
46
+ end
47
+ end
@@ -37,11 +37,13 @@ module Decidim
37
37
  def attributes
38
38
  {
39
39
  name: form.name,
40
+ twitter_handler: form.twitter_handler,
40
41
  description: form.description,
41
42
  welcome_text: form.welcome_text,
42
43
  homepage_image: form.homepage_image || organization.homepage_image,
43
44
  logo: form.logo || organization.logo,
44
- default_locale: form.default_locale
45
+ default_locale: form.default_locale,
46
+ show_statistics: form.show_statistics
45
47
  }
46
48
  end
47
49
  end
@@ -20,7 +20,13 @@ module Decidim
20
20
  def new
21
21
  authorize! :create, Feature
22
22
 
23
- @form = form(FeatureForm).instance(name: default_name(manifest))
23
+ @feature = Feature.new(
24
+ name: default_name(manifest),
25
+ manifest_name: params[:type],
26
+ participatory_process: participatory_process
27
+ )
28
+
29
+ @form = form(FeatureForm).from_model(@feature)
24
30
  end
25
31
 
26
32
  def create
@@ -40,8 +46,33 @@ module Decidim
40
46
  end
41
47
  end
42
48
 
49
+ def edit
50
+ @feature = query_scope.find(params[:id])
51
+ authorize! :update, @feature
52
+
53
+ @form = form(FeatureForm).from_model(@feature)
54
+ end
55
+
56
+ def update
57
+ @feature = query_scope.find(params[:id])
58
+ @form = form(FeatureForm).from_params(params)
59
+ authorize! :update, @feature
60
+
61
+ UpdateFeature.call(@form, @feature) do
62
+ on(:ok) do
63
+ flash[:notice] = I18n.t("features.update.success", scope: "decidim.admin")
64
+ redirect_to action: :index
65
+ end
66
+
67
+ on(:invalid) do
68
+ flash.now[:alert] = I18n.t("features.update.error", scope: "decidim.admin")
69
+ render action: "new"
70
+ end
71
+ end
72
+ end
73
+
43
74
  def destroy
44
- @feature = participatory_process.features.find(params[:id])
75
+ @feature = query_scope.find(params[:id])
45
76
  authorize! :destroy, @feature
46
77
 
47
78
  DestroyFeature.call(@feature) do
@@ -59,6 +90,10 @@ module Decidim
59
90
 
60
91
  private
61
92
 
93
+ def query_scope
94
+ participatory_process.features
95
+ end
96
+
62
97
  def manifest
63
98
  Decidim.find_feature_manifest(params[:type])
64
99
  end
@@ -24,22 +24,6 @@ module Decidim
24
24
  end
25
25
  end
26
26
 
27
- def destroy
28
- authorize! :deactivate, process_step
29
-
30
- DeactivateParticipatoryProcessStep.call(process_step) do
31
- on(:ok) do
32
- flash[:notice] = I18n.t("participatory_process_step_activations.destroy.success", scope: "decidim.admin")
33
- end
34
-
35
- on(:invalid) do
36
- flash.now[:alert] = I18n.t("participatory_process_step_activations.destroy.error", scope: "decidim.admin")
37
- end
38
-
39
- redirect_to participatory_process_steps_path(participatory_process)
40
- end
41
- end
42
-
43
27
  private
44
28
 
45
29
  def process_step
@@ -66,11 +66,18 @@ module Decidim
66
66
  def destroy
67
67
  @participatory_process_step = collection.find(params[:id])
68
68
  authorize! :destroy, @participatory_process_step
69
- @participatory_process_step.destroy!
70
69
 
71
- flash[:notice] = I18n.t("participatory_process_steps.destroy.success", scope: "decidim.admin")
70
+ DestroyParticipatoryProcessStep.call(@participatory_process_step) do
71
+ on(:ok) do
72
+ flash[:notice] = I18n.t("participatory_process_steps.destroy.success", scope: "decidim.admin")
73
+ redirect_to participatory_process_steps_path(participatory_process)
74
+ end
72
75
 
73
- redirect_to participatory_process_steps_path(@participatory_process_step.participatory_process)
76
+ on(:invalid) do |reason|
77
+ flash[:alert] = I18n.t("participatory_process_steps.destroy.error.#{reason}", scope: "decidim.admin")
78
+ redirect_to participatory_process_steps_path(participatory_process)
79
+ end
80
+ end
74
81
  end
75
82
 
76
83
  private
@@ -13,12 +13,12 @@ module Decidim
13
13
 
14
14
  def new
15
15
  authorize! :new, StaticPage
16
- @form = StaticPageForm.new
16
+ @form = form(StaticPageForm).instance
17
17
  end
18
18
 
19
19
  def create
20
20
  authorize! :new, StaticPage
21
- @form = StaticPageForm.from_params(form_params)
21
+ @form = form(StaticPageForm).from_params(form_params)
22
22
 
23
23
  CreateStaticPage.call(@form) do
24
24
  on(:ok) do
@@ -35,13 +35,13 @@ module Decidim
35
35
 
36
36
  def edit
37
37
  authorize! :update, page
38
- @form = StaticPageForm.from_model(page)
38
+ @form = form(StaticPageForm).from_model(page)
39
39
  end
40
40
 
41
41
  def update
42
42
  @page = collection.find(params[:id])
43
43
  authorize! :update, page
44
- @form = StaticPageForm.from_params(form_params)
44
+ @form = form(StaticPageForm).from_params(form_params)
45
45
 
46
46
  UpdateStaticPage.call(page, @form) do
47
47
  on(:ok) do
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Admin
5
+ # Controller that allows managing user groups at the admin panel.
6
+ #
7
+ class UserGroupsController < ApplicationController
8
+ def index
9
+ authorize! :index, UserGroup
10
+ @user_groups = collection
11
+ end
12
+
13
+ def verify
14
+ @user_group = collection.find(params[:id])
15
+ authorize! :verify, @user_group
16
+
17
+ @user_group.verify!
18
+
19
+ flash[:notice] = I18n.t("user_groups.verify.success", scope: "decidim.admin")
20
+ redirect_to decidim_admin.user_groups_path
21
+ end
22
+
23
+ private
24
+
25
+ def collection
26
+ UserGroup
27
+ .includes(:memberships)
28
+ .where(decidim_user_group_memberships: { decidim_user_id: current_organization.users })
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,87 @@
1
+ # frozen_string_literal: true
2
+ require_dependency "decidim/admin/application_controller"
3
+
4
+ module Decidim
5
+ module Admin
6
+ # Controller that allows managing all admins at the admin panel.
7
+ #
8
+ class UsersController < Admin::ApplicationController
9
+ def index
10
+ authorize! :index, User
11
+ @users = collection
12
+ end
13
+
14
+ def new
15
+ authorize! :new, User
16
+ @form = form(InviteAdminForm).instance
17
+ end
18
+
19
+ def create
20
+ authorize! :new, User
21
+
22
+ default_params = {
23
+ organization: current_organization,
24
+ invitation_instructions: "invite_admin",
25
+ roles: %w(admin),
26
+ invited_by: current_user
27
+ }
28
+
29
+ @form = form(InviteAdminForm).from_params(params.merge(default_params))
30
+
31
+ InviteUser.call(@form) do
32
+ on(:ok) do
33
+ flash[:notice] = I18n.t("users.create.success", scope: "decidim.admin")
34
+ redirect_to users_path
35
+ end
36
+
37
+ on(:invalid) do
38
+ flash.now[:alert] = I18n.t("users.create.error", scope: "decidim.admin")
39
+ render :new
40
+ end
41
+ end
42
+ end
43
+
44
+ def resend_invitation
45
+ authorize! :invite, user
46
+
47
+ InviteUserAgain.call(user, "invite_admin") do
48
+ on(:ok) do
49
+ flash[:notice] = I18n.t("users.resend_invitation.success", scope: "decidim.admin")
50
+ end
51
+
52
+ on(:invalid) do
53
+ flash[:alert] = I18n.t("users.resend_invitation.error", scope: "decidim.admin")
54
+ end
55
+ end
56
+
57
+ redirect_to users_path
58
+ end
59
+
60
+ def destroy
61
+ authorize! :destroy, user
62
+
63
+ RemoveUserRole.call(user, "admin") do
64
+ on(:ok) do
65
+ flash[:notice] = I18n.t("users.destroy.success", scope: "decidim.admin")
66
+ end
67
+
68
+ on(:invalid) do
69
+ flash[:alert] = I18n.t("users.destroy.error", scope: "decidim.admin")
70
+ end
71
+ end
72
+
73
+ redirect_to users_path
74
+ end
75
+
76
+ private
77
+
78
+ def user
79
+ @user ||= collection.find(params[:id])
80
+ end
81
+
82
+ def collection
83
+ @collection ||= current_organization.admins
84
+ end
85
+ end
86
+ end
87
+ end
@@ -13,15 +13,9 @@ module Decidim
13
13
  mimic :category
14
14
 
15
15
  validates :name, :description, translatable_presence: true
16
- validates :current_process, presence: true
17
16
  validates :parent_id, inclusion: { in: :parent_categories_ids }, allow_blank: true
18
17
 
19
- attr_reader :current_process
20
-
21
- def initialize(attributes = {})
22
- @current_process = attributes.delete("current_process") || attributes.delete(:current_process)
23
- super
24
- end
18
+ delegate :current_process, to: :context, prefix: false
25
19
 
26
20
  def parent_categories
27
21
  @parent_categories ||= current_process.categories.first_class.where.not(id: id)
@@ -11,6 +11,32 @@ module Decidim
11
11
 
12
12
  translatable_attribute :name, String
13
13
  validates :name, translatable_presence: true
14
+
15
+ attribute :settings, Object
16
+ attribute :manifest
17
+
18
+ attribute :step_settings, Hash[String => Object]
19
+ attribute :participatory_process
20
+
21
+ def map_model(model)
22
+ self.attributes = model.attributes
23
+ self.settings = model.settings
24
+ end
25
+
26
+ def settings?
27
+ settings.manifest.attributes.any?
28
+ end
29
+
30
+ def step_settings?
31
+ return false unless participatory_process.steps.any?
32
+
33
+ step_settings
34
+ .values
35
+ .map(&:manifest)
36
+ .flat_map(&:attributes)
37
+ .flat_map(&:keys)
38
+ .any?
39
+ end
14
40
  end
15
41
  end
16
42
  end
@@ -10,9 +10,11 @@ module Decidim
10
10
  mimic :organization
11
11
 
12
12
  attribute :name, String
13
+ attribute :twitter_handler, String
13
14
  attribute :default_locale, String
14
15
  attribute :homepage_image
15
16
  attribute :logo
17
+ attribute :show_statistics
16
18
 
17
19
  translatable_attribute :description, String
18
20
  translatable_attribute :welcome_text, String
@@ -16,7 +16,7 @@ module Decidim
16
16
  attribute :start_date, DateTime
17
17
  attribute :end_date, DateTime
18
18
 
19
- validates :title, :description, :short_description, translatable_presence: true
19
+ validates :title, translatable_presence: true
20
20
 
21
21
  validates :start_date, date: { before: :end_date, allow_blank: true, if: proc { |obj| obj.end_date.present? } }
22
22
  validates :end_date, date: { after: :start_date, allow_blank: true, if: proc { |obj| obj.start_date.present? } }
@@ -6,17 +6,16 @@ module Decidim
6
6
  include TranslatableAttributes
7
7
 
8
8
  attribute :slug, String
9
- attribute :organization, Decidim::Organization
10
9
  translatable_attribute :title, String
11
10
  translatable_attribute :content, String
12
11
 
13
12
  mimic :static_page
14
13
 
15
- validates :slug, :organization, presence: true
14
+ validates :slug, presence: true
16
15
  validates :title, :content, translatable_presence: true
17
16
  validate :slug, :slug_uniqueness
18
17
 
19
- alias current_organization organization
18
+ alias organization current_organization
20
19
 
21
20
  private
22
21
 
@@ -27,6 +27,12 @@ module Decidim
27
27
  can :read, :admin_dashboard
28
28
  can :manage, ParticipatoryProcessAttachment
29
29
  can :manage, Scope
30
+ can [:create, :index, :new, :read, :invite], User
31
+ can [:destroy], [User] do |user_to_destroy|
32
+ user != user_to_destroy
33
+ end
34
+
35
+ can [:index, :verify], UserGroup
30
36
  end
31
37
  end
32
38
  end
@@ -2,6 +2,7 @@
2
2
  <td>
3
3
  <%= link_to decidim.feature_path(participatory_process, feature), target: "_blank" do %>
4
4
  <%= translated_attribute feature.name %>
5
+ <%= icon "external-link" %>
5
6
  <% end %>
6
7
  </td>
7
8
  <td>
@@ -11,10 +12,12 @@
11
12
 
12
13
  <% if feature.manifest.admin_engine %>
13
14
  <%= link_to manage_feature_path(participatory_process, feature), class: "button small" do %>
14
- <%= t "actions.configure", scope: "decidim.admin" %>
15
+ <%= t "actions.manage", scope: "decidim.admin" %>
15
16
  <% end %>
16
17
  <% end %>
17
18
 
19
+ <%= link_to t("actions.configure", scope: "decidim.admin"), url_for(action: :edit, id: feature, controller: "features"), class: "small button" if can? :update, feature %>
20
+
18
21
  <%= 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
22
  </td>
20
23
  </tr>
@@ -1,3 +1,52 @@
1
1
  <div class="field">
2
2
  <%= form.translated :text_field, :name, autofocus: true %>
3
+
4
+ <% if form.object.settings? %>
5
+ <fieldset class="global-settings">
6
+ <div class="card">
7
+ <div class="card-divider">
8
+ <legend><%= t ".global_settings" %></legend>
9
+ </div>
10
+ <div class="card-section">
11
+ <%= form.fields_for :settings, form.object.settings do |settings_fields| %>
12
+ <%= render partial: "decidim/admin/features/settings_fields",
13
+ locals: {
14
+ form: settings_fields,
15
+ feature: @feature,
16
+ settings_name: "global"
17
+ } %>
18
+ <% end %>
19
+ </div>
20
+ </div>
21
+ </fieldset>
22
+ <% end %>
23
+
24
+ <% if form.object.step_settings? %>
25
+ <fieldset class="step-settings">
26
+ <div class="card">
27
+ <div class="card-divider">
28
+ <legend><%= t ".step_settings" %></legend>
29
+ </div>
30
+ <div class="card-section">
31
+ <% participatory_process.steps.each do |step| %>
32
+ <fieldset class="step-settings-<%= step.id %>">
33
+ <legend><%= step.position + 1 %>. <%= translated_attribute step.title %></legend>
34
+ <% step_settings = form.object.step_settings[step.id.to_s] %>
35
+
36
+ <%= form.fields_for "step_settings", nil do |settings_fields| %>
37
+ <%= settings_fields.fields_for step.id.to_s, step_settings do |settings_fields| %>
38
+ <%= render partial: "decidim/admin/features/settings_fields",
39
+ locals: {
40
+ form: settings_fields,
41
+ feature: feature,
42
+ settings_name: "step"
43
+ } %>
44
+ <% end %>
45
+ <% end %>
46
+ </fieldset>
47
+ <% end %>
48
+ </div>
49
+ </div>
50
+ </fieldset>
51
+ <% end %>
3
52
  </div>