decidim-meetings 0.14.4 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -0
  3. data/app/assets/config/{admin/decidim_meetings_manifest.js → decidim_meetings_manifest.js} +1 -0
  4. data/app/assets/images/decidim/gamification/badges/attended_meetings.svg +106 -0
  5. data/app/cells/decidim/meetings/content_blocks/upcoming_events/show.erb +26 -0
  6. data/app/cells/decidim/meetings/content_blocks/upcoming_events_cell.rb +52 -0
  7. data/app/cells/decidim/meetings/meeting_activity_cell.rb +19 -0
  8. data/app/cells/decidim/meetings/meeting_cell.rb +6 -0
  9. data/app/cells/decidim/meetings/meeting_list_item_cell.rb +1 -1
  10. data/app/cells/decidim/meetings/meeting_m/address.erb +1 -14
  11. data/app/cells/decidim/meetings/meeting_m_cell.rb +7 -3
  12. data/app/cells/decidim/meetings/meeting_s/show.erb +27 -0
  13. data/app/cells/decidim/meetings/meeting_s_cell.rb +31 -0
  14. data/app/cells/decidim/meetings/meetings_map/show.erb +33 -0
  15. data/app/cells/decidim/meetings/meetings_map_cell.rb +23 -0
  16. data/app/commands/decidim/meetings/admin/create_meeting.rb +12 -5
  17. data/app/commands/decidim/meetings/admin/update_meeting.rb +5 -2
  18. data/app/commands/decidim/meetings/join_meeting.rb +5 -0
  19. data/app/commands/decidim/meetings/leave_meeting.rb +5 -0
  20. data/app/controllers/decidim/meetings/admin/application_controller.rb +1 -0
  21. data/app/controllers/decidim/meetings/admin/registrations_controller.rb +1 -0
  22. data/app/controllers/decidim/meetings/directory/meetings_controller.rb +73 -0
  23. data/app/controllers/decidim/meetings/meetings_controller.rb +8 -6
  24. data/app/helpers/decidim/meetings/map_helper.rb +4 -3
  25. data/app/helpers/decidim/meetings/meeting_cells_helper.rb +0 -1
  26. data/app/helpers/decidim/meetings/meetings_helper.rb +1 -1
  27. data/app/mailers/decidim/meetings/admin/invite_join_meeting_mailer.rb +2 -0
  28. data/app/mailers/decidim/meetings/registration_mailer.rb +4 -2
  29. data/app/models/decidim/meetings/meeting.rb +3 -0
  30. data/app/presenters/decidim/meetings/admin_log/meeting_presenter.rb +6 -2
  31. data/app/presenters/decidim/meetings/admin_log/value_types/meeting_title_description_presenter.rb +20 -0
  32. data/app/presenters/decidim/meetings/log/resource_presenter.rb +18 -0
  33. data/app/presenters/decidim/meetings/meeting_presenter.rb +40 -0
  34. data/app/queries/decidim/meetings/metrics/meetings_metric_manage.rb +53 -0
  35. data/app/services/decidim/meetings/meeting_search.rb +8 -1
  36. data/app/views/decidim/meetings/admin/agenda/_form.html.erb +1 -1
  37. data/app/views/decidim/meetings/admin/invite_join_meeting_mailer/invite.html.erb +2 -2
  38. data/app/views/decidim/meetings/admin/meeting_closes/_form.html.erb +3 -3
  39. data/app/views/decidim/meetings/admin/meeting_copies/_form.html.erb +2 -2
  40. data/app/views/decidim/meetings/admin/meetings/_form.html.erb +4 -4
  41. data/app/views/decidim/meetings/admin/meetings/index.html.erb +1 -1
  42. data/app/views/decidim/meetings/directory/meetings/_meetings.html.erb +14 -0
  43. data/app/views/decidim/meetings/directory/meetings/index.html.erb +34 -0
  44. data/app/views/decidim/meetings/directory/meetings/index.js.erb +11 -0
  45. data/app/views/decidim/meetings/meeting_widgets/show.html.erb +1 -1
  46. data/app/views/decidim/meetings/meetings/_linked_meetings.html.erb +2 -2
  47. data/app/views/decidim/meetings/meetings/index.html.erb +1 -33
  48. data/app/views/decidim/meetings/meetings/index.js.erb +1 -1
  49. data/app/views/decidim/meetings/meetings/show.html.erb +5 -5
  50. data/app/views/decidim/meetings/registration_mailer/confirmation.html.erb +1 -1
  51. data/app/views/decidim/participatory_processes/participatory_process_groups/_meeting.html.erb +1 -1
  52. data/app/views/decidim/participatory_spaces/_conference_venues.html.erb +20 -0
  53. data/config/locales/ca.yml +37 -2
  54. data/config/locales/de.yml +37 -0
  55. data/config/locales/en.yml +37 -2
  56. data/config/locales/es-PY.yml +37 -2
  57. data/config/locales/es.yml +37 -2
  58. data/config/locales/eu.yml +37 -0
  59. data/config/locales/fi.yml +37 -2
  60. data/config/locales/fr.yml +37 -0
  61. data/config/locales/gl.yml +37 -0
  62. data/config/locales/hu.yml +37 -0
  63. data/config/locales/it.yml +37 -0
  64. data/config/locales/nl.yml +37 -0
  65. data/config/locales/pl.yml +37 -0
  66. data/config/locales/pt-BR.yml +37 -0
  67. data/config/locales/pt.yml +37 -0
  68. data/config/locales/ru.yml +1 -0
  69. data/config/locales/sv.yml +37 -0
  70. data/config/locales/uk.yml +1 -0
  71. data/db/migrate/20180809134748_add_upcoming_events_as_content_block.rb +27 -0
  72. data/lib/decidim/meetings/admin_engine.rb +0 -4
  73. data/lib/decidim/meetings/component.rb +30 -3
  74. data/lib/decidim/meetings/directory.rb +10 -0
  75. data/lib/decidim/meetings/directory_engine.rb +32 -0
  76. data/lib/decidim/meetings/engine.rb +38 -1
  77. data/lib/decidim/meetings/seeds/city.jpeg +0 -0
  78. data/lib/decidim/meetings/test/factories.rb +13 -12
  79. data/lib/decidim/meetings/version.rb +1 -1
  80. data/lib/decidim/meetings.rb +2 -1
  81. metadata +34 -14
@@ -20,6 +20,7 @@ it:
20
20
  end_time: Orario fine
21
21
  location: Luogo
22
22
  location_hints: Informazione sul luogo
23
+ organizer_id: Organizzatore
23
24
  private_meeting: Incontro privato
24
25
  registration_terms: Termini di registrazione
25
26
  registrations_enabled: Registrazioni abilitate
@@ -121,6 +122,18 @@ it:
121
122
  email_outro: Hai ricevuto questa notifica perché stai seguendo la riunione "%{resource_title}". Puoi smettere di seguirlo dal link precedente.
122
123
  email_subject: La riunione "%{resource_title}" inizierà tra meno di 48 ore.
123
124
  notification_title: La riunione <a href="%{resource_path}">%{resource_title}</a> inizierà tra meno di 48 ore.
125
+ gamification:
126
+ badges:
127
+ attended_meetings:
128
+ conditions:
129
+ - Registrati negli incontri a cui vuoi partecipare
130
+ description: Questo badge è concesso quando si partecipano a numerosi incontri faccia a faccia.
131
+ description_another: Questo utente ha partecipato a %{score} riunioni.
132
+ description_own: Hai partecipato a %{score} riunioni.
133
+ name: Riunioni frequentate
134
+ next_level_in: Partecipa a %{score} altri incontri per raggiungere il livello successivo!
135
+ unearned_another: Questo utente non ha ancora partecipato a nessuna riunione.
136
+ unearned_own: Non hai ancora partecipato a nessuna riunione.
124
137
  meetings:
125
138
  actions:
126
139
  agenda: ordine del giorno
@@ -284,6 +297,24 @@ it:
284
297
  minutes:
285
298
  create: "%{user_name} ha creato i minuti della riunione %{resource_name} nello spazio %{space_name}"
286
299
  update: "%{user_name} ha aggiornato i minuti della riunione %{resource_name} nello spazio %{space_name}"
300
+ conference_venues: Sale per conferenze
301
+ content_blocks:
302
+ upcoming_events:
303
+ name: Prossimi eventi
304
+ upcoming_events: Prossimi incontri
305
+ view_all_events: Guarda tutto
306
+ directory:
307
+ meetings:
308
+ index:
309
+ all: Tutti
310
+ date: Data
311
+ meetings: incontri
312
+ past: Passato
313
+ search: Ricerca
314
+ space_type: Spazio partecipativo
315
+ upcoming: Prossime
316
+ last_activity:
317
+ new_meeting_at_html: "<span>Nuovo incontro al %{link}</span>"
287
318
  mailer:
288
319
  invite_join_meeting_mailer:
289
320
  invite:
@@ -327,6 +358,8 @@ it:
327
358
  one: 1 slot restanti
328
359
  other: "%{count} slot rimanenti"
329
360
  view: vista
361
+ meetings_map:
362
+ view_meeting: Guarda la riunione
330
363
  models:
331
364
  invite:
332
365
  fields:
@@ -364,6 +397,10 @@ it:
364
397
  types:
365
398
  private_meeting: Incontro privato
366
399
  transparent: Trasparente
400
+ metrics:
401
+ meetings:
402
+ object: incontri
403
+ title: incontri
367
404
  participatory_processes:
368
405
  participatory_process_groups:
369
406
  highlighted_meetings:
@@ -20,6 +20,7 @@ nl:
20
20
  end_time: Eindtijd
21
21
  location: Plaats
22
22
  location_hints: Locatie hints
23
+ organizer_id: Organisator
23
24
  private_meeting: Privé vergadering
24
25
  registration_terms: Registratievoorwaarden
25
26
  registrations_enabled: Registraties geactiveerd
@@ -121,6 +122,18 @@ nl:
121
122
  email_outro: Je ontvangt deze melding omdat je het event "%{resource_title}" volgt. Ontvolgen kan door te klikken op de voorgaande link.
122
123
  email_subject: Het "%{resource_title}" event start in minder dan 48 uur.
123
124
  notification_title: Het <a href="%{resource_path}">%{resource_title}</a> event begint over minder dan 48 uur.
125
+ gamification:
126
+ badges:
127
+ attended_meetings:
128
+ conditions:
129
+ - Registreer u in de vergaderingen die u wilt bijwonen
130
+ description: Deze badge wordt toegekend wanneer u verschillende persoonlijke vergaderingen bijwoont.
131
+ description_another: Deze gebruiker heeft %{score} vergaderingen bijgewoond.
132
+ description_own: U hebt %{score} vergaderingen bijgewoond.
133
+ name: Bijgewoond vergaderingen
134
+ next_level_in: Woon nog %{score} vergaderingen bij om het volgende niveau te bereiken!
135
+ unearned_another: Deze gebruiker heeft nog geen enkele vergadering bijgewoond.
136
+ unearned_own: U hebt nog geen vergadering bijgewoond.
124
137
  meetings:
125
138
  actions:
126
139
  agenda: Agenda
@@ -284,6 +297,24 @@ nl:
284
297
  minutes:
285
298
  create: "%{user_name} heeft de minuten van de vergadering %{resource_name} gemaakt op de %{space_name} spatie"
286
299
  update: "%{user_name} heeft de notulen van de vergadering %{resource_name} op de %{space_name} -spatie bijgewerkt"
300
+ conference_venues: Conferentie locaties
301
+ content_blocks:
302
+ upcoming_events:
303
+ name: Aankomende evenementen
304
+ upcoming_events: Komende vergaderingen
305
+ view_all_events: Bekijk alles
306
+ directory:
307
+ meetings:
308
+ index:
309
+ all: Alle
310
+ date: Datum
311
+ meetings: vergaderingen
312
+ past: Verleden
313
+ search: Zoeken
314
+ space_type: Participatieve ruimte
315
+ upcoming: Aankomende
316
+ last_activity:
317
+ new_meeting_at_html: "<span>Nieuwe vergadering op %{link}</span>"
287
318
  mailer:
288
319
  invite_join_meeting_mailer:
289
320
  invite:
@@ -327,6 +358,8 @@ nl:
327
358
  one: 1 plaats resterend
328
359
  other: "%{count} resterende plaatsen"
329
360
  view: Uitzicht
361
+ meetings_map:
362
+ view_meeting: Bekijk vergadering
330
363
  models:
331
364
  invite:
332
365
  fields:
@@ -364,6 +397,10 @@ nl:
364
397
  types:
365
398
  private_meeting: Privé vergadering
366
399
  transparent: Transparant
400
+ metrics:
401
+ meetings:
402
+ object: vergaderingen
403
+ title: vergaderingen
367
404
  participatory_processes:
368
405
  participatory_process_groups:
369
406
  highlighted_meetings:
@@ -20,6 +20,7 @@ pl:
20
20
  end_time: Czas zakończenia
21
21
  location: Miejsce
22
22
  location_hints: Wskazówki co do miejsca
23
+ organizer_id: Organizator
23
24
  private_meeting: Prywatne spotkanie
24
25
  registration_terms: Warunki rejestracji
25
26
  registrations_enabled: Rejestracje włączone
@@ -127,6 +128,18 @@ pl:
127
128
  email_outro: Otrzymałeś to powiadomienie, ponieważ obserwujesz spotkanie "%{resource_title}". Możesz przestać go obserwować z poprzedniego linku.
128
129
  email_subject: Spotkanie "%{resource_title}" rozpocznie się za mniej niż 48 godzin.
129
130
  notification_title: Spotkanie <a href="%{resource_path}">%{resource_title}</a> rozpocznie się za mniej niż 48 godzin.
131
+ gamification:
132
+ badges:
133
+ attended_meetings:
134
+ conditions:
135
+ - Zarejestruj się na spotkaniach, które chcesz wziąć udział
136
+ description: Ta odznaka jest przyznawana, gdy bierzesz udział w kilku spotkaniach twarzą w twarz.
137
+ description_another: Ten użytkownik uczestniczył w %{score} spotkaniach.
138
+ description_own: Brałeś udział w %{score} spotkaniach.
139
+ name: Udział w spotkaniach
140
+ next_level_in: Weź udział w %{score} dodatkowych spotkaniach, aby przejść do następnego poziomu!
141
+ unearned_another: Ten użytkownik nie uczestniczył jeszcze w żadnym spotkaniu.
142
+ unearned_own: Nie uczestniczyłeś jeszcze w żadnym spotkaniu.
130
143
  meetings:
131
144
  actions:
132
145
  agenda: Program
@@ -292,6 +305,24 @@ pl:
292
305
  minutes:
293
306
  create: "%{user_name} utworzył minuty spotkania %{resource_name} na przestrzeni %{space_name}"
294
307
  update: "%{user_name} zaktualizował minuty spotkania %{resource_name} na przestrzeni %{space_name}"
308
+ conference_venues: Sale konferencyjne
309
+ content_blocks:
310
+ upcoming_events:
311
+ name: Nadchodzące wydarzenia
312
+ upcoming_events: Nadchodzące spotkania
313
+ view_all_events: Pokaż wszystkie
314
+ directory:
315
+ meetings:
316
+ index:
317
+ all: Wszystko
318
+ date: Data
319
+ meetings: Spotkania
320
+ past: Przeszłość
321
+ search: Szukaj
322
+ space_type: Przestrzeń uczestnicząca
323
+ upcoming: Nadchodzące
324
+ last_activity:
325
+ new_meeting_at_html: "<span>Nowe spotkanie o %{link}</span>"
295
326
  mailer:
296
327
  invite_join_meeting_mailer:
297
328
  invite:
@@ -337,6 +368,8 @@ pl:
337
368
  many: "Pozostało %{count} gniazd"
338
369
  other: "Pozostało %{count}"
339
370
  view: Widok
371
+ meetings_map:
372
+ view_meeting: Zobacz spotkanie
340
373
  models:
341
374
  invite:
342
375
  fields:
@@ -374,6 +407,10 @@ pl:
374
407
  types:
375
408
  private_meeting: Prywatne spotkanie
376
409
  transparent: Przezroczysty
410
+ metrics:
411
+ meetings:
412
+ object: spotkania
413
+ title: Spotkania
377
414
  participatory_processes:
378
415
  participatory_process_groups:
379
416
  highlighted_meetings:
@@ -20,6 +20,7 @@ pt-BR:
20
20
  end_time: Fim do tempo
21
21
  location: Localização
22
22
  location_hints: Dicas de localização
23
+ organizer_id: Organizador
23
24
  private_meeting: Reunião privada
24
25
  registration_terms: Termos de registro
25
26
  registrations_enabled: Registos habilitados
@@ -121,6 +122,18 @@ pt-BR:
121
122
  email_outro: Você recebeu esta notificação porque está seguindo a reunião "%{resource_title}". Você pode ignorá-lo do link anterior.
122
123
  email_subject: A reunião "%{resource_title}" começará em menos de 48h.
123
124
  notification_title: A reunião <a href="%{resource_path}">%{resource_title}</a> começará em menos de 48h.
125
+ gamification:
126
+ badges:
127
+ attended_meetings:
128
+ conditions:
129
+ - Registre-se nas reuniões que você deseja participar
130
+ description: Este selo é concedido quando você participa de várias reuniões presenciais.
131
+ description_another: Este usuário assistiu a %{score} reuniões.
132
+ description_own: Você participou de %{score} reuniões.
133
+ name: Participou de reuniões
134
+ next_level_in: Participe de mais %{score} reuniões para alcançar o próximo nível!
135
+ unearned_another: Este usuário ainda não participou de nenhuma reunião.
136
+ unearned_own: Você não participou de nenhuma reunião ainda.
124
137
  meetings:
125
138
  actions:
126
139
  agenda: Agenda
@@ -284,6 +297,24 @@ pt-BR:
284
297
  minutes:
285
298
  create: "%{user_name} criou a ata da reunião %{resource_name} no espaço %{space_name}"
286
299
  update: "%{user_name} atualizou a ata da reunião %{resource_name} no espaço %{space_name}"
300
+ conference_venues: Locais de conferência
301
+ content_blocks:
302
+ upcoming_events:
303
+ name: Próximos eventos
304
+ upcoming_events: Próximos encontros
305
+ view_all_events: Ver tudo
306
+ directory:
307
+ meetings:
308
+ index:
309
+ all: Todos
310
+ date: Encontro
311
+ meetings: Reuniões
312
+ past: Passado
313
+ search: Pesquisa
314
+ space_type: Espaço participativo
315
+ upcoming: próximos
316
+ last_activity:
317
+ new_meeting_at_html: "<span>Nova reunião em %{link}</span>"
287
318
  mailer:
288
319
  invite_join_meeting_mailer:
289
320
  invite:
@@ -327,6 +358,8 @@ pt-BR:
327
358
  one: 1 slot restante
328
359
  other: "%{count} slots restantes"
329
360
  view: Visualizar
361
+ meetings_map:
362
+ view_meeting: Ver reunião
330
363
  models:
331
364
  invite:
332
365
  fields:
@@ -364,6 +397,10 @@ pt-BR:
364
397
  types:
365
398
  private_meeting: Reunião privada
366
399
  transparent: Transparente
400
+ metrics:
401
+ meetings:
402
+ object: reuniões
403
+ title: Reuniões
367
404
  participatory_processes:
368
405
  participatory_process_groups:
369
406
  highlighted_meetings:
@@ -20,6 +20,7 @@ pt:
20
20
  end_time: Fim do tempo
21
21
  location: Localização
22
22
  location_hints: Dicas de localização
23
+ organizer_id: Organizador
23
24
  private_meeting: Reunião privada
24
25
  registration_terms: Termos de registro
25
26
  registrations_enabled: Registos habilitados
@@ -121,6 +122,18 @@ pt:
121
122
  email_outro: Você recebeu esta notificação porque está seguindo a reunião "%{resource_title}". Você pode ignorá-lo do link anterior.
122
123
  email_subject: A reunião "%{resource_title}" começará em menos de 48h.
123
124
  notification_title: A reunião <a href="%{resource_path}">%{resource_title}</a> começará em menos de 48h.
125
+ gamification:
126
+ badges:
127
+ attended_meetings:
128
+ conditions:
129
+ - Registre-se nas reuniões que deseja participar
130
+ description: Este crachá é concedido quando você participa de várias reuniões presenciais.
131
+ description_another: Este usuário assistiu a %{score} reuniões.
132
+ description_own: Você participou de %{score} reuniões.
133
+ name: Participou de reuniões
134
+ next_level_in: Participe de mais %{score} reuniões para alcançar o próximo nível!
135
+ unearned_another: Este usuário ainda não participou de nenhuma reunião.
136
+ unearned_own: Você não participou de nenhuma reunião ainda.
124
137
  meetings:
125
138
  actions:
126
139
  agenda: Agenda
@@ -284,6 +297,24 @@ pt:
284
297
  minutes:
285
298
  create: "%{user_name} criou a ata da reunião %{resource_name} no espaço %{space_name}"
286
299
  update: "%{user_name} atualizou a ata da reunião %{resource_name} no espaço %{space_name}"
300
+ conference_venues: Locais de conferência
301
+ content_blocks:
302
+ upcoming_events:
303
+ name: Próximos eventos
304
+ upcoming_events: Próximos encontros
305
+ view_all_events: Ver tudo
306
+ directory:
307
+ meetings:
308
+ index:
309
+ all: Todos
310
+ date: Encontro
311
+ meetings: Reuniões
312
+ past: Passado
313
+ search: Pesquisa
314
+ space_type: Espaço participativo
315
+ upcoming: próximos
316
+ last_activity:
317
+ new_meeting_at_html: "<span>Nova reunião em %{link}</span>"
287
318
  mailer:
288
319
  invite_join_meeting_mailer:
289
320
  invite:
@@ -327,6 +358,8 @@ pt:
327
358
  one: 1 slot restante
328
359
  other: "%{count} slots restantes"
329
360
  view: Visão
361
+ meetings_map:
362
+ view_meeting: Ver reunião
330
363
  models:
331
364
  invite:
332
365
  fields:
@@ -364,6 +397,10 @@ pt:
364
397
  types:
365
398
  private_meeting: Reunião privada
366
399
  transparent: Transparente
400
+ metrics:
401
+ meetings:
402
+ object: reuniões
403
+ title: Reuniões
367
404
  participatory_processes:
368
405
  participatory_process_groups:
369
406
  highlighted_meetings:
@@ -20,6 +20,7 @@ ru:
20
20
  end_time: Время окончания
21
21
  location: Место
22
22
  location_hints: Как добраться
23
+ organizer_id: Организация
23
24
  private_meeting: Частная встреча
24
25
  registration_terms: Условия регистрации
25
26
  registrations_enabled: Регистрация включена
@@ -20,6 +20,7 @@ sv:
20
20
  end_time: Sluttid
21
21
  location: Plats
22
22
  location_hints: Platstips
23
+ organizer_id: Arrangör
23
24
  private_meeting: Privat möte
24
25
  registration_terms: Registreringsvillkor
25
26
  registrations_enabled: Registreringar aktiverade
@@ -121,6 +122,18 @@ sv:
121
122
  email_outro: Du har fått den här meddelandet eftersom du följer mötet "%{resource_title}". Du kan sluta följa det på föregående länk.
122
123
  email_subject: Mötet "%{resource_title}" börjar om färre än 48 timmar.
123
124
  notification_title: Mötet <a href="%{resource_path}">%{resource_title}</a> startar inom mindre än 48 timmar.
125
+ gamification:
126
+ badges:
127
+ attended_meetings:
128
+ conditions:
129
+ - Registrera dig i de möten du vill delta i
130
+ description: Detta märke beviljas när du deltar i flera möten mellan ansikte mot ansikte.
131
+ description_another: Den här användaren har deltagit i %{score} möten.
132
+ description_own: Du har deltagit i %{score} möten.
133
+ name: Deltog i möten
134
+ next_level_in: Delta i %{score} fler möten för att nå nästa nivå!
135
+ unearned_another: Den här användaren har inte deltagit i något möte än.
136
+ unearned_own: Du har inte deltagit i något möte än.
124
137
  meetings:
125
138
  actions:
126
139
  agenda: Dagordning
@@ -284,6 +297,24 @@ sv:
284
297
  minutes:
285
298
  create: "%{user_name} skapade protokollet från mötet %{resource_name} på plats %{space_name}"
286
299
  update: "%{user_name} uppdaterade protokollet från mötet %{resource_name} på plats %{space_name}"
300
+ conference_venues: Konferenslokaler
301
+ content_blocks:
302
+ upcoming_events:
303
+ name: Uppkommande händelser
304
+ upcoming_events: Kommande möten
305
+ view_all_events: Visa alla
306
+ directory:
307
+ meetings:
308
+ index:
309
+ all: Allt
310
+ date: Datum
311
+ meetings: möten
312
+ past: Dåtid
313
+ search: Sök
314
+ space_type: Deltagande utrymme
315
+ upcoming: kommande
316
+ last_activity:
317
+ new_meeting_at_html: "<span>Nytt möte på %{link}</span>"
287
318
  mailer:
288
319
  invite_join_meeting_mailer:
289
320
  invite:
@@ -327,6 +358,8 @@ sv:
327
358
  one: 1 plats kvar
328
359
  other: "%{count} platser kvar"
329
360
  view: Visa
361
+ meetings_map:
362
+ view_meeting: Visa möte
330
363
  models:
331
364
  invite:
332
365
  fields:
@@ -364,6 +397,10 @@ sv:
364
397
  types:
365
398
  private_meeting: Privat möte
366
399
  transparent: Transparent
400
+ metrics:
401
+ meetings:
402
+ object: möten
403
+ title: möten
367
404
  participatory_processes:
368
405
  participatory_process_groups:
369
406
  highlighted_meetings:
@@ -20,6 +20,7 @@ uk:
20
20
  end_time: Час завершення
21
21
  location: Розташування
22
22
  location_hints: Як дістатися до цього місця
23
+ organizer_id: Організатор
23
24
  private_meeting: Приватна зустріч
24
25
  registration_terms: Умови реєстрації
25
26
  registrations_enabled: Реєстрацію відкрито
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddUpcomingEventsAsContentBlock < ActiveRecord::Migration[5.2]
4
+ class Organization < ApplicationRecord
5
+ self.table_name = :decidim_organizations
6
+ end
7
+
8
+ class ContentBlock < ApplicationRecord
9
+ self.table_name = :decidim_content_blocks
10
+ end
11
+
12
+ def change
13
+ Organization.find_each do |organization|
14
+ next if ContentBlock.where(decidim_organization_id: organization.id).where(manifest_name: "upcoming_events").exists?
15
+
16
+ last_weight = ContentBlock.where(decidim_organization_id: organization.id).order("weight DESC").limit(1).pluck(:weight).last.to_i
17
+
18
+ ContentBlock.create!(
19
+ decidim_organization_id: organization.id,
20
+ weight: last_weight,
21
+ scope: :homepage,
22
+ manifest_name: :upcoming_events,
23
+ published_at: Time.current
24
+ )
25
+ end
26
+ end
27
+ end
@@ -33,10 +33,6 @@ module Decidim
33
33
  def load_seed
34
34
  nil
35
35
  end
36
-
37
- initializer "decidim_meetings.assets" do |app|
38
- app.config.assets.precompile += %w(admin/decidim_meetings_manifest.js)
39
- end
40
36
  end
41
37
  end
42
38
  end
@@ -44,12 +44,26 @@ Decidim.register_component(:meetings) do |component|
44
44
  end
45
45
 
46
46
  component.seeds do |participatory_space|
47
- component = Decidim::Component.create!(
47
+ admin_user = Decidim::User.find_by(
48
+ organization: participatory_space.organization,
49
+ email: "admin@example.org"
50
+ )
51
+
52
+ params = {
48
53
  name: Decidim::Components::Namer.new(participatory_space.organization.available_locales, :meetings).i18n_name,
49
54
  published_at: Time.current,
50
55
  manifest_name: :meetings,
51
56
  participatory_space: participatory_space
52
- )
57
+ }
58
+
59
+ component = Decidim.traceability.perform_action!(
60
+ "publish",
61
+ Decidim::Component,
62
+ admin_user,
63
+ visibility: "all"
64
+ ) do
65
+ Decidim::Component.create!(params)
66
+ end
53
67
 
54
68
  if participatory_space.scope
55
69
  scopes = participatory_space.scope.descendants
@@ -60,7 +74,7 @@ Decidim.register_component(:meetings) do |component|
60
74
  end
61
75
 
62
76
  2.times do
63
- meeting = Decidim::Meetings::Meeting.create!(
77
+ params = {
64
78
  component: component,
65
79
  scope: Faker::Boolean.boolean(0.5) ? global : scopes.sample,
66
80
  category: participatory_space.categories.sample,
@@ -84,6 +98,13 @@ Decidim.register_component(:meetings) do |component|
84
98
  { title: Decidim::Faker::Localized.sentence(2), description: Decidim::Faker::Localized.sentence(5) },
85
99
  { title: Decidim::Faker::Localized.sentence(2), description: Decidim::Faker::Localized.sentence(5) }
86
100
  ]
101
+ }
102
+
103
+ meeting = Decidim.traceability.create!(
104
+ Decidim::Meetings::Meeting,
105
+ admin_user,
106
+ params,
107
+ visibility: "all"
87
108
  )
88
109
 
89
110
  2.times do |n|
@@ -137,3 +158,9 @@ Decidim.register_component(:meetings) do |component|
137
158
  end
138
159
  end
139
160
  end
161
+
162
+ Decidim.register_global_engine(
163
+ :meetings_directory,
164
+ Decidim::Meetings::DirectoryEngine,
165
+ at: "/meetings"
166
+ )
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Meetings
5
+ # This module contains all the domain logic associated to Decidim's Meetings
6
+ # component admin panel.
7
+ module Directory
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Meetings
5
+ # This is the engine that runs on the public interface of `decidim-meetings`.
6
+ # It mostly handles rendering the created meeting associated to a participatory
7
+ # process.
8
+ class DirectoryEngine < ::Rails::Engine
9
+ isolate_namespace Decidim::Meetings::Directory
10
+
11
+ paths["db/migrate"] = nil
12
+ paths["lib/tasks"] = nil
13
+
14
+ routes do
15
+ resources :meetings, only: [:index], format: :html
16
+ root to: "meetings#index", format: :html
17
+ end
18
+
19
+ def load_seed
20
+ nil
21
+ end
22
+
23
+ initializer "decidim.meetings.content_blocks" do
24
+ Decidim.content_blocks.register(:homepage, :upcoming_events) do |content_block|
25
+ content_block.cell = "decidim/meetings/content_blocks/upcoming_events"
26
+ content_block.public_name_key = "decidim.meetings.content_blocks.upcoming_events.name"
27
+ content_block.default!
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -62,7 +62,7 @@ module Decidim
62
62
  end
63
63
  end
64
64
 
65
- Decidim.view_hooks.register(:assembly_meetings, priority: Decidim::ViewHooks::HIGH_PRIORITY) do |view_context|
65
+ Decidim.view_hooks.register(:current_participatory_space_meetings, priority: Decidim::ViewHooks::HIGH_PRIORITY) do |view_context|
66
66
  published_components = Decidim::Component.where(participatory_space: view_context.current_participatory_space).published
67
67
  meetings = Decidim::Meetings::Meeting.where(component: published_components)
68
68
 
@@ -92,12 +92,49 @@ module Decidim
92
92
  }
93
93
  )
94
94
  end
95
+
96
+ Decidim.view_hooks.register(:conference_venues, priority: Decidim::ViewHooks::HIGH_PRIORITY) do |view_context|
97
+ published_components = Decidim::Component.where(participatory_space: view_context.current_participatory_space).published
98
+ meetings = Decidim::Meetings::Meeting.where(component: published_components).group_by(&:address)
99
+ meetings_geocoded = Decidim::Meetings::Meeting.where(component: published_components).geocoded
100
+ next unless meetings.any?
101
+
102
+ view_context.render(
103
+ partial: "decidim/participatory_spaces/conference_venues",
104
+ locals: {
105
+ meetings: meetings,
106
+ meetings_geocoded: meetings_geocoded
107
+ }
108
+ )
109
+ end
95
110
  end
96
111
 
97
112
  initializer "decidim_meetings.add_cells_view_paths" do
98
113
  Cell::ViewModel.view_paths << File.expand_path("#{Decidim::Meetings::Engine.root}/app/cells")
99
114
  Cell::ViewModel.view_paths << File.expand_path("#{Decidim::Meetings::Engine.root}/app/views") # for partials
100
115
  end
116
+
117
+ initializer "decidim_meetings.attended_meetings_badge" do
118
+ Decidim::Gamification.register_badge(:attended_meetings) do |badge|
119
+ badge.levels = [1, 3, 5, 10, 30]
120
+ badge.reset = lambda do |user|
121
+ Decidim::Meetings::Registration.where(user: user).count
122
+ end
123
+ end
124
+ end
125
+
126
+ initializer "decidim_meetings.register_metrics" do
127
+ Decidim.metrics_registry.register(
128
+ :meetings,
129
+ "Decidim::Meetings::Metrics::MeetingsMetricManage",
130
+ Decidim::MetricRegistry::NOT_HIGHLIGHTED,
131
+ 5
132
+ )
133
+ end
134
+
135
+ initializer "decidim_meetings.assets" do |app|
136
+ app.config.assets.precompile += %w(decidim_meetings_manifest.js)
137
+ end
101
138
  end
102
139
  end
103
140
  end
Binary file