decidim-meetings 0.15.2 → 0.16.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/meetings/highlighted_meetings/show.erb +3 -0
  3. data/app/cells/decidim/meetings/highlighted_meetings_cell.rb +25 -0
  4. data/app/cells/decidim/meetings/highlighted_meetings_for_component/show.erb +33 -0
  5. data/app/cells/decidim/meetings/highlighted_meetings_for_component_cell.rb +37 -0
  6. data/app/cells/decidim/meetings/join_meeting_button/show.erb +19 -10
  7. data/app/commands/decidim/meetings/admin/close_meeting.rb +2 -1
  8. data/app/commands/decidim/meetings/admin/copy_meeting.rb +1 -1
  9. data/app/commands/decidim/meetings/admin/create_meeting.rb +3 -2
  10. data/app/commands/decidim/meetings/admin/update_meeting.rb +1 -1
  11. data/app/commands/decidim/meetings/admin/update_registrations.rb +2 -1
  12. data/app/commands/decidim/meetings/admin/validate_registration_code.rb +1 -1
  13. data/app/commands/decidim/meetings/join_meeting.rb +35 -6
  14. data/app/commands/decidim/meetings/leave_meeting.rb +10 -0
  15. data/app/controllers/decidim/meetings/admin/registration_form_controller.rb +30 -0
  16. data/app/controllers/decidim/meetings/calendars_controller.rb +23 -0
  17. data/app/controllers/decidim/meetings/directory/meetings_controller.rb +4 -0
  18. data/app/controllers/decidim/meetings/registrations_controller.rb +43 -0
  19. data/app/events/decidim/meetings/close_meeting_event.rb +7 -0
  20. data/app/events/decidim/meetings/create_meeting_event.rb +3 -0
  21. data/app/events/decidim/meetings/meeting_registration_notification_event.rb +22 -0
  22. data/app/events/decidim/meetings/meeting_registrations_enabled_event.rb +3 -0
  23. data/app/events/decidim/meetings/meeting_registrations_over_percentage_event.rb +4 -0
  24. data/app/events/decidim/meetings/registration_code_validated_event.rb +4 -0
  25. data/app/events/decidim/meetings/upcoming_meeting_event.rb +3 -0
  26. data/app/events/decidim/meetings/update_meeting_event.rb +3 -0
  27. data/app/forms/decidim/meetings/admin/meeting_registrations_form.rb +1 -0
  28. data/app/helpers/decidim/meetings/meetings_helper.rb +18 -0
  29. data/app/jobs/decidim/meetings/upcoming_meeting_notification_job.rb +1 -1
  30. data/app/mailers/decidim/meetings/registration_mailer.rb +1 -9
  31. data/app/models/decidim/meetings/meeting.rb +18 -0
  32. data/app/permissions/decidim/meetings/admin/permissions.rb +14 -0
  33. data/app/presenters/decidim/meetings/admin_log/value_types/meeting_title_description_presenter.rb +1 -1
  34. data/app/presenters/decidim/meetings/meeting_presenter.rb +50 -22
  35. data/app/queries/decidim/meetings/metrics/meeting_followers_metric_measure.rb +31 -0
  36. data/app/serializers/decidim/meetings/registration_serializer.rb +19 -1
  37. data/app/services/decidim/meetings/calendar/base_calendar.rb +61 -0
  38. data/app/services/decidim/meetings/calendar/component_calendar.rb +41 -0
  39. data/app/services/decidim/meetings/calendar/meeting_to_event.rb +70 -0
  40. data/app/services/decidim/meetings/calendar/organization_calendar.rb +33 -0
  41. data/app/services/decidim/meetings/calendar_renderer.rb +16 -0
  42. data/app/views/decidim/meetings/_calendar_modal.html.erb +13 -0
  43. data/app/views/decidim/meetings/admin/meetings/_form.html.erb +2 -2
  44. data/app/views/decidim/meetings/admin/meetings/index.html.erb +4 -1
  45. data/app/views/decidim/meetings/admin/registrations/_form.html.erb +5 -0
  46. data/app/views/decidim/meetings/directory/meetings/_meetings.html.erb +9 -2
  47. data/app/views/decidim/meetings/meetings/_meetings.html.erb +8 -1
  48. data/app/views/decidim/meetings/meetings/show.html.erb +17 -4
  49. data/config/locales/ca.yml +31 -10
  50. data/config/locales/de.yml +30 -10
  51. data/config/locales/en.yml +30 -9
  52. data/config/locales/es-PY.yml +31 -10
  53. data/config/locales/es.yml +30 -9
  54. data/config/locales/eu.yml +31 -10
  55. data/config/locales/fi-pl.yml +31 -10
  56. data/config/locales/fi.yml +31 -10
  57. data/config/locales/fr.yml +30 -9
  58. data/config/locales/gl.yml +30 -9
  59. data/config/locales/hu.yml +31 -10
  60. data/config/locales/id-ID.yml +28 -7
  61. data/config/locales/it.yml +31 -10
  62. data/config/locales/nl.yml +30 -9
  63. data/config/locales/pl.yml +32 -11
  64. data/config/locales/pt-BR.yml +31 -10
  65. data/config/locales/pt.yml +31 -10
  66. data/config/locales/ru.yml +7 -12
  67. data/config/locales/sv.yml +30 -9
  68. data/config/locales/tr-TR.yml +30 -9
  69. data/config/locales/uk.yml +7 -12
  70. data/db/migrate/20180801150031_add_registration_form_enabled_to_decidim_meetings.rb +7 -0
  71. data/db/migrate/20181107175558_add_questionnaire_to_existing_meetings.rb +15 -0
  72. data/lib/decidim/meetings.rb +1 -0
  73. data/lib/decidim/meetings/admin_engine.rb +1 -0
  74. data/lib/decidim/meetings/component.rb +26 -0
  75. data/lib/decidim/meetings/directory_engine.rb +1 -0
  76. data/lib/decidim/meetings/engine.rb +19 -30
  77. data/lib/decidim/meetings/meeting_serializer.rb +77 -0
  78. data/lib/decidim/meetings/test/factories.rb +3 -0
  79. data/lib/decidim/meetings/version.rb +1 -1
  80. metadata +44 -15
  81. data/app/views/decidim/participatory_spaces/_highlighted_meetings.html.erb +0 -19
  82. data/app/views/decidim/participatory_spaces/_meeting.html.erb +0 -1
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Meetings
5
+ module Calendar
6
+ # This class handles how to convert a component meetings to the ICalendar
7
+ # format. It caches its result until the component is updated again.
8
+ class ComponentCalendar < BaseCalendar
9
+ # Renders the meetings in an ICalendar format. It caches the results in
10
+ # Rails' cache.
11
+ #
12
+ # Returns a String.
13
+ def events
14
+ Rails.cache.fetch(cache_key) do
15
+ meetings.map do |meeting|
16
+ MeetingToEvent.new(meeting).to_ical
17
+ end.join
18
+ end
19
+ end
20
+
21
+ private
22
+
23
+ alias component resource
24
+
25
+ # Finds the component meetings.
26
+ #
27
+ # Returns a collection of Meetings.
28
+ def meetings
29
+ Decidim::Meetings::Meeting.where(component: component)
30
+ end
31
+
32
+ # Defines the cache key for the given component.
33
+ #
34
+ # Returns a String.
35
+ def cache_key
36
+ "meetings-calendar-component-#{component.id}-#{component.updated_at.to_i}"
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Meetings
5
+ module Calendar
6
+ # This class converts the given meeting to an ICalendar event, using the
7
+ # `icalendar` gem.
8
+ #
9
+ # Examples:
10
+ # meeting = Decidim::Meetings::Meeting.find(params[:id])
11
+ # converter = MeetingToEvent.new(meeting)
12
+ # converter.event # => #<Icalendar::Event ...>
13
+ # converter.to_ical # => "BEGIN:VEVENT\n\r...END:VEVENT\n\r"
14
+ #
15
+ # Note that this event will not be bound to any calendar. If you need to
16
+ # attach it to a calendar, you can do it like this:
17
+ #
18
+ # calendar = Icalendar::Calendar.new
19
+ # event = MeetingToEvent.new(meeting).event
20
+ # calendar.add_event(event)
21
+ #
22
+ class MeetingToEvent
23
+ include ActionView::Helpers::SanitizeHelper
24
+
25
+ # Initializes the converteer for the given meeting.
26
+ #
27
+ # meeting - the Meeting to convert
28
+ def initialize(meeting)
29
+ @meeting = meeting
30
+ end
31
+
32
+ # Converts the given meeting to an ICalendar event object
33
+ #
34
+ # Returns an ICalendar::Event instance
35
+ def event
36
+ return @event if @event
37
+
38
+ @event = Icalendar::Event.new
39
+ @event.dtstart = Icalendar::Values::DateTime.new(meeting.start_time)
40
+ @event.dtend = Icalendar::Values::DateTime.new(meeting.end_time)
41
+ @event.summary = present(meeting).title
42
+ @event.description = strip_tags(present(meeting).description)
43
+ @event.location = meeting.address
44
+ @event.geo = [meeting.latitude, meeting.longitude]
45
+ @event.url = url_for(meeting)
46
+
47
+ @event
48
+ end
49
+
50
+ # Converts the given meeting to an ICalendar event representation that
51
+ # follows the specific format.
52
+ #
53
+ # Returns a String
54
+ delegate :to_ical, to: :event
55
+
56
+ private
57
+
58
+ attr_reader :meeting
59
+
60
+ def url_for(meeting)
61
+ Decidim::ResourceLocatorPresenter.new(meeting).url
62
+ end
63
+
64
+ def present(meeting)
65
+ Decidim::Meetings::MeetingPresenter.new(meeting)
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Meetings
5
+ module Calendar
6
+ # This class handles how to convert an organization meetings to the
7
+ # ICalendar format. It finds the public meeting components for that
8
+ # organization and delegates the work to the `ComponentCalendar` class.
9
+ class OrganizationCalendar < BaseCalendar
10
+ # Renders the meetings in an ICalendar format. It caches the results in
11
+ # Rails' cache.
12
+ #
13
+ # Returns a String.
14
+ def events
15
+ @events ||= components.map do |component|
16
+ ComponentCalendar.new(component).events
17
+ end.compact.join
18
+ end
19
+
20
+ private
21
+
22
+ alias organization resource
23
+
24
+ # Finds the component meetings.
25
+ #
26
+ # Returns a collection of Meetings.
27
+ def components
28
+ Decidim::PublicComponents.for(organization, manifest_name: :meetings)
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Meetings
5
+ class CalendarRenderer
6
+ def self.for(resource)
7
+ case resource
8
+ when Decidim::Organization
9
+ Calendar::OrganizationCalendar.for(resource)
10
+ when Decidim::Component
11
+ Calendar::ComponentCalendar.for(resource)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,13 @@
1
+ <button class="button button--title secondary light share-link text-center calendar" data-open="calendarShare">
2
+ <%= t(".export_calendar") %>
3
+ <%= icon "share", class: "icon--after" %>
4
+ </button>
5
+ <div class="reveal" id="calendarShare" data-reveal>
6
+ <div class="reveal__header">
7
+ <h3 class="reveal__title"><%= t(".calendar_url") %>:</h3>
8
+ <button class="close-button" data-close aria-label="<%= t(".close_window") %>" type="button">
9
+ <span aria-hidden="true">&times;</span>
10
+ </button>
11
+ </div>
12
+ <input type="text" value="<%= "#{path}" %>" readonly />
13
+ </div>
@@ -4,11 +4,11 @@
4
4
  </div>
5
5
  <div class="card-section">
6
6
  <div class="row column hashtags__container">
7
- <%= form.translated :text_field, :title, autofocus: true, class: "js-hashtags", hashtaggable: true, value: @meeting.present? ? present(@meeting).title_with_locales : "" %>
7
+ <%= form.translated :text_field, :title, autofocus: true, class: "js-hashtags", hashtaggable: true, value: @meeting.present? ? present(@meeting).title(all_locales: true) : "" %>
8
8
  </div>
9
9
 
10
10
  <div class="row column hashtags__container">
11
- <%= form.translated :editor, :description, class: "js-hashtags", hashtaggable: true, value: @meeting.present? ? present(@meeting).description_with_locales : "" %>
11
+ <%= form.translated :editor, :description, class: "js-hashtags", hashtaggable: true, value: @meeting.present? ? present(@meeting).description(all_locales: true) : "" %>
12
12
  </div>
13
13
 
14
14
  <div class="row column">
@@ -2,7 +2,10 @@
2
2
  <div class="card-divider">
3
3
  <h2 class="card-title">
4
4
  <%= t(".title") %>
5
- <%= link_to t("actions.new", scope: "decidim.meetings", name: t("models.meeting.name", scope: "decidim.meetings.admin")), new_meeting_path, class: "button tiny button--title" if allowed_to? :create, :meeting %>
5
+ <div class="button--title">
6
+ <%= link_to t("actions.new", scope: "decidim.meetings", name: t("models.meeting.name", scope: "decidim.meetings.admin")), new_meeting_path, class: "button tiny button--simple" if allowed_to? :create, :meeting %>
7
+ <%= export_dropdown %>
8
+ </div>
6
9
  </h2>
7
10
  </div>
8
11
 
@@ -13,6 +13,7 @@
13
13
  </ul>
14
14
  </div>
15
15
  <% end %>
16
+ <%= link_to t(".registration_form"), edit_meeting_registrations_form_path(meeting_id: meeting.id), class: "button tiny button--title" %>
16
17
  </h2>
17
18
  </div>
18
19
 
@@ -21,6 +22,10 @@
21
22
  <%= form.check_box :registrations_enabled %>
22
23
  </div>
23
24
 
25
+ <div class="row column">
26
+ <%= form.check_box :registration_form_enabled %>
27
+ </div>
28
+
24
29
  <div class="row column">
25
30
  <p><%= t(".registrations_count", count: meeting.registrations.count) %></p>
26
31
  <%= form.number_field :available_slots %>
@@ -3,11 +3,18 @@
3
3
  <%= t "decidim.meetings.meetings.meetings.no_meetings_warning" %>
4
4
  </div>
5
5
  <% else %>
6
- <%= render partial: "decidim/shared/results_per_page" %>
6
+ <div class="row medium-up-2">
7
+ <div class="column">
8
+ <%= render partial: "decidim/shared/results_per_page" %>
9
+ </div>
10
+ <div class="column">
11
+ <%= render partial: "decidim/meetings/calendar_modal", locals: { path: calendar_url } %>
12
+ </div>
13
+ </div>
7
14
 
8
15
  <div class="row small-up-1 medium-up-2 card-grid">
9
16
  <% meetings.each do |meeting| %>
10
- <%= card_for meeting %>
17
+ <%= card_for meeting, context: { show_space: true } %>
11
18
  <% end %>
12
19
  </div>
13
20
  <%= decidim_paginate meetings, order_start_time: params[:order_start_time], scope_id: params[:scope_id] %>
@@ -8,7 +8,14 @@
8
8
  </div>
9
9
  <% end %>
10
10
 
11
- <%= render partial: "decidim/shared/results_per_page" %>
11
+ <div class="row medium-up-2">
12
+ <div class="column">
13
+ <%= render partial: "decidim/shared/results_per_page" %>
14
+ </div>
15
+ <div class="column">
16
+ <%= render partial: "decidim/meetings/calendar_modal", locals: { path: calendar_url } %>
17
+ </div>
18
+ </div>
12
19
 
13
20
  <div class="row small-up-1 medium-up-2 card-grid">
14
21
  <% meetings.each do |meeting| %>
@@ -16,9 +16,9 @@ edit_link(
16
16
  %>
17
17
 
18
18
  <div class="row column view-header">
19
- <h2 class="heading2"><%= present(meeting).html_title %></h2>
19
+ <h2 class="heading2"><%= present(meeting).title(links: true) %></h2>
20
20
  <% if meeting.organizer.present? %>
21
- <%= render partial: "decidim/shared/author_reference", locals: { author: present(meeting.organizer) } %>
21
+ <%= cell "decidim/author", present(meeting.organizer) %>
22
22
  <% end %>
23
23
  </div>
24
24
  <div class="row">
@@ -33,7 +33,7 @@ edit_link(
33
33
  <%= meeting.start_time.strftime("%H:%M") %> - <%= meeting.end_time.strftime("%H:%M") %>
34
34
  </div>
35
35
  <%= cell "decidim/meetings/join_meeting_button", meeting, big_button: true, show_remaining_slots: true %>
36
- <%= render partial: "decidim/shared/follow_button", locals: { followable: meeting } %>
36
+ <%= render partial: "decidim/shared/follow_button", locals: { followable: meeting, large: false } %>
37
37
  </div>
38
38
  <% if meeting.closed? %>
39
39
  <div class="card card--secondary extra definition-data">
@@ -60,6 +60,18 @@ edit_link(
60
60
  <% end %>
61
61
  </div>
62
62
 
63
+ <% if registration %>
64
+ <div class="card extra">
65
+ <div class="card__content">
66
+ <div class="registration_code">
67
+ <span><%= registration_code_help_text %></span>
68
+ <span><strong><%= registration.code %></strong></span>
69
+ <div class="text-small"><%= registration_validation_state %></div>
70
+ </div>
71
+ </div>
72
+ </div>
73
+ <% end %>
74
+
63
75
  <% if meeting.services.any? %>
64
76
  <div class="card card--list">
65
77
  <% meeting.services.each do |service| %>
@@ -92,7 +104,7 @@ edit_link(
92
104
  <%= t("transparent", scope: "decidim.meetings.types") %>
93
105
  </span>
94
106
  <% end %>
95
- <p><%= decidim_sanitize(present(meeting).html_description) %></p>
107
+ <p><%= decidim_sanitize(present(meeting).description(links: true)) %></p>
96
108
  <%= render partial: "decidim/shared/static_map", locals: { icon_name: "meetings", geolocalizable: meeting } %>
97
109
  <%= render partial: "decidim/shared/tags", locals: { resource: meeting, tags_class_extra: "tags--meeting" } %>
98
110
  </div>
@@ -117,6 +129,7 @@ edit_link(
117
129
  </div>
118
130
  <%= attachments_for meeting %>
119
131
  <%= comments_for meeting %>
132
+ <%= pad_iframe_for meeting %>
120
133
 
121
134
  <%= javascript_include_tag "decidim/proposals/social_share" %>
122
135
  <%= stylesheet_link_tag "decidim/proposals/social_share" %>
@@ -22,6 +22,7 @@ ca:
22
22
  location_hints: Detalls d'ubicació
23
23
  organizer_id: Organitzador
24
24
  private_meeting: Trobada privada
25
+ registration_form_enabled: S'han habilitat les inscripcions
25
26
  registration_terms: Termes i condicions de l'inscripció
26
27
  registrations_enabled: Inscripcions obertes
27
28
  start_time: Hora d'inici
@@ -81,6 +82,7 @@ ca:
81
82
  announcement: Anunci
82
83
  comments_enabled: Comentaris habilitats
83
84
  default_registration_terms: Termes de registre per defecte
85
+ enable_pads_creation: Activar la creació de pads
84
86
  resources_permissions_enabled: Es poden establir permisos d'accions per a cada trobada
85
87
  step:
86
88
  announcement: Anunci
@@ -88,15 +90,23 @@ ca:
88
90
  events:
89
91
  meetings:
90
92
  meeting_closed:
91
- email_intro: 'La trobada de "%{resource_title}" ha estat tancada. Pots llegir les conclusions a la seva pàgina:'
92
- email_outro: Has rebut aquesta notificació perquè estàs seguint la trobada "%{resource_title}". Pots deixar-la de seguir des de l'enllaç anterior.
93
- email_subject: S'ha tancat la trobada "%{resource_title}"
94
- notification_title: La trobada de <a href="%{resource_path}">%{resource_title}</a> s'ha tancat.
93
+ affected_user:
94
+ email_intro: 'S''ha tancat la vostra reunió "%{resource_title}". Podeu llegir les conclusions de la seva pàgina:'
95
+ email_outro: Heu rebut aquesta notificació perquè heu organitzat la reunió "%{resource_title}".
96
+ email_subject: S'ha tancat la trobada "%{resource_title}"
97
+ notification_title: La trobada de <a href="%{resource_path}">%{resource_title}</a> s'ha tancat.
98
+ follower:
99
+ email_intro: 'La trobada de "%{resource_title}" ha estat tancada. Pots llegir les conclusions a la seva pàgina:'
100
+ email_outro: Heu rebut aquesta notificació perquè esteu seguint la reunió "%{resource_title}". Podeu deixar de seguir-lo des de l'enllaç anterior.
101
+ email_subject: S'ha tancat la trobada "%{resource_title}"
102
+ notification_title: La trobada de <a href="%{resource_path}">%{resource_title}</a> s'ha tancat.
95
103
  meeting_created:
96
104
  email_intro: S'ha afegit la trobada "%{resource_title}" a l'espai "%{participatory_space_title}" que estàs seguint.
97
105
  email_outro: Has rebut aquesta notificació perquè estàs seguint "%{participatory_space_title}". Pots deixar de seguir-lo des de l'enllaç anterior.
98
106
  email_subject: Nova trobada a %{participatory_space_title}
99
107
  notification_title: S'ha afegit la trobada <a href="%{resource_path}">%{resource_title}</a> a %{participatory_space_title}
108
+ meeting_registration_confirmed:
109
+ notification_title: S'ha confirmat el vostre registre per a la reunió <a href="%{resource_url}">%{resource_title}</a> . El vostre codi de registre és %{registration_code}.
100
110
  meeting_registrations_over_percentage:
101
111
  email_intro: La disponibilitat d'espais a la trobada "%{resource_title}" està per sobre del %{percentage}%.
102
112
  email_outro: Has rebut aquesta notificació perquè ets un administrador de l'espai participatiu d'aquesta trobada.
@@ -108,9 +118,9 @@ ca:
108
118
  email_subject: La trobada "%{resource_title}" s'ha actualitzat
109
119
  notification_title: La trobada <a href="%{resource_path}">%{resource_title}</a> ha estat actualitzada.
110
120
  registration_code_validated:
111
- email_intro: S'ha validat el teu codi de registre "%{registration_code}".
121
+ email_intro: S'ha validat el teu codi d'inscripció "%{registration_code}" per a la trobada "%{resource_title}".
112
122
  email_outro: Has rebut aquesta notificació perquè s'ha validat el teu codi de registre per a la trobada "%{resource_title}".
113
- email_subject: S'ha validat el teu codi de registre "%{registration_code}"
123
+ email_subject: S'ha validat el teu codi d'inscripció "%{registration_code}" per a la trobada "%{resource_title}"
114
124
  notification_title: S'ha validat el teu codi de registre "%{registration_code}" per a la trobada <a href="%{resource_path}">%{resource_title}</a>.
115
125
  registrations_enabled:
116
126
  email_intro: 'La trobada "%{resource_title}" ha activat inscripcions. Pots registrar-te a la seva pàgina:'
@@ -180,6 +190,7 @@ ca:
180
190
  invalid: Hi ha hagut un problema en actualitzar aquesta agenda
181
191
  success: L'agenda s'ha actualitzat correctament
182
192
  exports:
193
+ meetings: Reunions
183
194
  registrations: Inscripcions
184
195
  invite_join_meeting_mailer:
185
196
  invite:
@@ -269,8 +280,9 @@ ca:
269
280
  form:
270
281
  available_slots_help: Deixeu-lo a 0 si teniu espais il·limitats disponibles.
271
282
  invites: Invitacions
283
+ registration_form: Formulari d'inscripció
272
284
  registrations_count:
273
- one: Hi ha hagut 1 inscripció.
285
+ one: Hi ha hagut %{count} 1 inscripció.
274
286
  other: Hi ha hagut %{count} inscripcions.
275
287
  reserved_slots_help: Deixa'l a 0 si no tens espais reservats
276
288
  reserved_slots_less_than: Ha de ser inferior o igual que %{count}
@@ -297,6 +309,10 @@ ca:
297
309
  minutes:
298
310
  create: "%{user_name} ha creat l'acta de la reunió %{resource_name} a l'espai %{space_name}"
299
311
  update: "%{user_name} va ha actualitzat l'acta de la reunió %{resource_name} a l'espai %{space_name}"
312
+ calendar_modal:
313
+ calendar_url: URL del calendari
314
+ close_window: Tanca la finestra
315
+ export_calendar: Exportar el calendari
300
316
  conference_venues: Seus de les jornades
301
317
  content_blocks:
302
318
  upcoming_events:
@@ -338,7 +354,7 @@ ca:
338
354
  filter_by: Filtra per
339
355
  unfold: Desplegar
340
356
  meeting_minutes:
341
- meeting_minutes: Acta de la trobada
357
+ meeting_minutes: Minuts de trobada
342
358
  related_information: Informació relacionada
343
359
  meetings:
344
360
  no_meetings_warning: No hi ha trobades que coincideixin amb el criteri de cerca o no hi ha cap trobada programada.
@@ -354,8 +370,12 @@ ca:
354
370
  meeting_report: Informe de la trobada
355
371
  no_slots_available: No hi ha lloc disponible
356
372
  organizations: Llista d'organitzacions que han atès
373
+ registration_code_help_text: El vostre codi de registre
374
+ registration_state:
375
+ validated: VALIDAT
376
+ validation_pending: VALIDACIÓ PENDENT
357
377
  remaining_slots:
358
- one: '%{count} plaça restant'
378
+ one: "%{count} plaça restant"
359
379
  other: "%{count} places restants"
360
380
  view: Veure
361
381
  meetings_map:
@@ -399,6 +419,7 @@ ca:
399
419
  transparent: Transparent
400
420
  metrics:
401
421
  meetings:
422
+ description: Nombre de trobades creades
402
423
  object: trobades
403
424
  title: Trobades
404
425
  participatory_processes:
@@ -409,7 +430,7 @@ ca:
409
430
  participatory_spaces:
410
431
  highlighted_meetings:
411
432
  past_meetings: Trobades anteriors
412
- see_all_meetings: Veure totes les trobades
433
+ see_all: Veure tots (%{count})
413
434
  upcoming_meetings: Properes trobades
414
435
  upcoming_meeting_for_card:
415
436
  upcoming_meeting: Propera reunió
@@ -22,6 +22,7 @@ de:
22
22
  location_hints: Standorthinweise
23
23
  organizer_id: Veranstalter
24
24
  private_meeting: Privates Treffen
25
+ registration_form_enabled: Anmeldeformular aktiviert
25
26
  registration_terms: Registrierungsbedingungen
26
27
  registrations_enabled: Registrierungen aktiviert
27
28
  start_time: Startzeit
@@ -81,6 +82,7 @@ de:
81
82
  announcement: Ankündigung
82
83
  comments_enabled: Kommentare aktiviert
83
84
  default_registration_terms: Standard-Registrierungsbedingungen
85
+ enable_pads_creation: Aktivieren Sie die Pads-Erstellung
84
86
  resources_permissions_enabled: Aktionsberechtigungen können für jedes Meeting festgelegt werden
85
87
  step:
86
88
  announcement: Ankündigung
@@ -88,15 +90,23 @@ de:
88
90
  events:
89
91
  meetings:
90
92
  meeting_closed:
91
- email_intro: 'Das "%{resource_title}" Meeting wurde geschlossen. Sie können die Schlussfolgerungen von seiner Seite lesen:'
92
- email_outro: Sie haben diese Benachrichtigung erhalten, weil Sie das Treffen "%{resource_title}" verfolgen. Sie können es aus dem vorherigen Link entfernen.
93
- email_subject: Das "%{resource_title}" Meeting wurde geschlossen
94
- notification_title: Das <a href="%{resource_path}">%{resource_title}</a> Treffen wurde geschlossen.
93
+ affected_user:
94
+ email_intro: 'Ihre Besprechung "%{resource_title}" wurde geschlossen. Sie können die Schlussfolgerungen von seiner Seite lesen:'
95
+ email_outro: Sie haben diese Benachrichtigung erhalten, weil Sie die Besprechung "%{resource_title}" organisiert haben.
96
+ email_subject: Das "%{resource_title}" Meeting wurde geschlossen
97
+ notification_title: Das <a href="%{resource_path}">%{resource_title}</a> Treffen wurde geschlossen.
98
+ follower:
99
+ email_intro: 'Das "%{resource_title}" Meeting wurde geschlossen. Sie können die Schlussfolgerungen von seiner Seite lesen:'
100
+ email_outro: Sie haben diese Benachrichtigung erhalten, weil Sie die Besprechung "%{resource_title}" verfolgen. Sie können es aus dem vorherigen Link aufheben.
101
+ email_subject: Das "%{resource_title}" Meeting wurde geschlossen
102
+ notification_title: Das <a href="%{resource_path}">%{resource_title}</a> Treffen wurde geschlossen.
95
103
  meeting_created:
96
104
  email_intro: Das Meeting "%{resource_title}" wurde zu "%{participatory_space_title}" hinzugefügt, dem Sie folgen.
97
105
  email_outro: Sie haben diese Benachrichtigung erhalten, weil Sie "%{participatory_space_title}" folgen. Sie können es aus dem vorherigen Link aufheben.
98
106
  email_subject: Neues Meeting wurde zu %{participatory_space_title}hinzugefügt
99
107
  notification_title: Das Meeting <a href="%{resource_path}">%{resource_title}</a> wurde zu %{participatory_space_title}hinzugefügt
108
+ meeting_registration_confirmed:
109
+ notification_title: Ihre Anmeldung zum Meeting <a href="%{resource_url}">%{resource_title}</a> wurde bestätigt. Ihr Registrierungscode ist %{registration_code}.
100
110
  meeting_registrations_over_percentage:
101
111
  email_intro: Die "%{resource_title}" Sitzung belegte Slots sind über %{percentage}%.
102
112
  email_outro: Sie haben diese Benachrichtigung erhalten, weil Sie ein Administrator des Teilnahmebereichs der Besprechung sind.
@@ -108,9 +118,9 @@ de:
108
118
  email_subject: Das "%{resource_title}" Meeting wurde aktualisiert
109
119
  notification_title: Das <a href="%{resource_path}">%{resource_title}</a> Meeting wurde aktualisiert.
110
120
  registration_code_validated:
111
- email_intro: Ihr Registrierungscode "%{registration_code}" wurde bestätigt.
121
+ email_intro: Ihr Registrierungscode "%{registration_code}" für das Meeting "%{resource_title}" wurde bestätigt.
112
122
  email_outro: Sie haben diese Benachrichtigung erhalten, weil Ihr Registrierungscode für das Meeting "%{resource_title}" validiert wurde.
113
- email_subject: Ihr Registrierungscode "%{registration_code}" wurde bestätigt
123
+ email_subject: Ihr Registrierungscode "%{registration_code}" für das Meeting "%{resource_title}" wurde bestätigt
114
124
  notification_title: Ihr Registrierungscode "%{registration_code}" für das <a href="%{resource_path}">%{resource_title}</a> Meeting wurde bestätigt.
115
125
  registrations_enabled:
116
126
  email_intro: 'Das "%{resource_title}" Meeting hat Registrierungen ermöglicht. Sie können sich auf seiner Seite registrieren:'
@@ -180,6 +190,7 @@ de:
180
190
  invalid: Beim Aktualisieren dieser Agenda ist ein Problem aufgetreten
181
191
  success: Agenda erfolgreich aktualisiert
182
192
  exports:
193
+ meetings: Treffen
183
194
  registrations: Anmeldungen
184
195
  invite_join_meeting_mailer:
185
196
  invite:
@@ -269,9 +280,10 @@ de:
269
280
  form:
270
281
  available_slots_help: Belassen Sie es auf 0, wenn Sie unbegrenzte Plätze zur Verfügung haben.
271
282
  invites: Lädt ein
283
+ registration_form: Anmeldeformular
272
284
  registrations_count:
273
- one: Es gab 1 Registrierung.
274
- other: Es gab %{count} Registrierungen.
285
+ one: Es wurde %{count} registriert.
286
+ other: Es wurden %{count} Anmeldungen vorgenommen.
275
287
  reserved_slots_help: Belassen Sie es auf 0, wenn Sie keine reservierten Slots haben
276
288
  reserved_slots_less_than: Muss kleiner oder gleich %{count}
277
289
  update:
@@ -297,6 +309,10 @@ de:
297
309
  minutes:
298
310
  create: "%{user_name} erstellt das Protokoll des Treffens %{resource_name} auf dem %{space_name} Feld"
299
311
  update: "%{user_name} aktualisiert das Protokoll der Sitzung %{resource_name} auf den %{space_name} Feldern"
312
+ calendar_modal:
313
+ calendar_url: Kalender-URL
314
+ close_window: Fenster schließen
315
+ export_calendar: Kalender exportieren
300
316
  conference_venues: Tagungsstätten
301
317
  content_blocks:
302
318
  upcoming_events:
@@ -354,8 +370,12 @@ de:
354
370
  meeting_report: Gesprächsprotokoll
355
371
  no_slots_available: Keine Steckplätze verfügbar
356
372
  organizations: Teilnahme an Organisationen
373
+ registration_code_help_text: Ihr Registrierungscode
374
+ registration_state:
375
+ validated: GÜLTIG
376
+ validation_pending: Validierung ausstehend
357
377
  remaining_slots:
358
- one: '%{count} Slot bleibt übrig'
378
+ one: "%{count} Slot bleibt übrig"
359
379
  other: "Noch %{count} Slots"
360
380
  view: Aussicht
361
381
  meetings_map:
@@ -399,6 +419,7 @@ de:
399
419
  transparent: Transparent
400
420
  metrics:
401
421
  meetings:
422
+ description: Anzahl der erstellten Meetings
402
423
  object: Treffen
403
424
  title: Meetings
404
425
  participatory_processes:
@@ -409,7 +430,6 @@ de:
409
430
  participatory_spaces:
410
431
  highlighted_meetings:
411
432
  past_meetings: Vergangene Treffen
412
- see_all_meetings: Alle Besprechungen anzeigen
413
433
  upcoming_meetings: Bevorstehende Treffen
414
434
  upcoming_meeting_for_card:
415
435
  upcoming_meeting: Kommendes Treffen