decidim-budgets 0.32.0 → 0.32.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.
- checksums.yaml +4 -4
- data/app/controllers/concerns/decidim/budgets/needs_current_order.rb +10 -8
- data/app/controllers/decidim/budgets/admin/attachment_collections_controller.rb +2 -0
- data/app/controllers/decidim/budgets/admin/attachments_controller.rb +2 -0
- data/app/controllers/decidim/budgets/admin/budgets_controller.rb +1 -1
- data/app/controllers/decidim/budgets/admin/projects_controller.rb +10 -8
- data/app/controllers/decidim/budgets/admin/proposals_imports_controller.rb +1 -1
- data/app/controllers/decidim/budgets/application_controller.rb +1 -1
- data/app/controllers/decidim/budgets/budgets_controller.rb +5 -1
- data/app/controllers/decidim/budgets/line_items_controller.rb +2 -0
- data/app/controllers/decidim/budgets/orders_controller.rb +4 -0
- data/app/controllers/decidim/budgets/projects_controller.rb +4 -0
- data/app/packs/stylesheets/budgets.scss +1 -1
- data/app/permissions/decidim/budgets/permissions.rb +23 -2
- data/config/locales/bg.yml +4 -0
- data/config/locales/ca.yml +2 -2
- data/config/locales/cs.yml +1 -0
- data/config/locales/de.yml +6 -1
- data/config/locales/eu.yml +64 -64
- data/config/locales/fr-CA.yml +1 -0
- data/config/locales/fr.yml +7 -0
- data/config/locales/gl.yml +292 -34
- data/config/locales/sv.yml +3 -0
- data/decidim-budgets.gemspec +1 -1
- data/lib/decidim/budgets/version.rb +1 -1
- metadata +11 -11
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d5c1ed4bb5c02da481f1465b87c601a55e938cc6a5df63db791bd426fd1e5043
|
|
4
|
+
data.tar.gz: 7154214766c8618df4ec228911218147f9f9e00def187aec3a89d048e389a3bb
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6eeeafe850e71e9dc78513267837becc86bbfa88c39e935763f0bc7768014deccb71d65e5274808e143372280642eed14f8b85f4aec464d04427e026485a9723
|
|
7
|
+
data.tar.gz: 49c2818831eae88eee5f6648d59699fcca88b0eb766c0ae29a551a5677739961bc23840d38bf4737b30ad8d3ca7cfa6e94724e8e41cfaa328def3aa305e4cd0e
|
|
@@ -18,14 +18,6 @@ module Decidim
|
|
|
18
18
|
@current_order ||= Order.includes(:projects).find_or_initialize_by(user: current_user, budget:)
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
def current_order=(order)
|
|
22
|
-
@current_order = order
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def persisted_current_order
|
|
26
|
-
current_order if current_order&.persisted?
|
|
27
|
-
end
|
|
28
|
-
|
|
29
21
|
def can_have_order?
|
|
30
22
|
current_user.present? &&
|
|
31
23
|
voting_open? &&
|
|
@@ -37,6 +29,16 @@ module Decidim
|
|
|
37
29
|
def voted_for?(project)
|
|
38
30
|
current_order && current_order.projects.include?(project)
|
|
39
31
|
end
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
def current_order=(order)
|
|
36
|
+
@current_order = order
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def persisted_current_order
|
|
40
|
+
current_order if current_order&.persisted?
|
|
41
|
+
end
|
|
40
42
|
end
|
|
41
43
|
end
|
|
42
44
|
end
|
|
@@ -8,6 +8,8 @@ module Decidim
|
|
|
8
8
|
class AttachmentCollectionsController < Admin::ApplicationController
|
|
9
9
|
include Decidim::Admin::Concerns::HasAttachmentCollections
|
|
10
10
|
|
|
11
|
+
protected
|
|
12
|
+
|
|
11
13
|
def after_destroy_path
|
|
12
14
|
project_attachment_collections_path(project, project.component, current_participatory_space)
|
|
13
15
|
end
|
|
@@ -15,10 +15,6 @@ module Decidim
|
|
|
15
15
|
|
|
16
16
|
helper_method :projects, :finished_orders, :pending_orders, :present, :project_ids
|
|
17
17
|
|
|
18
|
-
def collection
|
|
19
|
-
@collection ||= budget.projects.page(params[:page]).per(15)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
18
|
def new
|
|
23
19
|
enforce_permission_to :create, :project
|
|
24
20
|
@form = form(ProjectForm).from_params(
|
|
@@ -71,7 +67,7 @@ module Decidim
|
|
|
71
67
|
def update_taxonomies
|
|
72
68
|
enforce_permission_to :update, :project_taxonomy
|
|
73
69
|
|
|
74
|
-
UpdateResourcesTaxonomies.call(params[:taxonomies],
|
|
70
|
+
UpdateResourcesTaxonomies.call(params[:taxonomies], budget.projects.where(id: project_ids), current_organization) do
|
|
75
71
|
on(:invalid_taxonomies) do
|
|
76
72
|
flash[:error] = I18n.t(
|
|
77
73
|
"projects.update_taxonomies.select_a_taxonomy",
|
|
@@ -163,6 +159,10 @@ module Decidim
|
|
|
163
159
|
|
|
164
160
|
private
|
|
165
161
|
|
|
162
|
+
def collection
|
|
163
|
+
@collection ||= budget.projects.page(params[:page]).per(15)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
166
|
def trashable_deleted_resource_type
|
|
167
167
|
:project
|
|
168
168
|
end
|
|
@@ -180,7 +180,7 @@ module Decidim
|
|
|
180
180
|
end
|
|
181
181
|
|
|
182
182
|
def orders
|
|
183
|
-
@orders ||= Order.where(budget:)
|
|
183
|
+
@orders ||= Order.where(budget:) # rubocop:disable Decidim/OrganizationScopedFinder -- budget is scoped to current_component in ApplicationController
|
|
184
184
|
end
|
|
185
185
|
|
|
186
186
|
def project_ids
|
|
@@ -190,7 +190,9 @@ module Decidim
|
|
|
190
190
|
def reference_budget
|
|
191
191
|
return unless params[:reference_id]
|
|
192
192
|
|
|
193
|
-
Budget.
|
|
193
|
+
Budget.joins(:component)
|
|
194
|
+
.where(component: { participatory_space: current_participatory_space })
|
|
195
|
+
.find(params.expect(:reference_id))
|
|
194
196
|
end
|
|
195
197
|
|
|
196
198
|
def pending_orders
|
|
@@ -204,7 +206,7 @@ module Decidim
|
|
|
204
206
|
def sample_project
|
|
205
207
|
return if project_ids.empty?
|
|
206
208
|
|
|
207
|
-
|
|
209
|
+
budget.projects.find(project_ids.first)
|
|
208
210
|
end
|
|
209
211
|
|
|
210
212
|
def project
|
|
@@ -34,7 +34,7 @@ module Decidim
|
|
|
34
34
|
component = current_participatory_space.components.find_by(id: params[:origin_id])
|
|
35
35
|
|
|
36
36
|
if component
|
|
37
|
-
states = Decidim::Proposals::ProposalState
|
|
37
|
+
states = Decidim::Proposals::ProposalState # rubocop:disable Decidim/OrganizationScopedFinder -- component is scoped above via current_participatory_space
|
|
38
38
|
.where(component:)
|
|
39
39
|
.map { |s| { token: s.token, title: translated_attribute(s.title) } }
|
|
40
40
|
states << { token: "not_answered", title: I18n.t("decidim.proposals.answers.not_answered") }
|
|
@@ -8,7 +8,7 @@ module Decidim
|
|
|
8
8
|
# Note that it inherits from `Decidim::Components::BaseController`, which
|
|
9
9
|
# override its layout and provide all kinds of useful methods.
|
|
10
10
|
class ApplicationController < Decidim::Components::BaseController
|
|
11
|
-
helper_method :current_workflow, :voting_finished?, :voting_open?, :show_votes_count?
|
|
11
|
+
helper_method :current_workflow, :voting_finished?, :voting_open?, :show_votes_count?, :resource_added?
|
|
12
12
|
|
|
13
13
|
def current_workflow
|
|
14
14
|
@current_workflow ||= Decidim::Budgets.workflows[workflow_name].new(current_component, current_user)
|
|
@@ -9,9 +9,13 @@ module Decidim
|
|
|
9
9
|
include Decidim::Budgets::Orderable
|
|
10
10
|
include Decidim::TranslatableAttributes
|
|
11
11
|
|
|
12
|
-
def index
|
|
12
|
+
def index
|
|
13
|
+
enforce_permission_to :read, :budget
|
|
14
|
+
end
|
|
13
15
|
|
|
14
16
|
def show
|
|
17
|
+
enforce_permission_to(:read, :budget, budget:)
|
|
18
|
+
|
|
15
19
|
raise ActionController::RoutingError, "Not Found" unless budget
|
|
16
20
|
|
|
17
21
|
redirect_to budget_projects_path(budget)
|
|
@@ -26,6 +26,8 @@ module Decidim
|
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
def destroy
|
|
29
|
+
enforce_permission_to :destroy, :order, order: current_order
|
|
30
|
+
|
|
29
31
|
CancelOrder.call(current_order) do
|
|
30
32
|
on(:ok) do
|
|
31
33
|
flash[:notice] = I18n.t("orders.destroy.success", scope: "decidim")
|
|
@@ -40,6 +42,8 @@ module Decidim
|
|
|
40
42
|
end
|
|
41
43
|
|
|
42
44
|
def status
|
|
45
|
+
enforce_permission_to :read, :order, order: current_order
|
|
46
|
+
|
|
43
47
|
redirect_to redirect_path unless current_order.persisted?
|
|
44
48
|
end
|
|
45
49
|
|
|
@@ -15,12 +15,16 @@ module Decidim
|
|
|
15
15
|
before_action :set_focus_mode_if_voting_open
|
|
16
16
|
|
|
17
17
|
def index
|
|
18
|
+
enforce_permission_to :read, :project
|
|
19
|
+
|
|
18
20
|
raise ActionController::RoutingError, "Not Found" unless budget
|
|
19
21
|
end
|
|
20
22
|
|
|
21
23
|
def show
|
|
22
24
|
raise ActionController::RoutingError, "Not Found" unless budget
|
|
23
25
|
raise ActionController::RoutingError, "Not Found" unless project
|
|
26
|
+
|
|
27
|
+
enforce_permission_to :read, :project, project:
|
|
24
28
|
end
|
|
25
29
|
|
|
26
30
|
private
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.budget {
|
|
2
2
|
&-list__map {
|
|
3
|
-
@apply lg:-ml-16 -mt-6 lg:-mt-
|
|
3
|
+
@apply lg:-ml-16 -mt-6 lg:-mt-8 mb-0 lg:mb-4 aspect-square lg:aspect-[21/9] [&>*]:h-full [&+*]:mt-6 lg:[&+*]:mt-12;
|
|
4
4
|
}
|
|
5
5
|
|
|
6
6
|
&-summary {
|
|
@@ -20,6 +20,10 @@ module Decidim
|
|
|
20
20
|
can_vote?(true)
|
|
21
21
|
when [:export_pdf, :order]
|
|
22
22
|
can_export_pdf?
|
|
23
|
+
when [:destroy, :order]
|
|
24
|
+
can_destroy_order?
|
|
25
|
+
when [:read, :order]
|
|
26
|
+
can_read_order?
|
|
23
27
|
end
|
|
24
28
|
|
|
25
29
|
permission_action
|
|
@@ -44,9 +48,14 @@ module Decidim
|
|
|
44
48
|
end
|
|
45
49
|
|
|
46
50
|
def public_action_allowed?
|
|
47
|
-
return unless permission_action.
|
|
51
|
+
return unless permission_action.action == :read
|
|
48
52
|
|
|
49
|
-
|
|
53
|
+
case permission_action.subject
|
|
54
|
+
when :project
|
|
55
|
+
toggle_allow(project.nil? || (project.visible? && !project.deleted? && !project.budget.deleted?))
|
|
56
|
+
when :budget
|
|
57
|
+
toggle_allow(budget.nil? || !budget.deleted?)
|
|
58
|
+
end
|
|
50
59
|
end
|
|
51
60
|
|
|
52
61
|
def can_vote?(active_allow)
|
|
@@ -70,6 +79,18 @@ module Decidim
|
|
|
70
79
|
|
|
71
80
|
toggle_allow(is_allowed)
|
|
72
81
|
end
|
|
82
|
+
|
|
83
|
+
def can_destroy_order?
|
|
84
|
+
is_allowed = user.present? &&
|
|
85
|
+
order&.user == user &&
|
|
86
|
+
current_settings&.votes == "enabled"
|
|
87
|
+
|
|
88
|
+
toggle_allow(is_allowed)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def can_read_order?
|
|
92
|
+
toggle_allow(user.present? && order&.user == user)
|
|
93
|
+
end
|
|
73
94
|
end
|
|
74
95
|
end
|
|
75
96
|
end
|
data/config/locales/bg.yml
CHANGED
|
@@ -36,6 +36,7 @@ bg:
|
|
|
36
36
|
budgets:
|
|
37
37
|
actions:
|
|
38
38
|
edit: Редактирай
|
|
39
|
+
edit_projects: Добави проекти
|
|
39
40
|
import: Импортиране на предложения в проекти
|
|
40
41
|
new_budget: Нов бюджет
|
|
41
42
|
new_project: Нов проект
|
|
@@ -135,6 +136,7 @@ bg:
|
|
|
135
136
|
cancel_order:
|
|
136
137
|
more_than_one: да изтриете гласа си за %{name} и да започнете отначало
|
|
137
138
|
only_one: изтрийте гласа си и започнете отначало.
|
|
139
|
+
completed: Приключен
|
|
138
140
|
count:
|
|
139
141
|
one: "%{count} бюджет"
|
|
140
142
|
other: "%{count} бюджети"
|
|
@@ -179,6 +181,7 @@ bg:
|
|
|
179
181
|
subject: Гласувахте в пространството за участие %{space_name}
|
|
180
182
|
voted_on_space: Гласувахте за бюджета %{budget_name} за пространството за участие %{space_name}.
|
|
181
183
|
projects:
|
|
184
|
+
back_to_budgets: Обратно към проектите
|
|
182
185
|
budget_confirm:
|
|
183
186
|
are_you_sure: Ако размислите, може да промените гласа си по-късно.
|
|
184
187
|
cancel: Отказ
|
|
@@ -247,6 +250,7 @@ bg:
|
|
|
247
250
|
added: Добавено
|
|
248
251
|
all: Всички
|
|
249
252
|
projects_for: Проекти за %{name}
|
|
253
|
+
select_projects: Добави проекти
|
|
250
254
|
show:
|
|
251
255
|
budget: Бюджет
|
|
252
256
|
prompt: Изберете бюджет
|
data/config/locales/ca.yml
CHANGED
|
@@ -114,7 +114,7 @@ ca:
|
|
|
114
114
|
title: Projectes eliminats
|
|
115
115
|
new:
|
|
116
116
|
create: Crear
|
|
117
|
-
title:
|
|
117
|
+
title: Nou projecte a %{budget}
|
|
118
118
|
update:
|
|
119
119
|
invalid: S'ha produït un error en actualitzar aquest projecte.
|
|
120
120
|
success: Projecte actualitzat correctament.
|
|
@@ -368,7 +368,7 @@ ca:
|
|
|
368
368
|
vote_rule_selected_projects_enabled: 'Activar regla: número mínim i màxim de projectes a votar'
|
|
369
369
|
vote_rule_threshold_percent_enabled: 'Activar norma: percentatge mínim del pressupost'
|
|
370
370
|
vote_selected_projects_maximum: Número màxim de projectes a seleccionar
|
|
371
|
-
vote_selected_projects_minimum: Número
|
|
371
|
+
vote_selected_projects_minimum: Número mínim de projectes a seleccionar
|
|
372
372
|
vote_threshold_percent: Percentatge del pressupost mínim per fer el vot
|
|
373
373
|
voting_rule: Normes per a la votació
|
|
374
374
|
voting_rule_choices:
|
data/config/locales/cs.yml
CHANGED
|
@@ -367,6 +367,7 @@ cs:
|
|
|
367
367
|
announcement: Oznámení
|
|
368
368
|
clear_all: Vymazat vše
|
|
369
369
|
comments_enabled: Komentáře povoleny
|
|
370
|
+
comments_max_length: Maximální počet znaků na komentář (ponechte 0 pro výchozí hodnotu)
|
|
370
371
|
define_taxonomy_filters: Před použitím tohoto nastavení prosím definujte některé filtry pro tento participační prostor.
|
|
371
372
|
form:
|
|
372
373
|
errors:
|
data/config/locales/de.yml
CHANGED
|
@@ -91,6 +91,7 @@ de:
|
|
|
91
91
|
invalid: Beim Erstellen dieses Projekts ist ein Problem aufgetreten.
|
|
92
92
|
success: Projekt erfolgreich erstellt.
|
|
93
93
|
edit:
|
|
94
|
+
title: Projekt bei %{budget} bearbeiten
|
|
94
95
|
update: Aktualisieren
|
|
95
96
|
index:
|
|
96
97
|
actions: Aktionen
|
|
@@ -113,6 +114,7 @@ de:
|
|
|
113
114
|
title: Gelöschte Projekte
|
|
114
115
|
new:
|
|
115
116
|
create: Erstellen
|
|
117
|
+
title: Neues Projekt bei %{budget}
|
|
116
118
|
update:
|
|
117
119
|
invalid: Beim Aktualisieren dieses Projekts ist ein Problem aufgetreten.
|
|
118
120
|
success: Projekt erfolgreich aktualisiert.
|
|
@@ -143,6 +145,8 @@ de:
|
|
|
143
145
|
default_budget: Standardbudget
|
|
144
146
|
no_components: Es gibt keine weiteren Vorschlagskomponenten in diesem partizipativen Raum, um die Vorschläge in Projekte zu importieren.
|
|
145
147
|
origin_component_id: Ursprungskomponente
|
|
148
|
+
proposal_states: Vorschlagsstatus
|
|
149
|
+
proposal_states_help: Wählen Sie einen oder mehrere Vorschlagsstatus aus, die in Projekte importiert werden sollen. Wenn Sie keinen auswählen, werden alle veröffentlichten Vorschläge importiert, die noch nicht in andere Budgets dieser Komponente importiert wurden.
|
|
146
150
|
select_component: Bitte wählen Sie eine Komponente aus
|
|
147
151
|
title: Vorschläge bei Projekten importieren
|
|
148
152
|
reminders:
|
|
@@ -343,6 +347,7 @@ de:
|
|
|
343
347
|
announcement: Ankündigung
|
|
344
348
|
clear_all: Alles löschen
|
|
345
349
|
comments_enabled: Kommentare aktiviert
|
|
350
|
+
comments_max_length: Maximale Zeichenanzahl pro Kommentar (0 für Standardwert)
|
|
346
351
|
define_taxonomy_filters: Bitte definieren Sie einige Filter für diesen partizipativen Bereich, bevor Sie diese Einstellung verwenden.
|
|
347
352
|
form:
|
|
348
353
|
errors:
|
|
@@ -415,7 +420,7 @@ de:
|
|
|
415
420
|
id: Die eindeutige Bezeichnung des Projekts
|
|
416
421
|
latitude: Der Breitengrad des Projekts, falls es einen verortet wurde
|
|
417
422
|
longitude: Der Längengrad des Projekts, falls es verortet wurde
|
|
418
|
-
participatory_space: Zu welchem Bereich dieses Projekt gehört (z.B. Partizipationsprozesse oder
|
|
423
|
+
participatory_space: Zu welchem Bereich dieses Projekt gehört (z.B. Partizipationsprozesse oder Versammlungen)
|
|
419
424
|
reference: Die eindeutige Referenz des Projekts
|
|
420
425
|
related_proposal_titles: Titel der verknüpften Vorschläge
|
|
421
426
|
related_proposal_urls: URLs der verknüpften Vorschläge
|