decidim-admin 0.19.1 → 0.20.0

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.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ccb5adade7b808ed78ddf5a2230949499ecf89ac3caa8137c33f101d102b491c
4
- data.tar.gz: 91ea633c81dd2158de271b848cb7488451f9e172528793be0be5c179cbbda441
3
+ metadata.gz: 6169801bdd623d709157b8d278ccf08d493303fc5d01876a3920d86b724d7648
4
+ data.tar.gz: 507ccab28d2bfe28c66381572b38dccc7c04bc35360db85bbdd7ac1383c545d6
5
5
  SHA512:
6
- metadata.gz: 3b44337705c7eb4b16ad43d66232d751100ec59fcc61bf31e21c6bd8724ffee56e192294056b12e6746b37491a54896d0fae6aa686d4f4c6528a0488a4c556d3
7
- data.tar.gz: c6bc808309559c6e8b1ac7947cd5752d84f56c91093e8a98ee601cc4ffadfbbef43d82ed194d363e2bb7eee1c2d668a5a3775faf889f885aabf243dcab7bed91
6
+ metadata.gz: f2ebfe6737abc8c78cbf70ae9f6055a0f6a4f6ae755856d9e48fea09b3fbe10209f8ac133caee837f3bf0a4349e2c0ea05c86e2428f942c444faee2eb2447806
7
+ data.tar.gz: 3a3f72ed03709b39e91424887f1ef29606982ac15f27d7f5ef70336c607cc3f054b3b3608dd7741d00f87a14080d56727565a15b0205e27685b4a66884c0e107
@@ -1,4 +1,4 @@
1
- // = require jquery
1
+ // = require jquery3
2
2
  // = require foundation
3
3
  // = require rails-ujs
4
4
  // = require ./tab_focus
@@ -19,6 +19,7 @@
19
19
  // = require ./sortable
20
20
  // = require decidim/input_tags
21
21
  // = require decidim/input_hashtags
22
+ // = require decidim/input_mentions
22
23
  // = require_self
23
24
 
24
25
  window.Decidim = window.Decidim || {};
@@ -35,6 +35,7 @@ module Decidim
35
35
  def create_category
36
36
  Category.create!(
37
37
  name: form.name,
38
+ weight: form.weight,
38
39
  description: form.description,
39
40
  parent_id: form.parent_id,
40
41
  participatory_space: @participatory_space
@@ -40,6 +40,7 @@ module Decidim
40
40
  def attributes
41
41
  {
42
42
  name: form.name,
43
+ weight: form.weight,
43
44
  parent_id: form.parent_id,
44
45
  description: form.description
45
46
  }
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Admin
5
+ module ParticipatorySpaceExport
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ helper_method :exportable_space
10
+
11
+ def create
12
+ enforce_permission_to :create, :export_space, participatory_space: exportable_space
13
+
14
+ ExportParticipatorySpaceJob.perform_later(current_user, exportable_space, "participatory_processes", default_format)
15
+
16
+ flash[:notice] = t("decidim.admin.exports.notice")
17
+
18
+ redirect_back(fallback_location: after_export_path)
19
+ end
20
+
21
+ # Public: The only method to be implemented at the controller. You need to
22
+ # return the space that will be exported.
23
+ def exportable_space
24
+ raise NotImplementedError
25
+ end
26
+
27
+ # Public: Returns a String or Object that will be passed to `redirect_to` after
28
+ # exporing a space. By default it redirects to the root_path.
29
+ #
30
+ # It can be redefined at controller level if you need to redirect elsewhere.
31
+ def after_export_path
32
+ decidim.root_path
33
+ end
34
+
35
+ private
36
+
37
+ def default_format
38
+ "JSON"
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -27,6 +27,7 @@ module Decidim
27
27
  end
28
28
 
29
29
  on(:invalid) do
30
+ flash.now[:alert] = t("component_permissions.update.error", scope: "decidim.admin")
30
31
  render action: :edit
31
32
  end
32
33
  end
@@ -8,6 +8,7 @@ module Decidim
8
8
  include TranslatableAttributes
9
9
 
10
10
  translatable_attribute :name, String
11
+ attribute :weight, Integer, default: 0
11
12
  translatable_attribute :description, String
12
13
  attribute :parent_id, Integer
13
14
 
@@ -12,7 +12,7 @@ module Decidim
12
12
  end
13
13
 
14
14
  def authorization_handler_options(handler_name)
15
- find_handler(handler_name)[:options]
15
+ find_handler(handler_name)&.dig("options") || {}
16
16
  end
17
17
 
18
18
  def manifest(handler_name)
@@ -20,7 +20,7 @@ module Decidim
20
20
  end
21
21
 
22
22
  def options_schema(handler_name)
23
- options_manifest(handler_name).schema.new(find_handler(handler_name)["options"] || {})
23
+ options_manifest(handler_name).schema.new(authorization_handler_options(handler_name))
24
24
  end
25
25
 
26
26
  def options_attributes(handler_name)
@@ -9,7 +9,12 @@ module Decidim
9
9
 
10
10
  attribute :permissions, Hash[String => PermissionForm]
11
11
 
12
- def valid?
12
+ private
13
+
14
+ # Overriding Rectify::Form#form_attributes_valid? to preserve errors from custom method validations.
15
+ def form_attributes_valid?
16
+ return false unless errors.empty? && permissions.each_value.map(&:errors).all?(&:empty?)
17
+
13
18
  super && permissions.values.all?(&:valid?)
14
19
  end
15
20
  end
@@ -8,6 +8,10 @@
8
8
  <%= form.translated :text_field, :name, autofocus: true %>
9
9
  </div>
10
10
 
11
+ <div class="row column">
12
+ <%= form.number_field :weight %>
13
+ </div>
14
+
11
15
  <div class="row column">
12
16
  <%= form.translated :editor, :description %>
13
17
  </div>
@@ -17,3 +17,5 @@
17
17
  <% end %>
18
18
  <% end %>
19
19
  <% end %>
20
+ <br>
21
+ <%= form.error_for(:base) %>
@@ -237,6 +237,7 @@ en:
237
237
  success: Category updated successfully.
238
238
  component_permissions:
239
239
  update:
240
+ error: There was a problem updating the permissions of this component.
240
241
  success: Permissions updated successfully.
241
242
  components:
242
243
  create:
@@ -2,5 +2,6 @@
2
2
 
3
3
  require "decidim/admin/test/manage_attachments_examples"
4
4
  require "decidim/admin/test/manage_attachment_collections_examples"
5
+ require "decidim/admin/test/manage_categories_examples"
5
6
  require "decidim/admin/test/manage_component_permissions_examples"
6
7
  require "decidim/admin/test/manage_moderations_examples"
@@ -0,0 +1,135 @@
1
+ # frozen_string_literal: true
2
+
3
+ shared_examples "manage categories examples" do
4
+ it "lists all the categories for the process" do
5
+ within "#categories table" do
6
+ expect(page).to have_content(translated(category.name, locale: :en))
7
+ end
8
+ end
9
+
10
+ it "can view a category detail" do
11
+ within "#categories table" do
12
+ click_link translated(category.name, locale: :en)
13
+ end
14
+
15
+ expect(page).to have_selector("input#category_name_en[value='#{translated(category.name, locale: :en)}']")
16
+ expect(page).to have_selector("input#category_weight[value='#{category.weight}']")
17
+ within ".editor .editor-container" do
18
+ expect(page).to have_content(strip_tags(translated(category.description, locale: :en)))
19
+ end
20
+
21
+ expect(page).to have_selector("select#category_parent_id")
22
+ end
23
+
24
+ it "creates a new category" do
25
+ find(".card-title a.new").click
26
+
27
+ within ".new_category" do
28
+ fill_in_i18n(
29
+ :category_name,
30
+ "#category-name-tabs",
31
+ en: "My category",
32
+ es: "Mi categoría",
33
+ ca: "La meva categoria"
34
+ )
35
+ fill_in_i18n_editor(
36
+ :category_description,
37
+ "#category-description-tabs",
38
+ en: "Description",
39
+ es: "Descripción",
40
+ ca: "Descripció"
41
+ )
42
+
43
+ find("*[type=submit]").click
44
+ end
45
+
46
+ expect(page).to have_admin_callout("successfully")
47
+
48
+ within "#categories table" do
49
+ expect(page).to have_content("My category")
50
+ end
51
+ end
52
+
53
+ it "updates a category" do
54
+ within "#categories" do
55
+ within find("tr", text: translated(category.name)) do
56
+ click_link "Edit"
57
+ end
58
+ end
59
+
60
+ within ".edit_category" do
61
+ fill_in_i18n(
62
+ :category_name,
63
+ "#category-name-tabs",
64
+ en: "My new name",
65
+ es: "Mi nuevo nombre",
66
+ ca: "El meu nou nom"
67
+ )
68
+
69
+ find("*[type=submit]").click
70
+ end
71
+
72
+ expect(page).to have_admin_callout("successfully")
73
+
74
+ within "#categories table" do
75
+ expect(page).to have_content("My new name")
76
+ end
77
+ end
78
+
79
+ context "when deleting a category" do
80
+ let!(:category2) { create(:category, participatory_space: participatory_space) }
81
+
82
+ context "when the category has no associated content" do
83
+ context "when the category has no subcategories" do
84
+ before do
85
+ visit current_path
86
+ end
87
+
88
+ it "deletes a category" do
89
+ within find("tr", text: translated(category2.name)) do
90
+ accept_confirm { click_link "Delete" }
91
+ end
92
+
93
+ expect(page).to have_admin_callout("successfully")
94
+
95
+ within "#categories table" do
96
+ expect(page).to have_no_content(translated(category2.name))
97
+ end
98
+ end
99
+ end
100
+
101
+ context "when the category has some subcategories" do
102
+ let!(:subcategory) { create(:subcategory, parent: category2) }
103
+
104
+ before do
105
+ visit current_path
106
+ end
107
+
108
+ it "deletes a category" do
109
+ within find("tr", text: translated(category2.name)) do
110
+ accept_confirm { click_link "Delete" }
111
+ end
112
+
113
+ expect(page).to have_admin_callout("problem deleting")
114
+
115
+ within "#categories table" do
116
+ expect(page).to have_content(translated(category2.name))
117
+ end
118
+ end
119
+ end
120
+ end
121
+
122
+ context "when the category has associated content" do
123
+ let!(:component) { create(:component, participatory_space: participatory_space) }
124
+ let!(:dummy_resource) { create(:dummy_resource, component: component, category: category) }
125
+
126
+ it "cannot delete it" do
127
+ visit current_path
128
+
129
+ within find("tr", text: translated(category.name)) do
130
+ expect(page).to have_no_selector("a.action-icon--remove")
131
+ end
132
+ end
133
+ end
134
+ end
135
+ end
@@ -50,6 +50,28 @@ shared_examples "Managing component permissions" do
50
50
  end
51
51
  end
52
52
 
53
+ context "when failing to set permissions" do
54
+ before do
55
+ # rubocop:disable RSpec/AnyInstance
56
+ allow_any_instance_of(Decidim::Admin::PermissionsForm).to receive(:valid?).and_return(false)
57
+ # rubocop:enable RSpec/AnyInstance
58
+ within ".component-#{component.id}" do
59
+ click_link "Permissions"
60
+ end
61
+ within "form.new_component_permissions" do
62
+ within ".foo-permission" do
63
+ check "Example authorization (Direct)"
64
+ fill_in "Postal code", with: "08002"
65
+ end
66
+ find("*[type=submit]").click
67
+ end
68
+ end
69
+
70
+ it "renders the form again" do
71
+ expect(page).to have_content("problem")
72
+ end
73
+ end
74
+
53
75
  context "when unsetting permissions" do
54
76
  before do
55
77
  component.update!(
@@ -4,7 +4,7 @@ module Decidim
4
4
  # This holds the decidim-admin version.
5
5
  module Admin
6
6
  def self.version
7
- "0.19.1"
7
+ "0.20.0"
8
8
  end
9
9
  end
10
10
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.19.1
4
+ version: 0.20.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep Jaume Rey Peroy
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2019-12-13 00:00:00.000000000 Z
13
+ date: 2020-01-08 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: active_link_to
@@ -32,14 +32,14 @@ dependencies:
32
32
  requirements:
33
33
  - - '='
34
34
  - !ruby/object:Gem::Version
35
- version: 0.19.1
35
+ version: 0.20.0
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
40
  - - '='
41
41
  - !ruby/object:Gem::Version
42
- version: 0.19.1
42
+ version: 0.20.0
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: devise
45
45
  requirement: !ruby/object:Gem::Requirement
@@ -136,28 +136,28 @@ dependencies:
136
136
  requirements:
137
137
  - - '='
138
138
  - !ruby/object:Gem::Version
139
- version: 0.19.1
139
+ version: 0.20.0
140
140
  type: :development
141
141
  prerelease: false
142
142
  version_requirements: !ruby/object:Gem::Requirement
143
143
  requirements:
144
144
  - - '='
145
145
  - !ruby/object:Gem::Version
146
- version: 0.19.1
146
+ version: 0.20.0
147
147
  - !ruby/object:Gem::Dependency
148
148
  name: decidim-participatory_processes
149
149
  requirement: !ruby/object:Gem::Requirement
150
150
  requirements:
151
151
  - - '='
152
152
  - !ruby/object:Gem::Version
153
- version: 0.19.1
153
+ version: 0.20.0
154
154
  type: :development
155
155
  prerelease: false
156
156
  version_requirements: !ruby/object:Gem::Requirement
157
157
  requirements:
158
158
  - - '='
159
159
  - !ruby/object:Gem::Version
160
- version: 0.19.1
160
+ version: 0.20.0
161
161
  description: Organization administration to manage a single organization.
162
162
  email:
163
163
  - josepjaume@gmail.com
@@ -328,6 +328,7 @@ files:
328
328
  - app/commands/decidim/admin/verify_user_group.rb
329
329
  - app/constraints/decidim/admin/organization_dashboard_constraint.rb
330
330
  - app/controllers/concerns/decidim/admin/participatory_space_admin_context.rb
331
+ - app/controllers/concerns/decidim/admin/participatory_space_export.rb
331
332
  - app/controllers/concerns/decidim/admin/user_groups.rb
332
333
  - app/controllers/decidim/admin/application_controller.rb
333
334
  - app/controllers/decidim/admin/area_types_controller.rb
@@ -579,6 +580,7 @@ files:
579
580
  - lib/decidim/admin/test/forms/category_form_examples.rb
580
581
  - lib/decidim/admin/test/manage_attachment_collections_examples.rb
581
582
  - lib/decidim/admin/test/manage_attachments_examples.rb
583
+ - lib/decidim/admin/test/manage_categories_examples.rb
582
584
  - lib/decidim/admin/test/manage_component_permissions_examples.rb
583
585
  - lib/decidim/admin/test/manage_moderations_examples.rb
584
586
  - lib/decidim/admin/version.rb