decidim-meetings 0.30.2 → 0.31.0.rc1

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.
Files changed (202) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/meetings/cancel_registration_meeting_button/cancelation_modal.erb +7 -4
  3. data/app/cells/decidim/meetings/cancel_registration_meeting_button/show.erb +1 -1
  4. data/app/cells/decidim/meetings/cancel_registration_meeting_button_cell.rb +36 -0
  5. data/app/cells/decidim/meetings/dates_and_map_cell.rb +1 -1
  6. data/app/cells/decidim/meetings/join_meeting_button/registration_modal.erb +4 -5
  7. data/app/cells/decidim/meetings/join_meeting_button/show.erb +25 -28
  8. data/app/cells/decidim/meetings/join_meeting_button/waitlist_button.erb +22 -0
  9. data/app/cells/decidim/meetings/join_meeting_button_cell.rb +28 -0
  10. data/app/cells/decidim/meetings/question_responses/show.erb +7 -7
  11. data/app/cells/decidim/meetings/question_responses_cell.rb +28 -28
  12. data/app/commands/decidim/meetings/admin/copy_meeting.rb +5 -2
  13. data/app/commands/decidim/meetings/admin/create_agenda.rb +6 -2
  14. data/app/commands/decidim/meetings/admin/create_meeting.rb +7 -3
  15. data/app/commands/decidim/meetings/admin/mark_as_attendee.rb +44 -0
  16. data/app/commands/decidim/meetings/admin/publish_meeting.rb +2 -1
  17. data/app/commands/decidim/meetings/admin/update_agenda.rb +6 -2
  18. data/app/commands/decidim/meetings/admin/update_meeting.rb +15 -6
  19. data/app/commands/decidim/meetings/admin/update_questionnaire.rb +4 -4
  20. data/app/commands/decidim/meetings/admin/update_registrations.rb +19 -7
  21. data/app/commands/decidim/meetings/create_meeting.rb +2 -3
  22. data/app/commands/decidim/meetings/{create_answer.rb → create_response.rb} +11 -11
  23. data/app/commands/decidim/meetings/join_meeting.rb +4 -6
  24. data/app/commands/decidim/meetings/join_waitlist.rb +53 -0
  25. data/app/commands/decidim/meetings/leave_meeting.rb +14 -5
  26. data/app/commands/decidim/meetings/update_meeting.rb +1 -2
  27. data/app/controllers/concerns/decidim/meetings/admin/filterable.rb +1 -1
  28. data/app/controllers/decidim/meetings/admin/agenda_controller.rb +2 -2
  29. data/app/controllers/decidim/meetings/admin/invites_controller.rb +1 -1
  30. data/app/controllers/decidim/meetings/admin/meeting_closes_controller.rb +1 -1
  31. data/app/controllers/decidim/meetings/admin/meeting_copies_controller.rb +1 -1
  32. data/app/controllers/decidim/meetings/admin/meetings_controller.rb +4 -4
  33. data/app/controllers/decidim/meetings/admin/meetings_poll_controller.rb +10 -10
  34. data/app/controllers/decidim/meetings/admin/registrations_attendees_controller.rb +79 -0
  35. data/app/controllers/decidim/meetings/admin/registrations_controller.rb +1 -22
  36. data/app/controllers/decidim/meetings/meeting_closes_controller.rb +1 -1
  37. data/app/controllers/decidim/meetings/meetings_controller.rb +11 -11
  38. data/app/controllers/decidim/meetings/polls/{answers_controller.rb → responses_controller.rb} +7 -7
  39. data/app/controllers/decidim/meetings/registrations_controller.rb +39 -12
  40. data/app/events/decidim/meetings/registration_marked_as_attendee_event.rb +9 -0
  41. data/app/events/decidim/meetings/upcoming_meeting_event.rb +41 -0
  42. data/app/events/decidim/meetings/update_meeting_event.rb +25 -0
  43. data/app/forms/decidim/meetings/admin/close_meeting_form.rb +2 -1
  44. data/app/forms/decidim/meetings/admin/meeting_agenda_items_form.rb +4 -0
  45. data/app/forms/decidim/meetings/admin/meeting_form.rb +28 -3
  46. data/app/forms/decidim/meetings/admin/question_form.rb +3 -3
  47. data/app/forms/decidim/meetings/admin/{answer_option_form.rb → response_option_form.rb} +3 -3
  48. data/app/forms/decidim/meetings/admin/validate_registration_code_form.rb +1 -1
  49. data/app/forms/decidim/meetings/base_meeting_form.rb +0 -2
  50. data/app/forms/decidim/meetings/close_meeting_form.rb +2 -1
  51. data/app/forms/decidim/meetings/join_meeting_form.rb +0 -1
  52. data/app/forms/decidim/meetings/meeting_form.rb +3 -2
  53. data/app/forms/decidim/meetings/response_choice_form.rb +14 -0
  54. data/app/forms/decidim/meetings/{answer_form.rb → response_form.rb} +7 -7
  55. data/app/helpers/decidim/meetings/application_helper.rb +0 -1
  56. data/app/helpers/decidim/meetings/meetings_helper.rb +14 -5
  57. data/app/jobs/decidim/meetings/promote_from_waitlist_job.rb +63 -0
  58. data/app/jobs/decidim/meetings/upcoming_meeting_notification_job.rb +1 -1
  59. data/app/mailers/decidim/meetings/registration_mailer.rb +13 -0
  60. data/app/models/decidim/meetings/agenda_item.rb +5 -0
  61. data/app/models/decidim/meetings/meeting.rb +15 -12
  62. data/app/models/decidim/meetings/question.rb +12 -12
  63. data/app/models/decidim/meetings/questionnaire.rb +1 -1
  64. data/app/models/decidim/meetings/registration.rb +19 -7
  65. data/app/models/decidim/meetings/{answer.rb → response.rb} +6 -6
  66. data/app/models/decidim/meetings/response_choice.rb +15 -0
  67. data/app/models/decidim/meetings/{answer_option.rb → response_option.rb} +5 -5
  68. data/app/packs/src/decidim/meetings/admin/destroy_meeting_alert.js +1 -1
  69. data/app/packs/src/decidim/meetings/admin/meetings_components_form.js +1 -8
  70. data/app/packs/src/decidim/meetings/admin/meetings_form.js +1 -1
  71. data/app/packs/src/decidim/meetings/admin/registrations_form.js +1 -1
  72. data/app/packs/src/decidim/meetings/admin/registrations_invite_form.js +1 -1
  73. data/app/packs/src/decidim/meetings/meetings_form.js +1 -1
  74. data/app/packs/src/decidim/meetings/meetings_polls.js +1 -1
  75. data/app/packs/src/decidim/meetings/poll.component.js +5 -5
  76. data/app/packs/stylesheets/decidim/meetings/_item.scss +5 -1
  77. data/app/packs/stylesheets/decidim/meetings/meetings.scss +4 -4
  78. data/app/permissions/decidim/meetings/admin/agenda_permissions.rb +34 -0
  79. data/app/permissions/decidim/meetings/admin/meeting_permissions.rb +44 -0
  80. data/app/permissions/decidim/meetings/admin/permissions.rb +5 -66
  81. data/app/permissions/decidim/meetings/admin/questionnaire_permissions.rb +30 -0
  82. data/app/permissions/decidim/meetings/meeting_permissions.rb +90 -0
  83. data/app/permissions/decidim/meetings/permissions.rb +9 -105
  84. data/app/presenters/decidim/meetings/admin_log/value_types/meeting_title_description_presenter.rb +1 -1
  85. data/app/presenters/decidim/meetings/agenda_item_presenter.rb +29 -0
  86. data/app/presenters/decidim/meetings/meeting_presenter.rb +11 -15
  87. data/app/presenters/decidim/meetings/registration_presenter.rb +24 -0
  88. data/app/queries/decidim/meetings/{questionnaire_user_answers.rb → questionnaire_user_responses.rb} +5 -5
  89. data/app/serializers/decidim/meetings/registration_serializer.rb +5 -6
  90. data/app/services/decidim/meetings/diff_renderer.rb +0 -1
  91. data/app/views/decidim/meetings/_calendar_modal.html.erb +1 -0
  92. data/app/views/decidim/meetings/admin/agenda/_agenda_item_fields.html.erb +1 -1
  93. data/app/views/decidim/meetings/admin/invites/_form.html.erb +1 -1
  94. data/app/views/decidim/meetings/admin/meeting_closes/_form.html.erb +1 -1
  95. data/app/views/decidim/meetings/admin/meetings/_form.html.erb +3 -2
  96. data/app/views/decidim/meetings/admin/meetings/_linked_spaces.html.erb +1 -1
  97. data/app/views/decidim/meetings/admin/meetings/_meeting-tr.html.erb +11 -8
  98. data/app/views/decidim/meetings/admin/meetings/_meeting_actions.html.erb +200 -69
  99. data/app/views/decidim/meetings/admin/meetings/_reminders.html.erb +19 -0
  100. data/app/views/decidim/meetings/admin/meetings/_services.html.erb +1 -1
  101. data/app/views/decidim/meetings/admin/meetings/index.html.erb +7 -5
  102. data/app/views/decidim/meetings/admin/meetings/manage_trash.html.erb +2 -1
  103. data/app/views/decidim/meetings/admin/poll/_form.html.erb +6 -6
  104. data/app/views/decidim/meetings/admin/poll/_question.html.erb +13 -13
  105. data/app/views/decidim/meetings/admin/poll/_response_option.html.erb +35 -0
  106. data/app/views/decidim/meetings/admin/poll/_response_option_template.html.erb +7 -0
  107. data/app/views/decidim/meetings/admin/poll/edit.html.erb +3 -3
  108. data/app/views/decidim/meetings/admin/registration_form/edit_questions.html.erb +5 -5
  109. data/app/views/decidim/meetings/admin/registrations/edit.html.erb +19 -39
  110. data/app/views/decidim/meetings/admin/registrations_attendees/index.html.erb +126 -0
  111. data/app/views/decidim/meetings/layouts/live_event.html.erb +1 -1
  112. data/app/views/decidim/meetings/meeting_closes/_form.html.erb +2 -2
  113. data/app/views/decidim/meetings/meetings/_form.html.erb +2 -11
  114. data/app/views/decidim/meetings/meetings/_meeting.html.erb +2 -2
  115. data/app/views/decidim/meetings/meetings/_meeting_actions.html.erb +3 -3
  116. data/app/views/decidim/meetings/meetings/_meeting_agenda.html.erb +2 -2
  117. data/app/views/decidim/meetings/meetings/_meeting_aside.html.erb +11 -10
  118. data/app/views/decidim/meetings/meetings/_meeting_poll_actions.html.erb +3 -3
  119. data/app/views/decidim/meetings/meetings/_registration_code_modal.html.erb +16 -0
  120. data/app/views/decidim/meetings/polls/questions/_index_admin.html.erb +1 -1
  121. data/app/views/decidim/meetings/polls/questions/_published_question.html.erb +5 -5
  122. data/app/views/decidim/meetings/polls/responses/_multiple_option.html.erb +13 -0
  123. data/app/views/decidim/meetings/polls/responses/_single_option.html.erb +13 -0
  124. data/app/views/decidim/meetings/polls/{answers → responses}/admin.html.erb +4 -4
  125. data/app/views/decidim/meetings/polls/{answers → responses}/index.html.erb +4 -4
  126. data/app/views/decidim/meetings/registration_mailer/confirmation.html.erb +6 -1
  127. data/config/assets.rb +2 -2
  128. data/config/locales/ar.yml +1 -26
  129. data/config/locales/bg.yml +2 -32
  130. data/config/locales/ca-IT.yml +86 -40
  131. data/config/locales/ca.yml +86 -40
  132. data/config/locales/cs.yml +71 -43
  133. data/config/locales/de.yml +87 -41
  134. data/config/locales/el.yml +1 -25
  135. data/config/locales/en.yml +89 -43
  136. data/config/locales/es-MX.yml +87 -41
  137. data/config/locales/es-PY.yml +87 -41
  138. data/config/locales/es.yml +87 -41
  139. data/config/locales/eu.yml +86 -40
  140. data/config/locales/fi-plain.yml +86 -40
  141. data/config/locales/fi.yml +85 -39
  142. data/config/locales/fr-CA.yml +79 -38
  143. data/config/locales/fr.yml +79 -38
  144. data/config/locales/ga-IE.yml +1 -7
  145. data/config/locales/gl.yml +1 -19
  146. data/config/locales/hu.yml +1 -22
  147. data/config/locales/id-ID.yml +0 -16
  148. data/config/locales/is-IS.yml +0 -10
  149. data/config/locales/it.yml +1 -29
  150. data/config/locales/ja.yml +88 -42
  151. data/config/locales/lb.yml +1 -15
  152. data/config/locales/lt.yml +1 -28
  153. data/config/locales/lv.yml +0 -16
  154. data/config/locales/nl.yml +1 -26
  155. data/config/locales/no.yml +1 -28
  156. data/config/locales/pl.yml +2 -32
  157. data/config/locales/pt-BR.yml +1 -28
  158. data/config/locales/pt.yml +1 -28
  159. data/config/locales/ro-RO.yml +56 -29
  160. data/config/locales/ru.yml +0 -16
  161. data/config/locales/sk.yml +0 -16
  162. data/config/locales/sl.yml +0 -4
  163. data/config/locales/sv.yml +85 -39
  164. data/config/locales/tr-TR.yml +0 -20
  165. data/config/locales/uk.yml +0 -12
  166. data/config/locales/zh-CN.yml +0 -19
  167. data/config/locales/zh-TW.yml +1 -26
  168. data/db/migrate/20181107175558_add_questionnaire_to_existing_meetings.rb +8 -2
  169. data/db/migrate/20200827153856_add_commentable_counter_cache_to_meetings.rb +8 -2
  170. data/db/migrate/20201016065302_fix_meetings_registration_terms.rb +8 -2
  171. data/db/migrate/20210310120731_add_followable_counter_cache_to_meetings.rb +8 -2
  172. data/db/migrate/20250317103343_rename_answer_to_response_in_decidim_meetings.rb +18 -0
  173. data/db/migrate/20250403094034_add_reminder_customization_to_decidim_meetings.rb +9 -0
  174. data/db/migrate/20250408071941_add_status_to_registrations_to_decidim_meetings_registrations.rb +8 -0
  175. data/lib/decidim/api/agenda_item_type.rb +6 -2
  176. data/lib/decidim/api/agenda_type.rb +6 -2
  177. data/lib/decidim/api/linked_resources_interface.rb +1 -1
  178. data/lib/decidim/api/meeting_type.rb +20 -10
  179. data/lib/decidim/api/service_type.rb +3 -0
  180. data/lib/decidim/meetings/admin_engine.rb +9 -1
  181. data/lib/decidim/meetings/component.rb +29 -8
  182. data/lib/decidim/meetings/engine.rb +6 -21
  183. data/lib/decidim/meetings/meeting_serializer.rb +1 -2
  184. data/lib/decidim/meetings/schema_org_event_meeting_serializer.rb +0 -10
  185. data/lib/decidim/meetings/seeds.rb +4 -13
  186. data/lib/decidim/meetings/test/factories.rb +10 -16
  187. data/lib/decidim/meetings/user_responses_serializer.rb +47 -0
  188. data/lib/decidim/meetings/version.rb +1 -1
  189. data/lib/decidim/meetings.rb +7 -9
  190. metadata +49 -35
  191. data/app/cells/decidim/meetings/attending_organizations_list_cell.rb +0 -32
  192. data/app/forms/decidim/meetings/answer_choice_form.rb +0 -14
  193. data/app/models/decidim/meetings/answer_choice.rb +0 -15
  194. data/app/queries/decidim/meetings/metrics/meeting_followers_metric_measure.rb +0 -31
  195. data/app/queries/decidim/meetings/metrics/meetings_metric_manage.rb +0 -48
  196. data/app/views/decidim/meetings/admin/poll/_answer_option.html.erb +0 -35
  197. data/app/views/decidim/meetings/admin/poll/_answer_option_template.html.erb +0 -7
  198. data/app/views/decidim/meetings/polls/answers/_multiple_option.html.erb +0 -13
  199. data/app/views/decidim/meetings/polls/answers/_single_option.html.erb +0 -13
  200. data/lib/decidim/meetings/download_your_data_user_answers_serializer.rb +0 -39
  201. data/lib/decidim/meetings/user_answers_serializer.rb +0 -47
  202. /data/app/views/decidim/meetings/polls/{answers → responses}/create.js.erb +0 -0
@@ -14,24 +14,22 @@ module Decidim
14
14
  module Meetings
15
15
  autoload :Registrations, "decidim/meetings/registrations"
16
16
  autoload :MeetingSerializer, "decidim/meetings/meeting_serializer"
17
- autoload :UserAnswersSerializer, "decidim/meetings/user_answers_serializer"
18
- autoload :DownloadYourDataUserAnswersSerializer, "decidim/meetings/download_your_data_user_answers_serializer"
17
+ autoload :UserResponsesSerializer, "decidim/meetings/user_responses_serializer"
19
18
  autoload :SchemaOrgEventMeetingSerializer, "decidim/meetings/schema_org_event_meeting_serializer"
20
19
 
21
20
  include ActiveSupport::Configurable
22
21
 
23
- # Public Setting that defines whether proposals can be linked to meetings
24
- config_accessor :enable_proposal_linking do
25
- Decidim.const_defined?("Proposals")
26
- end
27
-
28
22
  # Public Setting that defines the interval when the upcoming meeting will be sent
29
23
  config_accessor :upcoming_meeting_notification do
30
- 2.days
24
+ Decidim::Env.new("MEETINGS_UPCOMING_MEETING_NOTIFICATION", 2).to_i.days
31
25
  end
32
26
 
33
27
  config_accessor :embeddable_services do
34
- %w(www.youtube.com www.twitch.tv meet.jit.si)
28
+ Decidim::Env.new("MEETINGS_EMBEDDABLE_SERVICES", "www.youtube.com www.twitch.tv meet.jit.si").to_array(separator: " ")
29
+ end
30
+
31
+ config_accessor :waiting_list_enabled do
32
+ Decidim::Env.new("MEETINGS_WAITING_LIST_ENABLED", true).present?
35
33
  end
36
34
  end
37
35
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-meetings
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.30.2
4
+ version: 0.31.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep Jaume Rey Peroy
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2025-09-23 00:00:00.000000000 Z
13
+ date: 2025-09-25 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: decidim-core
@@ -18,28 +18,28 @@ dependencies:
18
18
  requirements:
19
19
  - - '='
20
20
  - !ruby/object:Gem::Version
21
- version: 0.30.2
21
+ version: 0.31.0.rc1
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - '='
27
27
  - !ruby/object:Gem::Version
28
- version: 0.30.2
28
+ version: 0.31.0.rc1
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: decidim-forms
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
33
  - - '='
34
34
  - !ruby/object:Gem::Version
35
- version: 0.30.2
35
+ version: 0.31.0.rc1
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
40
  - - '='
41
41
  - !ruby/object:Gem::Version
42
- version: 0.30.2
42
+ version: 0.31.0.rc1
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: icalendar
45
45
  requirement: !ruby/object:Gem::Requirement
@@ -60,56 +60,56 @@ dependencies:
60
60
  requirements:
61
61
  - - '='
62
62
  - !ruby/object:Gem::Version
63
- version: 0.30.2
63
+ version: 0.31.0.rc1
64
64
  type: :development
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
68
  - - '='
69
69
  - !ruby/object:Gem::Version
70
- version: 0.30.2
70
+ version: 0.31.0.rc1
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: decidim-assemblies
73
73
  requirement: !ruby/object:Gem::Requirement
74
74
  requirements:
75
75
  - - '='
76
76
  - !ruby/object:Gem::Version
77
- version: 0.30.2
77
+ version: 0.31.0.rc1
78
78
  type: :development
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
82
  - - '='
83
83
  - !ruby/object:Gem::Version
84
- version: 0.30.2
84
+ version: 0.31.0.rc1
85
85
  - !ruby/object:Gem::Dependency
86
86
  name: decidim-dev
87
87
  requirement: !ruby/object:Gem::Requirement
88
88
  requirements:
89
89
  - - '='
90
90
  - !ruby/object:Gem::Version
91
- version: 0.30.2
91
+ version: 0.31.0.rc1
92
92
  type: :development
93
93
  prerelease: false
94
94
  version_requirements: !ruby/object:Gem::Requirement
95
95
  requirements:
96
96
  - - '='
97
97
  - !ruby/object:Gem::Version
98
- version: 0.30.2
98
+ version: 0.31.0.rc1
99
99
  - !ruby/object:Gem::Dependency
100
100
  name: decidim-participatory_processes
101
101
  requirement: !ruby/object:Gem::Requirement
102
102
  requirements:
103
103
  - - '='
104
104
  - !ruby/object:Gem::Version
105
- version: 0.30.2
105
+ version: 0.31.0.rc1
106
106
  type: :development
107
107
  prerelease: false
108
108
  version_requirements: !ruby/object:Gem::Requirement
109
109
  requirements:
110
110
  - - '='
111
111
  - !ruby/object:Gem::Version
112
- version: 0.30.2
112
+ version: 0.31.0.rc1
113
113
  description: A meetings component for decidim's participatory spaces.
114
114
  email:
115
115
  - josepjaume@gmail.com
@@ -121,7 +121,6 @@ extra_rdoc_files: []
121
121
  files:
122
122
  - README.md
123
123
  - Rakefile
124
- - app/cells/decidim/meetings/attending_organizations_list_cell.rb
125
124
  - app/cells/decidim/meetings/cancel_registration_meeting_button/cancelation_modal.erb
126
125
  - app/cells/decidim/meetings/cancel_registration_meeting_button/show.erb
127
126
  - app/cells/decidim/meetings/cancel_registration_meeting_button_cell.rb
@@ -136,6 +135,7 @@ files:
136
135
  - app/cells/decidim/meetings/join_meeting_button/registration_modal.erb
137
136
  - app/cells/decidim/meetings/join_meeting_button/remaining_slots.erb
138
137
  - app/cells/decidim/meetings/join_meeting_button/show.erb
138
+ - app/cells/decidim/meetings/join_meeting_button/waitlist_button.erb
139
139
  - app/cells/decidim/meetings/join_meeting_button_cell.rb
140
140
  - app/cells/decidim/meetings/meeting_activity_cell.rb
141
141
  - app/cells/decidim/meetings/meeting_card_metadata_cell.rb
@@ -162,6 +162,7 @@ files:
162
162
  - app/commands/decidim/meetings/admin/create_meeting.rb
163
163
  - app/commands/decidim/meetings/admin/export_meeting_registrations.rb
164
164
  - app/commands/decidim/meetings/admin/invite_user_to_join_meeting.rb
165
+ - app/commands/decidim/meetings/admin/mark_as_attendee.rb
165
166
  - app/commands/decidim/meetings/admin/publish_meeting.rb
166
167
  - app/commands/decidim/meetings/admin/unpublish_meeting.rb
167
168
  - app/commands/decidim/meetings/admin/update_agenda.rb
@@ -171,10 +172,11 @@ files:
171
172
  - app/commands/decidim/meetings/admin/update_registrations.rb
172
173
  - app/commands/decidim/meetings/admin/validate_registration_code.rb
173
174
  - app/commands/decidim/meetings/close_meeting.rb
174
- - app/commands/decidim/meetings/create_answer.rb
175
175
  - app/commands/decidim/meetings/create_meeting.rb
176
+ - app/commands/decidim/meetings/create_response.rb
176
177
  - app/commands/decidim/meetings/decline_invitation.rb
177
178
  - app/commands/decidim/meetings/join_meeting.rb
179
+ - app/commands/decidim/meetings/join_waitlist.rb
178
180
  - app/commands/decidim/meetings/leave_meeting.rb
179
181
  - app/commands/decidim/meetings/update_meeting.rb
180
182
  - app/commands/decidim/meetings/withdraw_meeting.rb
@@ -192,6 +194,7 @@ files:
192
194
  - app/controllers/decidim/meetings/admin/meetings_controller.rb
193
195
  - app/controllers/decidim/meetings/admin/meetings_poll_controller.rb
194
196
  - app/controllers/decidim/meetings/admin/registration_form_controller.rb
197
+ - app/controllers/decidim/meetings/admin/registrations_attendees_controller.rb
195
198
  - app/controllers/decidim/meetings/admin/registrations_controller.rb
196
199
  - app/controllers/decidim/meetings/application_controller.rb
197
200
  - app/controllers/decidim/meetings/calendars_controller.rb
@@ -200,8 +203,8 @@ files:
200
203
  - app/controllers/decidim/meetings/live_events_controller.rb
201
204
  - app/controllers/decidim/meetings/meeting_closes_controller.rb
202
205
  - app/controllers/decidim/meetings/meetings_controller.rb
203
- - app/controllers/decidim/meetings/polls/answers_controller.rb
204
206
  - app/controllers/decidim/meetings/polls/questions_controller.rb
207
+ - app/controllers/decidim/meetings/polls/responses_controller.rb
205
208
  - app/controllers/decidim/meetings/registrations_controller.rb
206
209
  - app/controllers/decidim/meetings/versions_controller.rb
207
210
  - app/events/decidim/meetings/close_meeting_event.rb
@@ -211,9 +214,9 @@ files:
211
214
  - app/events/decidim/meetings/meeting_registrations_enabled_event.rb
212
215
  - app/events/decidim/meetings/meeting_registrations_over_percentage_event.rb
213
216
  - app/events/decidim/meetings/registration_code_validated_event.rb
217
+ - app/events/decidim/meetings/registration_marked_as_attendee_event.rb
214
218
  - app/events/decidim/meetings/upcoming_meeting_event.rb
215
219
  - app/events/decidim/meetings/update_meeting_event.rb
216
- - app/forms/decidim/meetings/admin/answer_option_form.rb
217
220
  - app/forms/decidim/meetings/admin/close_meeting_form.rb
218
221
  - app/forms/decidim/meetings/admin/meeting_agenda_form.rb
219
222
  - app/forms/decidim/meetings/admin/meeting_agenda_items_form.rb
@@ -223,13 +226,14 @@ files:
223
226
  - app/forms/decidim/meetings/admin/meeting_service_form.rb
224
227
  - app/forms/decidim/meetings/admin/question_form.rb
225
228
  - app/forms/decidim/meetings/admin/questionnaire_form.rb
229
+ - app/forms/decidim/meetings/admin/response_option_form.rb
226
230
  - app/forms/decidim/meetings/admin/validate_registration_code_form.rb
227
- - app/forms/decidim/meetings/answer_choice_form.rb
228
- - app/forms/decidim/meetings/answer_form.rb
229
231
  - app/forms/decidim/meetings/base_meeting_form.rb
230
232
  - app/forms/decidim/meetings/close_meeting_form.rb
231
233
  - app/forms/decidim/meetings/join_meeting_form.rb
232
234
  - app/forms/decidim/meetings/meeting_form.rb
235
+ - app/forms/decidim/meetings/response_choice_form.rb
236
+ - app/forms/decidim/meetings/response_form.rb
233
237
  - app/helpers/decidim/meetings/admin/application_helper.rb
234
238
  - app/helpers/decidim/meetings/admin/filterable_helper.rb
235
239
  - app/helpers/decidim/meetings/application_helper.rb
@@ -237,6 +241,7 @@ files:
237
241
  - app/helpers/decidim/meetings/meeting_cells_helper.rb
238
242
  - app/helpers/decidim/meetings/meetings_helper.rb
239
243
  - app/jobs/decidim/meetings/hide_all_created_by_author_job.rb
244
+ - app/jobs/decidim/meetings/promote_from_waitlist_job.rb
240
245
  - app/jobs/decidim/meetings/send_close_meeting_reminder_job.rb
241
246
  - app/jobs/decidim/meetings/upcoming_meeting_notification_job.rb
242
247
  - app/mailers/decidim/meetings/admin/invite_join_meeting_mailer.rb
@@ -244,9 +249,6 @@ files:
244
249
  - app/mailers/decidim/meetings/registration_mailer.rb
245
250
  - app/models/decidim/meetings/agenda.rb
246
251
  - app/models/decidim/meetings/agenda_item.rb
247
- - app/models/decidim/meetings/answer.rb
248
- - app/models/decidim/meetings/answer_choice.rb
249
- - app/models/decidim/meetings/answer_option.rb
250
252
  - app/models/decidim/meetings/application_record.rb
251
253
  - app/models/decidim/meetings/invite.rb
252
254
  - app/models/decidim/meetings/meeting.rb
@@ -255,6 +257,9 @@ files:
255
257
  - app/models/decidim/meetings/question.rb
256
258
  - app/models/decidim/meetings/questionnaire.rb
257
259
  - app/models/decidim/meetings/registration.rb
260
+ - app/models/decidim/meetings/response.rb
261
+ - app/models/decidim/meetings/response_choice.rb
262
+ - app/models/decidim/meetings/response_option.rb
258
263
  - app/models/decidim/meetings/service.rb
259
264
  - app/packs/entrypoints/decidim_meetings.js
260
265
  - app/packs/entrypoints/decidim_meetings_admin.js
@@ -274,20 +279,24 @@ files:
274
279
  - app/packs/stylesheets/decidim/meetings/_list.scss
275
280
  - app/packs/stylesheets/decidim/meetings/_live_event.scss
276
281
  - app/packs/stylesheets/decidim/meetings/meetings.scss
282
+ - app/permissions/decidim/meetings/admin/agenda_permissions.rb
283
+ - app/permissions/decidim/meetings/admin/meeting_permissions.rb
277
284
  - app/permissions/decidim/meetings/admin/permissions.rb
285
+ - app/permissions/decidim/meetings/admin/questionnaire_permissions.rb
286
+ - app/permissions/decidim/meetings/meeting_permissions.rb
278
287
  - app/permissions/decidim/meetings/permissions.rb
279
288
  - app/presenters/decidim/meetings/admin_log/invite_presenter.rb
280
289
  - app/presenters/decidim/meetings/admin_log/meeting_presenter.rb
281
290
  - app/presenters/decidim/meetings/admin_log/questionnaire_presenter.rb
282
291
  - app/presenters/decidim/meetings/admin_log/value_types/meeting_title_description_presenter.rb
292
+ - app/presenters/decidim/meetings/agenda_item_presenter.rb
283
293
  - app/presenters/decidim/meetings/invite_presenter.rb
284
294
  - app/presenters/decidim/meetings/meeting_edition_presenter.rb
285
295
  - app/presenters/decidim/meetings/meeting_presenter.rb
286
296
  - app/presenters/decidim/meetings/official_author_presenter.rb
297
+ - app/presenters/decidim/meetings/registration_presenter.rb
287
298
  - app/queries/decidim/meetings/filtered_meetings.rb
288
- - app/queries/decidim/meetings/metrics/meeting_followers_metric_measure.rb
289
- - app/queries/decidim/meetings/metrics/meetings_metric_manage.rb
290
- - app/queries/decidim/meetings/questionnaire_user_answers.rb
299
+ - app/queries/decidim/meetings/questionnaire_user_responses.rb
291
300
  - app/serializers/decidim/meetings/base_download_your_data_serializer.rb
292
301
  - app/serializers/decidim/meetings/download_your_data_invite_serializer.rb
293
302
  - app/serializers/decidim/meetings/download_your_data_meeting_serializer.rb
@@ -323,20 +332,22 @@ files:
323
332
  - app/views/decidim/meetings/admin/meetings/_meeting-tr.html.erb
324
333
  - app/views/decidim/meetings/admin/meetings/_meeting_actions.html.erb
325
334
  - app/views/decidim/meetings/admin/meetings/_meetings-thead.html.erb
335
+ - app/views/decidim/meetings/admin/meetings/_reminders.html.erb
326
336
  - app/views/decidim/meetings/admin/meetings/_service.html.erb
327
337
  - app/views/decidim/meetings/admin/meetings/_services.html.erb
328
338
  - app/views/decidim/meetings/admin/meetings/edit.html.erb
329
339
  - app/views/decidim/meetings/admin/meetings/index.html.erb
330
340
  - app/views/decidim/meetings/admin/meetings/manage_trash.html.erb
331
341
  - app/views/decidim/meetings/admin/meetings/new.html.erb
332
- - app/views/decidim/meetings/admin/poll/_answer_option.html.erb
333
- - app/views/decidim/meetings/admin/poll/_answer_option_template.html.erb
334
342
  - app/views/decidim/meetings/admin/poll/_form.html.erb
335
343
  - app/views/decidim/meetings/admin/poll/_question.html.erb
344
+ - app/views/decidim/meetings/admin/poll/_response_option.html.erb
345
+ - app/views/decidim/meetings/admin/poll/_response_option_template.html.erb
336
346
  - app/views/decidim/meetings/admin/poll/edit.html.erb
337
347
  - app/views/decidim/meetings/admin/registration_form/edit_questions.html.erb
338
348
  - app/views/decidim/meetings/admin/registrations/_form.html.erb
339
349
  - app/views/decidim/meetings/admin/registrations/edit.html.erb
350
+ - app/views/decidim/meetings/admin/registrations_attendees/index.html.erb
340
351
  - app/views/decidim/meetings/close_meeting_reminder_mailer/close_meeting_reminder.html.erb
341
352
  - app/views/decidim/meetings/directory/meetings/index.html.erb
342
353
  - app/views/decidim/meetings/directory/meetings/index.js.erb
@@ -356,17 +367,13 @@ files:
356
367
  - app/views/decidim/meetings/meetings/_meeting_aside.html.erb
357
368
  - app/views/decidim/meetings/meetings/_meeting_minutes.html.erb
358
369
  - app/views/decidim/meetings/meetings/_meeting_poll_actions.html.erb
370
+ - app/views/decidim/meetings/meetings/_registration_code_modal.html.erb
359
371
  - app/views/decidim/meetings/meetings/_schema_org_event_meeting.html.erb
360
372
  - app/views/decidim/meetings/meetings/edit.html.erb
361
373
  - app/views/decidim/meetings/meetings/index.html.erb
362
374
  - app/views/decidim/meetings/meetings/index.js.erb
363
375
  - app/views/decidim/meetings/meetings/new.html.erb
364
376
  - app/views/decidim/meetings/meetings/show.html.erb
365
- - app/views/decidim/meetings/polls/answers/_multiple_option.html.erb
366
- - app/views/decidim/meetings/polls/answers/_single_option.html.erb
367
- - app/views/decidim/meetings/polls/answers/admin.html.erb
368
- - app/views/decidim/meetings/polls/answers/create.js.erb
369
- - app/views/decidim/meetings/polls/answers/index.html.erb
370
377
  - app/views/decidim/meetings/polls/questions/_closed_question.html.erb
371
378
  - app/views/decidim/meetings/polls/questions/_index.html.erb
372
379
  - app/views/decidim/meetings/polls/questions/_index_admin.html.erb
@@ -374,6 +381,11 @@ files:
374
381
  - app/views/decidim/meetings/polls/questions/_question.html.erb
375
382
  - app/views/decidim/meetings/polls/questions/index.js.erb
376
383
  - app/views/decidim/meetings/polls/questions/index_admin.js.erb
384
+ - app/views/decidim/meetings/polls/responses/_multiple_option.html.erb
385
+ - app/views/decidim/meetings/polls/responses/_single_option.html.erb
386
+ - app/views/decidim/meetings/polls/responses/admin.html.erb
387
+ - app/views/decidim/meetings/polls/responses/create.js.erb
388
+ - app/views/decidim/meetings/polls/responses/index.html.erb
377
389
  - app/views/decidim/meetings/registration_mailer/confirmation.html.erb
378
390
  - app/views/decidim/meetings/shared/_filters.html.erb
379
391
  - app/views/decidim/meetings/shared/_index.html.erb
@@ -528,6 +540,9 @@ files:
528
540
  - db/migrate/20240130135858_add_withdrawn_fields_on_meetings.rb
529
541
  - db/migrate/20240712104245_create_decidim_meetings_meeting_link.rb
530
542
  - db/migrate/20240828103603_add_deleted_at_to_decidim_meetings_meetings.rb
543
+ - db/migrate/20250317103343_rename_answer_to_response_in_decidim_meetings.rb
544
+ - db/migrate/20250403094034_add_reminder_customization_to_decidim_meetings.rb
545
+ - db/migrate/20250408071941_add_status_to_registrations_to_decidim_meetings_registrations.rb
531
546
  - decidim-meetings.gemspec
532
547
  - lib/decidim/api/agenda_item_type.rb
533
548
  - lib/decidim/api/agenda_type.rb
@@ -546,7 +561,6 @@ files:
546
561
  - lib/decidim/meetings/content_blocks/registry_manager.rb
547
562
  - lib/decidim/meetings/directory.rb
548
563
  - lib/decidim/meetings/directory_engine.rb
549
- - lib/decidim/meetings/download_your_data_user_answers_serializer.rb
550
564
  - lib/decidim/meetings/engine.rb
551
565
  - lib/decidim/meetings/meeting_serializer.rb
552
566
  - lib/decidim/meetings/polls.rb
@@ -558,7 +572,7 @@ files:
558
572
  - lib/decidim/meetings/test/factories.rb
559
573
  - lib/decidim/meetings/test/notifications_handling.rb
560
574
  - lib/decidim/meetings/test/translated_event.rb
561
- - lib/decidim/meetings/user_answers_serializer.rb
575
+ - lib/decidim/meetings/user_responses_serializer.rb
562
576
  - lib/decidim/meetings/version.rb
563
577
  - lib/tasks/decidim_meetings.rake
564
578
  homepage: https://decidim.org
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "cell/partial"
4
-
5
- module Decidim
6
- module Meetings
7
- # This cell renders the list of public participating
8
- # organizations of a meeting.
9
- #
10
- # Example:
11
- #
12
- # cell("decidim/participating_organizations_list", meeting)
13
- class AttendingOrganizationsListCell < PublicParticipantsListCell
14
- private
15
-
16
- def user_group_ids
17
- model.user_group_registrations.user_group_ids
18
- end
19
-
20
- def user_groups
21
- Decidim::UserGroup.where(id: user_group_ids)
22
- end
23
-
24
- # Finds the public organizations (as user groups) of meeting
25
- #
26
- # Returns an Array of presented UserGroups
27
- def public_participants
28
- @public_participants ||= user_groups.map { |user_group| present(user_group) }
29
- end
30
- end
31
- end
32
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module Meetings
5
- # This class holds a Form to save the chosen option for an answer
6
- class AnswerChoiceForm < Decidim::Form
7
- attribute :body, String
8
- attribute :position, Integer
9
- attribute :answer_option_id, Integer
10
-
11
- validates :answer_option_id, presence: true
12
- end
13
- end
14
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module Meetings
5
- class AnswerChoice < Meetings::ApplicationRecord
6
- belongs_to :answer,
7
- class_name: "Decidim::Meetings::Answer",
8
- foreign_key: "decidim_answer_id"
9
-
10
- belongs_to :answer_option,
11
- class_name: "Decidim::Meetings::AnswerOption",
12
- foreign_key: "decidim_answer_option_id"
13
- end
14
- end
15
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module Meetings
5
- module Metrics
6
- # Searches for unique Users following the next objects
7
- # - Meetings
8
- class MeetingFollowersMetricMeasure < Decidim::MetricMeasure
9
- def valid?
10
- super && @resource.is_a?(Decidim::Component)
11
- end
12
-
13
- def calculate
14
- meetings = Decidim::Meetings::Meeting.where(component: @resource).joins(:component)
15
-
16
- meetings_followers = Decidim::Follow.where(followable: meetings).joins(:user)
17
- .where(decidim_follows: { created_at: ..end_time })
18
- cumulative_users = meetings_followers.pluck(:decidim_user_id)
19
-
20
- meetings_followers = meetings_followers.where(decidim_follows: { created_at: start_time.. })
21
- quantity_users = meetings_followers.pluck(:decidim_user_id)
22
-
23
- {
24
- cumulative_users: cumulative_users.uniq,
25
- quantity_users: quantity_users.uniq
26
- }
27
- end
28
- end
29
- end
30
- end
31
- end
@@ -1,48 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module Meetings
5
- module Metrics
6
- class MeetingsMetricManage < Decidim::MetricManage
7
- def metric_name
8
- "meetings"
9
- end
10
-
11
- def save
12
- cumulative.each do |key, cumulative_value|
13
- next if cumulative_value.zero?
14
-
15
- quantity_value = quantity[key] || 0
16
- taxonomy_id, space_type, space_id = key
17
- record = Decidim::Metric.find_or_initialize_by(day: @day.to_s, metric_type: @metric_name,
18
- organization: @organization, decidim_taxonomy_id: taxonomy_id,
19
- participatory_space_type: space_type, participatory_space_id: space_id)
20
- record.assign_attributes(cumulative: cumulative_value, quantity: quantity_value)
21
- record.save!
22
- end
23
- end
24
-
25
- private
26
-
27
- def query
28
- return @query if @query
29
-
30
- spaces = Decidim.participatory_space_manifests.flat_map do |manifest|
31
- manifest.participatory_spaces.call(@organization).public_spaces
32
- end
33
- @query = Decidim::Meetings::Meeting.where(component: visible_components_from_spaces(spaces)).joins(:component)
34
- .left_outer_joins(:taxonomizations).visible
35
- @query = @query.where(decidim_meetings_meetings: { created_at: ..end_time })
36
- @query = @query.group("decidim_taxonomizations.taxonomy_id",
37
- :participatory_space_type,
38
- :participatory_space_id)
39
- @query
40
- end
41
-
42
- def quantity
43
- @quantity ||= query.where(decidim_meetings_meetings: { created_at: start_time.. }).count
44
- end
45
- end
46
- end
47
- end
48
- end
@@ -1,35 +0,0 @@
1
- <% answer_option = form.object %>
2
-
3
- <div class="card questionnaire-question-answer-option">
4
- <div class="card-divider">
5
- <h2 class="card-title">
6
- <span><%= t("answer_option", scope: "decidim.forms.admin.questionnaires.answer_option") %></span>
7
- <% if editable %>
8
- <button class="button button__sm button__transparent-secondary small alert remove-answer-option button--title mb-2">
9
- <%= icon("delete-bin-line") %>
10
- <%= t("remove", scope: "decidim.forms.admin.questionnaires.answer_option") %>
11
- </button>
12
- <% end %>
13
- </h2>
14
- </div>
15
-
16
- <div class="card-section">
17
- <div class="row column">
18
- <%=
19
- form.translated(
20
- :text_field,
21
- :body,
22
- tabs_id: tabs_id_for_question_answer_option(question, answer_option),
23
- label: t("statement", scope: "decidim.forms.admin.questionnaires.answer_option"),
24
- disabled: !editable
25
- )
26
- %>
27
- </div>
28
- </div>
29
-
30
- <% if answer_option.persisted? %>
31
- <%= form.hidden_field :id, disabled: !editable %>
32
- <% end %>
33
-
34
- <%= form.hidden_field :deleted, disabled: !editable %>
35
- </div>
@@ -1,7 +0,0 @@
1
- <% question = form.object %>
2
-
3
- <script type="text/template" class="decidim-answer-option-template decidim-template" id="<%= template_id %>">
4
- <%= fields_for "questionnaire[questions][#{question.to_param}][answer_options][]", blank_answer_option do |answer_option_form| %>
5
- <%= render "decidim/meetings/admin/poll/answer_option", form: answer_option_form, question:, editable: question.editable? %>
6
- <% end %>
7
- </script>
@@ -1,13 +0,0 @@
1
- <div class="answer-questionnaire__single-option js-check-box-collection">
2
- <% question.answer_options.each_with_index do |answer_option, idx| %>
3
- <% choice = answer.choices.find { |choice| choice.decidim_answer_option_id == answer_option.id } if answer %>
4
-
5
- <%= label_tag "answer[choices][#{answer_option.id}][answer_option_id]", nil, class: "js-collection-input" do %>
6
- <%= check_box_tag "answer[choices][#{answer_option.id}][answer_option_id]",
7
- answer_option.id,
8
- choice.present?, disabled: %>
9
-
10
- <%= translated_attribute(answer_option.body) %>
11
- <% end %>
12
- <% end %>
13
- </div>
@@ -1,13 +0,0 @@
1
- <% choice = answer.choices.first if answer %>
2
-
3
- <% question.answer_options.each_with_index do |answer_option, idx| %>
4
- <% choice_id = "#{field_id}_choices_#{idx}" %>
5
-
6
- <%= label_tag "#{choice_id}_answer_option" do %>
7
- <%= radio_button_tag "answer[choices][#{question.id}][answer_option_id]",
8
- answer_option.id,
9
- answer_option.id == choice.try(:decidim_answer_option_id),
10
- id: "#{choice_id}_answer_option", disabled: %>
11
- <%= translated_attribute(answer_option.body) %>
12
- <% end %>
13
- <% end %>
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module Meetings
5
- class DownloadYourDataUserAnswersSerializer < Decidim::Exporters::Serializer
6
- include Decidim::TranslationsHelper
7
- # Serializes an user answer for download your data
8
- def serialize
9
- {
10
- id: resource.id,
11
- questionnaire: {
12
- id: resource.question.questionnaire.id,
13
- title: translated_attribute(resource.question.questionnaire.title),
14
- description: translated_attribute(resource.question.questionnaire.description),
15
- tos: translated_attribute(resource.question.questionnaire.tos)
16
- },
17
- question: {
18
- id: resource.question.id,
19
- body: translated_attribute(resource.question.body),
20
- description: translated_attribute(resource.question.description)
21
- },
22
- answer: normalize_body(resource)
23
- }
24
- end
25
-
26
- private
27
-
28
- def normalize_body(resource)
29
- attachments_for(resource) || resource.body || resource.choices.pluck(:body)
30
- end
31
-
32
- def attachments_for(resource)
33
- return if resource.attachments.blank?
34
-
35
- resource.attachments.map(&:url)
36
- end
37
- end
38
- end
39
- end