decidim-budgets 0.31.7 → 0.31.8
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 +8 -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 +28 -2
- data/config/locales/bg.yml +4 -0
- data/config/locales/ca.yml +1 -1
- data/config/locales/de.yml +4 -1
- data/config/locales/eu.yml +65 -65
- data/config/locales/fr.yml +4 -0
- data/config/locales/gl.yml +289 -34
- data/config/locales/sv.yml +1 -0
- data/lib/decidim/budgets/version.rb +1 -1
- metadata +12 -12
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 14f59147f08856c838f48d096f69fba830f7e16271b333c844bf3149943074e4
|
|
4
|
+
data.tar.gz: 32580fdfe06bf959b07e2f15dfea7778cdc9c32863d1bb99d7a433dccabd3cf6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3064538c7524d637e23291e13846fab908829bdb783660e3ebfb76bc217ba9395900f264152822f387f76e9da7e677cf2eadec0c9560bef5a28834651655f76c
|
|
7
|
+
data.tar.gz: 23499f8574368f6bca328249804c9dd41aacb0d68409d2b9729e8110a999cd3de23e6542a104b5f8712f47e9f26804d1b233e215b59f5743e94add7cfb2dcbc4
|
|
@@ -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
|
|
@@ -14,10 +14,6 @@ module Decidim
|
|
|
14
14
|
|
|
15
15
|
helper_method :projects, :finished_orders, :pending_orders, :present, :project_ids
|
|
16
16
|
|
|
17
|
-
def collection
|
|
18
|
-
@collection ||= budget.projects.page(params[:page]).per(15)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
17
|
def new
|
|
22
18
|
enforce_permission_to :create, :project
|
|
23
19
|
@form = form(ProjectForm).from_params(
|
|
@@ -70,7 +66,7 @@ module Decidim
|
|
|
70
66
|
def update_taxonomies
|
|
71
67
|
enforce_permission_to :update, :project_taxonomy
|
|
72
68
|
|
|
73
|
-
UpdateResourcesTaxonomies.call(params[:taxonomies],
|
|
69
|
+
UpdateResourcesTaxonomies.call(params[:taxonomies], budget.projects.where(id: project_ids), current_organization) do
|
|
74
70
|
on(:invalid_taxonomies) do
|
|
75
71
|
flash[:error] = I18n.t(
|
|
76
72
|
"projects.update_taxonomies.select_a_taxonomy",
|
|
@@ -162,6 +158,10 @@ module Decidim
|
|
|
162
158
|
|
|
163
159
|
private
|
|
164
160
|
|
|
161
|
+
def collection
|
|
162
|
+
@collection ||= budget.projects.page(params[:page]).per(15)
|
|
163
|
+
end
|
|
164
|
+
|
|
165
165
|
def trashable_deleted_resource_type
|
|
166
166
|
:project
|
|
167
167
|
end
|
|
@@ -179,7 +179,7 @@ module Decidim
|
|
|
179
179
|
end
|
|
180
180
|
|
|
181
181
|
def orders
|
|
182
|
-
@orders ||= Order.where(budget:)
|
|
182
|
+
@orders ||= Order.where(budget:) # rubocop:disable Decidim/OrganizationScopedFinder -- budget is scoped to current_component in ApplicationController
|
|
183
183
|
end
|
|
184
184
|
|
|
185
185
|
def project_ids
|
|
@@ -189,7 +189,7 @@ module Decidim
|
|
|
189
189
|
def reference_budget
|
|
190
190
|
return unless params[:reference_id]
|
|
191
191
|
|
|
192
|
-
Budget.find(params
|
|
192
|
+
Budget.where(component: current_component).find(params.require(:reference_id))
|
|
193
193
|
end
|
|
194
194
|
|
|
195
195
|
def pending_orders
|
|
@@ -203,7 +203,7 @@ module Decidim
|
|
|
203
203
|
def sample_project
|
|
204
204
|
return if project_ids.empty?
|
|
205
205
|
|
|
206
|
-
|
|
206
|
+
budget.projects.find(project_ids.first)
|
|
207
207
|
end
|
|
208
208
|
|
|
209
209
|
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
|
|
|
@@ -14,12 +14,16 @@ module Decidim
|
|
|
14
14
|
before_action :set_focus_mode_if_voting_open
|
|
15
15
|
|
|
16
16
|
def index
|
|
17
|
+
enforce_permission_to :read, :project
|
|
18
|
+
|
|
17
19
|
raise ActionController::RoutingError, "Not Found" unless budget
|
|
18
20
|
end
|
|
19
21
|
|
|
20
22
|
def show
|
|
21
23
|
raise ActionController::RoutingError, "Not Found" unless budget
|
|
22
24
|
raise ActionController::RoutingError, "Not Found" unless project
|
|
25
|
+
|
|
26
|
+
enforce_permission_to :read, :project, project:
|
|
23
27
|
end
|
|
24
28
|
|
|
25
29
|
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 {
|
|
@@ -4,6 +4,7 @@ module Decidim
|
|
|
4
4
|
module Budgets
|
|
5
5
|
class Permissions < Decidim::DefaultPermissions
|
|
6
6
|
def permissions
|
|
7
|
+
return permission_action if permission_action.scope == :public && public_action_allowed?
|
|
7
8
|
return permission_action unless user
|
|
8
9
|
|
|
9
10
|
# Delegate the admin permission checks to the admin permissions class
|
|
@@ -15,12 +16,14 @@ module Decidim
|
|
|
15
16
|
can_vote?(false) if can_vote_project?(project || order&.projects&.first)
|
|
16
17
|
when [:report, :project]
|
|
17
18
|
permission_action.allow!
|
|
18
|
-
when [:read, :project]
|
|
19
|
-
toggle_allow(project.visible?)
|
|
20
19
|
when [:create, :order]
|
|
21
20
|
can_vote?(true)
|
|
22
21
|
when [:export_pdf, :order]
|
|
23
22
|
can_export_pdf?
|
|
23
|
+
when [:destroy, :order]
|
|
24
|
+
can_destroy_order?
|
|
25
|
+
when [:read, :order]
|
|
26
|
+
can_read_order?
|
|
24
27
|
end
|
|
25
28
|
|
|
26
29
|
permission_action
|
|
@@ -44,6 +47,17 @@ module Decidim
|
|
|
44
47
|
@workflow ||= context.fetch(:workflow, nil)
|
|
45
48
|
end
|
|
46
49
|
|
|
50
|
+
def public_action_allowed?
|
|
51
|
+
return unless permission_action.action == :read
|
|
52
|
+
|
|
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
|
|
59
|
+
end
|
|
60
|
+
|
|
47
61
|
def can_vote?(active_allow)
|
|
48
62
|
is_allowed = workflow.vote_allowed?(budget)
|
|
49
63
|
|
|
@@ -65,6 +79,18 @@ module Decidim
|
|
|
65
79
|
|
|
66
80
|
toggle_allow(is_allowed)
|
|
67
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
|
|
68
94
|
end
|
|
69
95
|
end
|
|
70
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: Нов проект
|
|
@@ -137,6 +138,7 @@ bg:
|
|
|
137
138
|
cancel_order:
|
|
138
139
|
more_than_one: да изтриете гласа си за %{name} и да започнете отначало
|
|
139
140
|
only_one: изтрийте гласа си и започнете отначало.
|
|
141
|
+
completed: Приключен
|
|
140
142
|
count:
|
|
141
143
|
one: "%{count} бюджет"
|
|
142
144
|
other: "%{count} бюджети"
|
|
@@ -182,6 +184,7 @@ bg:
|
|
|
182
184
|
subject: Гласувахте в пространството за участие %{space_name}
|
|
183
185
|
voted_on_space: Гласувахте за бюджета %{budget_name} за пространството за участие %{space_name}.
|
|
184
186
|
projects:
|
|
187
|
+
back_to_budgets: Обратно към проектите
|
|
185
188
|
budget_confirm:
|
|
186
189
|
are_you_sure: Ако размислите, може да промените гласа си по-късно.
|
|
187
190
|
cancel: Отказ
|
|
@@ -250,6 +253,7 @@ bg:
|
|
|
250
253
|
added: Добавено
|
|
251
254
|
all: Всички
|
|
252
255
|
projects_for: Проекти за %{name}
|
|
256
|
+
select_projects: Добави проекти
|
|
253
257
|
show:
|
|
254
258
|
budget: Бюджет
|
|
255
259
|
prompt: Изберете бюджет
|
data/config/locales/ca.yml
CHANGED
|
@@ -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/de.yml
CHANGED
|
@@ -145,6 +145,8 @@ de:
|
|
|
145
145
|
default_budget: Standardbudget
|
|
146
146
|
no_components: Es gibt keine weiteren Vorschlagskomponenten in diesem partizipativen Raum, um die Vorschläge in Projekte zu importieren.
|
|
147
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.
|
|
148
150
|
select_component: Bitte wählen Sie eine Komponente aus
|
|
149
151
|
title: Vorschläge bei Projekten importieren
|
|
150
152
|
reminders:
|
|
@@ -345,6 +347,7 @@ de:
|
|
|
345
347
|
announcement: Ankündigung
|
|
346
348
|
clear_all: Alles löschen
|
|
347
349
|
comments_enabled: Kommentare aktiviert
|
|
350
|
+
comments_max_length: Maximale Zeichenanzahl pro Kommentar (0 für Standardwert)
|
|
348
351
|
define_taxonomy_filters: Bitte definieren Sie einige Filter für diesen partizipativen Bereich, bevor Sie diese Einstellung verwenden.
|
|
349
352
|
form:
|
|
350
353
|
errors:
|
|
@@ -424,7 +427,7 @@ de:
|
|
|
424
427
|
id: Die eindeutige Bezeichnung des Projekts
|
|
425
428
|
latitude: Der Breitengrad des Projekts, falls es einen verortet wurde
|
|
426
429
|
longitude: Der Längengrad des Projekts, falls es verortet wurde
|
|
427
|
-
participatory_space: Zu welchem Bereich dieses Projekt gehört (z.B. Partizipationsprozesse oder
|
|
430
|
+
participatory_space: Zu welchem Bereich dieses Projekt gehört (z.B. Partizipationsprozesse oder Versammlungen)
|
|
428
431
|
reference: Die eindeutige Referenz des Projekts
|
|
429
432
|
related_proposal_titles: Titel der verknüpften Vorschläge
|
|
430
433
|
related_proposal_urls: URLs der verknüpften Vorschläge
|