decidim-meetings 0.25.2 → 0.26.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/cells/decidim/meetings/content_blocks/highlighted_meetings/heading.erb +1 -1
- data/app/cells/decidim/meetings/content_blocks/highlighted_meetings_cell.rb +1 -1
- data/app/cells/decidim/meetings/content_blocks/{upcoming_events → upcoming_meetings}/show.erb +6 -6
- data/app/cells/decidim/meetings/content_blocks/{upcoming_events_cell.rb → upcoming_meetings_cell.rb} +11 -10
- data/app/cells/decidim/meetings/highlighted_meetings_for_component_cell.rb +1 -1
- data/app/cells/decidim/meetings/join_meeting_button_cell.rb +1 -1
- data/app/cells/decidim/meetings/meeting_list_item_cell.rb +10 -0
- data/app/cells/decidim/meetings/meeting_m_cell.rb +48 -0
- data/app/cells/decidim/meetings/meeting_s_cell.rb +22 -0
- data/app/cells/decidim/meetings/meetings_map_cell.rb +6 -0
- data/app/cells/decidim/meetings/online_meeting_cell.rb +23 -8
- data/app/cells/decidim/meetings/online_meeting_link/show.erb +2 -2
- data/app/cells/decidim/meetings/online_meeting_link_cell.rb +1 -5
- data/app/cells/decidim/meetings/public_participants_list_cell.rb +1 -0
- data/app/cells/decidim/meetings/question_responses_cell.rb +1 -1
- data/app/commands/decidim/meetings/admin/create_meeting.rb +11 -1
- data/app/commands/decidim/meetings/admin/publish_meeting.rb +3 -1
- data/app/commands/decidim/meetings/admin/update_meeting.rb +8 -2
- data/app/commands/decidim/meetings/create_meeting.rb +14 -2
- data/app/commands/decidim/meetings/update_meeting.rb +5 -2
- data/app/commands/decidim/meetings/withdraw_meeting.rb +39 -0
- data/app/controllers/concerns/decidim/meetings/filterable.rb +33 -0
- data/app/controllers/decidim/meetings/directory/application_controller.rb +16 -0
- data/app/controllers/decidim/meetings/directory/meetings_controller.rb +31 -20
- data/app/controllers/decidim/meetings/live_events_controller.rb +7 -1
- data/app/controllers/decidim/meetings/meetings_controller.rb +19 -17
- data/app/events/decidim/meetings/close_meeting_event.rb +1 -3
- data/app/events/decidim/meetings/create_meeting_event.rb +2 -4
- data/app/events/decidim/meetings/meeting_event.rb +37 -0
- data/app/events/decidim/meetings/meeting_registrations_enabled_event.rb +1 -3
- data/app/events/decidim/meetings/meeting_registrations_over_percentage_event.rb +2 -4
- data/app/events/decidim/meetings/registration_code_validated_event.rb +2 -4
- data/app/events/decidim/meetings/upcoming_meeting_event.rb +1 -3
- data/app/events/decidim/meetings/update_meeting_event.rb +1 -3
- data/app/forms/decidim/meetings/admin/close_meeting_form.rb +1 -1
- data/app/forms/decidim/meetings/admin/meeting_copy_form.rb +4 -13
- data/app/forms/decidim/meetings/admin/meeting_form.rb +34 -46
- data/app/forms/decidim/meetings/base_meeting_form.rb +59 -0
- data/app/forms/decidim/meetings/close_meeting_form.rb +6 -6
- data/app/forms/decidim/meetings/meeting_form.rb +30 -46
- data/app/helpers/decidim/meetings/application_helper.rb +13 -1
- data/app/helpers/decidim/meetings/directory/application_helper.rb +150 -0
- data/app/helpers/decidim/meetings/meeting_cells_helper.rb +4 -1
- data/app/helpers/decidim/meetings/meetings_helper.rb +3 -0
- data/app/models/decidim/meetings/meeting.rb +53 -1
- data/app/packs/src/decidim/meetings/admin/meetings_form.js +27 -11
- data/app/packs/src/decidim/meetings/meetings_form.js +19 -0
- data/app/packs/src/decidim/meetings/meetings_polls.js +31 -26
- data/app/permissions/decidim/meetings/permissions.rb +9 -1
- data/app/presenters/decidim/meetings/meeting_edition_presenter.rb +14 -0
- data/app/presenters/decidim/meetings/meeting_presenter.rb +13 -6
- data/app/services/decidim/meetings/directory/meeting_search.rb +53 -0
- data/app/services/decidim/meetings/meeting_iframe_embedder.rb +1 -1
- data/app/services/decidim/meetings/meeting_search.rb +15 -2
- data/app/views/decidim/meetings/admin/meeting_copies/_form.html.erb +16 -1
- data/app/views/decidim/meetings/admin/meeting_copies/new.html.erb +1 -1
- data/app/views/decidim/meetings/admin/meetings/_form.html.erb +15 -3
- data/app/views/decidim/meetings/directory/meetings/_filters.html.erb +34 -0
- data/app/views/decidim/meetings/directory/meetings/index.html.erb +1 -18
- data/app/views/decidim/meetings/meetings/_filters.html.erb +2 -0
- data/app/views/decidim/meetings/meetings/_filters_small_view.html.erb +3 -3
- data/app/views/decidim/meetings/meetings/_form.html.erb +14 -3
- data/app/views/decidim/meetings/meetings/_linked_meetings.html.erb +1 -1
- data/app/views/decidim/meetings/meetings/_meetings.html.erb +18 -0
- data/app/views/decidim/meetings/meetings/index.html.erb +1 -0
- data/app/views/decidim/meetings/meetings/show.html.erb +10 -4
- data/config/locales/ar.yml +2 -7
- data/config/locales/ca.yml +3 -15
- data/config/locales/cs.yml +41 -13
- data/config/locales/de.yml +2 -9
- data/config/locales/el.yml +2 -7
- data/config/locales/en.yml +41 -13
- data/config/locales/es-MX.yml +2 -15
- data/config/locales/es-PY.yml +2 -15
- data/config/locales/es.yml +40 -12
- data/config/locales/eu.yml +19 -15
- data/config/locales/fi-plain.yml +40 -13
- data/config/locales/fi.yml +41 -13
- data/config/locales/fr-CA.yml +32 -15
- data/config/locales/fr.yml +42 -24
- data/config/locales/ga-IE.yml +2 -7
- data/config/locales/gl.yml +28 -7
- data/config/locales/hu.yml +2 -7
- data/config/locales/id-ID.yml +2 -7
- data/config/locales/is-IS.yml +0 -7
- data/config/locales/it.yml +3 -15
- data/config/locales/ja.yml +44 -17
- data/config/locales/lb-LU.yml +210 -0
- data/config/locales/lb.yml +2 -6
- data/config/locales/lv.yml +2 -7
- data/config/locales/nl.yml +33 -9
- data/config/locales/no.yml +2 -9
- data/config/locales/pl.yml +14 -9
- data/config/locales/pt-BR.yml +3 -10
- data/config/locales/pt.yml +2 -15
- data/config/locales/ro-RO.yml +31 -15
- data/config/locales/ru.yml +0 -7
- data/config/locales/sk.yml +2 -7
- data/config/locales/sv.yml +23 -15
- data/config/locales/tr-TR.yml +2 -9
- data/config/locales/uk.yml +0 -9
- data/config/locales/val-ES.yml +1 -0
- data/config/locales/zh-CN.yml +2 -9
- data/db/migrate/20210519133705_add_comments_availability_columns_to_meetings_table.rb +14 -0
- data/db/migrate/20210727085318_add_state_field_to_meeting.rb +7 -0
- data/db/migrate/20210903143040_add_iframe_access_level_to_decidim_meetings.rb +7 -0
- data/db/migrate/20210922140454_transform_show_embedded_iframe_column.rb +15 -0
- data/db/migrate/20210928095036_rename_upcoming_events_content_block_to_upcoming_meetings.rb +13 -0
- data/lib/decidim/api/meeting_type.rb +2 -1
- data/lib/decidim/meetings/component.rb +13 -5
- data/lib/decidim/meetings/directory_engine.rb +3 -3
- data/lib/decidim/meetings/engine.rb +4 -1
- data/lib/decidim/meetings/meeting_serializer.rb +2 -2
- data/lib/decidim/meetings/test/factories.rb +24 -3
- data/lib/decidim/meetings/test/notifications_handling.rb +39 -0
- data/lib/decidim/meetings/test/translated_event.rb +22 -0
- data/lib/decidim/meetings/version.rb +1 -1
- data/lib/decidim/meetings.rb +5 -0
- metadata +36 -19
data/config/locales/ro-RO.yml
CHANGED
@@ -42,10 +42,6 @@ ro:
|
|
42
42
|
type_of_meeting: Tip
|
43
43
|
errors:
|
44
44
|
models:
|
45
|
-
meeting:
|
46
|
-
attributes:
|
47
|
-
show_embedded_iframe:
|
48
|
-
not_embeddable: Acest URL nu poate fi încorporat
|
49
45
|
meeting_agenda:
|
50
46
|
attributes:
|
51
47
|
base:
|
@@ -286,6 +282,9 @@ ro:
|
|
286
282
|
edit:
|
287
283
|
close: Închide
|
288
284
|
title: Închide ședința
|
285
|
+
meeting_copies:
|
286
|
+
form:
|
287
|
+
select_a_meeting_type: Te rugăm să selectezi un tip de ședință
|
289
288
|
meetings:
|
290
289
|
close:
|
291
290
|
invalid: A apărut o problemă la închiderea acestei întâlniri
|
@@ -314,7 +313,6 @@ ro:
|
|
314
313
|
registration_url_help: 'Link: permite participanților să acceseze serviciul extern pe care îl utilizezi pentru înregistrare'
|
315
314
|
select_a_meeting_type: Te rugăm să selectezi un tip de ședință
|
316
315
|
select_a_registration_type: Te rugăm să selectezi un tip de înregistrare
|
317
|
-
show_embedded_iframe_help: Indiferent dacă iframe este încorporat sau nu în acest URL pentru videoconferință. Doar câteva servicii permit încorporarea (de exemplu, Youtube, Twitch...)
|
318
316
|
index:
|
319
317
|
title: Întâlniri
|
320
318
|
new:
|
@@ -385,26 +383,33 @@ ro:
|
|
385
383
|
value_types:
|
386
384
|
organizer_presenter:
|
387
385
|
not_found: 'Organizatorul nu a fost găsit în baza de date (ID: %{id})'
|
386
|
+
application_helper:
|
387
|
+
filter_category_values:
|
388
|
+
all: Toate
|
389
|
+
filter_meeting_space_values:
|
390
|
+
all: Toate
|
391
|
+
filter_scope_values:
|
392
|
+
all: Toate
|
388
393
|
calendar_modal:
|
389
394
|
calendar_url: URL Calendar
|
390
395
|
close_window: Închide fereastra
|
391
396
|
export_calendar: Exportă calendarul
|
392
397
|
conference_venues: Locuri ale conferinței
|
393
398
|
content_blocks:
|
394
|
-
|
395
|
-
name:
|
396
|
-
|
397
|
-
|
399
|
+
upcoming_meetings:
|
400
|
+
name: Şedinţe viitoare
|
401
|
+
upcoming_meetings: Şedinţe viitoare
|
402
|
+
view_all_meetings: Vezi toate
|
398
403
|
directory:
|
399
404
|
meetings:
|
400
405
|
index:
|
401
|
-
all: Toate
|
402
|
-
date: Data
|
403
406
|
meetings: Întâlniri
|
404
|
-
past: Trecute
|
405
|
-
search: Caută
|
406
407
|
space_type: Spaţiu participativ
|
407
|
-
|
408
|
+
iframe_access_level:
|
409
|
+
all: Toți vizitatorii
|
410
|
+
iframe_embed_type:
|
411
|
+
embed_in_meeting_page: Incorporează în pagina de şedinţe
|
412
|
+
open_in_new_tab: Deschideți în filă nouă
|
408
413
|
last_activity:
|
409
414
|
meeting_updated_at_html: "<span>Întâlnire actualizată la %{link}</span>"
|
410
415
|
new_meeting_at_html: "<span>O nouă ședință la %{link}</span>"
|
@@ -488,9 +493,12 @@ ro:
|
|
488
493
|
select_a_category: Te rugăm să selectezi o categorie
|
489
494
|
select_a_meeting_type: Te rugăm să selectezi un tip de ședință
|
490
495
|
select_a_registration_type: Te rugăm să selectezi un tip de înregistrare
|
491
|
-
show_embedded_iframe_help: Indiferent dacă iframe este încorporat sau nu în acest URL pentru videoconferință. Doar câteva servicii permit încorporarea (de exemplu, Youtube, Twitch...)
|
492
496
|
index:
|
497
|
+
click_here: Vezi toate întâlnirile
|
493
498
|
new_meeting: Întâlnire nouă
|
499
|
+
see_all: Vezi toate întâlnirile
|
500
|
+
see_all_withdrawn: Afișează toate întâlnirile anulate
|
501
|
+
text_banner: Vizualizezi lista de întâlniri anulate de autorii lor. %{go_back_link}.
|
494
502
|
meeting_minutes:
|
495
503
|
related_information: Informații asociate
|
496
504
|
meetings:
|
@@ -509,6 +517,7 @@ ro:
|
|
509
517
|
close_meeting: Închide ședința
|
510
518
|
contributions: Număr de contribuții
|
511
519
|
date: Data
|
520
|
+
edit_close_meeting: Editează raportul întâlnirii
|
512
521
|
edit_meeting: Editează întâlnirea
|
513
522
|
going: Te-ai înregistrat pentru această întâlnire
|
514
523
|
join: Participă la întâlnire
|
@@ -531,6 +540,9 @@ ro:
|
|
531
540
|
other: "%{count} sloturi rămase"
|
532
541
|
view: Vizualizare
|
533
542
|
visit_finished: Arată întâlniri deja desfășurate
|
543
|
+
withdraw_btn_hint: Poți să anulezi întâlnirea dacă te răzgândești. Întâlnirea nu va fi ștearsă, ci va apărea în lista de întâlniri anulate.
|
544
|
+
withdraw_confirmation_html: Sigur dorești să retragi această întâlnire?<br><br><strong>Această acțiune nu poate fi anulată!</strong>
|
545
|
+
withdraw_meeting: Anulează întâlnirea
|
534
546
|
update:
|
535
547
|
invalid: A apărut o eroare la actualizarea ședinței.
|
536
548
|
success: Ai actualizat întâlnirea cu succes.
|
@@ -609,8 +621,12 @@ ro:
|
|
609
621
|
types:
|
610
622
|
private_meeting: Întâlnire privată
|
611
623
|
transparent: Transparent
|
624
|
+
withdraw: Retrasă
|
612
625
|
versions:
|
613
626
|
back_to_resource: Intră din nou în întâlnire
|
627
|
+
withdraw:
|
628
|
+
error: S-a produs o eroare la retragerea întâlnirii
|
629
|
+
success: Întâlnirea a fost anulată
|
614
630
|
metrics:
|
615
631
|
meetings:
|
616
632
|
description: Numărul de întâlniri create
|
data/config/locales/ru.yml
CHANGED
@@ -289,17 +289,10 @@ ru:
|
|
289
289
|
calendar_url: Ссылка на календарь
|
290
290
|
close_window: Закрыть окно
|
291
291
|
export_calendar: Экспорт календаря
|
292
|
-
content_blocks:
|
293
|
-
upcoming_events:
|
294
|
-
name: Предстоящие события
|
295
|
-
upcoming_events: Предстоящие встречи
|
296
292
|
directory:
|
297
293
|
meetings:
|
298
294
|
index:
|
299
|
-
all: Все
|
300
|
-
date: Дата
|
301
295
|
meetings: Встречи
|
302
|
-
search: Поиск
|
303
296
|
last_activity:
|
304
297
|
new_meeting_at_html: "<span>Новая встреча в %{link}</span>"
|
305
298
|
mailer:
|
data/config/locales/sk.yml
CHANGED
@@ -302,17 +302,12 @@ sk:
|
|
302
302
|
export_calendar: Exportovať kalendár
|
303
303
|
conference_venues: Konferenčné priestory
|
304
304
|
content_blocks:
|
305
|
-
|
306
|
-
|
307
|
-
upcoming_events: Nadchádzajúce schôdzky
|
308
|
-
view_all_events: Zobraziť všetko
|
305
|
+
upcoming_meetings:
|
306
|
+
view_all_meetings: Zobraziť všetko
|
309
307
|
directory:
|
310
308
|
meetings:
|
311
309
|
index:
|
312
|
-
all: Všetko
|
313
|
-
date: dátum
|
314
310
|
meetings: Stretnutie
|
315
|
-
search: Vyhľadávanie
|
316
311
|
space_type: Zúčastňujú priestor
|
317
312
|
last_activity:
|
318
313
|
new_meeting_at_html: "<span> Nové stretnutie v %{link} </ span>"
|
data/config/locales/sv.yml
CHANGED
@@ -42,10 +42,6 @@ sv:
|
|
42
42
|
type_of_meeting: Typ
|
43
43
|
errors:
|
44
44
|
models:
|
45
|
-
meeting:
|
46
|
-
attributes:
|
47
|
-
show_embedded_iframe:
|
48
|
-
not_embeddable: URL:en kan inte integreras
|
49
45
|
meeting_agenda:
|
50
46
|
attributes:
|
51
47
|
base:
|
@@ -309,7 +305,6 @@ sv:
|
|
309
305
|
registration_url_help: 'Länk: tillåt deltagare att registrera sig på en extern tjänst'
|
310
306
|
select_a_meeting_type: Välj mötestyp
|
311
307
|
select_a_registration_type: Välj en registreringsmetod
|
312
|
-
show_embedded_iframe_help: Välj om adressen ska integreras som iframe. Endast ett fåtal tjänster tillåter integrering (t.ex. Youtube, Twitch...)
|
313
308
|
index:
|
314
309
|
title: Möten
|
315
310
|
new:
|
@@ -379,26 +374,28 @@ sv:
|
|
379
374
|
value_types:
|
380
375
|
organizer_presenter:
|
381
376
|
not_found: 'Arrangören hittades inte i databasen (ID: %{id})'
|
377
|
+
application_helper:
|
378
|
+
filter_category_values:
|
379
|
+
all: Alla
|
380
|
+
filter_meeting_space_values:
|
381
|
+
all: Alla
|
382
|
+
filter_scope_values:
|
383
|
+
all: Alla
|
382
384
|
calendar_modal:
|
383
385
|
calendar_url: Kalender-URL
|
384
386
|
close_window: Stäng fönster
|
385
387
|
export_calendar: Exportera kalender
|
386
388
|
conference_venues: Konferenslokaler
|
387
389
|
content_blocks:
|
388
|
-
|
389
|
-
name: Kommande
|
390
|
-
|
391
|
-
|
390
|
+
upcoming_meetings:
|
391
|
+
name: Kommande möten
|
392
|
+
upcoming_meetings: Kommande möten
|
393
|
+
view_all_meetings: Visa alla
|
392
394
|
directory:
|
393
395
|
meetings:
|
394
396
|
index:
|
395
|
-
all: Allt
|
396
|
-
date: Datum
|
397
397
|
meetings: Möten
|
398
|
-
past: Tidigare
|
399
|
-
search: Sök
|
400
398
|
space_type: Deltagarutrymme
|
401
|
-
upcoming: Kommande
|
402
399
|
last_activity:
|
403
400
|
meeting_updated_at_html: "<span>Mötet uppdaterades på %{link}</span>"
|
404
401
|
new_meeting_at_html: "<span>Nytt möte på %{link}</span>"
|
@@ -481,9 +478,12 @@ sv:
|
|
481
478
|
select_a_category: Välj en kategori
|
482
479
|
select_a_meeting_type: Välj mötestyp
|
483
480
|
select_a_registration_type: Välj en registreringsmetod
|
484
|
-
show_embedded_iframe_help: Välj om adressen ska integreras som iframe. Endast ett fåtal tjänster tillåter integrering (t.ex. Youtube, Twitch...)
|
485
481
|
index:
|
482
|
+
click_here: Se alla möten
|
486
483
|
new_meeting: Nytt möte
|
484
|
+
see_all: Se alla möten
|
485
|
+
see_all_withdrawn: Se alla tillbakadragna möten
|
486
|
+
text_banner: Du tittar på listan över möten som dragits tillbaka av sina författare. %{go_back_link}.
|
487
487
|
meeting_minutes:
|
488
488
|
related_information: Relaterad information
|
489
489
|
meetings:
|
@@ -502,6 +502,7 @@ sv:
|
|
502
502
|
close_meeting: Avsluta möte
|
503
503
|
contributions: Antal bidrag
|
504
504
|
date: Datum
|
505
|
+
edit_close_meeting: Redigera mötesrapport
|
505
506
|
edit_meeting: Redigera möte
|
506
507
|
going: Du har anmält dig för detta möte
|
507
508
|
join: Gå med i mötet
|
@@ -523,6 +524,9 @@ sv:
|
|
523
524
|
other: "%{count} platser kvar"
|
524
525
|
view: Visa
|
525
526
|
visit_finished: Visa tidigare möten
|
527
|
+
withdraw_btn_hint: Du kan dra tillbaka ditt möte om du ändrar dig. Mötet raderas inte utan kommer att synas i listan över möten som dragits tillbaka.
|
528
|
+
withdraw_confirmation_html: Är du säker på att du vill dra tillbaka det här mötet?<br><br><strong>Den här åtgärden kan inte ångras!</strong>
|
529
|
+
withdraw_meeting: Dra tillbaka möte
|
526
530
|
update:
|
527
531
|
invalid: Det gick inte att uppdatera mötet.
|
528
532
|
success: Du har uppdaterat mötet.
|
@@ -600,8 +604,12 @@ sv:
|
|
600
604
|
types:
|
601
605
|
private_meeting: Privat möte
|
602
606
|
transparent: Transparent
|
607
|
+
withdraw: Tillbakadragna
|
603
608
|
versions:
|
604
609
|
back_to_resource: Gå tillbaka till mötet
|
610
|
+
withdraw:
|
611
|
+
error: Det gick inte att dra tillbaka mötet
|
612
|
+
success: Mötet har dragits tillbaka
|
605
613
|
metrics:
|
606
614
|
meetings:
|
607
615
|
description: Antal skapade möten
|
data/config/locales/tr-TR.yml
CHANGED
@@ -326,20 +326,13 @@ tr:
|
|
326
326
|
export_calendar: Takvimi dışa aktar
|
327
327
|
conference_venues: Konferans Mekanları
|
328
328
|
content_blocks:
|
329
|
-
|
330
|
-
|
331
|
-
upcoming_events: Yaklaşan toplantılar
|
332
|
-
view_all_events: Hepsini gör
|
329
|
+
upcoming_meetings:
|
330
|
+
view_all_meetings: Hepsini gör
|
333
331
|
directory:
|
334
332
|
meetings:
|
335
333
|
index:
|
336
|
-
all: Tümü
|
337
|
-
date: Tarih
|
338
334
|
meetings: Toplantılar
|
339
|
-
past: Geçmiş
|
340
|
-
search: Arama
|
341
335
|
space_type: Katılımcı alan
|
342
|
-
upcoming: Yaklaşan
|
343
336
|
last_activity:
|
344
337
|
new_meeting_at_html: "<span>%{link} </span> adresinde yeni toplantı"
|
345
338
|
mailer:
|
data/config/locales/uk.yml
CHANGED
@@ -263,15 +263,6 @@ uk:
|
|
263
263
|
value_types:
|
264
264
|
organizer_presenter:
|
265
265
|
not_found: 'Цього організатора не знайдено в базі даних (ID: %{id})'
|
266
|
-
content_blocks:
|
267
|
-
upcoming_events:
|
268
|
-
upcoming_events: Прийдешні зустрічі
|
269
|
-
directory:
|
270
|
-
meetings:
|
271
|
-
index:
|
272
|
-
all: Усі
|
273
|
-
date: Дата
|
274
|
-
search: Шукати
|
275
266
|
mailer:
|
276
267
|
invite_join_meeting_mailer:
|
277
268
|
invite:
|
@@ -0,0 +1 @@
|
|
1
|
+
val:
|
data/config/locales/zh-CN.yml
CHANGED
@@ -304,20 +304,13 @@ zh-CN:
|
|
304
304
|
export_calendar: 导出日历
|
305
305
|
conference_venues: 会议地点
|
306
306
|
content_blocks:
|
307
|
-
|
308
|
-
|
309
|
-
upcoming_events: 即将举行的会议
|
310
|
-
view_all_events: 查看全部
|
307
|
+
upcoming_meetings:
|
308
|
+
view_all_meetings: 查看全部
|
311
309
|
directory:
|
312
310
|
meetings:
|
313
311
|
index:
|
314
|
-
all: 所有的
|
315
|
-
date: 日期
|
316
312
|
meetings: 会议
|
317
|
-
past: 过去的
|
318
|
-
search: 搜索
|
319
313
|
space_type: 参与空间
|
320
|
-
upcoming: 即将到来的
|
321
314
|
last_activity:
|
322
315
|
new_meeting_at_html: "<span>在 %{link}的新会议</span>"
|
323
316
|
mailer:
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class AddCommentsAvailabilityColumnsToMeetingsTable < ActiveRecord::Migration[6.0]
|
4
|
+
def change
|
5
|
+
add_column :decidim_meetings_meetings, :comments_enabled, :boolean, default: true
|
6
|
+
add_column :decidim_meetings_meetings, :comments_start_time, :datetime
|
7
|
+
add_column :decidim_meetings_meetings, :comments_end_time, :datetime
|
8
|
+
reversible do |dir|
|
9
|
+
dir.up do
|
10
|
+
execute "UPDATE decidim_meetings_meetings set comments_enabled = true"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class TransformShowEmbeddedIframeColumn < ActiveRecord::Migration[6.0]
|
4
|
+
def up
|
5
|
+
add_column :decidim_meetings_meetings, :iframe_embed_type, :integer, default: 0
|
6
|
+
execute "UPDATE decidim_meetings_meetings SET iframe_embed_type = 1 WHERE show_embedded_iframe = 't'"
|
7
|
+
remove_column :decidim_meetings_meetings, :show_embedded_iframe
|
8
|
+
end
|
9
|
+
|
10
|
+
def down
|
11
|
+
add_column :decidim_meetings_meetings, :show_embedded_iframe, :boolean, default: false
|
12
|
+
execute "UPDATE decidim_meetings_meetings SET show_embedded_iframe = 't' WHERE iframe_embed_type = 1"
|
13
|
+
remove_column :decidim_meetings_meetings, :iframe_embed_type
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class RenameUpcomingEventsContentBlockToUpcomingMeetings < ActiveRecord::Migration[6.0]
|
4
|
+
class ContentBlock < ApplicationRecord
|
5
|
+
self.table_name = :decidim_content_blocks
|
6
|
+
end
|
7
|
+
|
8
|
+
def change
|
9
|
+
# rubocop:disable Rails/SkipsModelValidations
|
10
|
+
ContentBlock.where(manifest_name: "upcoming_events").update_all(manifest_name: "upcoming_meetings")
|
11
|
+
# rubocop:enable Rails/SkipsModelValidations
|
12
|
+
end
|
13
|
+
end
|
@@ -28,6 +28,7 @@ module Decidim
|
|
28
28
|
end
|
29
29
|
|
30
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
|
31
32
|
field :closing_report, Decidim::Core::TranslatedFieldType, "The closing report of this meeting.", null: true
|
32
33
|
field :video_url, GraphQL::Types::String, "URL for the video of the session, if any", null: true
|
33
34
|
field :audio_url, GraphQL::Types::String, "URL for the audio of the session, if any", null: true
|
@@ -72,7 +73,7 @@ module Decidim
|
|
72
73
|
end
|
73
74
|
field :type_of_meeting, GraphQL::Types::String, "The type of the meeting (online or in-person)", null: false
|
74
75
|
field :online_meeting_url, GraphQL::Types::String, "The URL of the meeting (when the type is online)", null: false
|
75
|
-
field :
|
76
|
+
field :iframe_embed_type, GraphQL::Types::String, "The type of displaying of the online meeting URL", null: true
|
76
77
|
end
|
77
78
|
end
|
78
79
|
end
|
@@ -25,7 +25,7 @@ Decidim.register_component(:meetings) do |component|
|
|
25
25
|
end
|
26
26
|
|
27
27
|
component.register_stat :meetings_count, primary: true, priority: Decidim::StatsRegistry::MEDIUM_PRIORITY do |components, start_at, end_at|
|
28
|
-
meetings = Decidim::Meetings::FilteredMeetings.for(components, start_at, end_at)
|
28
|
+
meetings = Decidim::Meetings::FilteredMeetings.for(components, start_at, end_at).except_withdrawn
|
29
29
|
meetings.count
|
30
30
|
end
|
31
31
|
|
@@ -46,7 +46,7 @@ Decidim.register_component(:meetings) do |component|
|
|
46
46
|
.not_hidden
|
47
47
|
.visible
|
48
48
|
.where(component: component_instance)
|
49
|
-
.includes(component: { participatory_space: :organization })
|
49
|
+
.includes(:scope, :category, :attachments, component: { participatory_space: :organization })
|
50
50
|
end
|
51
51
|
|
52
52
|
exports.include_in_open_data = true
|
@@ -58,7 +58,7 @@ Decidim.register_component(:meetings) do |component|
|
|
58
58
|
exports.collection do |component_instance|
|
59
59
|
Decidim::Comments::Export.comments_for_resource(
|
60
60
|
Decidim::Meetings::Meeting, component_instance
|
61
|
-
)
|
61
|
+
).includes(:author, :user_group, root_commentable: { component: { participatory_space: :organization } })
|
62
62
|
end
|
63
63
|
|
64
64
|
exports.include_in_open_data = true
|
@@ -157,14 +157,22 @@ Decidim.register_component(:meetings) do |component|
|
|
157
157
|
_hybrid_meeting = Decidim.traceability.create!(
|
158
158
|
Decidim::Meetings::Meeting,
|
159
159
|
admin_user,
|
160
|
-
params.merge(
|
160
|
+
params.merge(
|
161
|
+
title: Decidim::Faker::Localized.sentence(word_count: 2),
|
162
|
+
type_of_meeting: :hybrid,
|
163
|
+
online_meeting_url: "http://example.org"
|
164
|
+
),
|
161
165
|
visibility: "all"
|
162
166
|
)
|
163
167
|
|
164
168
|
_online_meeting = Decidim.traceability.create!(
|
165
169
|
Decidim::Meetings::Meeting,
|
166
170
|
admin_user,
|
167
|
-
params.merge(
|
171
|
+
params.merge(
|
172
|
+
title: Decidim::Faker::Localized.sentence(word_count: 2),
|
173
|
+
type_of_meeting: :online,
|
174
|
+
online_meeting_url: "http://example.org"
|
175
|
+
),
|
168
176
|
visibility: "all"
|
169
177
|
)
|
170
178
|
|
@@ -22,9 +22,9 @@ module Decidim
|
|
22
22
|
end
|
23
23
|
|
24
24
|
initializer "decidim.meetings.content_blocks" do
|
25
|
-
Decidim.content_blocks.register(:homepage, :
|
26
|
-
content_block.cell = "decidim/meetings/content_blocks/
|
27
|
-
content_block.public_name_key = "decidim.meetings.content_blocks.
|
25
|
+
Decidim.content_blocks.register(:homepage, :upcoming_meetings) do |content_block|
|
26
|
+
content_block.cell = "decidim/meetings/content_blocks/upcoming_meetings"
|
27
|
+
content_block.public_name_key = "decidim.meetings.content_blocks.upcoming_meetings.name"
|
28
28
|
content_block.default!
|
29
29
|
end
|
30
30
|
end
|
@@ -13,7 +13,10 @@ module Decidim
|
|
13
13
|
isolate_namespace Decidim::Meetings
|
14
14
|
|
15
15
|
routes do
|
16
|
-
resources :meetings, only: [:index, :show, :new, :create, :edit, :update] do
|
16
|
+
resources :meetings, only: [:index, :show, :new, :create, :edit, :update, :withdraw] do
|
17
|
+
member do
|
18
|
+
put :withdraw
|
19
|
+
end
|
17
20
|
resources :meeting_closes, only: [:edit, :update] do
|
18
21
|
get :proposals_picker, on: :collection
|
19
22
|
end
|
@@ -41,8 +41,8 @@ module Decidim
|
|
41
41
|
location: meeting.location,
|
42
42
|
reference: meeting.reference,
|
43
43
|
comments: meeting.comments_count,
|
44
|
-
attachments: meeting.attachments.
|
45
|
-
followers: meeting.
|
44
|
+
attachments: meeting.attachments.size,
|
45
|
+
followers: meeting.follows.size,
|
46
46
|
url: url,
|
47
47
|
related_proposals: related_proposals,
|
48
48
|
related_results: related_results
|
@@ -37,7 +37,8 @@ FactoryBot.define do
|
|
37
37
|
registration_type { :on_this_platform }
|
38
38
|
type_of_meeting { :in_person }
|
39
39
|
component { build(:component, manifest_name: "meetings") }
|
40
|
-
|
40
|
+
iframe_access_level { :all }
|
41
|
+
iframe_embed_type { :none }
|
41
42
|
|
42
43
|
author do
|
43
44
|
component.try(:organization)
|
@@ -47,6 +48,10 @@ FactoryBot.define do
|
|
47
48
|
published_at { Time.current }
|
48
49
|
end
|
49
50
|
|
51
|
+
trait :withdrawn do
|
52
|
+
state { "withdrawn" }
|
53
|
+
end
|
54
|
+
|
50
55
|
trait :in_person do
|
51
56
|
type_of_meeting { :in_person }
|
52
57
|
end
|
@@ -135,8 +140,24 @@ FactoryBot.define do
|
|
135
140
|
published_at { Time.current }
|
136
141
|
end
|
137
142
|
|
138
|
-
trait :
|
139
|
-
|
143
|
+
trait :signed_in_iframe_access_level do
|
144
|
+
iframe_access_level { :signed_in }
|
145
|
+
end
|
146
|
+
|
147
|
+
trait :registered_iframe_access_level do
|
148
|
+
iframe_access_level { :registered }
|
149
|
+
end
|
150
|
+
|
151
|
+
trait :embed_in_meeting_page_iframe_embed_type do
|
152
|
+
iframe_embed_type { :embed_in_meeting_page }
|
153
|
+
end
|
154
|
+
|
155
|
+
trait :open_in_live_event_page_iframe_embed_type do
|
156
|
+
iframe_embed_type { :open_in_live_event_page }
|
157
|
+
end
|
158
|
+
|
159
|
+
trait :open_in_new_tab_iframe_embed_type do
|
160
|
+
iframe_embed_type { :open_in_new_tab }
|
140
161
|
end
|
141
162
|
end
|
142
163
|
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
shared_examples_for "emits an upcoming notificaton" do
|
4
|
+
context "when it's a future meeting" do
|
5
|
+
let(:future_start_date) { 3.days.from_now }
|
6
|
+
|
7
|
+
before do
|
8
|
+
meeting.start_time = future_start_date
|
9
|
+
end
|
10
|
+
|
11
|
+
it "schedules a upcoming meeting notification job 48h before start time" do
|
12
|
+
expect(Decidim::Meetings::UpcomingMeetingNotificationJob)
|
13
|
+
.to receive(:generate_checksum).and_return "1234"
|
14
|
+
|
15
|
+
expect(Decidim::Meetings::UpcomingMeetingNotificationJob)
|
16
|
+
.to receive_message_chain(:set, :perform_later) # rubocop:disable RSpec/MessageChain
|
17
|
+
.with(set: meeting.start_time - Decidim::Meetings.upcoming_meeting_notification)
|
18
|
+
.with(kind_of(Integer), "1234")
|
19
|
+
|
20
|
+
subject.call
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "when it's a past meeting" do
|
25
|
+
let(:past_start_date) { 1.day.ago }
|
26
|
+
|
27
|
+
before do
|
28
|
+
meeting.start_time = past_start_date
|
29
|
+
end
|
30
|
+
|
31
|
+
it "doesn't schedule an upcoming meeting notification" do
|
32
|
+
expect(Decidim::Meetings::UpcomingMeetingNotificationJob).not_to receive(:generate_checksum)
|
33
|
+
expect(Decidim::Meetings::UpcomingMeetingNotificationJob).not_to receive(:set)
|
34
|
+
expect(Decidim::Meetings::UpcomingMeetingNotificationJob).not_to receive(:perform_later)
|
35
|
+
|
36
|
+
subject.call
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
shared_examples_for "a translated meeting event" do
|
4
|
+
describe "translated notifications" do
|
5
|
+
let(:en_body) { "This is Sparta!" }
|
6
|
+
let(:body) { { "en": en_body, "machine_translations": { "ca": "C'est Sparta!" } } }
|
7
|
+
let(:participatory_process) { create :participatory_process, organization: organization }
|
8
|
+
let(:meeting_component) { create(:meeting_component, participatory_space: participatory_process) }
|
9
|
+
let(:translatable) { true }
|
10
|
+
let(:en_version) { resource.description["en"] }
|
11
|
+
let(:machine_translated) { resource.description["machine_translations"]["ca"] }
|
12
|
+
|
13
|
+
let(:resource) do
|
14
|
+
create :meeting,
|
15
|
+
component: meeting_component,
|
16
|
+
title: { "en": "A nice event", "machine_translations": { "ca": "Une belle event" } },
|
17
|
+
description: body
|
18
|
+
end
|
19
|
+
|
20
|
+
it_behaves_like "a translated event"
|
21
|
+
end
|
22
|
+
end
|
data/lib/decidim/meetings.rb
CHANGED
@@ -23,5 +23,10 @@ module Decidim
|
|
23
23
|
config_accessor :enable_proposal_linking do
|
24
24
|
Decidim.const_defined?("Proposals")
|
25
25
|
end
|
26
|
+
|
27
|
+
# Public Setting that defines the interval when the upcoming meeting will be sent
|
28
|
+
config_accessor :upcoming_meeting_notification do
|
29
|
+
2.days
|
30
|
+
end
|
26
31
|
end
|
27
32
|
end
|