decidim-meetings 0.6.8 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/app/commands/decidim/meetings/admin/invite_user_to_join_meeting.rb +57 -0
  3. data/app/controllers/decidim/meetings/admin/invites_controller.rb +39 -0
  4. data/app/controllers/decidim/meetings/admin/registrations_controller.rb +1 -1
  5. data/app/forms/decidim/meetings/admin/meeting_registration_invite_form.rb +16 -0
  6. data/app/mailers/decidim/meetings/admin/invite_join_meeting_mailer.rb +43 -0
  7. data/app/views/decidim/meetings/admin/invite_join_meeting_mailer/invite.html.erb +7 -0
  8. data/app/views/decidim/meetings/admin/invites/_form.html.erb +7 -0
  9. data/app/views/decidim/meetings/admin/invites/new.html.erb +21 -0
  10. data/app/views/decidim/meetings/admin/registrations/_form.html.erb +4 -3
  11. data/app/views/decidim/meetings/meeting_widgets/show.html.erb +1 -1
  12. data/app/views/decidim/meetings/meetings/_linked_meetings.html.erb +1 -1
  13. data/app/views/decidim/meetings/meetings/_meetings.html.erb +1 -1
  14. data/app/views/decidim/meetings/meetings/_registration_confirm.html.erb +1 -1
  15. data/app/views/decidim/meetings/meetings/show.html.erb +2 -2
  16. data/app/views/devise/mailer/join_meeting.html.erb +13 -0
  17. data/app/views/devise/mailer/join_meeting.text.erb +11 -0
  18. data/config/locales/ca.yml +20 -0
  19. data/config/locales/en.yml +20 -0
  20. data/config/locales/es.yml +20 -0
  21. data/config/locales/eu.yml +59 -39
  22. data/config/locales/fi.yml +63 -43
  23. data/config/locales/fr.yml +52 -32
  24. data/config/locales/it.yml +20 -0
  25. data/config/locales/nl.yml +20 -0
  26. data/config/locales/pl.yml +22 -2
  27. data/config/locales/ru.yml +198 -0
  28. data/config/locales/uk.yml +39 -19
  29. data/lib/decidim/meetings/admin_engine.rb +1 -0
  30. data/lib/decidim/meetings/engine.rb +5 -1
  31. data/lib/decidim/meetings/feature.rb +2 -2
  32. data/lib/decidim/meetings/test/factories.rb +6 -0
  33. data/lib/decidim/meetings/version.rb +10 -0
  34. metadata +25 -56
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 703979c123c332b2dc5f89e5240827e932951dab
4
- data.tar.gz: 3a407ec7c35450f4d16cd17f519096516d5e0aab
3
+ metadata.gz: 01ce2b2ec67e0793b65b9412060f6557b000f57d
4
+ data.tar.gz: 4c21975e2f0b7f710d78b1e4f93f9baa83395fc3
5
5
  SHA512:
6
- metadata.gz: ae4862bdb7da7e4a51a63feb1f3181031cb4e049b7c15b117ef3f8abfe7a34533fe97f317983e20bf30d6e8adac8b04d9d88720154ac431af07a509815020e5c
7
- data.tar.gz: b9197688ec9aff83df3f354831ccddb551882f49bf01daa1db3a9bd62e3979a1689cd50d453098576e161db16de03f800c5d8c31d84d24a7f001f069ec64ad97
6
+ metadata.gz: 7e50ac9e0b9ed9876724e5517b0db927428f8b539772bc4c692a4ed8f60c6232f89a58cee7e54d159edfc2f78830472801e04fdb3f175a740a873ee4a558a4f3
7
+ data.tar.gz: a89ad20fb5f3abc65749d5dd2fc2f751c92bfebd04429c0a1a779841f4886c0c9108b69f5fa92af1ba097510224a13cf4c049ff7bfa709598a5976dd7d1aef64
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Meetings
5
+ module Admin
6
+ # A command with all the business logic to invite users to join a meeting.
7
+ #
8
+ class InviteUserToJoinMeeting < Rectify::Command
9
+ # Public: Initializes the command.
10
+ #
11
+ # form - A form object with the params.
12
+ # meeting - The meeting which the user is invited to.
13
+ # invited_by - The user performing the operation
14
+ def initialize(form, meeting, invited_by)
15
+ @form = form
16
+ @meeting = meeting
17
+ @invited_by = invited_by
18
+ end
19
+
20
+ # Executes the command. Broadcasts these events:
21
+ #
22
+ # - :ok when everything is valid.
23
+ # - :invalid if the form wasn't valid and we couldn't proceed.
24
+ #
25
+ # Returns nothing.
26
+ def call
27
+ return broadcast(:invalid) if form.invalid?
28
+
29
+ invite_user
30
+
31
+ broadcast(:ok)
32
+ end
33
+
34
+ private
35
+
36
+ attr_reader :form, :invited_by, :meeting
37
+
38
+ def invite_user
39
+ if user.persisted?
40
+ InviteJoinMeetingMailer.invite(user, meeting, invited_by).deliver_later
41
+ else
42
+ user.name = form.name
43
+ user.skip_reconfirmation!
44
+ user.invite!(invited_by, invitation_instructions: "join_meeting", meeting: meeting)
45
+ end
46
+ end
47
+
48
+ def user
49
+ @user ||= Decidim::User.find_or_create_by(
50
+ organization: form.current_organization,
51
+ email: form.email.downcase
52
+ )
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_dependency "decidim/admin/application_controller"
4
+
5
+ module Decidim
6
+ module Meetings
7
+ module Admin
8
+ # Controller that allows inviting users to join a meeting.
9
+ #
10
+ class InvitesController < Admin::ApplicationController
11
+ def new
12
+ @form = form(MeetingRegistrationInviteForm).instance
13
+ end
14
+
15
+ def create
16
+ @form = form(MeetingRegistrationInviteForm).from_params(params)
17
+
18
+ InviteUserToJoinMeeting.call(@form, meeting, current_user) do
19
+ on(:ok) do
20
+ flash[:notice] = I18n.t("invites.create.success", scope: "decidim.meetings.admin")
21
+ redirect_to edit_meeting_registrations_path(meeting)
22
+ end
23
+
24
+ on(:invalid) do
25
+ flash.now[:alert] = I18n.t("invites.create.error", scope: "decidim.meetings.admin")
26
+ render :new
27
+ end
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ def meeting
34
+ @meeting ||= Meeting.where(feature: current_feature).find(params[:meeting_id])
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -29,7 +29,7 @@ module Decidim
29
29
  format = params[:format]
30
30
  export_data = Decidim::Exporters.find_exporter(format).new(meeting.registrations, Decidim::Meetings::RegistrationSerializer).export
31
31
 
32
- send_data export_data.read, type: "text/#{format}", filename: export_data.filename("registrations")
32
+ send_data export_data.read, type: "text/#{export_data.extension}", filename: export_data.filename("registrations")
33
33
  end
34
34
 
35
35
  private
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Meetings
5
+ module Admin
6
+ # A form object used to invite users to join a meeting.
7
+ #
8
+ class MeetingRegistrationInviteForm < Form
9
+ attribute :name, String
10
+ attribute :email, String
11
+
12
+ validates :name, :email, presence: true
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Meetings
5
+ module Admin
6
+ # A custom mailer for sending an invitation to join a meeting to
7
+ # an existing user.
8
+ class InviteJoinMeetingMailer < Decidim::ApplicationMailer
9
+ include Decidim::TranslationsHelper
10
+ include ActionView::Helpers::SanitizeHelper
11
+
12
+ helper Decidim::ResourceHelper
13
+ helper Decidim::TranslationsHelper
14
+
15
+ helper_method :routes
16
+
17
+ # Send an email to an user to invite them to join a meeting.
18
+ #
19
+ # user - The user being invited
20
+ # meeting - The meeting being joined.
21
+ # invited_by - The user performing the invitation.
22
+ def invite(user, meeting, invited_by)
23
+ with_user(user) do
24
+ @user = user
25
+ @meeting = meeting
26
+ @invited_by = invited_by
27
+ @organization = @meeting.organization
28
+ @locator = Decidim::ResourceLocatorPresenter.new(@meeting)
29
+
30
+ subject = I18n.t("invite.subject", scope: "decidim.meetings.mailer.invite_join_meeting_mailer")
31
+ mail(to: user.email, subject: subject)
32
+ end
33
+ end
34
+
35
+ private
36
+
37
+ def routes
38
+ @router ||= Decidim::EngineRouter.main_proxy(@meeting.feature)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,7 @@
1
+ <p><%= t("devise.mailer.invitation_instructions.hello", email: @user.name) %></p>
2
+
3
+ <p>
4
+ <%= t ".invited_you_to_join_a_meeting", invited_by: @invited_by.name, application: @user.organization.name %>
5
+ </p>
6
+
7
+ <p><%= link_to t(".join", meeting_title: translated_attribute(@meeting.title)),routes.meeting_registration_url(meeting_id: @meeting, participatory_space_id: @meeting.feature.participatory_space) %>
@@ -0,0 +1,7 @@
1
+ <div class="row column">
2
+ <%= form.text_field :name %>
3
+ </div>
4
+
5
+ <div class="row column">
6
+ <%= form.text_field :email %>
7
+ </div>
@@ -0,0 +1,21 @@
1
+ <h2 class="process-title-summary">
2
+ <%= t('.new_invite') %>
3
+ </h2>
4
+
5
+ <div class="section">
6
+ <div class="callout warning">
7
+ <p><%= t('.explanation') %></p>
8
+ </div>
9
+ </div>
10
+
11
+ <%= decidim_form_for(@form, url: meeting_registrations_invites_path, method: :post, html: { class: "form new_meeting_registration_invite" }) do |f| %>
12
+ <div class="card">
13
+ <div class="card-section">
14
+ <%= render partial: 'form', object: f %>
15
+ </div>
16
+ </div>
17
+
18
+ <div class="button--double form-general-submit">
19
+ <%= f.submit t(".invite") %>
20
+ </div>
21
+ <% end %>
@@ -2,11 +2,12 @@
2
2
  <div class="card-divider">
3
3
  <h2 class="card-title">
4
4
  <%= title %>
5
+ <%= link_to t(".invite_user"), meeting.registrations_enabled ? new_meeting_registrations_invites_path(meeting) : "#", class: "button tiny button--title #{'disabled' unless meeting.registrations_enabled?}" %>
5
6
  <span class="exports dropdown tiny button button--simple button--title" data-toggle="export-dropdown"><%= t "actions.export", scope: "decidim.admin" %></span>
6
7
  <div class="dropdown-pane" id="export-dropdown" data-dropdown data-auto-focus="true" data-close-on-click="true">
7
8
  <ul class="vertical menu add-features">
8
- <% %w{csv json}.each do |format| %>
9
- <li class="exports--format--<%= format %> exports--registrations"><%= link_to t("decidim.admin.exports.export_as", name: t("decidim.#{current_feature.manifest.name}.admin.exports.registrations"), export_format: format.upcase), export_meeting_registrations_path(meeting_id: meeting, format: format) %></li>
9
+ <% %w{CSV JSON Excel}.each do |format| %>
10
+ <li class="exports--format--<%= format.downcase %> exports--registrations"><%= link_to t("decidim.admin.exports.export_as", name: t("decidim.#{current_feature.manifest.name}.admin.exports.registrations"), export_format: format), export_meeting_registrations_path(meeting_id: meeting, format: format) %></li>
10
11
  <% end %>
11
12
  </ul>
12
13
  </div>
@@ -30,4 +31,4 @@
30
31
  </div>
31
32
  </div>
32
33
 
33
- <%= javascript_include_tag "decidim/meetings/admin/registrations_form" %>
34
+ <%= javascript_include_tag "decidim/meetings/admin/registrations_form" %>
@@ -1,6 +1,6 @@
1
1
  <%= content_for(:title, translated_attribute(model.title)) %>
2
2
  <%= render partial: "decidim/meetings/meetings/datetime", locals: { meeting: model } %>
3
- <%== meeting_description(model) %>
3
+ <%= sanitize meeting_description(model) %>
4
4
  <div class="address card__extra">
5
5
  <div class="address__icon">
6
6
  <%= icon "meetings", remove_icon_class: true, width: 40, height: 70 %>
@@ -14,7 +14,7 @@
14
14
  <%= meeting.start_time.strftime("%H:%M") %> - <%= meeting.end_time.strftime("%H:%M") %>
15
15
  </div>
16
16
  </div>
17
- <%== translated_attribute meeting.description %>
17
+ <%= sanitize translated_attribute meeting.description %>
18
18
  </div>
19
19
  </article>
20
20
  </div>
@@ -19,7 +19,7 @@
19
19
  <h5 class="card__title"><%= translated_attribute meeting.title %></h5>
20
20
  <% end %>
21
21
  <%= render partial: "datetime", locals: { meeting: meeting } %>
22
- <%== meeting_description(meeting) %>
22
+ <%= sanitize meeting_description(meeting) %>
23
23
  <%= render partial: "decidim/shared/tags", locals: { resource: meeting, tags_class_extra: "tags--meeting" } %>
24
24
  <div class="address card__extra">
25
25
  <div class="address__icon">
@@ -1,7 +1,7 @@
1
1
  <div class="reveal" data-reveal id="meeting-registration-confirm">
2
2
  <div class="row">
3
3
  <div class="columns medium-10 medium-offset-1 help-text">
4
- <%== translated_attribute(meeting.registration_terms) %>
4
+ <%= sanitize translated_attribute(meeting.registration_terms) %>
5
5
  </div>
6
6
  </div>
7
7
  <div class="row">
@@ -62,14 +62,14 @@
62
62
  </div>
63
63
  <div class="columns mediumlarge-8 mediumlarge-pull-4">
64
64
  <div class="section">
65
- <p><%== translated_attribute meeting.description %></p>
65
+ <p><%= sanitize translated_attribute meeting.description %></p>
66
66
  <%= render partial: "decidim/shared/static_map", locals: { icon_name: "meetings", geolocalizable: meeting } %>
67
67
  <%= render partial: "decidim/shared/tags", locals: { resource: meeting, tags_class_extra: "tags--meeting" } %>
68
68
  </div>
69
69
  <% if meeting.closed? %>
70
70
  <div class="section">
71
71
  <h3 class="section-heading"><%= t(".meeting_report") %></h3>
72
- <%== translated_attribute meeting.closing_report %>
72
+ <%= sanitize translated_attribute meeting.closing_report %>
73
73
  </div>
74
74
  <% end %>
75
75
  <%= linked_resources_for meeting, :proposals, "proposals_from_meeting" %>
@@ -0,0 +1,13 @@
1
+ <p><%= t("devise.mailer.invitation_instructions.hello", email: @resource.name) %></p>
2
+
3
+ <p>
4
+ <%= t("decidim.meetings.admin.invite_join_meeting_mailer.invite.invited_you_to_join_a_meeting", invited_by: @resource.invited_by.name, application: @resource.organization.name) %>
5
+ </p>
6
+
7
+ <p><%= link_to t("devise.mailer.invitation_instructions.accept"), accept_invitation_url(@resource, invitation_token: @token, invite_redirect: Decidim::EngineRouter.main_proxy(@opts[:meeting].feature).meeting_registration_path(meeting_id: @opts[:meeting], participatory_space_id: @opts[:meeting].feature.participatory_space), host: @resource.organization.host) %></p>
8
+
9
+ <% if @resource.invitation_due_at %>
10
+ <p><%= t("devise.mailer.invitation_instructions.accept_until", due_date: l(@resource.invitation_due_at, format: :long)) %></p>
11
+ <% end %>
12
+
13
+ <p><%= t("devise.mailer.invitation_instructions.ignore").html_safe %></p>
@@ -0,0 +1,11 @@
1
+ <%= t("devise.mailer.invitation_instructions.hello", email: @resource.name) %>
2
+
3
+ <%= t("decidim.meetings.admin.invite_join_meeting_mailer.invite.invited_you_to_join_a_meeting", invited_by: @resource.invited_by.name, application: @resource.organization.name) %>
4
+
5
+ <% accept_invitation_url(@resource, invitation_token: @token, invite_redirect: Decidim::EngineRouter.main_proxy(@opts[:meeting].feature).meeting_registration_path(meeting_id: @opts[:meeting], participatory_space_id: @opts[:meeting].feature.participatory_space), host: @resource.organization.host) %>
6
+
7
+ <% if @resource.invitation_due_at %>
8
+ <%= t("devise.mailer.invitation_instructions.accept_until", due_date: l(@resource.invitation_due_at, format: :long)) %>
9
+ <% end %>
10
+
11
+ <%= t("devise.mailer.invitation_instructions.ignore").html_safe %>
@@ -45,6 +45,18 @@ ca:
45
45
  admin:
46
46
  exports:
47
47
  registrations: Inscripcions
48
+ invite_join_meeting_mailer:
49
+ invite:
50
+ invited_you_to_join_a_meeting: "%{invited_by} t'ha convidat a participar en una trobada a %{application}. Pots acceptar la invitació a través de l'enllaç següent."
51
+ join: Uneix-te a la trobada '%{meeting_title}'
52
+ invites:
53
+ create:
54
+ error: Hi ha hagut un problema al convidar l'usuari a unir-se a la trobada.
55
+ success: L'usuari s'ha convidat correctament a unir-se a la trobada.
56
+ new:
57
+ explanation: L'usuari serà convidat a participar en una trobada. Si el correu electrònic no està registrat, també se'l convidarà a l'organització.
58
+ invite: Convidar
59
+ new_invite: Convida l'usuari
48
60
  meeting_closes:
49
61
  edit:
50
62
  close: Tancar
@@ -76,6 +88,7 @@ ca:
76
88
  save: Desa
77
89
  form:
78
90
  available_slots_help: Deixeu-lo a 0 si teniu espais il·limitats disponibles.
91
+ invite_user: Convida l'usuari
79
92
  registrations_count:
80
93
  one: Hi ha hagut 1 inscripció.
81
94
  other: Hi ha hagut %{count} inscripcions.
@@ -109,6 +122,9 @@ ca:
109
122
  email_subject: La trobada "%{resource_title}" s'ha actualitzat
110
123
  notification_title: La trobada <a href="%{resource_path}">%{resource_title}</a> ha estat actualitzada.
111
124
  mailer:
125
+ invite_join_meeting_mailer:
126
+ invite:
127
+ subject: Assumpte
112
128
  registration_mailer:
113
129
  confirmation:
114
130
  subject: La teva inscripció a la trobada ha estat confirmada
@@ -173,3 +189,7 @@ ca:
173
189
  proposals_from_meeting:
174
190
  meeting_proposals: 'Propostes relacionades:'
175
191
  proposal_meetings: 'Trobades relacionades:'
192
+ devise:
193
+ mailer:
194
+ join_meeting:
195
+ subject: Assumpte
@@ -45,6 +45,18 @@ en:
45
45
  admin:
46
46
  exports:
47
47
  registrations: Registrations
48
+ invite_join_meeting_mailer:
49
+ invite:
50
+ invited_you_to_join_a_meeting: "%{invited_by} has invited you to join a meeting at %{application}. You can accept it through the link below."
51
+ join: Join meeting '%{meeting_title}'
52
+ invites:
53
+ create:
54
+ error: There's been a problem while inviting the user to join the meeting.
55
+ success: User successfully invited to join the meeting.
56
+ new:
57
+ explanation: The user will be invited to join a meeting. If the email is not registered they will be invited to the organization as well.
58
+ invite: Invite
59
+ new_invite: Invite user
48
60
  meeting_closes:
49
61
  edit:
50
62
  close: Close
@@ -76,6 +88,7 @@ en:
76
88
  save: Save
77
89
  form:
78
90
  available_slots_help: Leave it to 0 if you have unlimited slots available.
91
+ invite_user: Invite user
79
92
  registrations_count:
80
93
  one: There has been 1 registration.
81
94
  other: There has been %{count} registrations.
@@ -110,6 +123,9 @@ en:
110
123
  email_subject: The "%{resource_title}" meeting was updated
111
124
  notification_title: The <a href="%{resource_path}">%{resource_title}</a> meeting was updated.
112
125
  mailer:
126
+ invite_join_meeting_mailer:
127
+ invite:
128
+ subject: Subject
113
129
  registration_mailer:
114
130
  confirmation:
115
131
  subject: Your meeting's registration has been confirmed
@@ -175,3 +191,7 @@ en:
175
191
  proposals_from_meeting:
176
192
  meeting_proposals: 'Related proposals:'
177
193
  proposal_meetings: 'Related meetings:'
194
+ devise:
195
+ mailer:
196
+ join_meeting:
197
+ subject: Subject
@@ -45,6 +45,18 @@ es:
45
45
  admin:
46
46
  exports:
47
47
  registrations: Inscripciones
48
+ invite_join_meeting_mailer:
49
+ invite:
50
+ invited_you_to_join_a_meeting: "%{invited_by} te ha invitado a unirte a un encuentro en %{application}. Puedes aceptarlo a través del siguiente enlace."
51
+ join: Únete al encuentro '%{meeting_title}'
52
+ invites:
53
+ create:
54
+ error: Ha habido un problema al invitar al usuario a unirse al encuentro.
55
+ success: El usuario ha sido invitado con éxito a unirse al encuentro.
56
+ new:
57
+ explanation: El usuario será invitado a unirse a un encuentro. Si el correo electrónico no está registrado, será invitado a la organización también.
58
+ invite: Invitar
59
+ new_invite: Invitar usuario
48
60
  meeting_closes:
49
61
  edit:
50
62
  close: Cerrar
@@ -76,6 +88,7 @@ es:
76
88
  save: Guardar
77
89
  form:
78
90
  available_slots_help: Déjalo a 0 si tiene inscripciones ilimitadas.
91
+ invite_user: Invitar usuario
79
92
  registrations_count:
80
93
  one: Ha habido 1 inscripción.
81
94
  other: Ha habido %{count} inscripciones.
@@ -109,6 +122,9 @@ es:
109
122
  email_subject: La reunión "%{resource_title}" ha sido actualizada
110
123
  notification_title: La reunión <a href="%{resource_path}">%{resource_title}</a> ha sido actualizada.
111
124
  mailer:
125
+ invite_join_meeting_mailer:
126
+ invite:
127
+ subject: Asunto
112
128
  registration_mailer:
113
129
  confirmation:
114
130
  subject: La inscripción a tu encuentro ha sido confirmada
@@ -173,3 +189,7 @@ es:
173
189
  proposals_from_meeting:
174
190
  meeting_proposals: 'Propuestas relacionadas:'
175
191
  proposal_meetings: 'Encuentros relacionados:'
192
+ devise:
193
+ mailer:
194
+ join_meeting:
195
+ subject: Asunto
@@ -21,7 +21,7 @@ eu:
21
21
  features:
22
22
  meetings:
23
23
  actions:
24
- join: Parte hartu
24
+ join: Bat egin
25
25
  name: Topaketa-zerrenda
26
26
  settings:
27
27
  global:
@@ -44,6 +44,18 @@ eu:
44
44
  admin:
45
45
  exports:
46
46
  registrations: Izen-emateak
47
+ invite_join_meeting_mailer:
48
+ invite:
49
+ invited_you_to_join_a_meeting: "%{invited_by} gonbidatu zaitu %{application} bileran. Beheko estekan onartu dezakezu."
50
+ join: Erregistratu bilera '%{meeting_title}'
51
+ invites:
52
+ create:
53
+ error: Arazo bat izan da erabiltzaileak bileran sartzeko gonbita emanda.
54
+ success: Erabiltzailea behar bezala gonbidatu bilera batera.
55
+ new:
56
+ explanation: Erabiltzailea bilera batera gonbidatuko zaizu. Posta elektronikoa ez bada erregistratuta, erakundera gonbidatuko dute.
57
+ invite: Gonbit egin
58
+ new_invite: Gonbidatu erabiltzailea
47
59
  meeting_closes:
48
60
  edit:
49
61
  close: Itxi
@@ -74,43 +86,47 @@ eu:
74
86
  edit:
75
87
  save: Gorde
76
88
  form:
77
- available_slots_help: Utzi 0 mugak mugagabea badaude.
89
+ available_slots_help: Utzi 0an izen-emate mugagabeak edukiz gero.
90
+ invite_user: Gonbidatu erabiltzailea
78
91
  registrations_count:
79
- one: Izena eman da.
80
- other: '%{count} matrikulazio izan dira.'
92
+ one: Izen-emate bat egin da.
93
+ other: '%{count} izen-emate egin dira.'
81
94
  update:
82
- invalid: Arazo bat izan da erregistroaren ezarpenak gordetzean.
83
- success: Bilera erregistratzeen ezarpenak behar bezala gorde dira.
95
+ invalid: Arazo bat izan da izen-ematearen konfigurazioa gordetzean.
96
+ success: Topaketen izen-emateen konfigurazioak zuzen gorde dira.
84
97
  events:
85
98
  close_meeting_event:
86
- email_intro: '"%{resource_title}" bilera itxita zegoen. Bere orriko ondorioak irakur ditzakezu:'
87
- email_outro: Jakinarazpen hori jaso duzu "%{resource_title}" bilera jarraitzen duzulako. Aurreko esteka estekan jarrai dezakezu.
88
- email_subject: '"%{resource_title}" bilera itxita zegoen'
89
- notification_title: <a href="%{resource_path}">%{resource_title}</a> bilera itxita zegoen.
99
+ email_intro: '%{resource_title} bilera itxi da. Ondorioak orrian bertan irakur ditzakezu:'
100
+ email_outro: Jakinarazpen hau jaso duzu "%{resource_title} bilera jarraitzen duzulako. Jarraitzeari utzi diezaiokezu aurreko estekan.
101
+ email_subject: '%{resource_title} bilera itxi da'
102
+ notification_title: <a href="%{resource_path}">%{resource_title}</a> bilera itxi da.
90
103
  meeting_registrations_enabled:
91
- email_intro: '"%{resource_title}" topaketak erregistroak gaitu ditu. Zeure burua erregistratu dezakezu bere orrialdean:'
92
- email_outro: Jakinarazpen hori jaso duzu "%{resource_title}" bilera jarraitzen duzulako. Aurreko esteka estekan jarrai dezakezu.
93
- email_subject: '"%{resource_title}" topaketak erregistroak gaitu ditu.'
94
- notification_title: <a href="%{resource_path}">%{resource_title}</a> bilera erregistratzeak gaitu du.
104
+ email_intro: '“%{resource_title} bilerak izen-emateak aktibatu ditu. Izena eman dezakezu orrian bertan:'
105
+ email_outro: Jakinarazpen hau jaso duzu "%{resource_title} topaketa jarraitzen duzulako. Jarraitzeari utzi diezaiokezu aurreko estekan.
106
+ email_subject: '“%{resource_title} topaketak izen-emateak aktibatu ditu.'
107
+ notification_title: <a href="%{resource_path}">%{resource_title}</a> topaketak izen-emateak aktibatu ditu.
95
108
  meeting_registrations_over_percentage:
96
- email_intro: '"%{resource_title}" bilera okupatutako zirrikituak %{percentage} baino gehiagokoak dira.'
97
- email_outro: Jakinarazpen hau jaso duzu bileraren parte hartzaileen gunea delako.
98
- email_subject: '"%{resource_title}" bilera okupatutako zirrikituak %{percentage} baino gehiago dira.'
99
- notification_title: <a href="%{resource_path}">%{resource_title}</a> bilerako slot okupatuak %{percentage} baino gehiagokoak dira.
109
+ email_intro: '"%{resource_title}" (e)an beteta dauden izen-emateak honako hauek dira: %{percentage}%.'
110
+ email_outro: Jakinarazpen hau jaso duzu bileraren gune partizipatiboko administratzaile bat zarelako.
111
+ email_subject: '"%{resource_title}" (e)an beteta dauden izen-emateak honako hauek dira: %{percentage}%'
112
+ notification_title: '<a href="%{resource_path}">%{resource_title}</a>-ko izen-emateak honako hauek dira: %{percentage}%.'
100
113
  upcoming_meeting_event:
101
- email_intro: '"%{resource_title}" topaketa 48 ordu baino gutxiagoan hasiko da.'
102
- email_outro: Jakinarazpen hori jaso duzu "%{resource_title}" bilera jarraitzen duzulako. Aurreko esteka estekan jarrai dezakezu.
103
- email_subject: '"%{resource_title}" topaketa 48 ordu baino gutxiagoan hasiko da.'
104
- notification_title: <a href="%{resource_path}">%{resource_title}</a> topaketa 48 ordu baino gutxiagoan hasiko da.
114
+ email_intro: '"%{resource_title}" bilera 48 ordu baino lehenago hasiko da.'
115
+ email_outro: Jakinarazpen hau jaso duzu "%{resource_title} bilera jarraitzen duzulako. Jarraitzeari utzi diezaiokezu aurreko estekan.
116
+ email_subject: '"%{resource_title}" bilera 48 ordu baino lehenago hasiko da.'
117
+ notification_title: <a href="%{resource_path}">%{resource_title}</a> bilera 48 ordu baino lehenago hasiko da.
105
118
  update_meeting_event:
106
- email_intro: '"%{resource_title}" bilera eguneratu da. Bertsio berria bere orritik irakurri dezakezu:'
107
- email_outro: Jakinarazpen hori jaso duzu "%{resource_title}" bilera jarraitzen duzulako. Aurreko esteka estekan jarrai dezakezu.
108
- email_subject: '"%{resource_title}" bilera eguneratu da'
109
- notification_title: <a href="%{resource_path}">%{resource_title}</a> bilera eguneratu da.
119
+ email_intro: '"%{resource_title}" bilera eguneratua izan zen. Bertsio berria orrian bertan irakur dezakezu:'
120
+ email_outro: Jakinarazpen hau jaso duzu "%{resource_title} bilera jarraitzen duzulako. Jarraitzeari utzi diezaiokezu aurreko estekan.
121
+ email_subject: '"%{resource_title}" bilera eguneratua izan da'
122
+ notification_title: <a href="%{resource_path}">%{resource_title}</a> eguneratua izan da.
110
123
  mailer:
124
+ invite_join_meeting_mailer:
125
+ invite:
126
+ subject: Gaia
111
127
  registration_mailer:
112
128
  confirmation:
113
- subject: Zure bileraren erregistroa baieztatu da
129
+ subject: Zure topaketarako izen-ematea baieztatua izan da
114
130
  meetings:
115
131
  filters:
116
132
  category: Kategoria
@@ -132,19 +148,19 @@ eu:
132
148
  no_meetings_warning: Ez dago bilaketa-irizpidearekin bat datorren topaketarik, edo ez dago ezein topaketarik programaturik.
133
149
  upcoming_meetings_warning: Orain ez dago topaketarik programaturik, baina aurreko topaketak ikus ditzakezu.
134
150
  registration_confirm:
135
- cancel: Utzi
151
+ cancel: Ezeztatu
136
152
  confirm: Baieztatu
137
153
  show:
138
154
  attendees: Bertaratuen kopurua
139
155
  contributions: Ekarpen-kopurua
140
- going: joatean
141
- join: Erregistratu bilera
156
+ going: Ari da
157
+ join: Izena eman topaketan
142
158
  meeting_report: Topaketaren txostena
143
- no_slots_available: Ez dago slotarik erabilgarri
159
+ no_slots_available: Ez dago leku librerik
144
160
  organizations: Bertaratutako erakundeak
145
161
  remaining_slots:
146
- one: 1 zutoina geratzen da
147
- other: "%{count} zutoinak geratzen dira"
162
+ one: Izen-emate 1 erabilgarri
163
+ other: "%{count} izen-emate erabilgarri"
148
164
  models:
149
165
  meeting:
150
166
  fields:
@@ -156,15 +172,15 @@ eu:
156
172
  read_more: "(geihago irakurri)"
157
173
  registration_mailer:
158
174
  confirmation:
159
- confirmed_html: Zure izen-ematea <a href="%{url}">%{title}</a> topatu da.
160
- details: Bilera xehetasunak eranskinetan aurkituko dituzu.
175
+ confirmed_html: Zure izen-ematea baieztatu da <a href="%{url}">%{title}</a> topaketarako.
176
+ details: Topaketaren xehetasunak aurkituko dituzu eranskinean.
161
177
  registrations:
162
178
  create:
163
- invalid: Arazo bat izan da bilera honetan.
164
- success: Bilera ondo sartu zara.
179
+ invalid: Arazo bat izan da topaketa honekin bat egitean.
180
+ success: Topaketan izena ongi eman duzu.
165
181
  destroy:
166
- invalid: Arazo bat izan da bilera hau utzita.
167
- success: Bilera behar bezala utzi duzu.
182
+ invalid: Arazo bat izan da topaketa honetatik ateratzean.
183
+ success: Topaketatik ongi atera zara.
168
184
  resource_links:
169
185
  meetings_through_proposals:
170
186
  meeting_results: 'Topaketaren emaitzak:'
@@ -172,3 +188,7 @@ eu:
172
188
  proposals_from_meeting:
173
189
  meeting_proposals: 'Topaketari dagozkion proposamenak:'
174
190
  proposal_meetings: 'Proposamenarekin lotutako topaketak:'
191
+ devise:
192
+ mailer:
193
+ join_meeting:
194
+ subject: Gaia