decidim-meetings 0.6.8 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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