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.
- checksums.yaml +7 -0
- data/LICENSE-AGPLv3.txt +661 -0
- data/README.md +62 -0
- data/Rakefile +9 -0
- data/app/cells/decidim/initiatives/initiative_m_cell.rb +91 -0
- data/app/commands/decidim/initiatives/admin/illegal_initiative.rb +45 -0
- data/app/commands/decidim/initiatives/admin/invalidate_initiative.rb +45 -0
- data/app/controllers/decidim/transparent_trash/admin/application_controller.rb +26 -0
- data/app/controllers/decidim/transparent_trash/application_controller.rb +13 -0
- data/app/helpers/decidim/transparent_trash/application_helper.rb +10 -0
- data/app/models/decidim/initiative.rb +576 -0
- data/app/models/decidim/transparent_trash/application_record.rb +10 -0
- data/app/overrides/decidim/initiatives/initiatives/index/overriden.html.erb.deface +9 -0
- data/app/packs/entrypoints/decidim_transparent_trash.js +2 -0
- data/app/packs/images/decidim/transparent_trash/icon.svg +1 -0
- data/app/packs/stylesheets/decidim/transparent_trash/transparent_trash.scss +9 -0
- data/app/permissions/decidim/transparent_trash/admin/permissions.rb +37 -0
- data/app/views/decidim/initiatives/admin/initiatives/edit.html.erb +77 -0
- data/app/views/decidim/initiatives/initiatives/_count.html.erb +1 -0
- data/app/views/decidim/initiatives/initiatives/show.html.erb +102 -0
- data/app/views/decidim/transparent_trash/initiatives/_filters.html.erb +15 -0
- data/app/views/decidim/transparent_trash/initiatives/_filters_small_view.html.erb +18 -0
- data/app/views/decidim/transparent_trash/initiatives/_index_header.html.erb +8 -0
- data/app/views/decidim/transparent_trash/initiatives/index.html.erb +29 -0
- data/app/views/decidim/transparent_trash/initiatives/index.js.erb +10 -0
- data/app/views/layouts/decidim/_initiative_header.html.erb +51 -0
- data/config/assets.rb +9 -0
- data/config/i18n-tasks.yml +10 -0
- data/config/locales/en.yml +48 -0
- data/config/locales/fr.yml +48 -0
- data/lib/decidim/transparent_trash/admin.rb +10 -0
- data/lib/decidim/transparent_trash/admin_engine.rb +38 -0
- data/lib/decidim/transparent_trash/component.rb +40 -0
- data/lib/decidim/transparent_trash/engine.rb +38 -0
- data/lib/decidim/transparent_trash/extends/comments_seed.rb +52 -0
- data/lib/decidim/transparent_trash/extends/initiative_presenter.rb +32 -0
- data/lib/decidim/transparent_trash/extends/initiatives_admin_controller.rb +52 -0
- data/lib/decidim/transparent_trash/extends/initiatives_admin_permissions.rb +53 -0
- data/lib/decidim/transparent_trash/extends/initiatives_controller.rb +84 -0
- data/lib/decidim/transparent_trash/extends/initiatives_permissions.rb +31 -0
- data/lib/decidim/transparent_trash/extends/unpublish_initiative.rb +37 -0
- data/lib/decidim/transparent_trash/test/factories.rb +13 -0
- data/lib/decidim/transparent_trash/version.rb +13 -0
- data/lib/decidim/transparent_trash.rb +21 -0
- metadata +92 -0
data/README.md
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Decidim Transparent Trash module
|
|
2
|
+
|
|
3
|
+
Module implements a new space in Decidim initiatives index where initiatives marked as **Invalidated** and **Illegal**
|
|
4
|
+
are accessible.
|
|
5
|
+
These previous states are only available with this module.
|
|
6
|
+
|
|
7
|
+
> 🚧 Overrides
|
|
8
|
+
>
|
|
9
|
+
> This feature requires to extend components like commands, controllers, permission and views of the decidim-initiatives
|
|
10
|
+
> engine. It may occur unexpected behaviours, an exhaustive list of overrides is available.
|
|
11
|
+
|
|
12
|
+
## Usage
|
|
13
|
+
|
|
14
|
+
TransparentTrash will be available as a Component for a Participatory
|
|
15
|
+
Space.
|
|
16
|
+
|
|
17
|
+
## Installation
|
|
18
|
+
|
|
19
|
+
Add this line to your application's Gemfile:
|
|
20
|
+
|
|
21
|
+
```ruby
|
|
22
|
+
gem "decidim-transparent_trash", git: "https://github.com/opensourcepolitics/decidim-module-transparent_trash.git"
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
And then execute:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
bundle
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Informations
|
|
32
|
+
|
|
33
|
+
| _ | Presence |
|
|
34
|
+
|:-----------------------------|:--------:|
|
|
35
|
+
| Database migrations | ❌ |
|
|
36
|
+
| Webpacker assets | ❌ |
|
|
37
|
+
| Env variables | ❌ |
|
|
38
|
+
| Data structure changes | ❌ |
|
|
39
|
+
| New states for initiatives | ✅ |
|
|
40
|
+
| Changes on initiatives index | ❌ |
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
**Commands are available to have the list extends and overrides :**
|
|
44
|
+
|
|
45
|
+
* `make extends`
|
|
46
|
+
* `make overrides`
|
|
47
|
+
|
|
48
|
+
## Contributing
|
|
49
|
+
|
|
50
|
+
Contributions are welcome !
|
|
51
|
+
|
|
52
|
+
We expect the contributions to follow
|
|
53
|
+
the [Decidim's contribution guide](https://github.com/decidim/decidim/blob/develop/CONTRIBUTING.adoc).
|
|
54
|
+
|
|
55
|
+
## Security
|
|
56
|
+
|
|
57
|
+
Security is very important to us. If you have any issue regarding security, please disclose the information responsibly
|
|
58
|
+
by sending an email to __security [at] opensourcepolitics [dot] eu__ and not by creating a Github issue.
|
|
59
|
+
|
|
60
|
+
## License
|
|
61
|
+
|
|
62
|
+
This engine is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE.
|
data/Rakefile
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "decidim/dev/common_rake"
|
|
4
|
+
|
|
5
|
+
desc "Generates a dummy app for testing"
|
|
6
|
+
task test_app: "decidim:generate_external_test_app"
|
|
7
|
+
|
|
8
|
+
desc "Generates a development app."
|
|
9
|
+
task development_app: "decidim:generate_external_development_app"
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module Initiatives
|
|
5
|
+
# This cell renders the Medium (:m) initiative card
|
|
6
|
+
# for an given instance of an Initiative
|
|
7
|
+
class InitiativeMCell < Decidim::CardMCell
|
|
8
|
+
include Decidim::Initiatives::Engine.routes.url_helpers
|
|
9
|
+
include Decidim::TwitterSearchHelper
|
|
10
|
+
|
|
11
|
+
property :state
|
|
12
|
+
|
|
13
|
+
private
|
|
14
|
+
|
|
15
|
+
def title
|
|
16
|
+
return I18n.t("decidim.initiatives.initiatives.show.illegal.title") if model.illegal?
|
|
17
|
+
|
|
18
|
+
decidim_html_escape(translated_attribute(model.title))
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def description
|
|
22
|
+
return I18n.t("decidim.initiatives.initiatives.show.illegal.description") if model.illegal?
|
|
23
|
+
|
|
24
|
+
super
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def hashtag
|
|
28
|
+
decidim_html_escape(model.hashtag)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def has_state?
|
|
32
|
+
true
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Explicitely commenting the used I18n keys so their are not flagged as unused
|
|
36
|
+
# i18n-tasks-use t('decidim.initiatives.show.badge_name.accepted')
|
|
37
|
+
# i18n-tasks-use t('decidim.initiatives.show.badge_name.created')
|
|
38
|
+
# i18n-tasks-use t('decidim.initiatives.show.badge_name.discarded')
|
|
39
|
+
# i18n-tasks-use t('decidim.initiatives.show.badge_name.published')
|
|
40
|
+
# i18n-tasks-use t('decidim.initiatives.show.badge_name.rejected')
|
|
41
|
+
# i18n-tasks-use t('decidim.initiatives.show.badge_name.validating')
|
|
42
|
+
def badge_name
|
|
43
|
+
I18n.t(model.state, scope: "decidim.initiatives.show.badge_name")
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def state_classes
|
|
47
|
+
case state
|
|
48
|
+
when "accepted", "published"
|
|
49
|
+
["success"]
|
|
50
|
+
when "rejected", "discarded", "invalidated", "illegal"
|
|
51
|
+
["alert"]
|
|
52
|
+
when "validating"
|
|
53
|
+
["warning"]
|
|
54
|
+
else
|
|
55
|
+
["muted"]
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def resource_path
|
|
60
|
+
initiative_path(model)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def resource_icon
|
|
64
|
+
icon "initiatives", class: "icon--big"
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def authors
|
|
68
|
+
[present(model).author] +
|
|
69
|
+
model.committee_members.approved.non_deleted.excluding_author.map { |member| present(member.user) }
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def has_image?
|
|
73
|
+
image.present?
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def image
|
|
77
|
+
@image ||= model.attachments.find(&:image?)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def resource_image_path
|
|
81
|
+
image.url if has_image?
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def follow_status
|
|
85
|
+
return if model.invalidated? || model.illegal?
|
|
86
|
+
|
|
87
|
+
cell "decidim/follow_button", model, inline: true
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module Initiatives
|
|
5
|
+
module Admin
|
|
6
|
+
# A command with all the business logic that unpublishes an
|
|
7
|
+
# existing initiative.
|
|
8
|
+
class IllegalInitiative < Decidim::Command
|
|
9
|
+
# Public: Initializes the command.
|
|
10
|
+
#
|
|
11
|
+
# initiative - Decidim::Initiative
|
|
12
|
+
# current_user - the user performing the action
|
|
13
|
+
def initialize(initiative, current_user)
|
|
14
|
+
@initiative = initiative
|
|
15
|
+
@current_user = current_user
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Executes the command. Broadcasts these events:
|
|
19
|
+
#
|
|
20
|
+
# - :ok when everything is valid.
|
|
21
|
+
# - :invalid if the form wasn't valid and we couldn't proceed.
|
|
22
|
+
#
|
|
23
|
+
# Returns nothing.
|
|
24
|
+
def call
|
|
25
|
+
return broadcast(:invalid) if initiative.published?
|
|
26
|
+
|
|
27
|
+
@initiative = Decidim.traceability.perform_action!(
|
|
28
|
+
:illegal,
|
|
29
|
+
initiative,
|
|
30
|
+
current_user
|
|
31
|
+
) do
|
|
32
|
+
initiative.components.each(&:unpublish!) if initiative.components.any?
|
|
33
|
+
initiative.illegal!
|
|
34
|
+
initiative
|
|
35
|
+
end
|
|
36
|
+
broadcast(:ok, initiative)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
private
|
|
40
|
+
|
|
41
|
+
attr_reader :initiative, :current_user
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module Initiatives
|
|
5
|
+
module Admin
|
|
6
|
+
# A command with all the business logic that unpublishes an
|
|
7
|
+
# existing initiative.
|
|
8
|
+
class InvalidateInitiative < Decidim::Command
|
|
9
|
+
# Public: Initializes the command.
|
|
10
|
+
#
|
|
11
|
+
# initiative - Decidim::Initiative
|
|
12
|
+
# current_user - the user performing the action
|
|
13
|
+
def initialize(initiative, current_user)
|
|
14
|
+
@initiative = initiative
|
|
15
|
+
@current_user = current_user
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Executes the command. Broadcasts these events:
|
|
19
|
+
#
|
|
20
|
+
# - :ok when everything is valid.
|
|
21
|
+
# - :invalid if the form wasn't valid and we couldn't proceed.
|
|
22
|
+
#
|
|
23
|
+
# Returns nothing.
|
|
24
|
+
def call
|
|
25
|
+
return broadcast(:invalid) if initiative.published?
|
|
26
|
+
|
|
27
|
+
@initiative = Decidim.traceability.perform_action!(
|
|
28
|
+
:invalidate,
|
|
29
|
+
initiative,
|
|
30
|
+
current_user
|
|
31
|
+
) do
|
|
32
|
+
initiative.components.each(&:unpublish!) if initiative.components.any?
|
|
33
|
+
initiative.invalidate!
|
|
34
|
+
initiative
|
|
35
|
+
end
|
|
36
|
+
broadcast(:ok, initiative)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
private
|
|
40
|
+
|
|
41
|
+
attr_reader :initiative, :current_user
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module TransparentTrash
|
|
5
|
+
module Admin
|
|
6
|
+
# This controller is the abstract class from which all other controllers of
|
|
7
|
+
# this engine inherit.
|
|
8
|
+
#
|
|
9
|
+
# Note that it inherits from `Decidim::Admin::Components::BaseController`, which
|
|
10
|
+
# override its layout and provide all kinds of useful methods.
|
|
11
|
+
class ApplicationController < Decidim::Admin::Components::BaseController
|
|
12
|
+
def permission_class_chain
|
|
13
|
+
[::Decidim::TransparentTrash::Admin::Permissions] + super
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def user_not_authorized_path
|
|
17
|
+
decidim.root_path
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def user_has_no_permission_path
|
|
21
|
+
decidim.root_path
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module TransparentTrash
|
|
5
|
+
# This controller is the abstract class from which all other controllers of
|
|
6
|
+
# this engine inherit.
|
|
7
|
+
#
|
|
8
|
+
# Note that it inherits from `Decidim::Components::BaseController`, which
|
|
9
|
+
# override its layout and provide all kinds of useful methods.
|
|
10
|
+
class ApplicationController < Decidim::Components::BaseController
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|