decidim-transparent_trash 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 (45) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE-AGPLv3.txt +661 -0
  3. data/README.md +62 -0
  4. data/Rakefile +9 -0
  5. data/app/cells/decidim/initiatives/initiative_m_cell.rb +91 -0
  6. data/app/commands/decidim/initiatives/admin/illegal_initiative.rb +45 -0
  7. data/app/commands/decidim/initiatives/admin/invalidate_initiative.rb +45 -0
  8. data/app/controllers/decidim/transparent_trash/admin/application_controller.rb +26 -0
  9. data/app/controllers/decidim/transparent_trash/application_controller.rb +13 -0
  10. data/app/helpers/decidim/transparent_trash/application_helper.rb +10 -0
  11. data/app/models/decidim/initiative.rb +576 -0
  12. data/app/models/decidim/transparent_trash/application_record.rb +10 -0
  13. data/app/overrides/decidim/initiatives/initiatives/index/overriden.html.erb.deface +9 -0
  14. data/app/packs/entrypoints/decidim_transparent_trash.js +2 -0
  15. data/app/packs/images/decidim/transparent_trash/icon.svg +1 -0
  16. data/app/packs/stylesheets/decidim/transparent_trash/transparent_trash.scss +9 -0
  17. data/app/permissions/decidim/transparent_trash/admin/permissions.rb +37 -0
  18. data/app/views/decidim/initiatives/admin/initiatives/edit.html.erb +77 -0
  19. data/app/views/decidim/initiatives/initiatives/_count.html.erb +1 -0
  20. data/app/views/decidim/initiatives/initiatives/show.html.erb +102 -0
  21. data/app/views/decidim/transparent_trash/initiatives/_filters.html.erb +15 -0
  22. data/app/views/decidim/transparent_trash/initiatives/_filters_small_view.html.erb +18 -0
  23. data/app/views/decidim/transparent_trash/initiatives/_index_header.html.erb +8 -0
  24. data/app/views/decidim/transparent_trash/initiatives/index.html.erb +29 -0
  25. data/app/views/decidim/transparent_trash/initiatives/index.js.erb +10 -0
  26. data/app/views/layouts/decidim/_initiative_header.html.erb +51 -0
  27. data/config/assets.rb +9 -0
  28. data/config/i18n-tasks.yml +10 -0
  29. data/config/locales/en.yml +48 -0
  30. data/config/locales/fr.yml +48 -0
  31. data/lib/decidim/transparent_trash/admin.rb +10 -0
  32. data/lib/decidim/transparent_trash/admin_engine.rb +38 -0
  33. data/lib/decidim/transparent_trash/component.rb +40 -0
  34. data/lib/decidim/transparent_trash/engine.rb +38 -0
  35. data/lib/decidim/transparent_trash/extends/comments_seed.rb +52 -0
  36. data/lib/decidim/transparent_trash/extends/initiative_presenter.rb +32 -0
  37. data/lib/decidim/transparent_trash/extends/initiatives_admin_controller.rb +52 -0
  38. data/lib/decidim/transparent_trash/extends/initiatives_admin_permissions.rb +53 -0
  39. data/lib/decidim/transparent_trash/extends/initiatives_controller.rb +84 -0
  40. data/lib/decidim/transparent_trash/extends/initiatives_permissions.rb +31 -0
  41. data/lib/decidim/transparent_trash/extends/unpublish_initiative.rb +37 -0
  42. data/lib/decidim/transparent_trash/test/factories.rb +13 -0
  43. data/lib/decidim/transparent_trash/version.rb +13 -0
  44. data/lib/decidim/transparent_trash.rb +21 -0
  45. metadata +92 -0
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/concern"
4
+
5
+ module Decidim
6
+ module TransparentTrash
7
+ module Extends
8
+ # module: decidim-initiatives
9
+ # path: decidim-initiatives/app/controllers/decidim/initiatives/admin/initiatives_controller.rb
10
+ module InitiativesAdminController
11
+ extend ActiveSupport::Concern
12
+
13
+ included do
14
+ # Add Transparent trash admin permissions
15
+ def permission_class_chain
16
+ super + [Decidim::TransparentTrash::Admin::Permissions]
17
+ end
18
+
19
+ # DELETE /admin/initiatives/:id/invalidate
20
+ def invalidate
21
+ enforce_permission_to :invalidate, :initiative, initiative: current_initiative
22
+
23
+ Decidim::Initiatives::Admin::InvalidateInitiative.call(current_initiative, current_user) do
24
+ on(:ok) do
25
+ flash[:notice] = I18n.t("initiatives.update.success", scope: "decidim.initiatives.admin")
26
+ redirect_to decidim_admin_initiatives.edit_initiative_path(current_initiative)
27
+ end
28
+ on(:invalid) do
29
+ redirect_to decidim_admin_initiatives.edit_initiative_path(current_initiative)
30
+ end
31
+ end
32
+ end
33
+
34
+ # DELETE /admin/initiatives/:id/illegal
35
+ def illegal
36
+ enforce_permission_to :illegal, :initiative, initiative: current_initiative
37
+
38
+ Decidim::Initiatives::Admin::IllegalInitiative.call(current_initiative, current_user) do
39
+ on(:ok) do
40
+ flash[:notice] = I18n.t("initiatives.update.success", scope: "decidim.initiatives.admin")
41
+ redirect_to decidim_admin_initiatives.edit_initiative_path(current_initiative)
42
+ end
43
+ on(:invalid) do
44
+ redirect_to decidim_admin_initiatives.edit_initiative_path(current_initiative)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/concern"
4
+
5
+ module Decidim
6
+ module TransparentTrash
7
+ module Extends
8
+ # module: decidim-initiatives
9
+ # path: decidim-initiatives/app/permissions/decidim/initiatives/admin/permissions.rb
10
+ module InitiativesAdminPermissions
11
+ extend ActiveSupport::Concern
12
+
13
+ included do
14
+ # rubocop:disable Metrics/CyclomaticComplexity
15
+ # rubocop:disable Metrics/PerceivedComplexity
16
+ # Allow when action is unpublish and initiative is published, invalidated or illegal
17
+ def initiative_admin_user_action?
18
+ return unless permission_action.subject == :initiative
19
+
20
+ case permission_action.action
21
+ when :read
22
+ toggle_allow(Decidim::Initiatives.print_enabled)
23
+ when :publish, :discard
24
+ toggle_allow(initiative.validating?)
25
+ when :unpublish
26
+ toggle_allow(initiative.published? || initiative.invalidated? || initiative.illegal?)
27
+ when :export_pdf_signatures
28
+ toggle_allow(initiative.published? || initiative.accepted? || initiative.rejected?)
29
+ when :export_votes
30
+ toggle_allow(initiative.offline_signature_type? || initiative.any_signature_type?)
31
+ when :accept
32
+ allowed = initiative.published? &&
33
+ initiative.signature_end_date < Date.current &&
34
+ initiative.supports_goal_reached?
35
+ toggle_allow(allowed)
36
+ when :reject
37
+ allowed = initiative.published? &&
38
+ initiative.signature_end_date < Date.current &&
39
+ !initiative.supports_goal_reached?
40
+ toggle_allow(allowed)
41
+ when :send_to_technical_validation
42
+ toggle_allow(allowed_to_send_to_technical_validation?)
43
+ else
44
+ allow!
45
+ end
46
+ end
47
+ # rubocop:enable Metrics/CyclomaticComplexity
48
+ # rubocop:enable Metrics/PerceivedComplexity
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,84 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/concern"
4
+
5
+ module Decidim
6
+ module TransparentTrash
7
+ module Extends
8
+ # module: decidim-initiatives
9
+ # path: decidim-initiatives/app/controllers/decidim/initiatives/initiatives_controller.rb
10
+ module InitiativesController
11
+ extend ActiveSupport::Concern
12
+
13
+ included do
14
+ # GET /initiatives
15
+ # or
16
+ # GET /initiatives?visibility=transparent
17
+ #
18
+ # Returns original index of initiatives without illegal and invalidated initiatives
19
+ # When param visibility is present
20
+ # Returns list of illegal and invalidated initiatives only
21
+ def index
22
+ enforce_permission_to :list, :initiative
23
+
24
+ return index_initiatives unless transparent_initiatives?
25
+
26
+ params[:filter] ||= {}
27
+ params[:filter][:with_any_state] = search_transparent_initiatives_state
28
+ @search = search_with(filter_params.merge(with_any_state: search_transparent_initiatives_state))
29
+ render template: "decidim/transparent_trash/initiatives/index"
30
+ end
31
+
32
+ private
33
+
34
+ def search_collection
35
+ initiatives = Initiative
36
+ .includes(scoped_type: [:scope])
37
+ .joins("JOIN decidim_users ON decidim_users.id = decidim_initiatives.decidim_author_id")
38
+ .where(organization: current_organization)
39
+
40
+ transparent_initiatives? ? initiatives.transparent : initiatives.not_transparent
41
+ end
42
+
43
+ # Returns index of initiatives
44
+ def index_initiatives
45
+ return unless search.result.blank? && params.dig("filter", "with_any_state") != %w(closed)
46
+
47
+ @closed_initiatives ||= search_with(filter_params.merge(with_any_state: %w(closed)))
48
+
49
+ if @closed_initiatives.result.present?
50
+ params[:filter] ||= {}
51
+ params[:filter][:with_any_state] = %w(closed)
52
+ @forced_closed_initiatives = true
53
+
54
+ @search = @closed_initiatives
55
+ end
56
+ end
57
+
58
+ # returns any_state as open or any_transparent_states
59
+ def with_any_state
60
+ return search_transparent_initiatives_state if transparent_initiatives?
61
+
62
+ search_initiatives_state
63
+ end
64
+
65
+ def search_initiatives_state
66
+ %w(open)
67
+ end
68
+
69
+ def search_transparent_initiatives_state
70
+ Decidim::Initiative::TRANSPARENT_STATES
71
+ end
72
+
73
+ # Check if request concern transparent trash or initiatives index
74
+ def transparent_initiatives?
75
+ return true if params["visibility"] == "transparent"
76
+ return true if params.dig("filter", "visibility") == "transparent"
77
+
78
+ false
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/concern"
4
+
5
+ module Decidim
6
+ module TransparentTrash
7
+ module Extends
8
+ # module: decidim-initiatives
9
+ # path: decidim-initiatives/app/permissions/decidim/initiatives/permissions.rb
10
+ module InitiativesPermissions
11
+ extend ActiveSupport::Concern
12
+
13
+ included do
14
+ # rubocop:disable Metrics/CyclomaticComplexity
15
+ # Allows to read invalidated and illegal initiatives
16
+ def read_public_initiative?
17
+ return unless [:initiative, :participatory_space].include?(permission_action.subject) &&
18
+ permission_action.action == :read
19
+
20
+ return allow! if initiative.published? || initiative.rejected? || initiative.accepted?
21
+ return allow! if initiative.invalidated? || initiative.illegal?
22
+ return allow! if user && authorship_or_admin?
23
+
24
+ disallow!
25
+ end
26
+ # rubocop:enable Metrics/CyclomaticComplexity
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/concern"
4
+
5
+ module Decidim
6
+ module TransparentTrash
7
+ module Extends
8
+ # module: decidim-initiatives
9
+ # path: decidim-initiatives/app/commands/decidim/initiatives/admin/unpublish_initiative.rb
10
+ module UnpublishInitiative
11
+ extend ActiveSupport::Concern
12
+
13
+ included do
14
+ # Executes the command. Broadcasts these events:
15
+ #
16
+ # - :ok when everything is valid.
17
+ # - :invalid if initiative is published, invalidated or illegal
18
+ #
19
+ # Returns nothing.
20
+ def call
21
+ return broadcast(:invalid) unless initiative.published? || initiative.invalidated? || initiative.illegal?
22
+
23
+ @initiative = Decidim.traceability.perform_action!(
24
+ :unpublish,
25
+ initiative,
26
+ current_user
27
+ ) do
28
+ initiative.unpublish!
29
+ initiative
30
+ end
31
+ broadcast(:ok, initiative)
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "decidim/core/test/factories"
4
+
5
+ FactoryBot.define do
6
+ factory :transparent_trash_component, parent: :component do
7
+ name { Decidim::Components::Namer.new(participatory_space.organization.available_locales, :transparent_trash).i18n_name }
8
+ manifest_name :transparent_trash
9
+ participatory_space { create(:participatory_process, :with_steps) }
10
+ end
11
+
12
+ # Add engine factories here
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module TransparentTrash
5
+ def self.version
6
+ "0.0.1"
7
+ end
8
+
9
+ def self.decidim_version
10
+ "0.27.1"
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "decidim/transparent_trash/admin"
4
+ require "decidim/transparent_trash/engine"
5
+ require "decidim/transparent_trash/admin_engine"
6
+ require "decidim/transparent_trash/component"
7
+ # Extends
8
+ require "decidim/transparent_trash/extends/unpublish_initiative"
9
+ require "decidim/transparent_trash/extends/initiatives_permissions"
10
+ require "decidim/transparent_trash/extends/initiatives_admin_permissions"
11
+ require "decidim/transparent_trash/extends/initiatives_controller"
12
+ require "decidim/transparent_trash/extends/initiatives_admin_controller"
13
+ require "decidim/transparent_trash/extends/comments_seed"
14
+ require "decidim/transparent_trash/extends/initiative_presenter"
15
+
16
+ module Decidim
17
+ # This namespace holds the logic of the `TransparentTrash` component. This component
18
+ # allows users to create transparent_trash in a participatory space.
19
+ module TransparentTrash
20
+ end
21
+ end
metadata ADDED
@@ -0,0 +1,92 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: decidim-transparent_trash
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Quentinchampenois
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-03-06 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Provide a transparent trash where rejected initiatives are public and
14
+ accessible.
15
+ email:
16
+ - 26109239+Quentinchampenois@users.noreply.github.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - LICENSE-AGPLv3.txt
22
+ - README.md
23
+ - Rakefile
24
+ - app/cells/decidim/initiatives/initiative_m_cell.rb
25
+ - app/commands/decidim/initiatives/admin/illegal_initiative.rb
26
+ - app/commands/decidim/initiatives/admin/invalidate_initiative.rb
27
+ - app/controllers/decidim/transparent_trash/admin/application_controller.rb
28
+ - app/controllers/decidim/transparent_trash/application_controller.rb
29
+ - app/helpers/decidim/transparent_trash/application_helper.rb
30
+ - app/models/decidim/initiative.rb
31
+ - app/models/decidim/transparent_trash/application_record.rb
32
+ - app/overrides/decidim/initiatives/initiatives/index/overriden.html.erb.deface
33
+ - app/packs/entrypoints/decidim_transparent_trash.js
34
+ - app/packs/images/decidim/transparent_trash/icon.svg
35
+ - app/packs/stylesheets/decidim/transparent_trash/transparent_trash.scss
36
+ - app/permissions/decidim/transparent_trash/admin/permissions.rb
37
+ - app/views/decidim/initiatives/admin/initiatives/edit.html.erb
38
+ - app/views/decidim/initiatives/initiatives/_count.html.erb
39
+ - app/views/decidim/initiatives/initiatives/show.html.erb
40
+ - app/views/decidim/transparent_trash/initiatives/_filters.html.erb
41
+ - app/views/decidim/transparent_trash/initiatives/_filters_small_view.html.erb
42
+ - app/views/decidim/transparent_trash/initiatives/_index_header.html.erb
43
+ - app/views/decidim/transparent_trash/initiatives/index.html.erb
44
+ - app/views/decidim/transparent_trash/initiatives/index.js.erb
45
+ - app/views/layouts/decidim/_initiative_header.html.erb
46
+ - config/assets.rb
47
+ - config/i18n-tasks.yml
48
+ - config/locales/en.yml
49
+ - config/locales/fr.yml
50
+ - lib/decidim/transparent_trash.rb
51
+ - lib/decidim/transparent_trash/admin.rb
52
+ - lib/decidim/transparent_trash/admin_engine.rb
53
+ - lib/decidim/transparent_trash/component.rb
54
+ - lib/decidim/transparent_trash/engine.rb
55
+ - lib/decidim/transparent_trash/extends/comments_seed.rb
56
+ - lib/decidim/transparent_trash/extends/initiative_presenter.rb
57
+ - lib/decidim/transparent_trash/extends/initiatives_admin_controller.rb
58
+ - lib/decidim/transparent_trash/extends/initiatives_admin_permissions.rb
59
+ - lib/decidim/transparent_trash/extends/initiatives_controller.rb
60
+ - lib/decidim/transparent_trash/extends/initiatives_permissions.rb
61
+ - lib/decidim/transparent_trash/extends/unpublish_initiative.rb
62
+ - lib/decidim/transparent_trash/test/factories.rb
63
+ - lib/decidim/transparent_trash/version.rb
64
+ homepage: https://decidim.org
65
+ licenses:
66
+ - AGPL-3.0
67
+ metadata:
68
+ bug_tracker_uri: https://github.com/decidim/decidim/issues
69
+ documentation_uri: https://docs.decidim.org/
70
+ funding_uri: https://opencollective.com/decidim
71
+ homepage_uri: https://decidim.org
72
+ source_code_uri: https://github.com/decidim/decidim
73
+ post_install_message:
74
+ rdoc_options: []
75
+ require_paths:
76
+ - lib
77
+ required_ruby_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: 3.0.2
82
+ required_rubygems_version: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ requirements: []
88
+ rubygems_version: 3.3.5
89
+ signing_key:
90
+ specification_version: 4
91
+ summary: A decidim transparent_trash module
92
+ test_files: []