decidim-admin 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


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

Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/decidim/admin/application.js.es6 +3 -2
  3. data/app/assets/javascripts/decidim/admin/tab_focus.js.es6 +1 -1
  4. data/app/assets/stylesheets/decidim/admin/_foundation_and_overrides.scss +1 -1
  5. data/app/commands/decidim/admin/{create_participatory_process_attachment.rb → create_attachment.rb} +6 -7
  6. data/app/commands/decidim/admin/create_participatory_process.rb +12 -3
  7. data/app/commands/decidim/admin/{update_participatory_process_attachment.rb → update_attachment.rb} +7 -6
  8. data/app/commands/decidim/admin/update_feature.rb +2 -1
  9. data/app/commands/decidim/admin/update_organization.rb +1 -0
  10. data/app/commands/decidim/admin/update_participatory_process.rb +16 -4
  11. data/app/constraints/decidim/admin/organization_dashboard_constraint.rb +1 -1
  12. data/app/controllers/decidim/admin/application_controller.rb +2 -2
  13. data/app/controllers/decidim/admin/concerns/has_attachments.rb +116 -0
  14. data/app/controllers/decidim/admin/participatory_process_attachments_controller.rb +5 -67
  15. data/app/controllers/decidim/admin/users_controller.rb +5 -5
  16. data/app/forms/decidim/admin/{participatory_process_attachment_form.rb → attachment_form.rb} +2 -2
  17. data/app/forms/decidim/admin/feature_form.rb +1 -0
  18. data/app/forms/decidim/admin/organization_form.rb +1 -0
  19. data/app/forms/decidim/admin/participatory_process_form.rb +8 -1
  20. data/app/helpers/decidim/admin/application_helper.rb +1 -0
  21. data/app/helpers/decidim/admin/feature_settings_helper.rb +29 -0
  22. data/app/models/decidim/admin/abilities/admin_user.rb +4 -4
  23. data/app/models/decidim/admin/abilities/base.rb +3 -3
  24. data/app/models/decidim/admin/abilities/participatory_process_admin.rb +15 -7
  25. data/app/views/decidim/admin/{participatory_process_attachments → attachments}/_form.html.erb +0 -0
  26. data/app/views/decidim/admin/attachments/edit.html.erb +9 -0
  27. data/app/views/decidim/admin/attachments/index.html.erb +37 -0
  28. data/app/views/decidim/admin/attachments/new.html.erb +9 -0
  29. data/app/views/decidim/admin/attachments/show.html.erb +25 -0
  30. data/app/views/decidim/admin/features/_form.html.erb +1 -0
  31. data/app/views/decidim/admin/features/_settings_fields.html.erb +6 -3
  32. data/app/views/decidim/admin/organization/_form.html.erb +4 -0
  33. data/app/views/decidim/admin/participatory_processes/_form.html.erb +16 -0
  34. data/app/views/decidim/admin/participatory_processes/show.html.erb +11 -1
  35. data/app/views/layouts/decidim/admin/_header.html.erb +2 -2
  36. data/app/views/layouts/decidim/admin/_sidebar.html.erb +1 -1
  37. data/app/views/layouts/decidim/admin/participatory_process.html.erb +2 -2
  38. data/config/locales/ca.yml +29 -27
  39. data/config/locales/en.yml +29 -27
  40. data/config/locales/es.yml +29 -27
  41. data/config/routes.rb +1 -1
  42. data/db/migrate/20170128112958_change_user_groups_verified_to_timestamp.rb +9 -0
  43. data/lib/decidim/admin/engine.rb +2 -2
  44. data/lib/decidim/admin/test/manage_attachments_examples.rb +103 -0
  45. metadata +18 -35
  46. data/app/helpers/decidim/admin/aria_selected_link_to_helper.rb +0 -28
  47. data/app/views/decidim/admin/participatory_process_attachments/edit.html.erb +0 -9
  48. data/app/views/decidim/admin/participatory_process_attachments/index.html.erb +0 -37
  49. data/app/views/decidim/admin/participatory_process_attachments/new.html.erb +0 -9
  50. data/app/views/decidim/admin/participatory_process_attachments/show.html.erb +0 -25
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 43ab0a410b437196f1663001c22cf03810aed689
4
- data.tar.gz: 9b110d4bc37e0483b6e6c9756448701115261fb8
3
+ metadata.gz: a558feb308b27b688f8588f74871422a59d3efbc
4
+ data.tar.gz: 3300ce4311639a5a14bf6e8fd1c94e1776a5148e
5
5
  SHA512:
6
- metadata.gz: 9abf94828b7d759eb50dbb978b7d53c6262c7f37dd78f18d4ad64cca1513c5ca8433d3acd6a75bb8839b49a945e3f88b363522e7a7e91e322d570299240f71f1
7
- data.tar.gz: f45d28ff90b26b40234b2a4371d90e30ae7c900171a8278fc08d30e595996458d45fb45f680313b84ac2c05a3eadd4c5d7d67e8630ace71ee5828aa0cefe6b6c
6
+ metadata.gz: 70b3749d2b3fbbaeaa6318b93613d6661f65bd9187b4d1bccab8b872747ff7d0d7ef3c96ea0c5183038671a1d953655773b451e24d531eb1ba9f99cd23b369bf
7
+ data.tar.gz: 17f6d2bf2e8966b973a877f83644b8e42e7991782ef242a734a93391c4fda67c1f9f9ae7b56643c9af222742385dbc5bc3b031631962840e7af93cbc8e2f0883
@@ -3,7 +3,6 @@
3
3
  // = require jquery
4
4
  // = require jquery_ujs
5
5
  // = require foundation
6
- // = require turbolinks
7
6
  // = require html.sortable
8
7
  // = require ./sort_steps
9
8
  // = require ./tab_focus
@@ -15,4 +14,6 @@ const pageLoad = () => {
15
14
  sortSteps();
16
15
  };
17
16
 
18
- $(document).on('turbolinks:load', pageLoad);
17
+ $(() => {
18
+ pageLoad();
19
+ });
@@ -3,7 +3,7 @@
3
3
  /**
4
4
  * When switching tabs in i18n fields, autofocus on the input to save clicks #212
5
5
  */
6
- $(document).on('turbolinks:load', () => {
6
+ $(() => {
7
7
  // Event launched by foundation
8
8
  $('[data-tabs]').on('change.zf.tabs', (event) => {
9
9
  const $container = $(event.target).next('.tabs-content .tabs-panel.is-active');
@@ -27,7 +27,7 @@
27
27
  @include foundation-drilldown-menu;
28
28
  @include foundation-dropdown;
29
29
  @include foundation-dropdown-menu;
30
- @include foundation-flex-video;
30
+ @include foundation-responsive-embed;
31
31
  @include foundation-label;
32
32
  @include foundation-media-object;
33
33
  @include foundation-menu;
@@ -3,15 +3,14 @@ module Decidim
3
3
  module Admin
4
4
  # A command with all the business logic to add an attachment to a
5
5
  # participatory process.
6
- class CreateParticipatoryProcessAttachment < Rectify::Command
6
+ class CreateAttachment < Rectify::Command
7
7
  # Public: Initializes the command.
8
8
  #
9
9
  # form - A form object with the params.
10
- # participatory_process - The ParticipatoryProcess that will hold the
11
- # attachment
12
- def initialize(form, participatory_process)
10
+ # attached_to - The ActiveRecord::Base that will hold the attachment
11
+ def initialize(form, attached_to)
13
12
  @form = form
14
- @participatory_process = participatory_process
13
+ @attached_to = attached_to
15
14
  end
16
15
 
17
16
  # Executes the command. Broadcasts these events:
@@ -32,11 +31,11 @@ module Decidim
32
31
  attr_reader :form
33
32
 
34
33
  def create_attachment
35
- ParticipatoryProcessAttachment.create!(
34
+ Attachment.create!(
36
35
  title: form.title,
37
36
  description: form.description,
38
37
  file: form.file,
39
- participatory_process: @participatory_process
38
+ attached_to: @attached_to
40
39
  )
41
40
  end
42
41
  end
@@ -19,9 +19,15 @@ module Decidim
19
19
  # Returns nothing.
20
20
  def call
21
21
  return broadcast(:invalid) if form.invalid?
22
-
23
22
  process = create_participatory_process
24
- broadcast(:ok, process)
23
+
24
+ if process.persisted?
25
+ broadcast(:ok, process)
26
+ else
27
+ form.errors.add(:hero_image, process.errors[:hero_image]) if process.errors.include? :hero_image
28
+ form.errors.add(:banner_image, process.errors[:banner_image]) if process.errors.include? :banner_image
29
+ broadcast(:invalid)
30
+ end
25
31
  end
26
32
 
27
33
  private
@@ -30,7 +36,7 @@ module Decidim
30
36
 
31
37
  def create_participatory_process
32
38
  transaction do
33
- process = ParticipatoryProcess.create!(
39
+ process = ParticipatoryProcess.new(
34
40
  title: form.title,
35
41
  subtitle: form.subtitle,
36
42
  slug: form.slug,
@@ -43,6 +49,9 @@ module Decidim
43
49
  organization: form.current_organization
44
50
  )
45
51
 
52
+ return process unless process.valid?
53
+ process.save!
54
+
46
55
  process.steps.create!(
47
56
  title: TranslationsHelper.multi_translation(
48
57
  "decidim.admin.participatory_process_steps.default_title",
@@ -3,14 +3,15 @@ module Decidim
3
3
  module Admin
4
4
  # A command with all the business logic to update an attachment from a
5
5
  # participatory process.
6
- class UpdateParticipatoryProcessAttachment < Rectify::Command
7
- attr_reader :participatory_process_attachment
6
+ class UpdateAttachment < Rectify::Command
7
+ attr_reader :attachment
8
+
8
9
  # Public: Initializes the command.
9
10
  #
10
- # participatory_process_attachment - the ParticipatoryProcessAttachment to update
11
+ # attachment - the Attachment to update
11
12
  # form - A form object with the params.
12
- def initialize(participatory_process_attachment, form)
13
- @participatory_process_attachment = participatory_process_attachment
13
+ def initialize(attachment, form)
14
+ @attachment = attachment
14
15
  @form = form
15
16
  end
16
17
 
@@ -32,7 +33,7 @@ module Decidim
32
33
  attr_reader :form
33
34
 
34
35
  def update_attachment
35
- participatory_process_attachment.update_attributes!(attributes)
36
+ attachment.update_attributes!(attributes)
36
37
  end
37
38
 
38
39
  def attributes
@@ -35,7 +35,8 @@ module Decidim
35
35
  @feature.update_attributes(
36
36
  name: form.name,
37
37
  settings: form.settings,
38
- step_settings: form.step_settings
38
+ step_settings: form.step_settings,
39
+ weight: form.weight
39
40
  )
40
41
  end
41
42
 
@@ -42,6 +42,7 @@ module Decidim
42
42
  welcome_text: form.welcome_text,
43
43
  homepage_image: form.homepage_image || organization.homepage_image,
44
44
  logo: form.logo || organization.logo,
45
+ favicon: form.favicon || organization.favicon,
45
46
  default_locale: form.default_locale,
46
47
  show_statistics: form.show_statistics
47
48
  }
@@ -21,17 +21,25 @@ module Decidim
21
21
  # Returns nothing.
22
22
  def call
23
23
  return broadcast(:invalid) if form.invalid?
24
-
25
24
  update_participatory_process
26
- broadcast(:ok)
25
+
26
+ if @participatory_process.valid?
27
+ broadcast(:ok, @participatory_process)
28
+ else
29
+ form.errors.add(:hero_image, @participatory_process.errors[:hero_image]) if @participatory_process.errors.include? :hero_image
30
+ form.errors.add(:banner_image, @participatory_process.errors[:banner_image]) if @participatory_process.errors.include? :banner_image
31
+ broadcast(:invalid)
32
+ end
27
33
  end
28
34
 
35
+
29
36
  private
30
37
 
31
38
  attr_reader :form
32
39
 
33
40
  def update_participatory_process
34
- @participatory_process.update_attributes!(attributes)
41
+ @participatory_process.assign_attributes(attributes)
42
+ @participatory_process.save! if @participatory_process.valid?
35
43
  end
36
44
 
37
45
  def attributes
@@ -44,7 +52,11 @@ module Decidim
44
52
  banner_image: form.banner_image,
45
53
  promoted: form.promoted,
46
54
  description: form.description,
47
- short_description: form.short_description
55
+ short_description: form.short_description,
56
+ domain: form.domain,
57
+ scope: form.scope,
58
+ developer_group: form.developer_group,
59
+ end_date: form.end_date
48
60
  }.compact
49
61
  end
50
62
  end
@@ -33,7 +33,7 @@ module Decidim
33
33
  end
34
34
 
35
35
  def ability
36
- Decidim::Admin::Abilities::Base.new(user)
36
+ Decidim::Admin::Abilities::Base.new(user, current_organization: organization)
37
37
  end
38
38
  end
39
39
  end
@@ -16,8 +16,8 @@ module Decidim
16
16
 
17
17
  # Overwrites `cancancan`'s method to point to the correct ability class,
18
18
  # since the gem expects the ability class to be in the root namespace.
19
- def current_ability
20
- @current_ability ||= Decidim::Admin::Abilities::Base.new(current_user)
19
+ def current_ability_klass
20
+ Decidim::Admin::Abilities::Base
21
21
  end
22
22
  end
23
23
  end
@@ -0,0 +1,116 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ module Admin
4
+ module Concerns
5
+ # Attachments can be related to any class in Decidim, in order to
6
+ # manage the attachments for a given type, you should create a new
7
+ # controller and include this concern.
8
+ #
9
+ # The only requirement is to define a `attached_to` method that
10
+ # returns an instance of the model to attach the attachment to.
11
+ module HasAttachments
12
+ extend ActiveSupport::Concern
13
+
14
+ included do
15
+ helper_method :attached_to, :authorization_object
16
+
17
+ def index
18
+ authorize! :read, authorization_object
19
+
20
+ render template: "decidim/admin/attachments/index"
21
+ end
22
+
23
+ def new
24
+ authorize! :create, authorization_object
25
+ @form = form(AttachmentForm).instance
26
+ render template: "decidim/admin/attachments/new"
27
+ end
28
+
29
+ def create
30
+ authorize! :create, authorization_object
31
+ @form = form(AttachmentForm).from_params(params)
32
+
33
+ CreateAttachment.call(@form, attached_to) do
34
+ on(:ok) do
35
+ flash[:notice] = I18n.t("attachments.create.success", scope: "decidim.admin")
36
+ redirect_to action: :index
37
+ end
38
+
39
+ on(:invalid) do
40
+ flash.now[:alert] = I18n.t("attachments.create.error", scope: "decidim.admin")
41
+ render template: "decidim/admin/attachments/new"
42
+ end
43
+ end
44
+ end
45
+
46
+ def edit
47
+ @attachment = collection.find(params[:id])
48
+ authorize! :update, authorization_object
49
+ @form = form(AttachmentForm).from_model(@attachment)
50
+ render template: "decidim/admin/attachments/edit"
51
+ end
52
+
53
+ def update
54
+ @attachment = collection.find(params[:id])
55
+ authorize! :update, authorization_object
56
+ @form = form(AttachmentForm).from_params(params)
57
+
58
+ UpdateAttachment.call(@attachment, @form) do
59
+ on(:ok) do
60
+ flash[:notice] = I18n.t("attachments.update.success", scope: "decidim.admin")
61
+ redirect_to action: :index
62
+ end
63
+
64
+ on(:invalid) do
65
+ flash.now[:alert] = I18n.t("attachments.update.error", scope: "decidim.admin")
66
+ render template: "decidim/admin/attachments/edit"
67
+ end
68
+ end
69
+ end
70
+
71
+ def show
72
+ @attachment = collection.find(params[:id])
73
+ authorize! :read, authorization_object
74
+ render template: "decidim/admin/attachments/show"
75
+ end
76
+
77
+ def destroy
78
+ @attachment = collection.find(params[:id])
79
+ authorize! :destroy, authorization_object
80
+ @attachment.destroy!
81
+
82
+ flash[:notice] = I18n.t("attachments.destroy.success", scope: "decidim.admin")
83
+
84
+ redirect_to after_destroy_path
85
+ end
86
+
87
+ # Public: Returns a String or Object that will be passed to `redirect_to` after
88
+ # destroying an attachment. By default it redirects to the attached_to.
89
+ #
90
+ # It can be redefined at controller level if you need to redirect elsewhere.
91
+ def after_destroy_path
92
+ attached_to
93
+ end
94
+
95
+ # Public: The only method to be implemented at the controller. You need to
96
+ # return the object where the attachment will be attached to.
97
+ def attached_to
98
+ raise NotImplementedError
99
+ end
100
+
101
+ # Public: The Class or Object to be used with the authorization layer to
102
+ # verify the user can manage the attachments
103
+ #
104
+ # By default is the same as the attached_to.
105
+ def authorization_object
106
+ attached_to
107
+ end
108
+
109
+ def collection
110
+ @collection ||= attached_to.attachments
111
+ end
112
+ end
113
+ end
114
+ end
115
+ end
116
+ end
@@ -8,76 +8,14 @@ module Decidim
8
8
  #
9
9
  class ParticipatoryProcessAttachmentsController < ApplicationController
10
10
  include Concerns::ParticipatoryProcessAdmin
11
+ include Concerns::HasAttachments
11
12
 
12
- def index
13
- authorize! :read, ParticipatoryProcessAttachment
13
+ def attached_to
14
+ participatory_process
14
15
  end
15
16
 
16
- def new
17
- authorize! :create, ParticipatoryProcessAttachment
18
- @form = form(ParticipatoryProcessAttachmentForm).instance
19
- end
20
-
21
- def create
22
- authorize! :create, ParticipatoryProcessAttachment
23
- @form = form(ParticipatoryProcessAttachmentForm).from_params(params)
24
-
25
- CreateParticipatoryProcessAttachment.call(@form, participatory_process) do
26
- on(:ok) do
27
- flash[:notice] = I18n.t("participatory_process_attachments.create.success", scope: "decidim.admin")
28
- redirect_to participatory_process_attachments_path(participatory_process)
29
- end
30
-
31
- on(:invalid) do
32
- flash.now[:alert] = I18n.t("participatory_process_attachments.create.error", scope: "decidim.admin")
33
- render :new
34
- end
35
- end
36
- end
37
-
38
- def edit
39
- @participatory_process_attachment = collection.find(params[:id])
40
- authorize! :update, @participatory_process_attachment
41
- @form = form(ParticipatoryProcessAttachmentForm).from_model(@participatory_process_attachment)
42
- end
43
-
44
- def update
45
- @participatory_process_attachment = collection.find(params[:id])
46
- authorize! :update, @participatory_process_attachment
47
- @form = form(ParticipatoryProcessAttachmentForm).from_params(params)
48
-
49
- UpdateParticipatoryProcessAttachment.call(@participatory_process_attachment, @form) do
50
- on(:ok) do
51
- flash[:notice] = I18n.t("participatory_process_attachments.update.success", scope: "decidim.admin")
52
- redirect_to participatory_process_attachments_path(participatory_process)
53
- end
54
-
55
- on(:invalid) do
56
- flash.now[:alert] = I18n.t("participatory_process_attachments.update.error", scope: "decidim.admin")
57
- render :edit
58
- end
59
- end
60
- end
61
-
62
- def show
63
- @participatory_process_attachment = collection.find(params[:id])
64
- authorize! :read, @participatory_process_attachment
65
- end
66
-
67
- def destroy
68
- @participatory_process_attachment = collection.find(params[:id])
69
- authorize! :destroy, @participatory_process_attachment
70
- @participatory_process_attachment.destroy!
71
-
72
- flash[:notice] = I18n.t("participatory_process_attachments.destroy.success", scope: "decidim.admin")
73
-
74
- redirect_to participatory_process_attachments_path(@participatory_process_attachment.participatory_process)
75
- end
76
-
77
- private
78
-
79
- def collection
80
- @collection ||= participatory_process.attachments
17
+ def authorization_object
18
+ @attachment || Attachment
81
19
  end
82
20
  end
83
21
  end
@@ -7,17 +7,17 @@ module Decidim
7
7
  #
8
8
  class UsersController < Admin::ApplicationController
9
9
  def index
10
- authorize! :index, User
10
+ authorize! :index, :admin_users
11
11
  @users = collection
12
12
  end
13
13
 
14
14
  def new
15
- authorize! :new, User
15
+ authorize! :new, :admin_users
16
16
  @form = form(InviteAdminForm).instance
17
17
  end
18
18
 
19
19
  def create
20
- authorize! :new, User
20
+ authorize! :new, :admin_users
21
21
 
22
22
  default_params = {
23
23
  organization: current_organization,
@@ -42,7 +42,7 @@ module Decidim
42
42
  end
43
43
 
44
44
  def resend_invitation
45
- authorize! :invite, user
45
+ authorize! :invite, :admin_users
46
46
 
47
47
  InviteUserAgain.call(user, "invite_admin") do
48
48
  on(:ok) do
@@ -58,7 +58,7 @@ module Decidim
58
58
  end
59
59
 
60
60
  def destroy
61
- authorize! :destroy, user
61
+ authorize! :destroy, :admin_users
62
62
 
63
63
  RemoveUserRole.call(user, "admin") do
64
64
  on(:ok) do
@@ -3,14 +3,14 @@ module Decidim
3
3
  module Admin
4
4
  # A form object used to create attachments in a participatory process.
5
5
  #
6
- class ParticipatoryProcessAttachmentForm < Form
6
+ class AttachmentForm < Form
7
7
  include TranslatableAttributes
8
8
 
9
9
  attribute :file
10
10
  translatable_attribute :title, String
11
11
  translatable_attribute :description, String
12
12
 
13
- mimic :participatory_process_attachment
13
+ mimic :attachment
14
14
 
15
15
  validates :file, presence: true, unless: :persisted?
16
16
  validates :title, :description, translatable_presence: true
@@ -14,6 +14,7 @@ module Decidim
14
14
 
15
15
  attribute :settings, Object
16
16
  attribute :manifest
17
+ attribute :weight, Integer, default: 0
17
18
 
18
19
  attribute :step_settings, Hash[String => Object]
19
20
  attribute :participatory_process
@@ -14,6 +14,7 @@ module Decidim
14
14
  attribute :default_locale, String
15
15
  attribute :homepage_image
16
16
  attribute :logo
17
+ attribute :favicon
17
18
  attribute :show_statistics
18
19
 
19
20
  translatable_attribute :description, String
@@ -11,9 +11,13 @@ module Decidim
11
11
  translatable_attribute :subtitle, String
12
12
  translatable_attribute :description, String
13
13
  translatable_attribute :short_description, String
14
+ translatable_attribute :domain, String
15
+ translatable_attribute :scope, String
14
16
 
15
17
  mimic :participatory_process
16
18
 
19
+ attribute :end_date, Date
20
+ attribute :developer_group, String
17
21
  attribute :slug, String
18
22
  attribute :hashtag, String
19
23
  attribute :promoted, Boolean
@@ -25,7 +29,10 @@ module Decidim
25
29
 
26
30
  validate :slug, :slug_uniqueness
27
31
 
28
- private
32
+ validates :hero_image, file_size: { less_than_or_equal_to: lambda { |_record| Decidim.maximum_attachment_size } }, file_content_type: { allow: ['image/jpeg', 'image/png'] }
33
+ validates :banner_image, file_size: { less_than_or_equal_to:lambda { |_record| Decidim.maximum_attachment_size } }, file_content_type: { allow: ['image/jpeg', 'image/png'] }
34
+
35
+ private
29
36
 
30
37
  def slug_uniqueness
31
38
  return unless current_organization.participatory_processes.where(slug: slug).where.not(id: id).any?
@@ -7,6 +7,7 @@ module Decidim
7
7
  include Decidim::LocalizedLocalesHelper
8
8
  include Decidim::TranslationsHelper
9
9
  include Decidim::HumanizeBooleansHelper
10
+ include Decidim::AriaSelectedLinkToHelper
10
11
 
11
12
  def title
12
13
  current_organization.name
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ module Admin
4
+ # This class contains helpers needed in order for feature settings to
5
+ # properly render.
6
+ module FeatureSettingsHelper
7
+ TYPES = {
8
+ boolean: :check_box,
9
+ integer: :number_field,
10
+ string: :text_field,
11
+ text: :text_area
12
+ }.freeze
13
+
14
+ # Public: Renders a form field that matches a settings attribute's
15
+ # type.
16
+ #
17
+ # form - The form in which to render the field.
18
+ # attribute - The FeatureSettings::Attribute instance with the
19
+ # description of the attribute.
20
+ # name - The name of the field.
21
+ # options - Extra options to be passed to the field helper.
22
+ #
23
+ # Returns a rendered form field.
24
+ def settings_attribute_input(form, attribute, name, options = {})
25
+ form.send(TYPES[attribute.type.to_sym], name, options)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -7,9 +7,8 @@ module Decidim
7
7
  class AdminUser
8
8
  include CanCan::Ability
9
9
 
10
- def initialize(user)
11
- return unless user
12
- return unless user.role?(:admin)
10
+ def initialize(user, _context)
11
+ return unless user && user.role?(:admin)
13
12
 
14
13
  can :manage, ParticipatoryProcess
15
14
  can :manage, ParticipatoryProcessStep
@@ -25,7 +24,8 @@ module Decidim
25
24
 
26
25
  can :manage, Feature
27
26
  can :read, :admin_dashboard
28
- can :manage, ParticipatoryProcessAttachment
27
+ can :manage, :admin_users
28
+ can :manage, Attachment
29
29
  can :manage, Scope
30
30
  can [:create, :index, :new, :read, :invite], User
31
31
  can [:destroy], [User] do |user_to_destroy|
@@ -9,9 +9,9 @@ module Decidim
9
9
  class Base
10
10
  include CanCan::Ability
11
11
 
12
- def initialize(user)
13
- merge ::Decidim::Ability.new(user)
14
- merge ParticipatoryProcessAdmin.new(user)
12
+ def initialize(user, context)
13
+ merge ::Decidim::Ability.new(user, context)
14
+ merge ParticipatoryProcessAdmin.new(user, context)
15
15
  end
16
16
  end
17
17
  end
@@ -11,12 +11,14 @@ module Decidim
11
11
  class ParticipatoryProcessAdmin
12
12
  include CanCan::Ability
13
13
 
14
- def initialize(user)
15
- return if user.role?(:admin)
16
- participatory_processes = ManageableParticipatoryProcessesForUser.for(user)
17
- return unless participatory_processes.any?
14
+ def initialize(user, _context)
15
+ @user = user
18
16
 
19
- can :read, :admin_dashboard
17
+ return unless user && !user.role?(:admin)
18
+
19
+ can :read, :admin_dashboard do
20
+ participatory_processes.any?
21
+ end
20
22
 
21
23
  can :manage, ParticipatoryProcess do |process|
22
24
  participatory_processes.include?(process)
@@ -25,12 +27,14 @@ module Decidim
25
27
  cannot :create, ParticipatoryProcess
26
28
  cannot :destroy, ParticipatoryProcess
27
29
 
30
+ cannot :manage, :admin_users
31
+
28
32
  can :manage, ParticipatoryProcessUserRole do |role|
29
33
  role.user != user
30
34
  end
31
35
 
32
- can :manage, ParticipatoryProcessAttachment do |step|
33
- participatory_processes.include?(step.participatory_process)
36
+ can :manage, Attachment do |attachment|
37
+ participatory_processes.include?(attachment.attached_to)
34
38
  end
35
39
 
36
40
  can :manage, ParticipatoryProcessStep do |step|
@@ -45,6 +49,10 @@ module Decidim
45
49
  participatory_processes.include?(category.participatory_process)
46
50
  end
47
51
  end
52
+
53
+ def participatory_processes
54
+ @participatory_processes ||= ManageableParticipatoryProcessesForUser.for(@user)
55
+ end
48
56
  end
49
57
  end
50
58
  end