decidim-meetings 0.29.3 → 0.30.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 (140) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/meetings/cancel_registration_meeting_button/cancelation_modal.erb +1 -1
  3. data/app/cells/decidim/meetings/cancel_registration_meeting_button/show.erb +3 -1
  4. data/app/cells/decidim/meetings/cancel_registration_meeting_button_cell.rb +1 -1
  5. data/app/cells/decidim/meetings/dates_and_map/show.erb +1 -1
  6. data/app/cells/decidim/meetings/highlighted_meetings_for_component/show.erb +1 -1
  7. data/app/cells/decidim/meetings/join_meeting_button/show.erb +5 -2
  8. data/app/cells/decidim/meetings/meeting_card_metadata_cell.rb +3 -3
  9. data/app/cells/decidim/meetings/meeting_l_cell.rb +12 -0
  10. data/app/commands/decidim/meetings/admin/copy_meeting.rb +1 -2
  11. data/app/commands/decidim/meetings/admin/create_meeting.rb +8 -2
  12. data/app/commands/decidim/meetings/admin/update_meeting.rb +8 -2
  13. data/app/commands/decidim/meetings/create_meeting.rb +2 -2
  14. data/app/commands/decidim/meetings/update_meeting.rb +2 -3
  15. data/app/controllers/concerns/decidim/meetings/admin/filterable.rb +9 -5
  16. data/app/controllers/concerns/decidim/meetings/component_filterable.rb +1 -2
  17. data/app/controllers/decidim/meetings/admin/meetings_controller.rb +14 -22
  18. data/app/controllers/decidim/meetings/admin/registration_form_controller.rb +8 -0
  19. data/app/controllers/decidim/meetings/directory/meetings_controller.rb +2 -4
  20. data/app/controllers/decidim/meetings/meetings_controller.rb +40 -6
  21. data/app/forms/decidim/meetings/admin/meeting_form.rb +16 -30
  22. data/app/forms/decidim/meetings/base_meeting_form.rb +6 -0
  23. data/app/forms/decidim/meetings/meeting_form.rb +2 -30
  24. data/app/helpers/decidim/meetings/admin/application_helper.rb +11 -1
  25. data/app/helpers/decidim/meetings/application_helper.rb +35 -1
  26. data/app/helpers/decidim/meetings/directory/application_helper.rb +9 -48
  27. data/app/helpers/decidim/meetings/meetings_helper.rb +5 -0
  28. data/app/models/decidim/meetings/invite.rb +10 -0
  29. data/app/models/decidim/meetings/meeting.rb +28 -1
  30. data/app/models/decidim/meetings/meeting_link.rb +25 -0
  31. data/app/packs/entrypoints/decidim_meetings_admin.js +1 -0
  32. data/app/packs/src/decidim/meetings/admin/meetings_components_form.js +77 -0
  33. data/app/packs/src/decidim/meetings/admin/meetings_form.js +8 -0
  34. data/app/permissions/decidim/meetings/admin/permissions.rb +1 -1
  35. data/app/permissions/decidim/meetings/permissions.rb +13 -9
  36. data/app/presenters/decidim/meetings/admin_log/meeting_presenter.rb +1 -1
  37. data/app/presenters/decidim/meetings/meeting_presenter.rb +13 -1
  38. data/app/queries/decidim/meetings/filtered_meetings.rb +2 -2
  39. data/app/queries/decidim/meetings/metrics/meeting_followers_metric_measure.rb +2 -2
  40. data/app/queries/decidim/meetings/metrics/meetings_metric_manage.rb +6 -6
  41. data/app/serializers/decidim/meetings/base_download_your_data_serializer.rb +32 -0
  42. data/app/serializers/decidim/meetings/download_your_data_invite_serializer.rb +6 -26
  43. data/app/serializers/decidim/meetings/download_your_data_meeting_serializer.rb +15 -0
  44. data/app/serializers/decidim/meetings/download_your_data_registration_serializer.rb +6 -24
  45. data/app/views/decidim/meetings/admin/meetings/_component.html.erb +15 -0
  46. data/app/views/decidim/meetings/admin/meetings/_form.html.erb +7 -9
  47. data/app/views/decidim/meetings/admin/meetings/_linked_spaces.html.erb +53 -0
  48. data/app/views/decidim/meetings/admin/meetings/_meeting-tr.html.erb +42 -0
  49. data/app/views/decidim/meetings/admin/meetings/_meeting_actions.html.erb +70 -0
  50. data/app/views/decidim/meetings/admin/meetings/_meetings-thead.html.erb +26 -0
  51. data/app/views/decidim/meetings/admin/meetings/index.html.erb +16 -142
  52. data/app/views/decidim/meetings/admin/meetings/manage_trash.html.erb +23 -0
  53. data/app/views/decidim/meetings/admin/registration_form/edit_questions.html.erb +44 -0
  54. data/app/views/decidim/meetings/admin/registrations/edit.html.erb +1 -0
  55. data/app/views/decidim/meetings/directory/meetings/index.html.erb +1 -2
  56. data/app/views/decidim/meetings/live_events/show.html.erb +5 -5
  57. data/app/views/decidim/meetings/meetings/_form.html.erb +4 -8
  58. data/app/views/decidim/meetings/meetings/_meeting.html.erb +51 -26
  59. data/app/views/decidim/meetings/meetings/_meeting_actions.html.erb +34 -0
  60. data/app/views/decidim/meetings/meetings/_meeting_aside.html.erb +20 -59
  61. data/app/views/decidim/meetings/meetings/_meeting_poll_actions.html.erb +2 -5
  62. data/app/views/decidim/meetings/meetings/_schema_org_event_meeting.html.erb +3 -0
  63. data/app/views/decidim/meetings/meetings/index.html.erb +1 -2
  64. data/app/views/decidim/meetings/meetings/new.html.erb +0 -1
  65. data/app/views/decidim/meetings/meetings/show.html.erb +5 -5
  66. data/app/views/decidim/meetings/polls/answers/index.html.erb +5 -5
  67. data/app/views/decidim/meetings/shared/_filters.html.erb +1 -13
  68. data/app/views/decidim/meetings/shared/_index.html.erb +1 -1
  69. data/app/views/decidim/meetings/shared/_index.js.erb +3 -2
  70. data/app/views/decidim/meetings/shared/_meetings.html.erb +1 -1
  71. data/app/views/decidim/meetings/shared/_meetings_aside.html.erb +2 -2
  72. data/app/views/decidim/participatory_spaces/_conference_venues.html.erb +1 -1
  73. data/config/locales/ar.yml +23 -17
  74. data/config/locales/bg.yml +16 -25
  75. data/config/locales/ca.yml +140 -30
  76. data/config/locales/cs.yml +145 -28
  77. data/config/locales/de.yml +152 -74
  78. data/config/locales/el.yml +7 -22
  79. data/config/locales/en.yml +132 -22
  80. data/config/locales/es-MX.yml +144 -34
  81. data/config/locales/es-PY.yml +145 -35
  82. data/config/locales/es.yml +145 -35
  83. data/config/locales/eu.yml +159 -49
  84. data/config/locales/fi-plain.yml +142 -27
  85. data/config/locales/fi.yml +142 -27
  86. data/config/locales/fr-CA.yml +79 -27
  87. data/config/locales/fr.yml +79 -27
  88. data/config/locales/ga-IE.yml +0 -13
  89. data/config/locales/gl.yml +6 -12
  90. data/config/locales/hu.yml +8 -20
  91. data/config/locales/id-ID.yml +6 -13
  92. data/config/locales/is-IS.yml +0 -15
  93. data/config/locales/it.yml +7 -19
  94. data/config/locales/ja.yml +94 -26
  95. data/config/locales/lb.yml +6 -14
  96. data/config/locales/lt.yml +7 -23
  97. data/config/locales/lv.yml +6 -13
  98. data/config/locales/nl.yml +8 -18
  99. data/config/locales/no.yml +6 -16
  100. data/config/locales/pl.yml +16 -21
  101. data/config/locales/pt-BR.yml +7 -21
  102. data/config/locales/pt.yml +7 -17
  103. data/config/locales/ro-RO.yml +32 -19
  104. data/config/locales/ru.yml +6 -13
  105. data/config/locales/sk.yml +7 -14
  106. data/config/locales/sv.yml +82 -28
  107. data/config/locales/tr-TR.yml +7 -19
  108. data/config/locales/uk.yml +5 -15
  109. data/config/locales/zh-CN.yml +7 -18
  110. data/config/locales/zh-TW.yml +7 -21
  111. data/db/migrate/20181107175558_add_questionnaire_to_existing_meetings.rb +1 -1
  112. data/db/migrate/20200827153856_add_commentable_counter_cache_to_meetings.rb +1 -1
  113. data/db/migrate/20201016065302_fix_meetings_registration_terms.rb +1 -1
  114. data/db/migrate/20210310120731_add_followable_counter_cache_to_meetings.rb +1 -1
  115. data/db/migrate/20240712104245_create_decidim_meetings_meeting_link.rb +12 -0
  116. data/db/migrate/20240828103603_add_deleted_at_to_decidim_meetings_meetings.rb +8 -0
  117. data/decidim-meetings.gemspec +1 -1
  118. data/lib/decidim/api/agenda_item_type.rb +6 -7
  119. data/lib/decidim/api/agenda_type.rb +3 -4
  120. data/lib/decidim/api/meeting_type.rb +33 -41
  121. data/lib/decidim/api/meetings_type.rb +4 -5
  122. data/lib/decidim/api/service_type.rb +1 -1
  123. data/lib/decidim/meetings/admin_engine.rb +9 -1
  124. data/lib/decidim/meetings/component.rb +14 -4
  125. data/lib/decidim/meetings/download_your_data_user_answers_serializer.rb +13 -7
  126. data/lib/decidim/meetings/engine.rb +1 -6
  127. data/lib/decidim/meetings/meeting_serializer.rb +70 -59
  128. data/lib/decidim/meetings/schema_org_event_meeting_serializer.rb +151 -0
  129. data/lib/decidim/meetings/seeds.rb +2 -4
  130. data/lib/decidim/meetings/test/factories.rb +8 -0
  131. data/lib/decidim/meetings/test/translated_event.rb +3 -3
  132. data/lib/decidim/meetings/version.rb +1 -1
  133. data/lib/decidim/meetings.rb +1 -0
  134. metadata +32 -22
  135. data/app/cells/decidim/meetings/meetings_map/show.erb +0 -16
  136. data/app/cells/decidim/meetings/meetings_map_cell.rb +0 -32
  137. data/app/commands/decidim/meetings/admin/destroy_meeting.rb +0 -21
  138. data/app/helpers/decidim/meetings/map_helper.rb +0 -21
  139. data/app/views/decidim/meetings/meetings/_actions.html.erb +0 -6
  140. data/config/locales/ca-IT.yml +0 -693
@@ -51,12 +51,6 @@ tr:
51
51
  other: Kayıtlar
52
52
  decidim:
53
53
  admin:
54
- filters:
55
- meetings:
56
- category_id_eq:
57
- label: Kategori
58
- scope_id_eq:
59
- label: kapsam
60
54
  meeting_copies:
61
55
  create:
62
56
  error: Bu toplantıyı kopyalarken bir sorun oluştu.
@@ -79,8 +73,6 @@ tr:
79
73
  enable_pads_creation: Altlık oluşturmayı etkinleştirin
80
74
  registration_code_enabled: Kayıt kodu etkinleştirildi
81
75
  resources_permissions_enabled: Her toplantı için işlem izinleri ayarlanabilir
82
- scope_id: kapsam
83
- scopes_enabled: Kapsamlar etkinleştirildi
84
76
  terms_and_conditions_url_for_meeting_creators: Toplantı oluşturucuları için şartlar ve koşullar URL'si
85
77
  step:
86
78
  announcement: Duyuru
@@ -136,7 +128,7 @@ tr:
136
128
  badges:
137
129
  attended_meetings:
138
130
  conditions:
139
- - Katılmak istediğiniz toplantılara kayıt olun
131
+ - Katılmak istediğiniz toplantılara kayıt olun
140
132
  description: Yüz yüze yapılan toplantılara katıldığınızda bu rozet verilir.
141
133
  description_another: Bu katılımcı %{score} toplantıya katılmıştır.
142
134
  description_own: '%{score} toplantıya katıldınız.'
@@ -148,7 +140,6 @@ tr:
148
140
  attachment_collections: Klasörler
149
141
  attachments: Ekler
150
142
  close: Kapat
151
- destroy: Sil
152
143
  edit: Düzenle
153
144
  invalid_destroy:
154
145
  proposals_count:
@@ -211,8 +202,6 @@ tr:
211
202
  close: Kapat
212
203
  title: Toplantıyı kapat
213
204
  meetings:
214
- destroy:
215
- success: Toplantı başarıyla silindi
216
205
  edit:
217
206
  title: Toplantıyı Düzenle
218
207
  update: Güncelle
@@ -242,6 +231,8 @@ tr:
242
231
  registrations:
243
232
  edit:
244
233
  save: Kaydet
234
+ validate: Doğrula
235
+ validate_registration_code: Kayıt kodunu doğrula
245
236
  form:
246
237
  available_slots_help: Mevcut sınırsız yuvaya sahipseniz 0'a bırakın.
247
238
  invites: Davetiyeler
@@ -255,6 +246,9 @@ tr:
255
246
  update:
256
247
  invalid: Kayıt ayarları kaydedilirken bir sorun oluştu.
257
248
  success: Toplantı kayıtları ayarları başarıyla kaydedildi.
249
+ validate_registration_code:
250
+ invalid: Bu kayıt kodu geçersiz.
251
+ success: Kayıt kodu başarıyla doğrulandı.
258
252
  admin_log:
259
253
  invite:
260
254
  create: "%{user_name}, %{attendee_name} adlı kişiyi %{space_name} alanındaki %{resource_name} toplantısına katılmaya davet etti"
@@ -269,9 +263,6 @@ tr:
269
263
  value_types:
270
264
  organizer_presenter:
271
265
  not_found: 'Organizatör veritabanında bulunamadı (ID: %{id})'
272
- application_helper:
273
- filter_category_values:
274
- all: Tümü
275
266
  calendar:
276
267
  meeting_to_event:
277
268
  read_more: Bu toplantı hakkında daha fazlasını okuyun
@@ -333,19 +324,16 @@ tr:
333
324
  location_hints_help: 'Konum ipuçları: ek bilgi. Örnek: Yüz yüze bir toplantıysa binanın katı veya kısıtlı erişime sahip çevrimiçi bir toplantıysa toplantı parolası.'
334
325
  online_meeting_url_help: 'Bağlantı: katılımcıların toplantınıza doğrudan bağlanmasına izin verin'
335
326
  registration_url_help: 'Bağlantı: katılımcıların kayıtlar için kullandığınız harici hizmete girmesine izin verin'
336
- select_a_category: Lütfen bir kategori seçin
337
327
  select_a_meeting_type: Lütfen bir toplantı türü seçin
338
328
  select_a_registration_type: Lütfen bir kayıt türü seçin
339
329
  index:
340
330
  new_meeting: Yeni toplantı
341
- meeting:
342
- close_meeting: Toplantıyı kapat
343
- edit_meeting: Toplantıyı Düzenle
344
331
  meetings:
345
332
  upcoming_meetings_warning: Şu anda planlanmış bir toplantı yok, ancak burada listelenen tüm geçmiş toplantıları bulabilirsiniz.
346
333
  new:
347
334
  back: Geri
348
335
  create: Oluştur
336
+ title: Bir Toplantı Oluştur
349
337
  registration_confirm:
350
338
  cancel: İptal Et
351
339
  confirm: Onayla
@@ -49,12 +49,6 @@ uk:
49
49
  other: Зареєстрованих
50
50
  decidim:
51
51
  admin:
52
- filters:
53
- meetings:
54
- category_id_eq:
55
- label: Категорія
56
- scope_id_eq:
57
- label: Обсяг
58
52
  meeting_copies:
59
53
  create:
60
54
  error: При спробі створити копію цієї зустрічі сталася помилка.
@@ -73,7 +67,6 @@ uk:
73
67
  comments_enabled: Коментарі увімкнено
74
68
  default_registration_terms: Умови реєстрації за умовчанням
75
69
  resources_permissions_enabled: Права на дії можна встановити для кожної зустрічі
76
- scope_id: Обсяг
77
70
  step:
78
71
  announcement: Оголошення
79
72
  comments_blocked: Коментарі вимкнено
@@ -121,7 +114,6 @@ uk:
121
114
  attachment_collections: Теки
122
115
  attachments: Вкладені файли
123
116
  close: Закрити
124
- destroy: Видалити
125
117
  edit: Редагувати
126
118
  preview: Попередній перегляд
127
119
  registrations: Реєстрації
@@ -177,8 +169,6 @@ uk:
177
169
  close: Закрити
178
170
  title: Закрити зустріч
179
171
  meetings:
180
- destroy:
181
- success: Зустріч успішно видалено
182
172
  edit:
183
173
  update: Оновити
184
174
  index:
@@ -199,6 +189,8 @@ uk:
199
189
  registrations:
200
190
  edit:
201
191
  save: Зберегти
192
+ validate: Підтвердити
193
+ validate_registration_code: Підтвердити реєстраційний код
202
194
  form:
203
195
  available_slots_help: Залиште це число нульовим, якщо у вас не обмежена кількість місць.
204
196
  invites: Запрошення
@@ -206,6 +198,9 @@ uk:
206
198
  update:
207
199
  invalid: При спробі зберегти налаштування реєстрації сталася помилка.
208
200
  success: Налаштування реєстрації на зустріч успішно збережено.
201
+ validate_registration_code:
202
+ invalid: Цей реєстраційний код неналежний.
203
+ success: Реєстраційний код успішно підтверджено.
209
204
  admin_log:
210
205
  invite:
211
206
  create: "%{user_name} запросив %{attendee_name} приєднатися до зустрічі %{resource_name} у просторі %{space_name}"
@@ -232,8 +227,6 @@ uk:
232
227
  category: Категорія
233
228
  date: Дата
234
229
  search: Шукати
235
- meeting:
236
- close_meeting: Закрити зустріч
237
230
  meetings:
238
231
  upcoming_meetings_warning: Наразі нема запланованих зустрічей, але тут ви можете знайти перелік усіх попередніх зустрічей.
239
232
  registration_confirm:
@@ -282,9 +275,6 @@ uk:
282
275
  types:
283
276
  private_meeting: Приватна зустріч
284
277
  transparent: Прозора
285
- metrics:
286
- meetings:
287
- title: Зустрічі
288
278
  participatory_spaces:
289
279
  highlighted_meetings:
290
280
  past_meetings: Минулі зустрічі
@@ -43,12 +43,6 @@ zh-CN:
43
43
  other: 注册
44
44
  decidim:
45
45
  admin:
46
- filters:
47
- meetings:
48
- category_id_eq:
49
- label: 类别
50
- scope_id_eq:
51
- label: 范围
52
46
  meeting_copies:
53
47
  create:
54
48
  error: 重复这次会议时出现问题。
@@ -70,8 +64,6 @@ zh-CN:
70
64
  default_registration_terms: 默认注册条款
71
65
  enable_pads_creation: 启用页面创建
72
66
  resources_permissions_enabled: 每次会议都可以设置动作权限
73
- scope_id: 范围
74
- scopes_enabled: 范围已启用
75
67
  step:
76
68
  announcement: 通 知
77
69
  comments_blocked: 评论已阻止
@@ -126,7 +118,7 @@ zh-CN:
126
118
  badges:
127
119
  attended_meetings:
128
120
  conditions:
129
- - 注册您想要参加的会议
121
+ - 注册您想要参加的会议
130
122
  description: 当你参加几次面对面的会议时颁发这个徽章。
131
123
  description_another: 此参与者已经参加了 %{score} 次会议。
132
124
  description_own: 您已经参加了 %{score} 次会议。
@@ -138,7 +130,6 @@ zh-CN:
138
130
  attachment_collections: 文件夹
139
131
  attachments: 附件
140
132
  close: 关闭
141
- destroy: 删除
142
133
  edit: 编辑
143
134
  invalid_destroy:
144
135
  proposals_count:
@@ -198,8 +189,6 @@ zh-CN:
198
189
  close: 关闭
199
190
  title: 关闭会议
200
191
  meetings:
201
- destroy:
202
- success: 会议已成功删除
203
192
  edit:
204
193
  update: 更新
205
194
  form:
@@ -223,6 +212,8 @@ zh-CN:
223
212
  registrations:
224
213
  edit:
225
214
  save: 保存
215
+ validate: Validate
216
+ validate_registration_code: 验证注册码
226
217
  form:
227
218
  available_slots_help: 如果您有无限空位可用,则将其留给0。
228
219
  invites: 邀请
@@ -235,6 +226,9 @@ zh-CN:
235
226
  update:
236
227
  invalid: 保存注册设置时出现问题。
237
228
  success: 会议注册设置保存成功。
229
+ validate_registration_code:
230
+ invalid: 此注册码无效。
231
+ success: 注册码已成功验证。
238
232
  admin_log:
239
233
  invite:
240
234
  create: "%{user_name} 邀請了 %{attendee_name} 在 %{space_name} 空间加入 %{resource_name} 次会议"
@@ -249,9 +243,6 @@ zh-CN:
249
243
  value_types:
250
244
  organizer_presenter:
251
245
  not_found: '在数据库中找不到组织者 (ID: %{id})'
252
- application_helper:
253
- filter_category_values:
254
- all: 所有的
255
246
  calendar_modal:
256
247
  calendar_url: 日历 URL
257
248
  export_calendar: 导出日历
@@ -295,16 +286,14 @@ zh-CN:
295
286
  address_help: '地址:由地理编码器用来查找位置'
296
287
  create_as: 创建会议为
297
288
  location_help: '位置:发送给用户的消息,这些消息暗示要会见的地点'
298
- select_a_category: 请选择一个类别
299
289
  index:
300
290
  new_meeting: 新会议
301
- meeting:
302
- close_meeting: 关闭会议
303
291
  meetings:
304
292
  upcoming_meetings_warning: 目前没有排定的会议,但在这里你可以找到过去所有会议的清单。
305
293
  new:
306
294
  back: 后退
307
295
  create: 创建
296
+ title: 创建您的会议
308
297
  registration_confirm:
309
298
  cancel: 取消
310
299
  confirm: 确认
@@ -85,8 +85,6 @@ zh-TW:
85
85
  admin:
86
86
  filters:
87
87
  meetings:
88
- category_id_eq:
89
- label: 分類
90
88
  closed_at_present:
91
89
  label: 狀態
92
90
  values:
@@ -97,8 +95,6 @@ zh-TW:
97
95
  values:
98
96
  'false': 過去
99
97
  'true': 即將舉行
100
- scope_id_eq:
101
- label: 範圍
102
98
  with_any_origin:
103
99
  label: 起源
104
100
  values:
@@ -135,8 +131,6 @@ zh-TW:
135
131
  maps_enabled: 啟用地圖
136
132
  registration_code_enabled: 啟用註冊碼
137
133
  resources_permissions_enabled: 可以針對每個會議設定操作權限
138
- scope_id: 範圍
139
- scopes_enabled: 啟用範圍
140
134
  terms_and_conditions_url_for_meeting_creators: 會議創建者的使用條款和條件 URL
141
135
  step:
142
136
  announcement: 公告
@@ -196,7 +190,7 @@ zh-TW:
196
190
  badges:
197
191
  attended_meetings:
198
192
  conditions:
199
- - 註冊您想參加的會議
193
+ - 註冊您想參加的會議
200
194
  description: 這個徽章是當您參加多個面對面會議時獲得的。
201
195
  description_another: 此參與者已經參加了 %{score} 場會議。
202
196
  description_own: 您已經參加了 %{score} 場會議。
@@ -210,7 +204,6 @@ zh-TW:
210
204
  attachment_collections: 資料夾
211
205
  attachments: 附件
212
206
  close: 關閉
213
- destroy: 刪除
214
207
  edit: 編輯
215
208
  invalid_destroy:
216
209
  proposals_count:
@@ -286,11 +279,6 @@ zh-TW:
286
279
  create:
287
280
  invalid: 建立會議時發生問題.
288
281
  success: 會議已成功建立。請注意這仍未發佈,您需要手動發佈。
289
- destroy:
290
- invalid:
291
- proposals_count:
292
- other: 該會議因有 %{count} 個相關提案而無法刪除.
293
- success: 會議已成功刪除
294
282
  edit:
295
283
  title: 編輯會議
296
284
  update: 更新
@@ -337,6 +325,8 @@ zh-TW:
337
325
  registrations:
338
326
  edit:
339
327
  save: 儲存
328
+ validate: 驗證
329
+ validate_registration_code: 驗證註冊碼
340
330
  form:
341
331
  available_slots_help: 如果您有無限的可用名額,請將其設置為0。
342
332
  invites: 邀請
@@ -351,6 +341,9 @@ zh-TW:
351
341
  update:
352
342
  invalid: 儲存註冊設定時出現問題。
353
343
  success: 會議註冊設定已成功保存。
344
+ validate_registration_code:
345
+ invalid: 此註冊碼無效。
346
+ success: 註冊碼已成功驗證。
354
347
  admin_log:
355
348
  invite:
356
349
  create: "%{user_name} 邀請 %{attendee_name} 參加在 %{space_name} 空間舉行的 %{resource_name} 會議。"
@@ -368,8 +361,6 @@ zh-TW:
368
361
  questionnaire:
369
362
  update: "%{user_name} 更新了 %{meeting_name} 會議的問卷"
370
363
  application_helper:
371
- filter_category_values:
372
- all: 全部
373
364
  filter_meeting_space_values:
374
365
  all: 全部
375
366
  calendar_modal:
@@ -471,7 +462,6 @@ zh-TW:
471
462
  location_hints_help: '地點提示:額外的訊息。例如,如果是面對面的會議,可以提供建築物樓層的資訊;如果是限制存取權限的線上會議,可以提供會議密碼的資訊。'
472
463
  online_meeting_url_help: '連結:允許參與者直接連接到您的會議'
473
464
  registration_url_help: '連結:允許參與者進入您用於註冊的外部服務'
474
- select_a_category: 請選擇一個類別
475
465
  select_a_meeting_type: 請選擇一種會議類型。
476
466
  select_a_registration_type: 請選擇一種註冊類型
477
467
  select_an_iframe_access_level: 請選擇一個 iframe 存取級別
@@ -481,15 +471,13 @@ zh-TW:
481
471
  see_all: 查看所有會議
482
472
  see_all_withdrawn: 查看所有撤回的會議
483
473
  text_banner: 您正在查看已被其作者撤回的會議列表。 %{go_back_link}。
484
- meeting:
485
- close_meeting: 關閉會議
486
- edit_meeting: 編輯會議
487
474
  meetings:
488
475
  no_meetings_warning: 沒有符合搜尋條件的會議或者目前沒有任何已排定的會議。
489
476
  upcoming_meetings_warning: 目前沒有安排的會議,但您可以在這裡找到所有過去的會議列表。
490
477
  new:
491
478
  back: 返回
492
479
  create: 建立
480
+ title: 新增您的會議
493
481
  registration_confirm:
494
482
  cancel: 取消
495
483
  confirm: 確認
@@ -515,7 +503,6 @@ zh-TW:
515
503
  visit_finished: 查看過去的會議
516
504
  withdraw_btn_hint: 您可以撤回您的會議,如果您改變了主意。會議不會被刪除,而是會顯示在已撤回的會議列表中。
517
505
  withdraw_confirmation_html: 您確定要撤回此會議嗎?<br><br><strong>此操作無法取消!</strong>
518
- withdraw_meeting: 撤回會議
519
506
  update:
520
507
  invalid: 更新會議時發生問題.
521
508
  success: 您已成功更新會議。
@@ -589,7 +576,6 @@ zh-TW:
589
576
  transparent: 透明
590
577
  withdraw: 撤回
591
578
  withdraw:
592
- error: 退出會議時發生錯誤.
593
579
  success: 會議已成功撤回.
594
580
  metrics:
595
581
  meetings:
@@ -3,7 +3,7 @@
3
3
  class AddQuestionnaireToExistingMeetings < ActiveRecord::Migration[5.2]
4
4
  def change
5
5
  Decidim::Meetings::Meeting.transaction do
6
- Decidim::Meetings::Meeting.find_each do |meeting|
6
+ Decidim::Meetings::Meeting.unscoped.find_each do |meeting|
7
7
  if meeting.component.present? && meeting.questionnaire.blank?
8
8
  meeting.update!(
9
9
  questionnaire: Decidim::Forms::Questionnaire.new
@@ -4,6 +4,6 @@ class AddCommentableCounterCacheToMeetings < ActiveRecord::Migration[5.2]
4
4
  def change
5
5
  add_column :decidim_meetings_meetings, :comments_count, :integer, null: false, default: 0
6
6
  Decidim::Meetings::Meeting.reset_column_information
7
- Decidim::Meetings::Meeting.find_each(&:update_comments_count)
7
+ Decidim::Meetings::Meeting.unscoped.find_each(&:update_comments_count)
8
8
  end
9
9
  end
@@ -5,7 +5,7 @@ class FixMeetingsRegistrationTerms < ActiveRecord::Migration[5.2]
5
5
  reset_column_information
6
6
 
7
7
  PaperTrail.request(enabled: false) do
8
- Decidim::Meetings::Meeting.find_each do |meeting|
8
+ Decidim::Meetings::Meeting.unscoped.find_each do |meeting|
9
9
  next if meeting.component.nil?
10
10
  # Only user-created meetings have this problem
11
11
  next if meeting.official?
@@ -7,7 +7,7 @@ class AddFollowableCounterCacheToMeetings < ActiveRecord::Migration[5.2]
7
7
  reversible do |dir|
8
8
  dir.up do
9
9
  Decidim::Meetings::Meeting.reset_column_information
10
- Decidim::Meetings::Meeting.find_each do |record|
10
+ Decidim::Meetings::Meeting.unscoped.find_each do |record|
11
11
  record.class.reset_counters(record.id, :follows)
12
12
  end
13
13
  end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateDecidimMeetingsMeetingLink < ActiveRecord::Migration[7.0]
4
+ def change
5
+ create_table :decidim_meetings_meeting_links do |t|
6
+ t.references :decidim_component, null: false, index: true
7
+ t.references :decidim_meeting, null: false, index: true
8
+
9
+ t.timestamps
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddDeletedAtToDecidimMeetingsMeetings < ActiveRecord::Migration[7.0]
4
+ def change
5
+ add_column :decidim_meetings_meetings, :deleted_at, :datetime
6
+ add_index :decidim_meetings_meetings, :deleted_at
7
+ end
8
+ end
@@ -19,7 +19,7 @@ Gem::Specification.new do |s|
19
19
  "homepage_uri" => "https://decidim.org",
20
20
  "source_code_uri" => "https://github.com/decidim/decidim"
21
21
  }
22
- s.required_ruby_version = "~> 3.2.0"
22
+ s.required_ruby_version = "~> 3.3.0"
23
23
 
24
24
  s.name = "decidim-meetings"
25
25
  s.summary = "Decidim meetings module"
@@ -3,20 +3,19 @@
3
3
  module Decidim
4
4
  module Meetings
5
5
  class AgendaItemType < Decidim::Api::Types::BaseObject
6
+ implements Decidim::Core::TimestampsInterface
7
+
6
8
  graphql_name "MeetingAgendaItem"
7
9
  description "A meeting agenda item"
8
10
 
9
- field :id, GraphQL::Types::ID, "The ID for this agenda item", null: false
10
- field :title, Decidim::Core::TranslatedFieldType, "The title for this agenda item", null: true
11
+ field :agenda, Decidim::Meetings::AgendaType, "Belonging agenda", null: true
11
12
  field :description, Decidim::Core::TranslatedFieldType, "The description for this agenda item", null: true
13
+ field :duration, GraphQL::Types::Int, "Duration in number of minutes for this item in this agenda", null: false
14
+ field :id, GraphQL::Types::ID, "The ID for this agenda item", null: false
12
15
  field :items, [Decidim::Meetings::AgendaItemType, { null: true }], "Sub-items (children) of this agenda item", method: :agenda_item_children, null: false
13
16
  field :parent, Decidim::Meetings::AgendaItemType, "Parent agenda item, if available", null: true
14
- field :agenda, Decidim::Meetings::AgendaType, "Belonging agenda", null: true
15
- field :duration, GraphQL::Types::Int, "Duration in number of minutes for this item in this agenda", null: false
16
17
  field :position, GraphQL::Types::Int, "Order position for this agenda item", null: false
17
-
18
- field :created_at, Decidim::Core::DateTimeType, description: "The date and time this agenda item was created", null: true
19
- field :updated_at, Decidim::Core::DateTimeType, description: "The date and time this agenda item was updated", null: true
18
+ field :title, Decidim::Core::TranslatedFieldType, "The title for this agenda item", null: true
20
19
  end
21
20
  end
22
21
  end
@@ -3,17 +3,16 @@
3
3
  module Decidim
4
4
  module Meetings
5
5
  class AgendaType < Decidim::Api::Types::BaseObject
6
+ implements Decidim::Core::TimestampsInterface
7
+
6
8
  graphql_name "MeetingAgenda"
7
9
  description "A meeting agenda"
8
10
 
9
11
  field :id, GraphQL::Types::ID, "The ID for the agenda", null: false
10
- field :title, Decidim::Core::TranslatedFieldType, "The title for the agenda", null: true
11
12
  field :items, [Decidim::Meetings::AgendaItemType, { null: true }], "Items and sub-items of the agenda", method: :agenda_items, null: false
13
+ field :title, Decidim::Core::TranslatedFieldType, "The title for the agenda", null: true
12
14
  # probably useful in the future, when handling user permissions
13
15
  # field :visible, !types.Boolean, "Whether this minutes is public or not", property: :visible
14
-
15
- field :created_at, Decidim::Core::DateTimeType, description: "The date and time this agenda was created", null: true
16
- field :updated_at, Decidim::Core::DateTimeType, description: "The date and time this agenda was updated", null: true
17
16
  end
18
17
  end
19
18
  end
@@ -7,32 +7,53 @@ module Decidim
7
7
 
8
8
  implements Decidim::Comments::CommentableInterface
9
9
  implements Decidim::Core::AuthorableInterface
10
- implements Decidim::Core::CategorizableInterface
11
- implements Decidim::Core::ScopableInterface
10
+ implements Decidim::Core::TaxonomizableInterface
12
11
  implements Decidim::Core::AttachableInterface
13
12
  implements Decidim::Core::TimestampsInterface
14
13
  implements Decidim::Meetings::ServicesInterface
15
14
  implements Decidim::Meetings::LinkedResourcesInterface if Decidim::Meetings.enable_proposal_linking
16
15
  implements Decidim::Forms::QuestionnaireEntityInterface
17
16
 
17
+ field :address, GraphQL::Types::String, "The physical address of this meeting (used for geolocation)", null: true
18
+ field :agenda, Decidim::Meetings::AgendaType, "Agenda for this meeting, if available", null: true
19
+ field :attendee_count, GraphQL::Types::Int, "Amount of attendees to this meeting", method: :attendees_count, null: true
20
+ field :attending_organizations, GraphQL::Types::String, "list of attending organizations", null: true
21
+ field :audio_url, GraphQL::Types::String, "URL for the audio of the session, if any", null: true
22
+ field :closed, GraphQL::Types::Boolean, "Whether this meeting is closed or not.", method: :closed?, null: false
23
+ field :closing_report, Decidim::Core::TranslatedFieldType, "The closing report of this meeting.", null: true
24
+ field :contribution_count, GraphQL::Types::Int, "Amount of contributions to this meeting", method: :contributions_count, null: true
25
+ field :coordinates, Decidim::Core::CoordinatesType, "Physical coordinates for this meeting", null: true
26
+ field :description, Decidim::Core::TranslatedFieldType, "The description of this meeting.", null: true
27
+ field :end_time, Decidim::Core::DateTimeType, "The time this meeting ends", null: false
18
28
  field :id, GraphQL::Types::ID, "ID of this meeting", null: false
29
+ field :iframe_embed_type, GraphQL::Types::String, "The type of displaying of the online meeting URL", null: true
30
+ field :is_withdrawn, GraphQL::Types::Boolean, "Whether this meeting is withdrawn or not.", method: :withdrawn?, null: false
31
+ field :location, Decidim::Core::TranslatedFieldType, "The location of this meeting (free format)", null: true
32
+ field :location_hints, Decidim::Core::TranslatedFieldType, "The location of this meeting (free format)", null: true
33
+ field :online_meeting_url, GraphQL::Types::String, "The URL of the meeting (when the type is online)", null: false
34
+ field :private_meeting, GraphQL::Types::Boolean, "Whether the meeting is private or not (it can only be true if transparent)", null: false
19
35
  field :reference, GraphQL::Types::String, "Reference for this meeting", null: false
20
- field :title, Decidim::Core::TranslatedFieldType, "The title of this meeting.", null: false
21
- field :description, Decidim::Core::TranslatedFieldType, "The description of this meeting.", null: true
36
+ field :registration_form, Decidim::Forms::QuestionnaireType, description: "If registration requires to fill a form, this is the questionnaire", null: true
37
+ field :registration_form_enabled, GraphQL::Types::Boolean, "Whether the registrations have a form or not", null: false
38
+ field :registration_terms, Decidim::Core::TranslatedFieldType, "The registration terms", null: true
39
+ field :registrations_enabled, GraphQL::Types::Boolean, "Whether the registrations are enabled or not", null: false
40
+ field :remaining_slots, GraphQL::Types::Int, "Amount of slots available for this meeting", null: true
22
41
  field :start_time, Decidim::Core::DateTimeType, "The time this meeting starts", null: false
23
- field :end_time, Decidim::Core::DateTimeType, "The time this meeting ends", null: false
24
- field :agenda, Decidim::Meetings::AgendaType, "Agenda for this meeting, if available", null: true
42
+ field :title, Decidim::Core::TranslatedFieldType, "The title of this meeting.", null: false
43
+ field :transparent, GraphQL::Types::Boolean, "For private meetings, information is public if transparent", null: false
44
+ field :type_of_meeting, GraphQL::Types::String, "The type of the meeting (online or in-person)", null: false
45
+ field :video_url, GraphQL::Types::String, "URL for the video of the session, if any", null: true
46
+ field :withdrawn, GraphQL::Types::Boolean, "Whether this meeting has been withdrawn or not", method: :withdrawn?, null: true
47
+ field :withdrawn_at, Decidim::Core::DateTimeType, description: "The date and time this meeting was withdrawn", null: true
48
+
49
+ def registration_form
50
+ object.questionnaire if object.registration_form_enabled?
51
+ end
25
52
 
26
53
  def agenda
27
54
  object.agenda if object.agenda&.visible?
28
55
  end
29
56
 
30
- field :closed, GraphQL::Types::Boolean, "Whether this meeting is closed or not.", method: :closed?, null: false
31
- field :isWithdrawn, GraphQL::Types::Boolean, "Whether this meeting is withdrawn or not.", method: :withdrawn?, null: false
32
- field :closing_report, Decidim::Core::TranslatedFieldType, "The closing report of this meeting.", null: true
33
- field :video_url, GraphQL::Types::String, "URL for the video of the session, if any", null: true
34
- field :audio_url, GraphQL::Types::String, "URL for the audio of the session, if any", null: true
35
-
36
57
  def closing_report
37
58
  object.closing_report if object.closing_visible?
38
59
  end
@@ -45,38 +66,9 @@ module Decidim
45
66
  object.audio_url if object.closing_visible?
46
67
  end
47
68
 
48
- field :withdrawn_at, Decidim::Core::DateTimeType, description: "The date and time this meeting was withdrawn", null: true
49
- field :withdrawn, GraphQL::Types::Boolean, "Whether this meeting has been withdrawn or not", method: :withdrawn?, null: true
50
-
51
- field :created_at, Decidim::Core::DateTimeType, description: "The date and time this minutes was created", null: true
52
- field :updated_at, Decidim::Core::DateTimeType, description: "The date and time this minutes was updated", null: true
53
-
54
- field :attending_organizations, GraphQL::Types::String, "list of attending organizations", null: true
55
- field :attendee_count, GraphQL::Types::Int, "Amount of attendees to this meeting", method: :attendees_count, null: true
56
- field :contribution_count, GraphQL::Types::Int, "Amount of contributions to this meeting", method: :contributions_count, null: true
57
-
58
- field :private_meeting, GraphQL::Types::Boolean, "Whether the meeting is private or not (it can only be true if transparent)", null: false
59
- field :transparent, GraphQL::Types::Boolean, "For private meetings, information is public if transparent", null: false
60
- field :registrations_enabled, GraphQL::Types::Boolean, "Whether the registrations are enabled or not", null: false
61
- field :registration_terms, Decidim::Core::TranslatedFieldType, "The registration terms", null: true
62
- field :remaining_slots, GraphQL::Types::Int, "Amount of slots available for this meeting", null: true
63
- field :registration_form_enabled, GraphQL::Types::Boolean, "Whether the registrations have a form or not", null: false
64
- field :registration_form, Decidim::Forms::QuestionnaireType, description: "If registration requires to fill a form, this is the questionnaire", null: true
65
-
66
- def registration_form
67
- object.questionnaire if object.registration_form_enabled?
68
- end
69
- field :location, Decidim::Core::TranslatedFieldType, "The location of this meeting (free format)", null: true
70
- field :location_hints, Decidim::Core::TranslatedFieldType, "The location of this meeting (free format)", null: true
71
- field :address, GraphQL::Types::String, "The physical address of this meeting (used for geolocation)", null: true
72
- field :coordinates, Decidim::Core::CoordinatesType, "Physical coordinates for this meeting", null: true
73
-
74
69
  def coordinates
75
70
  [object.latitude, object.longitude]
76
71
  end
77
- field :type_of_meeting, GraphQL::Types::String, "The type of the meeting (online or in-person)", null: false
78
- field :online_meeting_url, GraphQL::Types::String, "The URL of the meeting (when the type is online)", null: false
79
- field :iframe_embed_type, GraphQL::Types::String, "The type of displaying of the online meeting URL", null: true
80
72
 
81
73
  def self.authorized?(object, context)
82
74
  context[:meeting] = object
@@ -6,16 +6,15 @@ module Decidim
6
6
  graphql_name "Meetings"
7
7
  description "A meetings component of a participatory space."
8
8
 
9
- field :meetings, Decidim::Meetings::MeetingType.connection_type, null: true, connection: true
9
+ field :meeting, Decidim::Meetings::MeetingType, "A single Meeting object", null: true do
10
+ argument :id, GraphQL::Types::ID, "The id of the Meeting requested", required: true
11
+ end
12
+ field :meetings, Decidim::Meetings::MeetingType.connection_type, "A collection of Meetings", null: true, connection: true
10
13
 
11
14
  def meetings
12
15
  Meeting.published.visible.where(component: object).includes(:component)
13
16
  end
14
17
 
15
- field :meeting, Decidim::Meetings::MeetingType, null: true do
16
- argument :id, GraphQL::Types::ID, required: true
17
- end
18
-
19
18
  def meeting(**args)
20
19
  Meeting.published.visible.where(component: object).find_by(id: args[:id])
21
20
  end
@@ -6,8 +6,8 @@ module Decidim
6
6
  graphql_name "MeetingService"
7
7
  description "A meeting service"
8
8
 
9
- field :title, Decidim::Core::TranslatedFieldType, "The title for the service", null: true
10
9
  field :description, Decidim::Core::TranslatedFieldType, "The description for the service", null: true
10
+ field :title, Decidim::Core::TranslatedFieldType, "The title for the service", null: true
11
11
  end
12
12
  end
13
13
  end