decidim-reporting_proposals 0.6.1 → 0.7.3
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/.github/workflows/lint.yml +8 -6
- data/.github/workflows/test_integration.yml +34 -12
- data/.github/workflows/test_unit.yml +27 -7
- data/.rubocop.yml +21 -1
- data/.ruby-version +1 -1
- data/Gemfile +6 -8
- data/Gemfile.lock +418 -427
- data/README.md +10 -0
- data/app/cells/concerns/decidim/reporting_proposals/proposals_picker_cell_override.rb +4 -4
- data/app/commands/concerns/decidim/reporting_proposals/admin/assign_proposals_to_valuator_override.rb +3 -1
- data/app/commands/concerns/decidim/reporting_proposals/admin/create_category_override.rb +5 -11
- data/app/commands/concerns/decidim/reporting_proposals/admin/create_proposal_answer_template_override.rb +24 -0
- data/app/commands/concerns/decidim/reporting_proposals/admin/has_result_command_override.rb +21 -0
- data/app/commands/concerns/decidim/reporting_proposals/admin/update_category_override.rb +8 -11
- data/app/commands/concerns/decidim/reporting_proposals/admin/update_imported_result_override.rb +30 -0
- data/app/commands/concerns/decidim/reporting_proposals/admin/update_result_override.rb +0 -4
- data/app/commands/concerns/decidim/reporting_proposals/create_project_override.rb +1 -1
- data/app/controllers/concerns/decidim/reporting_proposals/admin/proposal_answer_templates_controller_override.rb +4 -5
- data/app/controllers/concerns/decidim/reporting_proposals/admin/valuation_assignments_controller_override.rb +10 -4
- data/app/controllers/concerns/decidim/reporting_proposals/proposals_controller_override.rb +23 -31
- data/app/forms/concerns/decidim/reporting_proposals/admin/category_form_override.rb +1 -1
- data/app/forms/concerns/decidim/reporting_proposals/form_builder_override.rb +4 -1
- data/app/helpers/concerns/decidim/reporting_proposals/admin/proposal_bulk_actions_helper_override.rb +23 -0
- data/app/helpers/concerns/decidim/reporting_proposals/admin/proposals_helper_override.rb +18 -0
- data/app/helpers/concerns/decidim/reporting_proposals/proposal_wizard_helper_override.rb +17 -3
- data/app/jobs/decidim/reporting_proposals/assign_proposal_valuators_job.rb +1 -1
- data/app/overrides/decidim/proposals/admin/proposals/_proposal-tr/add_categories_column.html.erb.deface +8 -0
- data/app/overrides/decidim/proposals/admin/proposals/_proposal-tr/add_id_column.html.erb.deface +3 -0
- data/app/overrides/decidim/proposals/admin/proposals/_proposal-tr/add_valuators_name.html.erb.deface +5 -5
- data/app/overrides/decidim/proposals/admin/proposals/_proposal-tr/replace_td_title.html.erb.deface +1 -1
- data/app/overrides/decidim/proposals/admin/proposals/index/add_categories.html.erb.deface +3 -0
- data/app/overrides/decidim/proposals/admin/proposals/index/add_form_default_class.html.erb.deface +5 -0
- data/app/overrides/decidim/proposals/admin/proposals/index/add_id_column_header.html.erb.deface +3 -0
- data/app/overrides/decidim/proposals/admin/proposals/show/add_valuators_form.html.erb.deface +1 -24
- data/app/overrides/decidim/proposals/proposals/edit_draft/replace_partial_edit_form_fields.html.erb.deface +0 -1
- data/app/overrides/decidim/proposals/proposals/new/replace_partial_edit_form_fields.html.erb.deface +3 -0
- data/app/packs/entrypoints/decidim_reporting_proposals.js +1 -0
- data/app/packs/src/decidim/reporting_proposals/assign_valuators_select.js +25 -0
- data/app/packs/src/decidim/reporting_proposals/user_camera_inputs.js +1 -1
- data/app/packs/stylesheets/decidim/reporting_proposals/list_component_admin.scss +6 -0
- data/app/permissions/concerns/decidim/reporting_proposals/admin/permissions_override.rb +12 -2
- data/app/queries/decidim/reporting_proposals/nearby_proposals.rb +1 -3
- data/app/views/decidim/proposals/admin/proposals/_assign_to_valuator.html.erb +31 -0
- data/app/views/decidim/proposals/proposals/compare.html.erb +34 -0
- data/app/views/decidim/reporting_proposals/admin/categories/_valuators_field.html.erb +1 -1
- data/app/views/decidim/reporting_proposals/admin/proposals/_photo_form.html.erb +2 -2
- data/app/views/decidim/reporting_proposals/admin/proposals/_photo_gallery.html.erb +2 -1
- data/app/views/decidim/reporting_proposals/admin/proposals/_photos.html.erb +4 -1
- data/app/views/decidim/reporting_proposals/admin/proposals/_proposal_td_hide.html.erb +1 -9
- data/app/views/decidim/reporting_proposals/admin/proposals/_proposal_td_title.html.erb +5 -4
- data/app/views/decidim/reporting_proposals/proposals/_camera_button.html.erb +4 -2
- data/app/views/decidim/reporting_proposals/proposals/_reporting_proposal_fields.html.erb +66 -65
- data/bin/bundle +62 -0
- data/bin/rspec +26 -0
- data/bin/test +47 -0
- data/bin/test-legacy +3 -0
- data/config/locales/ca.yml +22 -34
- data/config/locales/de.yml +22 -36
- data/config/locales/en.yml +20 -1
- data/config/locales/es.yml +22 -36
- data/decidim-reporting_proposals.gemspec +1 -2
- data/lib/decidim/reporting_proposals/component.rb +31 -17
- data/lib/decidim/reporting_proposals/engine.rb +16 -12
- data/lib/decidim/reporting_proposals/version.rb +3 -3
- data/lib/tasks/reporting_proposals_statuses.rake +52 -0
- data/package-lock.json +120 -85
- data/package.json +7 -7
- metadata +61 -79
- data/.rubocop-disabled.yml +0 -11
- data/.rubocop_rails.yml +0 -90
- data/.rubocop_ruby.yml +0 -1767
- data/app/commands/concerns/decidim/reporting_proposals/admin/create_answer_override.rb +0 -17
- data/app/commands/concerns/decidim/reporting_proposals/admin/create_result_override.rb +0 -17
- data/app/commands/concerns/decidim/reporting_proposals/create_report_override.rb +0 -19
- data/app/commands/concerns/decidim/reporting_proposals/gallery_methods_override.rb +0 -18
- data/app/overrides/decidim/proposals/proposals/compare/add_css.html.erb.deface +0 -5
- data/app/overrides/decidim/proposals/proposals/compare/add_distance_badge.html.erb.deface +0 -10
- data/app/overrides/decidim/proposals/proposals/edit/add_user_group.html.erb.deface +0 -3
- data/app/overrides/decidim/proposals/proposals/new/remove_body.html.erb.deface +0 -1
- data/app/overrides/decidim/proposals/proposals/new/replace_body.html.erb.deface +0 -3
- data/app/overrides/layouts/decidim/_process_header_steps/always_show_new_proposals.html.erb.deface +0 -3
- data/app/views/decidim/reporting_proposals/proposals/_new_proposal_fields.html.erb +0 -9
- data/app/views/decidim/reporting_proposals/proposals/_user_group.html.erb +0 -5
- data/babel.config.json +0 -25
data/config/locales/de.yml
CHANGED
|
@@ -7,10 +7,11 @@ de:
|
|
|
7
7
|
proposal:
|
|
8
8
|
has_no_address: Adresse unbekannt
|
|
9
9
|
has_no_image: Kein Foto vorhanden
|
|
10
|
-
template:
|
|
11
|
-
scope_for_availability: Verfügbarkeit der Komponente einschränken
|
|
12
10
|
decidim:
|
|
13
11
|
admin:
|
|
12
|
+
actions:
|
|
13
|
+
manage: Verwalten
|
|
14
|
+
new: Neu
|
|
14
15
|
hidden_resource_mailer:
|
|
15
16
|
notify_mail:
|
|
16
17
|
body_1: Ein Administrator hat Ihre Meldung entfernt, weil sie gemeldet wurde.
|
|
@@ -18,10 +19,6 @@ de:
|
|
|
18
19
|
hello: Guten Tag,
|
|
19
20
|
reason: 'Grund: %{reason}'
|
|
20
21
|
subject: Ihre Meldung wurde ausgeblendet
|
|
21
|
-
templates:
|
|
22
|
-
fetch:
|
|
23
|
-
error: Diese Vorlage kann nicht gefunden werden, vielleicht wurde sie gelöscht?
|
|
24
|
-
missing_resource: "(fehlende Ressource)"
|
|
25
22
|
application:
|
|
26
23
|
geocoding:
|
|
27
24
|
unconfigured: Geocoding ist nicht konfiguriert!
|
|
@@ -40,6 +37,14 @@ de:
|
|
|
40
37
|
unanswered_proposals_overdue: Nach wie vielen Tagen gilt eine nicht beantwortete Meldung als überfällig
|
|
41
38
|
unanswered_proposals_overdue_help: Falls keine zeitlichen Hinweise angezeigt werden sollen, wähle hier 0.
|
|
42
39
|
reporting_proposals:
|
|
40
|
+
actions:
|
|
41
|
+
amend: Änderungsvorschlag
|
|
42
|
+
comment: Kommentieren
|
|
43
|
+
create: Erstellen
|
|
44
|
+
endorse: Unterstützung
|
|
45
|
+
vote: Abstimmung
|
|
46
|
+
vote_comment: Kommentar bewerten
|
|
47
|
+
withdraw: Zurückziehen
|
|
43
48
|
name: Meldungen
|
|
44
49
|
settings:
|
|
45
50
|
global:
|
|
@@ -168,14 +173,8 @@ de:
|
|
|
168
173
|
geolocated_at: Hier geolokalisiert
|
|
169
174
|
send_email_button:
|
|
170
175
|
send_mail: Den Meldungslink per E-Mail weiterleiten
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
admin_panel: Admin Panel
|
|
174
|
-
email_body: Du bist für die hier aufgelisteten Meldungen als Experte / Expertin zugeteilt worden. Danke für eine zeitnahe Prüfung der Statthaftigkeit und Bearbeitung der Meldung.
|
|
175
|
-
gratitude: Vielen Dank!
|
|
176
|
-
greeting: Hallo %{name}
|
|
177
|
-
public_side: User-Ansicht
|
|
178
|
-
subject: Dir wurden neue Meldungen zugewiesen
|
|
176
|
+
show:
|
|
177
|
+
report: Bericht
|
|
179
178
|
reported_mailer:
|
|
180
179
|
report:
|
|
181
180
|
admin_resource: Diese Ressource moderieren
|
|
@@ -341,6 +340,7 @@ de:
|
|
|
341
340
|
photo_form:
|
|
342
341
|
action: Bild hinzufügen
|
|
343
342
|
add_images: Bilder hinzufügen
|
|
343
|
+
edit_images: Bilder hinzufügen
|
|
344
344
|
gallery_legend: Bilder hinzufügen
|
|
345
345
|
title: Bilder
|
|
346
346
|
upload_msg: Keine Dateien ausgewählt
|
|
@@ -354,6 +354,14 @@ de:
|
|
|
354
354
|
remove_assignment: Zuweisung entfernen
|
|
355
355
|
remove_assignment_confirmation: Zuweisung wurde entfernt
|
|
356
356
|
valuators: Expert/innen
|
|
357
|
+
proposals_valuator_mailer:
|
|
358
|
+
notify_proposals_valuator:
|
|
359
|
+
admin_panel: admin panel
|
|
360
|
+
email_body: Du bist für die hier aufgelisteten Meldungen als Experte / Expertin zugeteilt worden. Danke für eine zeitnahe Prüfung der Statthaftigkeit und Bearbeitung der Meldung.
|
|
361
|
+
gratitude: Vielen Dank!
|
|
362
|
+
greeting: Hallo %{name}
|
|
363
|
+
public_side: User-Ansicht
|
|
364
|
+
subject: Dir wurden neue Meldungen zugewiesen
|
|
357
365
|
resolution_time: Bearbeitungszeit
|
|
358
366
|
time_elapsed:
|
|
359
367
|
datetime:
|
|
@@ -418,25 +426,3 @@ de:
|
|
|
418
426
|
delete_image: Bild löschen
|
|
419
427
|
form:
|
|
420
428
|
image: Foto
|
|
421
|
-
templates:
|
|
422
|
-
admin:
|
|
423
|
-
proposal_answer_templates:
|
|
424
|
-
form:
|
|
425
|
-
answer_template: Standardantworten
|
|
426
|
-
hint: "<strong>Hinweis:</strong> Diese Platzhalter kannst du überall in den Standortantworten verwenden. Sie werden dann durch die entsprechenden Inhalte ersetzt"
|
|
427
|
-
hint1: "<strong>%{organization}</strong> wird durch den Namen der Organisation ersetzt"
|
|
428
|
-
hint2: "<strong>%{name}</strong> wird durch den Namen des Autors ersetzt"
|
|
429
|
-
hint3: "<strong>%{admin}</strong> wird durch den Namen der Person ersetzt, die den Vorschlag beantwortet"
|
|
430
|
-
save: Speichern
|
|
431
|
-
scope_for_availability_help: Beachte, dass nur Prozesse mit Komponenten des Typs "Vorschlag" aufgelistet werden.
|
|
432
|
-
template_title: Titel der Vorlage
|
|
433
|
-
index:
|
|
434
|
-
confirm_delete: Möchten Sie diese Vorlage wirklich löschen?
|
|
435
|
-
global_scope: Global (überall verfügbar)
|
|
436
|
-
internal_state: Interner Status
|
|
437
|
-
scope_for_availability: Bereich
|
|
438
|
-
title: Antworten für Vorschläge / Meldungen
|
|
439
|
-
template_chooser:
|
|
440
|
-
select_template: Wähle eine Vorlage
|
|
441
|
-
template_types:
|
|
442
|
-
proposal_answer_templates: Antworten für Vorschläge / Meldungen
|
data/config/locales/en.yml
CHANGED
|
@@ -50,6 +50,14 @@ en:
|
|
|
50
50
|
unanswered_proposals_overdue_help: This adds a visual alert to the list
|
|
51
51
|
of proposals. Leave it to zero to disable this feature.
|
|
52
52
|
reporting_proposals:
|
|
53
|
+
actions:
|
|
54
|
+
amend: Amend
|
|
55
|
+
comment: Comment
|
|
56
|
+
create: Create
|
|
57
|
+
endorse: Endorse
|
|
58
|
+
vote: Support
|
|
59
|
+
vote_comment: Vote comment
|
|
60
|
+
withdraw: Withdraw
|
|
53
61
|
name: Reporting proposals
|
|
54
62
|
settings:
|
|
55
63
|
global:
|
|
@@ -72,7 +80,7 @@ en:
|
|
|
72
80
|
amendments_wizard_help_text: Amendments Wizard help text
|
|
73
81
|
announcement: Announcement
|
|
74
82
|
attachments_allowed: Allow attachments
|
|
75
|
-
|
|
83
|
+
can_accumulate_votes_beyond_threshold: Can accumulate supports beyond
|
|
76
84
|
threshold
|
|
77
85
|
collaborative_drafts_enabled: Collaborative drafts enabled
|
|
78
86
|
comments_enabled: Comments enabled
|
|
@@ -226,10 +234,19 @@ en:
|
|
|
226
234
|
proposals:
|
|
227
235
|
address:
|
|
228
236
|
geolocated_at: Geolocated at
|
|
237
|
+
index:
|
|
238
|
+
categories: Categories
|
|
239
|
+
id: ID
|
|
229
240
|
send_email_button:
|
|
230
241
|
send_mail: Send an email to user
|
|
231
242
|
show:
|
|
232
243
|
report: Report
|
|
244
|
+
proposals:
|
|
245
|
+
compare:
|
|
246
|
+
continue: Continue
|
|
247
|
+
title: Compare proposals
|
|
248
|
+
wizard_steps:
|
|
249
|
+
step_compare: Compare
|
|
233
250
|
reported_mailer:
|
|
234
251
|
report:
|
|
235
252
|
admin_resource: Admin this resource
|
|
@@ -401,6 +418,7 @@ en:
|
|
|
401
418
|
title: Photos
|
|
402
419
|
upload_msg: No files selected
|
|
403
420
|
photo_gallery:
|
|
421
|
+
are_you_sure: Are you sure you want to delete this image?
|
|
404
422
|
delete_image: Delete image
|
|
405
423
|
photos: Photos
|
|
406
424
|
photos:
|
|
@@ -483,6 +501,7 @@ en:
|
|
|
483
501
|
same situation, you can choose to support it instead of creating a new
|
|
484
502
|
one.
|
|
485
503
|
title: Nearby proposals
|
|
504
|
+
no_similars_found: No similar proposals found
|
|
486
505
|
edit:
|
|
487
506
|
delete_image: Delete image
|
|
488
507
|
form:
|
data/config/locales/es.yml
CHANGED
|
@@ -7,10 +7,11 @@ es:
|
|
|
7
7
|
proposal:
|
|
8
8
|
has_no_address: No tiene dirección
|
|
9
9
|
has_no_image: No tiene imagen
|
|
10
|
-
template:
|
|
11
|
-
scope_for_availability: Restringir disponibilidad al componente
|
|
12
10
|
decidim:
|
|
13
11
|
admin:
|
|
12
|
+
actions:
|
|
13
|
+
manage: Gestionar
|
|
14
|
+
new: Nuevo
|
|
14
15
|
hidden_resource_mailer:
|
|
15
16
|
notify_mail:
|
|
16
17
|
body_1: Un administrador eliminó su propuesta porque ha sido denunciada.
|
|
@@ -18,10 +19,6 @@ es:
|
|
|
18
19
|
hello: Hola,
|
|
19
20
|
reason: 'Motivo: %{reason}'
|
|
20
21
|
subject: Tu propuesta ha sido ocultada
|
|
21
|
-
templates:
|
|
22
|
-
fetch:
|
|
23
|
-
error: No se pudo encontrar esta plantilla, ¿tal vez se ha eliminado?
|
|
24
|
-
missing_resource: "(recurso ausente)"
|
|
25
22
|
application:
|
|
26
23
|
geocoding:
|
|
27
24
|
unconfigured: '¡La geocodificación no está configurada!'
|
|
@@ -40,6 +37,14 @@ es:
|
|
|
40
37
|
unanswered_proposals_overdue: Después de cuántos días se considera una propuesta sin respuesta atrasada
|
|
41
38
|
unanswered_proposals_overdue_help: Esto añade una alerta visual a la lista de propuestas. Déjala a cero para desactivar esta característica.
|
|
42
39
|
reporting_proposals:
|
|
40
|
+
actions:
|
|
41
|
+
amend: Enmendar
|
|
42
|
+
comment: Comentar
|
|
43
|
+
create: Crear
|
|
44
|
+
endorse: Adherirse
|
|
45
|
+
vote: Apoyar
|
|
46
|
+
vote_comment: Votar comentario
|
|
47
|
+
withdraw: Retirar
|
|
43
48
|
name: Propuestas directas
|
|
44
49
|
settings:
|
|
45
50
|
global:
|
|
@@ -168,14 +173,8 @@ es:
|
|
|
168
173
|
geolocated_at: Geolocalizada en
|
|
169
174
|
send_email_button:
|
|
170
175
|
send_mail: Enviar un correo electrónico al usuario
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
admin_panel: panel de administración
|
|
174
|
-
email_body: Has sido asignado como evaluador para las propuestas que se listan a continuación. Esto significa que en los próximos días deberías comentar y/o una respuesta adecuada.
|
|
175
|
-
gratitude: '¡Gracias por tu ayuda!'
|
|
176
|
-
greeting: Hola %{name},
|
|
177
|
-
public_side: parte pública
|
|
178
|
-
subject: Nuevas propuestas asignadas para su evaluación
|
|
176
|
+
show:
|
|
177
|
+
report: Denunciar
|
|
179
178
|
reported_mailer:
|
|
180
179
|
report:
|
|
181
180
|
admin_resource: Administrar este recurso
|
|
@@ -341,6 +340,7 @@ es:
|
|
|
341
340
|
photo_form:
|
|
342
341
|
action: Añadir imagen
|
|
343
342
|
add_images: Añadir imágenes
|
|
343
|
+
edit_images: Añadir imágenes
|
|
344
344
|
gallery_legend: Añadir imágenes
|
|
345
345
|
title: Fotos
|
|
346
346
|
upload_msg: No hay archivos seleccionados
|
|
@@ -354,6 +354,14 @@ es:
|
|
|
354
354
|
remove_assignment: eliminar asignación
|
|
355
355
|
remove_assignment_confirmation: Seguro que quieres eliminar esta asignación?
|
|
356
356
|
valuators: Evaluadoras
|
|
357
|
+
proposals_valuator_mailer:
|
|
358
|
+
notify_proposals_valuator:
|
|
359
|
+
admin_panel: panel de administración
|
|
360
|
+
email_body: Has sido asignado como evaluador para las propuestas que se listan a continuación. Esto significa que en los próximos días deberías comentar y/o una respuesta adecuada.
|
|
361
|
+
gratitude: '¡Gracias por tu ayuda!'
|
|
362
|
+
greeting: Hola %{name},
|
|
363
|
+
public_side: parte pública
|
|
364
|
+
subject: Nuevas propuestas asignadas para su evaluación
|
|
357
365
|
resolution_time: Tiempo de resolución
|
|
358
366
|
time_elapsed:
|
|
359
367
|
datetime:
|
|
@@ -418,25 +426,3 @@ es:
|
|
|
418
426
|
delete_image: Eliminar imagen
|
|
419
427
|
form:
|
|
420
428
|
image: Imágen/foto
|
|
421
|
-
templates:
|
|
422
|
-
admin:
|
|
423
|
-
proposal_answer_templates:
|
|
424
|
-
form:
|
|
425
|
-
answer_template: Plantilla de Respuesta
|
|
426
|
-
hint: "<strong>Sugerencia:</strong> Puede utilizar estas variables en cualquier lugar de la plantilla de respuesta que se reemplazarán cuando utilice la plantilla"
|
|
427
|
-
hint1: "<strong>%{organization}</strong> será reemplazado por el nombre de la organización"
|
|
428
|
-
hint2: "<strong>%{name}</strong> será reemplazado por el nombre del autor"
|
|
429
|
-
hint3: "<strong>%{admin}</strong> será sustituido por el nombre del administrador (el que responde a la propuesta)"
|
|
430
|
-
save: Guardar
|
|
431
|
-
scope_for_availability_help: Tenga en cuenta que sólo los espacios participativos que tengan componentes del tipo "propuestas" serán listados.
|
|
432
|
-
template_title: Información de la plantilla
|
|
433
|
-
index:
|
|
434
|
-
confirm_delete: '¿Está seguro de querer eliminar esta plantilla?'
|
|
435
|
-
global_scope: Global (disponible en todas partes)
|
|
436
|
-
internal_state: Estado interno
|
|
437
|
-
scope_for_availability: Ámbito
|
|
438
|
-
title: Respuestas a propuestas
|
|
439
|
-
template_chooser:
|
|
440
|
-
select_template: Selecciona una plantilla de respuesta
|
|
441
|
-
template_types:
|
|
442
|
-
proposal_answer_templates: Respuestas a propuestas
|
|
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
|
|
|
14
14
|
spec.description = "A module for Decidim that facilitates the creation of proposals related to geolocated issues in a city"
|
|
15
15
|
spec.license = "AGPL-3.0"
|
|
16
16
|
spec.homepage = "https://github.com/openpoke/decidim-module-reporting_proposals"
|
|
17
|
-
spec.required_ruby_version = ">= 3.
|
|
17
|
+
spec.required_ruby_version = ">= 3.2"
|
|
18
18
|
|
|
19
19
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
|
20
20
|
f.match(%r{^(test|spec|features)/})
|
|
@@ -32,7 +32,6 @@ Gem::Specification.new do |spec|
|
|
|
32
32
|
spec.add_development_dependency "decidim-accountability", Decidim::ReportingProposals::COMPAT_DECIDIM_VERSION
|
|
33
33
|
spec.add_development_dependency "decidim-budgets", Decidim::ReportingProposals::COMPAT_DECIDIM_VERSION
|
|
34
34
|
spec.add_development_dependency "decidim-dev", Decidim::ReportingProposals::COMPAT_DECIDIM_VERSION
|
|
35
|
-
spec.add_development_dependency "decidim-elections", Decidim::ReportingProposals::COMPAT_DECIDIM_VERSION
|
|
36
35
|
spec.add_development_dependency "decidim-meetings", Decidim::ReportingProposals::COMPAT_DECIDIM_VERSION
|
|
37
36
|
spec.add_development_dependency "decidim-templates", Decidim::ReportingProposals::COMPAT_DECIDIM_VERSION
|
|
38
37
|
spec.metadata["rubygems_mfa_required"] = "true"
|
|
@@ -14,6 +14,11 @@ Decidim.register_component(:reporting_proposals) do |component|
|
|
|
14
14
|
raise "Can't destroy this component when there are proposals" if Decidim::Proposals::Proposal.where(component: instance).any?
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
+
component.on(:create) do |instance|
|
|
18
|
+
admin_user = GlobalID::Locator.locate(instance.versions.first.whodunnit)
|
|
19
|
+
Decidim::Proposals.create_default_states!(instance, admin_user)
|
|
20
|
+
end
|
|
21
|
+
|
|
17
22
|
component.data_portable_entities = ["Decidim::Proposals::Proposal"]
|
|
18
23
|
|
|
19
24
|
component.newsletter_participant_entities = ["Decidim::Proposals::Proposal"]
|
|
@@ -36,7 +41,7 @@ Decidim.register_component(:reporting_proposals) do |component|
|
|
|
36
41
|
settings.attribute :proposal_edit_time, type: :enum, default: "limited", choices: -> { %w(limited infinite) }
|
|
37
42
|
settings.attribute :proposal_edit_before_minutes, type: :integer, default: 5
|
|
38
43
|
settings.attribute :threshold_per_proposal, type: :integer, default: 0
|
|
39
|
-
settings.attribute :
|
|
44
|
+
settings.attribute :can_accumulate_votes_beyond_threshold, type: :boolean, default: false
|
|
40
45
|
settings.attribute :proposal_answering_enabled, type: :boolean, default: true
|
|
41
46
|
settings.attribute :default_sort_order, type: :select, default: "default", choices: -> { REP_POSSIBLE_SORT_ORDERS }
|
|
42
47
|
settings.attribute :official_proposals_enabled, type: :boolean, default: true
|
|
@@ -103,14 +108,14 @@ Decidim.register_component(:reporting_proposals) do |component|
|
|
|
103
108
|
end
|
|
104
109
|
|
|
105
110
|
component.register_stat :proposals_count, primary: true, priority: Decidim::StatsRegistry::HIGH_PRIORITY do |components, start_at, end_at|
|
|
106
|
-
Decidim::Proposals::FilteredProposals.for(components, start_at, end_at).published.
|
|
111
|
+
Decidim::Proposals::FilteredProposals.for(components, start_at, end_at).published.not_withdrawn.not_hidden.count
|
|
107
112
|
end
|
|
108
113
|
|
|
109
114
|
component.register_stat :proposals_accepted, primary: true, priority: Decidim::StatsRegistry::HIGH_PRIORITY do |components, start_at, end_at|
|
|
110
115
|
Decidim::Proposals::FilteredProposals.for(components, start_at, end_at).accepted.not_hidden.count
|
|
111
116
|
end
|
|
112
117
|
|
|
113
|
-
component.register_stat :
|
|
118
|
+
component.register_stat :votes_count, priority: Decidim::StatsRegistry::HIGH_PRIORITY do |components, start_at, end_at|
|
|
114
119
|
proposals = Decidim::Proposals::FilteredProposals.for(components, start_at, end_at).published.not_hidden
|
|
115
120
|
Decidim::Proposals::ProposalVote.where(proposal: proposals).count
|
|
116
121
|
end
|
|
@@ -238,18 +243,11 @@ Decidim.register_component(:reporting_proposals) do |component|
|
|
|
238
243
|
global = nil
|
|
239
244
|
end
|
|
240
245
|
|
|
246
|
+
Decidim::Proposals.create_default_states!(component, admin_user)
|
|
247
|
+
|
|
241
248
|
5.times do |n|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
elsif n > 2
|
|
245
|
-
["rejected", nil, Time.current]
|
|
246
|
-
elsif n > 1
|
|
247
|
-
["evaluating", nil, Time.current]
|
|
248
|
-
elsif n.positive?
|
|
249
|
-
["accepted", Decidim::Faker::Localized.sentence(word_count: 10), nil]
|
|
250
|
-
else
|
|
251
|
-
["not_answered", nil, nil]
|
|
252
|
-
end
|
|
249
|
+
proposal_state, answer, state_published_at = random_state_answer
|
|
250
|
+
proposal_state = Decidim::Proposals::ProposalState.where(component:, token: proposal_state).first
|
|
253
251
|
|
|
254
252
|
params = {
|
|
255
253
|
component:,
|
|
@@ -257,9 +255,9 @@ Decidim.register_component(:reporting_proposals) do |component|
|
|
|
257
255
|
scope: Faker::Boolean.boolean(true_ratio: 0.5) ? global : scopes.sample,
|
|
258
256
|
title: { en: Faker::Lorem.sentence(word_count: 2) },
|
|
259
257
|
body: { en: Faker::Lorem.paragraphs(number: 2).join("\n") },
|
|
260
|
-
|
|
258
|
+
proposal_state:,
|
|
261
259
|
answer:,
|
|
262
|
-
answered_at:
|
|
260
|
+
answered_at: proposal_state.present? ? Time.current : nil,
|
|
263
261
|
state_published_at:,
|
|
264
262
|
published_at: Time.current
|
|
265
263
|
}
|
|
@@ -323,7 +321,7 @@ Decidim.register_component(:reporting_proposals) do |component|
|
|
|
323
321
|
scope: Faker::Boolean.boolean(true_ratio: 0.5) ? global : scopes.sample,
|
|
324
322
|
title: { en: "#{proposal.title["en"]} #{Faker::Lorem.sentence(word_count: 1)}" },
|
|
325
323
|
body: { en: "#{proposal.body["en"]} #{Faker::Lorem.sentence(word_count: 3)}" },
|
|
326
|
-
|
|
324
|
+
proposal_state: Decidim::Proposals::ProposalState.where(component: proposal.component, token: :evaluating).first,
|
|
327
325
|
answer: nil,
|
|
328
326
|
answered_at: Time.current,
|
|
329
327
|
published_at: Time.current
|
|
@@ -478,4 +476,20 @@ Decidim.register_component(:reporting_proposals) do |component|
|
|
|
478
476
|
body: Faker::Lorem.paragraphs(number: 2).join("\n")
|
|
479
477
|
)
|
|
480
478
|
end
|
|
479
|
+
|
|
480
|
+
def random_state_answer
|
|
481
|
+
n = rand(5)
|
|
482
|
+
|
|
483
|
+
if n > 3
|
|
484
|
+
[:accepted, Decidim::Faker::Localized.sentence(word_count: 10), Time.current]
|
|
485
|
+
elsif n > 2
|
|
486
|
+
[:rejected, nil, Time.current]
|
|
487
|
+
elsif n > 1
|
|
488
|
+
[:evaluating, nil, Time.current]
|
|
489
|
+
elsif n.positive?
|
|
490
|
+
[:accepted, Decidim::Faker::Localized.sentence(word_count: 10), nil]
|
|
491
|
+
else
|
|
492
|
+
[:not_answered, nil, nil]
|
|
493
|
+
end
|
|
494
|
+
end
|
|
481
495
|
end
|
|
@@ -19,17 +19,14 @@ module Decidim
|
|
|
19
19
|
Decidim::FormBuilder.include(Decidim::ReportingProposals::FormBuilderOverride)
|
|
20
20
|
Decidim::ResourceHelper.include(Decidim::ReportingProposals::ResourceHelperOverride)
|
|
21
21
|
Decidim::Map::Autocomplete::Builder.include(Decidim::ReportingProposals::MapBuilderOverride)
|
|
22
|
-
Decidim::CreateReport.include(Decidim::ReportingProposals::CreateReportOverride)
|
|
23
|
-
Decidim::GalleryMethods.include(Decidim::ReportingProposals::GalleryMethodsOverride)
|
|
24
22
|
Decidim::LinkedResourcesForCell.include(Decidim::ReportingProposals::LinkedResourcesForCellOverride)
|
|
25
23
|
Decidim::Proposals::ProposalSerializer.include(Decidim::ReportingProposals::ProposalSerializerOverride)
|
|
26
24
|
Decidim::Proposals::ProposalsPickerCell.include(Decidim::ReportingProposals::ProposalsPickerCellOverride)
|
|
27
25
|
Decidim::Proposals::PublishProposal.include(Decidim::ReportingProposals::PublishProposalOverride)
|
|
28
|
-
Decidim::Proposals::Admin::AnswerProposal.include(Decidim::ReportingProposals::Admin::AnswerProposalOverride)
|
|
29
26
|
Decidim::Accountability::Admin::ResultForm.include(Decidim::ReportingProposals::MapIncludedProposalsForFormOverride)
|
|
30
|
-
Decidim::Accountability::Admin::
|
|
27
|
+
Decidim::Accountability::Admin::HasResultCommand.include(Decidim::ReportingProposals::Admin::HasResultCommandOverride)
|
|
31
28
|
Decidim::Accountability::Admin::UpdateResult.include(Decidim::ReportingProposals::Admin::UpdateResultOverride)
|
|
32
|
-
Decidim::Accountability::Admin::UpdateImportedResult.include(Decidim::ReportingProposals::Admin::
|
|
29
|
+
Decidim::Accountability::Admin::UpdateImportedResult.include(Decidim::ReportingProposals::Admin::UpdateImportedResultOverride)
|
|
33
30
|
Decidim::Meetings::CloseMeetingForm.include(Decidim::ReportingProposals::CloseMeetingFormOverride)
|
|
34
31
|
Decidim::Meetings::Admin::CloseMeetingForm.include(Decidim::ReportingProposals::CloseMeetingFormOverride)
|
|
35
32
|
Decidim::Meetings::Admin::CloseMeeting.include(Decidim::ReportingProposals::CloseMeetingOverride)
|
|
@@ -38,16 +35,12 @@ module Decidim
|
|
|
38
35
|
Decidim::Budgets::Admin::CreateProject.include(Decidim::ReportingProposals::CreateProjectOverride)
|
|
39
36
|
Decidim::Budgets::Admin::UpdateProject.include(Decidim::ReportingProposals::CreateProjectOverride)
|
|
40
37
|
Decidim::Templates::Admin::UpdateProposalAnswerTemplate.include(Decidim::ReportingProposals::Admin::UpdateProposalAnswerTemplateOverride) if defined?(Decidim::Templates)
|
|
41
|
-
if defined?(Decidim::Elections::Admin::AnswerForm)
|
|
42
|
-
Decidim::Elections::Admin::AnswerForm.include(Decidim::ReportingProposals::MapRelatedProposalsForFormOverride)
|
|
43
|
-
Decidim::Elections::Admin::CreateAnswer.include(Decidim::ReportingProposals::Admin::CreateAnswerOverride)
|
|
44
|
-
Decidim::Elections::Admin::UpdateAnswer.include(Decidim::ReportingProposals::Admin::CreateAnswerOverride)
|
|
45
|
-
end
|
|
46
38
|
Decidim::Admin::CategoryForm.include(Decidim::ReportingProposals::Admin::CategoryFormOverride)
|
|
47
39
|
Decidim::Admin::CreateCategory.include(Decidim::ReportingProposals::Admin::CreateCategoryOverride)
|
|
48
40
|
Decidim::Admin::UpdateCategory.include(Decidim::ReportingProposals::Admin::UpdateCategoryOverride)
|
|
49
41
|
Decidim::Proposals::Admin::Permissions.include(Decidim::ReportingProposals::Admin::PermissionsOverride)
|
|
50
42
|
Decidim::ParticipatorySpaceRoleConfig::Valuator.include(Decidim::ReportingProposals::ParticipatorySpaceRoleConfig::ValuatorOverride)
|
|
43
|
+
Decidim::Templates::Admin::CreateProposalAnswerTemplate.include(Decidim::ReportingProposals::Admin::CreateProposalAnswerTemplateOverride) if defined?(Decidim::Templates)
|
|
51
44
|
|
|
52
45
|
# port of https://github.com/openpoke/decidim/pull/31,23,29,24,43
|
|
53
46
|
Decidim::ReportedMailer.include(Decidim::ReportingProposals::ReportedMailerOverride)
|
|
@@ -92,6 +85,16 @@ module Decidim
|
|
|
92
85
|
end
|
|
93
86
|
end
|
|
94
87
|
|
|
88
|
+
initializer "decidim_reporting_proposals.append_compare_route", after: :append_routes do
|
|
89
|
+
Decidim::Proposals::Engine.routes.append do
|
|
90
|
+
resources :proposals, only: [] do
|
|
91
|
+
member do
|
|
92
|
+
get :compare
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
95
98
|
# controllers and helpers overrides
|
|
96
99
|
initializer "decidim_reporting_proposals.overrides", after: "decidim.action_controller" do
|
|
97
100
|
config.to_prepare do
|
|
@@ -103,6 +106,7 @@ module Decidim
|
|
|
103
106
|
Decidim::Proposals::Admin::ProposalsController.include(Decidim::ReportingProposals::Admin::ProposalsControllerOverride)
|
|
104
107
|
Decidim::Proposals::Admin::ProposalAnswersController.include(Decidim::ReportingProposals::Admin::ProposalAnswersControllerOverride)
|
|
105
108
|
Decidim::Proposals::Admin::ProposalsHelper.include(Decidim::ReportingProposals::Admin::ProposalsHelperOverride)
|
|
109
|
+
Decidim::Proposals::Admin::ProposalBulkActionsHelper.include(Decidim::ReportingProposals::Admin::ProposalBulkActionsHelperOverride)
|
|
106
110
|
|
|
107
111
|
# port of https://github.com/openpoke/decidim/pull/24
|
|
108
112
|
Decidim::Proposals::Admin::ValuationAssignmentsController.include(Decidim::ReportingProposals::Admin::ValuationAssignmentsControllerOverride)
|
|
@@ -136,14 +140,14 @@ module Decidim
|
|
|
136
140
|
|
|
137
141
|
initializer "decidim_reporting_proposals.on_publish_proposals" do
|
|
138
142
|
config.to_prepare do
|
|
139
|
-
|
|
143
|
+
ActiveSupport::Notifications.subscribe(/decidim.events\.proposals\.(proposal_published|proposal_update_category)/) do |_event_name, data|
|
|
140
144
|
Decidim::ReportingProposals::AssignProposalValuatorsJob.perform_later(data)
|
|
141
145
|
end
|
|
142
146
|
end
|
|
143
147
|
end
|
|
144
148
|
|
|
145
149
|
initializer "decidim_reporting_proposals.on_hiding_resource" do
|
|
146
|
-
|
|
150
|
+
ActiveSupport::Notifications.subscribe("decidim.events.reports.resource_hidden") do |_event_name, data|
|
|
147
151
|
Decidim::ReportingProposals::Admin::HiddenResourceMailer.notify_mail(
|
|
148
152
|
data[:resource], data[:affected_users], data[:extra][:report_reasons]
|
|
149
153
|
).deliver_later
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
module Decidim
|
|
4
4
|
module ReportingProposals
|
|
5
|
-
VERSION = "0.
|
|
6
|
-
DECIDIM_VERSION = "0.
|
|
7
|
-
COMPAT_DECIDIM_VERSION = [">= 0.
|
|
5
|
+
VERSION = "0.7.3"
|
|
6
|
+
DECIDIM_VERSION = "0.29.7"
|
|
7
|
+
COMPAT_DECIDIM_VERSION = [">= 0.29.3", "< 0.30"].freeze
|
|
8
8
|
end
|
|
9
9
|
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
namespace :reporting_proposals do
|
|
4
|
+
def create_default_states!(component)
|
|
5
|
+
colors = Decidim::Proposals.proposal_states_colors
|
|
6
|
+
|
|
7
|
+
locale = Decidim.default_locale
|
|
8
|
+
default_states = {
|
|
9
|
+
evaluating: {
|
|
10
|
+
token: :evaluating,
|
|
11
|
+
bg_color: colors[:orange][:background],
|
|
12
|
+
text_color: colors[:orange][:foreground],
|
|
13
|
+
announcement_title: { locale => I18n.with_locale(locale) { I18n.t("proposal_in_evaluation_reason", scope: "decidim.proposals.proposals.show") } },
|
|
14
|
+
title: { locale => I18n.with_locale(locale) { I18n.t(:evaluating, scope: "decidim.proposals.answers") } }
|
|
15
|
+
},
|
|
16
|
+
accepted: {
|
|
17
|
+
token: :accepted,
|
|
18
|
+
bg_color: colors[:green][:background],
|
|
19
|
+
text_color: colors[:green][:foreground],
|
|
20
|
+
announcement_title: { locale => I18n.with_locale(locale) { I18n.t("proposal_accepted_reason", scope: "decidim.proposals.proposals.show") } },
|
|
21
|
+
title: { locale => I18n.with_locale(locale) { I18n.t(:accepted, scope: "decidim.proposals.answers") } }
|
|
22
|
+
},
|
|
23
|
+
rejected: {
|
|
24
|
+
token: :rejected,
|
|
25
|
+
bg_color: colors[:red][:background],
|
|
26
|
+
text_color: colors[:red][:foreground],
|
|
27
|
+
announcement_title: { locale => I18n.with_locale(locale) { I18n.t("proposal_rejected_reason", scope: "decidim.proposals.proposals.show") } },
|
|
28
|
+
title: { locale => I18n.with_locale(locale) { I18n.t(:rejected, scope: "decidim.proposals.answers") } }
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
default_states.each_key do |key|
|
|
32
|
+
default_states[key][:object] = Decidim::Proposals::ProposalState.find_or_create_by(component:, **default_states[key])
|
|
33
|
+
end
|
|
34
|
+
default_states.merge(not_answered: { token: :not_answered })
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
desc "Migrate statuses tables"
|
|
38
|
+
task migrate_statuses: :environment do
|
|
39
|
+
STATES = { 0 => :not_answered, 10 => :evaluating, 20 => :accepted, -10 => :rejected }.freeze
|
|
40
|
+
Decidim::Component.where(manifest_name: "reporting_proposals").find_each do |component|
|
|
41
|
+
puts "Creating default states for component ##{component.id} \"#{component.name.values.first}\""
|
|
42
|
+
default_states = create_default_states!(component)
|
|
43
|
+
|
|
44
|
+
Decidim::Proposals::Proposal.where(decidim_component_id: component.id).find_each do |proposal|
|
|
45
|
+
next if proposal.old_state.zero?
|
|
46
|
+
|
|
47
|
+
puts "Migrating proposal ##{proposal.id} from state #{proposal.old_state} (#{STATES[proposal.old_state]}) to #{default_states.dig(STATES[proposal.old_state], :token)}"
|
|
48
|
+
proposal.update!(proposal_state: default_states.dig(STATES[proposal.old_state], :object))
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|