decidim-participatory_documents 0.2.0 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/lint.yml +2 -2
  3. data/.github/workflows/test.yml +15 -5
  4. data/.ruby-version +1 -1
  5. data/.simplecov +15 -9
  6. data/Gemfile.lock +196 -192
  7. data/README.md +42 -28
  8. data/app/cells/decidim/participatory_documents/suggestion/admin_answer.erb +1 -1
  9. data/app/commands/decidim/participatory_documents/admin/create_document.rb +6 -2
  10. data/app/commands/decidim/participatory_documents/create_suggestion.rb +3 -1
  11. data/app/controllers/concerns/decidim/participatory_documents/needs_pdf_document.rb +8 -1
  12. data/app/controllers/decidim/participatory_documents/admin/documents_controller.rb +6 -4
  13. data/app/controllers/decidim/participatory_documents/admin/suggestions_controller.rb +30 -2
  14. data/app/controllers/decidim/participatory_documents/admin/valuation_assignments_controller.rb +13 -3
  15. data/app/controllers/decidim/participatory_documents/document_suggestions_controller.rb +14 -0
  16. data/app/controllers/decidim/participatory_documents/section_suggestions_controller.rb +4 -0
  17. data/app/forms/decidim/participatory_documents/admin/document_form.rb +9 -1
  18. data/app/jobs/decidim/participatory_documents/export_my_suggestions_job.rb +16 -0
  19. data/app/models/decidim/participatory_documents/document.rb +11 -0
  20. data/app/models/decidim/participatory_documents/suggestion.rb +12 -0
  21. data/app/packs/entrypoints/decidim_participatory_documents.scss +8 -0
  22. data/app/packs/entrypoints/decidim_participatory_documents_editor.js +1 -3
  23. data/app/packs/entrypoints/decidim_participatory_documents_viewer_off.js +6 -0
  24. data/app/packs/images/export_suggestions.svg +1 -0
  25. data/app/packs/src/decidim/participatory_documents/pdf/pdf_modal_manager.js +4 -1
  26. data/app/packs/src/decidim/participatory_documents/pdf/suggestion_form.js +1 -1
  27. data/app/packs/src/decidim/participatory_documents/pdf.js +46 -0
  28. data/app/packs/src/decidim/participatory_documents/pdf_off.js +39 -0
  29. data/app/packs/stylesheets/decidim/participatory_documents/pdf/admin_modals.scss +9 -5
  30. data/app/packs/stylesheets/decidim/participatory_documents/pdf/admin_tweaks.scss +0 -21
  31. data/app/packs/stylesheets/decidim/participatory_documents/{decidim_admin_classes.scss → pdf/decidim_admin_styles.scss} +0 -3
  32. data/app/packs/stylesheets/decidim/participatory_documents/pdf/modals.scss +49 -0
  33. data/app/packs/stylesheets/decidim/participatory_documents/pdf/tweaks.scss +76 -7
  34. data/app/permissions/decidim/participatory_documents/admin/permissions.rb +32 -25
  35. data/app/permissions/decidim/participatory_documents/permissions.rb +2 -0
  36. data/app/serializers/decidim/participatory_documents/my_suggestion_serializer.rb +22 -0
  37. data/app/serializers/decidim/participatory_documents/suggestion_serializer.rb +1 -1
  38. data/app/uploaders/decidim/participatory_documents/pdf_document_uploader.rb +4 -0
  39. data/app/views/decidim/participatory_documents/admin/documents/_editor_modal.html.erb +1 -1
  40. data/app/views/decidim/participatory_documents/admin/documents/edit_pdf.html.erb +1 -0
  41. data/app/views/decidim/participatory_documents/admin/documents/pdf_viewer.html.erb +1 -1
  42. data/app/views/decidim/participatory_documents/admin/sections/_form.html.erb +0 -3
  43. data/app/views/decidim/participatory_documents/admin/suggestions/_add_valuators.html.erb +1 -1
  44. data/app/views/decidim/participatory_documents/admin/suggestions/_suggestion.html.erb +1 -1
  45. data/app/views/decidim/participatory_documents/admin/suggestions/_valuators.html.erb +1 -2
  46. data/app/views/decidim/participatory_documents/documents/_export_modal.html.erb +25 -0
  47. data/app/views/decidim/participatory_documents/documents/_pdfjs_base.html.erb +5 -2
  48. data/app/views/decidim/participatory_documents/documents/index.html.erb +2 -2
  49. data/app/views/decidim/participatory_documents/documents/pdf_viewer.html.erb +40 -33
  50. data/config/assets.rb +1 -0
  51. data/config/locales/ca.yml +261 -0
  52. data/config/locales/de.yml +261 -0
  53. data/config/locales/en.yml +15 -0
  54. data/config/locales/es.yml +261 -0
  55. data/lib/decidim/participatory_documents/component.rb +6 -4
  56. data/lib/decidim/participatory_documents/engine.rb +5 -1
  57. data/lib/decidim/participatory_documents/version.rb +2 -2
  58. data/lib/decidim/participatory_documents.rb +9 -3
  59. metadata +12 -3
@@ -0,0 +1,261 @@
1
+ ---
2
+ es:
3
+ activemodel:
4
+ attributes:
5
+ document:
6
+ box_color: Color de las cajas
7
+ box_opacity: Opacidad aplicada al color de las cajas (%)
8
+ description: Descripción de ayuda
9
+ file: Documento PDF
10
+ title: Título de ayuda
11
+ suggestion:
12
+ body: Añade tu sugerencia
13
+ errors:
14
+ models:
15
+ answer_suggestion:
16
+ attributes:
17
+ state:
18
+ inclusion: No es posible publicar con estado "sin respuesta"
19
+ document:
20
+ has_suggestions: Este documento no puede ser cambiado o eliminado porque tiene sugerencias
21
+ suggestion:
22
+ attributes:
23
+ not_blank: 'Validación fallida: Por favor, proporcione un mensaje o suba un archivo'
24
+ too_long: es demasiado largo (más de %{max_length} caracteres)
25
+ too_short: es demasiado corto (menos de %{min_length} caracteres)
26
+ decidim:
27
+ admin:
28
+ actions:
29
+ export: Exportar
30
+ exports:
31
+ export_as: "%{name} como %{export_format}"
32
+ filters:
33
+ search_placeholder:
34
+ body_cont: El cuerpo contiene
35
+ suggestions:
36
+ body_cont:
37
+ label: El cuerpo contiene
38
+ dummy_author_ids_has:
39
+ label: Autor
40
+ dummy_suggestable_id_has:
41
+ label: Sección
42
+ state_eq:
43
+ label: El estado es
44
+ values:
45
+ accepted: Aceptada
46
+ evaluating: En evaluación
47
+ not_answered: No contestada
48
+ published: Publicada
49
+ rejected: Rechazada
50
+ withdrawn: Retirada
51
+ valuator_role_ids_has:
52
+ label: Asignada a evaluadora
53
+ admin_log:
54
+ annotation:
55
+ create: "%{user_name} eliminó una nueva área participativa en %{document_name}"
56
+ delete: "%{user_name} eliminó una nueva área participativa en %{document_name}"
57
+ update: "%{user_name} ha editado una nueva área participativa en %{document_name}"
58
+ document:
59
+ create: "%{user_name} creó el documento llamado %{resource_name} en %{space_name}"
60
+ delete: "%{user_name} borro el documento llamado %{resource_name} en %{space_name}"
61
+ update: "%{user_name} actualizo el documento llamado %{resource_name} en %{space_name}"
62
+ section:
63
+ create: "%{user_name} ha creado una nueva sección participativa llamada %{resource_name} en %{document_name}"
64
+ delete: "%{user_name} ha eliminado una sección"
65
+ update: "%{user_name} ha editado una sección en %{document_name}"
66
+ suggestion_note:
67
+ create: "%{user_name} ha creado una nueva nota privada en %{suggestion}"
68
+ components:
69
+ participatory_documents:
70
+ name: Documento participativo
71
+ settings:
72
+ global:
73
+ max_suggestion_length: Longitud máxima de la sugerencia (caracteres)
74
+ min_suggestion_length: Longitud mínima de la sugerencia (caracteres)
75
+ suggestion_answering_enabled: Habilitar la respuesta de sugerencias des del administrador
76
+ events:
77
+ participatory_documents:
78
+ suggestion_answered:
79
+ affected_user:
80
+ email_intro: 'La sugerencia que enviaste en el documento"<a href="%{resource_path}">%{resource_title}</a>" ha sido respondida por una administradora. Puedes consultar la respuesta en esta página:'
81
+ email_outro: Ha recibido esta notificación porque envió una sugerencia en el documento "<a href="%{resource_path}">%{resource_title}</a>".
82
+ email_subject: Una sugerencia que has enviado ha sido respondida por una administradora
83
+ notification_title: La sugerencia que enviaste en el documento"<a href="%{resource_path}">%{resource_title}</a>" ha sido respondida por una administradora
84
+ forms:
85
+ file_help:
86
+ file:
87
+ pdf_message: Solo se permiten archivos PDF
88
+ participatory_documents:
89
+ actions:
90
+ back: Atrás
91
+ back_edit: Volver atrás para editar las secciones de participación
92
+ confirm: Esta acción significa que no podrá editar el documento o crear nuevas secciones, ¿está seguro?
93
+ edit_boxes: Editar áreas participativas
94
+ edit_document: Editar/subir documento
95
+ finish_publishing: Publicar secciones participativas
96
+ new: Subir un documento PDF
97
+ preview_publishing_sections: Previsualizar y publicar secciones de participación
98
+ title: Acciones
99
+ admin:
100
+ documents:
101
+ create:
102
+ invalid: Se ha producido un error al crear el documento
103
+ success: El documento ha sido creado con éxito
104
+ edit:
105
+ title: Edita el documento participativo
106
+ update: Actualiza
107
+ final_publish:
108
+ error: Hubo un error al publicar las secciones
109
+ success: Las secciones han sido publicadas correctamente
110
+ form:
111
+ alert_suggestions_html: "<strong>IMPORTANTE:</strong> Este documento no puede ser cambiado o eliminado porque ya tiene sugerencias asociadas"
112
+ box_style_preview: 'Vista previa del estilo de caja:'
113
+ warning_sections_html: "<strong>¡Atención!:</strong> Si subes un nuevo documento, todas las secciones de participación serán eliminadas"
114
+ index:
115
+ start: Por favor cargue un documento PDF para empezar
116
+ new:
117
+ create: Crear documento participativo
118
+ title: Nuevo documento participativo
119
+ sections:
120
+ empty: "(vacío)"
121
+ update:
122
+ error: Se ha producido un error al actualizar el documento
123
+ success: El documento ha sido actualizado con éxito
124
+ exports:
125
+ suggestions: Sugerencias
126
+ suggestion_notes:
127
+ create:
128
+ error: Se ha producido un error al crear la nota
129
+ success: La nota ha sido creada con éxito
130
+ form:
131
+ note: Nota
132
+ submit: Enviar
133
+ leave_your_note: Deja tu nota
134
+ modal:
135
+ body: Cuerpo
136
+ title: Editar nota
137
+ update: Actualizar
138
+ title: Notas privadas
139
+ update:
140
+ edited: Editado
141
+ invalid: Se ha producido un error al actualizar la nota
142
+ success: La nota ha sido actualizada con éxito
143
+ suggestions:
144
+ answer:
145
+ invalid: Se ha producido un error al añadir la respuesta
146
+ success: Se añadió correctamente la respuesta
147
+ form:
148
+ answer: Respuesta
149
+ answer_is_published: Publicada
150
+ title: Respuesta de la sugerencia
151
+ index:
152
+ actions:
153
+ answer: Respuesta
154
+ assign_to_valuator: Asignar a evaluadora
155
+ assign_to_valuator_button: Asignar
156
+ cancel: Cancelar
157
+ download: descargar %{filename}
158
+ publish: Publicar
159
+ publish_answers: Publicar respuestas
160
+ title: Acciones
161
+ unassign_from_valuator: Desasignar la evaluadora
162
+ unassign_from_valuator_button: Desasignar
163
+ author: Autor
164
+ created_at: Envíado el
165
+ id: Id
166
+ no_text: "(sin texto)"
167
+ published_answer: Respuesta publicada
168
+ section: Sección de participación
169
+ selected: seleccionado
170
+ state: Estado
171
+ suggestion: Sugerencia
172
+ title: Lista de Sugerencias
173
+ publish_answers:
174
+ number_of_suggestions: Se publicarán las respuestas para %{number} sugerencias.
175
+ select_a_suggestion: Por favor, elige una sugerencia
176
+ success: Las respuestas en las sugerencias han sido publicadas correctamente.
177
+ show:
178
+ authors: Autores
179
+ body: Cuerpo
180
+ created_at: Fecha de creación
181
+ file: Archivo
182
+ update: Actualizar
183
+ suggestion:
184
+ global: Global
185
+ valuators:
186
+ assigned_valuators: Evaluadoras asignadas
187
+ remove_assignment: Eliminar asignación
188
+ remove_assignment_confirmation: '¿Confirmas que quieres desasignar la evaluadora de esta sugerencia?'
189
+ valuators: Evaluadoras
190
+ valuation_assignments:
191
+ create:
192
+ invalid: Se ha producido un error al asignar sugerencias a una evaluadora
193
+ success: Sugerencias asignadas a evaluadora con éxito
194
+ delete:
195
+ invalid: Se ha producido un error al desasignar sugerencias a una evaluadora
196
+ success: Evaluadora desasignada correctamente
197
+ document:
198
+ close: Cerrar
199
+ export_my_suggestions: Exportar mis sugerencias
200
+ global_suggestions: Sugerencias globales
201
+ save_changes: '¡Guardar cambios!'
202
+ send_suggestion: Enviar sugerencia
203
+ suggestion_answer: Respuesta oficial
204
+ upload_file: Adjuntar documento
205
+ document_suggestions:
206
+ export:
207
+ empty: No hay sugerencias para exportar.
208
+ success: "Se han exportado correctamente %{count} sugerencias. Revisa tu bandeja de entrada de correo en %{email}."
209
+ documents:
210
+ export_modal:
211
+ description_html: Tiene %{count} sugerencias en este documento. Si quiere exportarlo, recibirá un fichero ZIP que contiene un documento Excel con todos sus datos y cualquier posible respuesta que los administradores le hayan dado. <br><br>Recibirá un correo electrónico en <b>%{email}</b>.
212
+ send: Envíame mis sugerencias
213
+ title: Exportar mis sugerencias
214
+ missing: No hay ningún documento subido aún
215
+ not_supported: '¡Esta página requiere JavaScript para ser habilitada!'
216
+ preview_title: Previsualizar
217
+ publish_description: 'Opciones de administración: está previsualizando las secciones participativas del documento'
218
+ models:
219
+ document:
220
+ fields:
221
+ document_pages: Número de página
222
+ id: Id
223
+ published: Publicado
224
+ state: Estado
225
+ title: Título
226
+ section:
227
+ fields:
228
+ artificial_tile: Sección %{position}
229
+ suggestion:
230
+ fields:
231
+ valuators: Evaluadoras
232
+ 'no': 'No'
233
+ suggestions:
234
+ answers:
235
+ accepted: Aceptada
236
+ evaluating: En evaluación
237
+ not_answered: No contestada
238
+ published: Publicada
239
+ rejected: Rechazada
240
+ withdrawn: Retirada
241
+ modal:
242
+ exit_full_screen: Salir pantalla completa
243
+ full_screen: Pantalla Completa
244
+ ui_messages:
245
+ allSaved: Todas las áreas han sido guardadas correctamente
246
+ confirmExit: '¿Seguro que quieres salir?'
247
+ created: El área ha sido creada
248
+ errorsSaving: Se han producido algunos errores al guardar las áreas
249
+ group: Grupo
250
+ modalTitle: Sección %{section}, área %{box}
251
+ move: Mover
252
+ needsSaving: Tienes que guardar las áreas antes de editarlas
253
+ operationFailed: La operación falló
254
+ removeBoxConfirm: '¿Está seguro que desea eliminar esta área? Esta acción no se puede deshacer.'
255
+ removed: El área ha sido eliminada
256
+ startEditing: Empieza a crear áreas para la participación haciendo clic y arrastrando. Una vez creadas y guardadas, se pueden cambiar el tamaño, mover o agrupar. Una agrupación de áreas es una sección. Finalmente, se publicarán todas las secciones (sean agrupadas en varias áreas o en una sola área).
257
+ startSuggesting: '¡Haga clic en una sección marcada para participar!'
258
+ suggestion_form:
259
+ blank: Se ha producido un error al crear la sugerencia. Sube un archivo válido o añade un mensaje de texto con la sugerencia.
260
+ title: Escribe tu sugerencia o sube un archivo con tus sugerencias
261
+ 'yes': 'Sí'
@@ -31,11 +31,13 @@ Decidim.register_component(:participatory_documents) do |component|
31
31
  # end
32
32
 
33
33
  component.exports :suggestions do |exports|
34
- exports.collection do |component_instance|
34
+ exports.collection do |component_instance, user, context|
35
35
  document = Decidim::ParticipatoryDocuments::Document.find_by(component: component_instance)
36
- Decidim::ParticipatoryDocuments::Suggestion
37
- .where(suggestable: document)
38
- .or(Decidim::ParticipatoryDocuments::Suggestion.where(suggestable: document.sections)).order(:id)
36
+ suggestions = Decidim::ParticipatoryDocuments::Suggestion
37
+ .where(suggestable: document)
38
+ .or(Decidim::ParticipatoryDocuments::Suggestion.where(suggestable: document.sections))
39
+ suggestions = suggestions.where(author: user) if context == :my_suggestions && user
40
+ suggestions.order(:id)
39
41
  end
40
42
 
41
43
  exports.include_in_open_data = false
@@ -14,7 +14,11 @@ module Decidim
14
14
  collection do
15
15
  get :pdf_viewer
16
16
  end
17
- resources :suggestions, only: [:index, :create], controller: :document_suggestions
17
+ resources :suggestions, only: [:index, :create], controller: :document_suggestions do
18
+ collection do
19
+ post :export
20
+ end
21
+ end
18
22
  end
19
23
 
20
24
  root to: "documents#index"
@@ -2,8 +2,8 @@
2
2
 
3
3
  module Decidim
4
4
  module ParticipatoryDocuments
5
- VERSION = "0.2.0"
6
- DECIDIM_VERSION = "0.27.3"
5
+ VERSION = "0.2.2"
6
+ DECIDIM_VERSION = "0.27.5"
7
7
  COMPAT_DECIDIM_VERSION = [">= 0.27.0", "< 0.28"].freeze
8
8
  end
9
9
  end
@@ -8,17 +8,23 @@ module Decidim
8
8
  # Public: The maximum length of any text field (body, answers, etc) to export.
9
9
  # Defaults to 50. Set to 0 to export the full text.
10
10
  config_accessor :max_export_text_length do
11
- 50
11
+ ENV.fetch("MAX_EXPORT_TEXT_LENGTH", 0).to_i
12
12
  end
13
13
 
14
14
  # Public: The minimum length of a suggestion to be considered valid.
15
+ # This setting is configurable per-component by admins
15
16
  config_accessor :min_suggestion_length do
16
- 5
17
+ ENV.fetch("MIN_SUGGESTION_LENGTH", 5).to_i
17
18
  end
18
19
 
19
20
  # Public: The maximum length of a suggestion to be considered valid.
21
+ # This setting is configurable per-component by admins
20
22
  config_accessor :max_suggestion_length do
21
- 500
23
+ ENV.fetch("MAX_SUGGESTION_LENGTH", 1000).to_i
24
+ end
25
+
26
+ config_accessor :antivirus_enabled do
27
+ defined?(AntivirusValidator) ? true : false
22
28
  end
23
29
  end
24
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-participatory_documents
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Vergés
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-07-13 00:00:00.000000000 Z
11
+ date: 2024-01-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: decidim-core
@@ -126,6 +126,7 @@ files:
126
126
  - app/helpers/decidim/participatory_documents/admin/documents_helper.rb
127
127
  - app/helpers/decidim/participatory_documents/admin/suggestion_helper.rb
128
128
  - app/helpers/decidim/participatory_documents/documents_helper.rb
129
+ - app/jobs/decidim/participatory_documents/export_my_suggestions_job.rb
129
130
  - app/models/concerns/decidim/participatory_documents/participatory_space_user_role_override.rb
130
131
  - app/models/concerns/decidim/participatory_documents/valuator_override.rb
131
132
  - app/models/decidim/participatory_documents/annotation.rb
@@ -143,8 +144,10 @@ files:
143
144
  - app/packs/entrypoints/decidim_participatory_documents_editor.scss
144
145
  - app/packs/entrypoints/decidim_participatory_documents_viewer.js
145
146
  - app/packs/entrypoints/decidim_participatory_documents_viewer.scss
147
+ - app/packs/entrypoints/decidim_participatory_documents_viewer_off.js
146
148
  - app/packs/images/.keep
147
149
  - app/packs/images/badge.svg
150
+ - app/packs/images/export_suggestions.svg
148
151
  - app/packs/images/fullscreen.svg
149
152
  - app/packs/images/fullscreen_exit.svg
150
153
  - app/packs/images/group.svg
@@ -165,11 +168,12 @@ files:
165
168
  - app/packs/src/decidim/participatory_documents/pdf/suggestion_form.js
166
169
  - app/packs/src/decidim/participatory_documents/pdf_admin.js
167
170
  - app/packs/src/decidim/participatory_documents/pdf_notifications.js
171
+ - app/packs/src/decidim/participatory_documents/pdf_off.js
168
172
  - app/packs/src/decidim/participatory_documents/skip_cookie_warning.js
169
- - app/packs/stylesheets/decidim/participatory_documents/decidim_admin_classes.scss
170
173
  - app/packs/stylesheets/decidim/participatory_documents/pdf/admin_modals.scss
171
174
  - app/packs/stylesheets/decidim/participatory_documents/pdf/admin_polygons.scss
172
175
  - app/packs/stylesheets/decidim/participatory_documents/pdf/admin_tweaks.scss
176
+ - app/packs/stylesheets/decidim/participatory_documents/pdf/decidim_admin_styles.scss
173
177
  - app/packs/stylesheets/decidim/participatory_documents/pdf/defaults.scss
174
178
  - app/packs/stylesheets/decidim/participatory_documents/pdf/document.scss
175
179
  - app/packs/stylesheets/decidim/participatory_documents/pdf/modals.scss
@@ -182,6 +186,7 @@ files:
182
186
  - app/presenters/decidim/participatory_documents/admin_log/document_presenter.rb
183
187
  - app/presenters/decidim/participatory_documents/admin_log/section_presenter.rb
184
188
  - app/presenters/decidim/participatory_documents/admin_log/suggestion_note_presenter.rb
189
+ - app/serializers/decidim/participatory_documents/my_suggestion_serializer.rb
185
190
  - app/serializers/decidim/participatory_documents/suggestion_serializer.rb
186
191
  - app/uploaders/decidim/participatory_documents/pdf_document_uploader.rb
187
192
  - app/views/decidim/admin/exports/_dropdown.html.erb
@@ -212,6 +217,7 @@ files:
212
217
  - app/views/decidim/participatory_documents/admin/suggestions/show.html.erb
213
218
  - app/views/decidim/participatory_documents/document_suggestions/_form.html.erb
214
219
  - app/views/decidim/participatory_documents/document_suggestions/index.html.erb
220
+ - app/views/decidim/participatory_documents/documents/_export_modal.html.erb
215
221
  - app/views/decidim/participatory_documents/documents/_pdfjs_base.html.erb
216
222
  - app/views/decidim/participatory_documents/documents/index.html.erb
217
223
  - app/views/decidim/participatory_documents/documents/pdf_viewer.html.erb
@@ -224,7 +230,10 @@ files:
224
230
  - codecov.yml
225
231
  - config/assets.rb
226
232
  - config/i18n-tasks.yml
233
+ - config/locales/ca.yml
234
+ - config/locales/de.yml
227
235
  - config/locales/en.yml
236
+ - config/locales/es.yml
228
237
  - crowdin.yml
229
238
  - db/migrate/20221018112720_create_decidim_participatory_documents_document.rb
230
239
  - db/migrate/20221115233021_create_decidim_participatory_documents_participation_sections.rb