decidim-meetings 0.9.3 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/app/commands/decidim/meetings/admin/close_meeting.rb +13 -7
  3. data/app/commands/decidim/meetings/admin/create_meeting.rb +13 -1
  4. data/app/commands/decidim/meetings/admin/destroy_meeting.rb +43 -0
  5. data/app/commands/decidim/meetings/admin/update_meeting.rb +3 -1
  6. data/app/controllers/decidim/meetings/admin/attachment_collections_controller.rb +29 -0
  7. data/app/controllers/decidim/meetings/admin/meetings_controller.rb +6 -4
  8. data/app/events/decidim/meetings/create_meeting_event.rb +8 -0
  9. data/app/forms/decidim/meetings/admin/meeting_form.rb +10 -3
  10. data/app/mailers/decidim/meetings/admin/invite_join_meeting_mailer.rb +1 -1
  11. data/app/models/decidim/meetings/meeting.rb +11 -1
  12. data/app/presenters/decidim/meetings/admin_log/meeting_presenter.rb +53 -0
  13. data/app/views/decidim/meetings/admin/meetings/index.html.erb +4 -0
  14. data/app/views/decidim/meetings/meetings/show.html.erb +1 -1
  15. data/app/views/decidim/participatory_processes/participatory_process_groups/_highlighted_meetings.html.erb +15 -0
  16. data/app/views/decidim/participatory_processes/participatory_process_groups/_meeting.html.erb +10 -0
  17. data/app/views/decidim/participatory_spaces/_highlighted_meetings.html.erb +19 -0
  18. data/app/views/decidim/participatory_spaces/_meeting.html.erb +14 -0
  19. data/config/locales/ca.yml +23 -1
  20. data/config/locales/en.yml +22 -0
  21. data/config/locales/es.yml +22 -0
  22. data/config/locales/eu.yml +22 -0
  23. data/config/locales/fi.yml +22 -0
  24. data/config/locales/fr.yml +25 -3
  25. data/config/locales/gl.yml +22 -0
  26. data/config/locales/it.yml +22 -0
  27. data/config/locales/nl.yml +22 -0
  28. data/config/locales/pl.yml +22 -8
  29. data/config/locales/pt-BR.yml +22 -0
  30. data/config/locales/pt.yml +22 -0
  31. data/config/locales/sv.yml +22 -0
  32. data/config/locales/uk.yml +22 -3
  33. data/lib/decidim/meetings/admin_engine.rb +1 -0
  34. data/lib/decidim/meetings/engine.rb +34 -0
  35. data/lib/decidim/meetings/feature.rb +13 -0
  36. data/lib/decidim/meetings/test/factories.rb +9 -0
  37. data/lib/decidim/meetings/version.rb +1 -1
  38. metadata +23 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 61079b47c6d465bf1466d69ca7b4760e4bef2a70dc822ba2490dd0e9dd1fa659
4
- data.tar.gz: 32f5633ee88cc041bb014103695e9f2babb6bc7281c88155c1c3a2774d41de9d
3
+ metadata.gz: 3493a74548421f55b6a89175eb56a4033ae876c525a0ca53fdc74ebf8a6937f2
4
+ data.tar.gz: c394ccff7f76d78b7cc4f95386effad8e4642842627b1e969c9f96e0ea9473fb
5
5
  SHA512:
6
- metadata.gz: f783a48a57a1c436c0b6e50795313a63adeb604ad20cc2c8389164197d4bd168cc610ce74490f910a33d3500fabd7e969256abbea67ed4409c00a6916667253c
7
- data.tar.gz: 1cad2a321f83f67be4a04b3e334ba0ced1ba4779e2d6808a38c5872dc9b69e5eef4000b3d5f4ee150c5c5ce4ae7e2824e2034667da94c1f1731bfdf59c345ad2
6
+ metadata.gz: 27421ab6254ec7d9cbdfa9bba0f6f4489ccc5bde2521d44e04dd73e3213cc8d76832aec89448d3f9684c2f42d0d8d35806855a6617a4c30f61361783c0ea7c19
7
+ data.tar.gz: 62c9f79b113fea3964b51a619464b6110b90a7a439cad6c5671b0fcce113b2702979262b6f7d7eab1b9008f5d7f1904f9d5c09b8ee2b632ad08c95973768b34f
@@ -34,13 +34,19 @@ module Decidim
34
34
  attr_reader :form, :meeting
35
35
 
36
36
  def close_meeting
37
- meeting.update_attributes!(
38
- closing_report: form.closing_report,
39
- attendees_count: form.attendees_count,
40
- contributions_count: form.contributions_count,
41
- attending_organizations: form.attending_organizations,
42
- closed_at: form.closed_at
43
- )
37
+ Decidim.traceability.perform_action!(
38
+ :close,
39
+ meeting,
40
+ form.current_user
41
+ ) do
42
+ meeting.update!(
43
+ closing_report: form.closing_report,
44
+ attendees_count: form.attendees_count,
45
+ contributions_count: form.contributions_count,
46
+ attending_organizations: form.attending_organizations,
47
+ closed_at: form.closed_at
48
+ )
49
+ end
44
50
 
45
51
  Decidim::EventsManager.publish(
46
52
  event: "decidim.events.meetings.meeting_closed",
@@ -19,6 +19,7 @@ module Decidim
19
19
  transaction do
20
20
  create_meeting!
21
21
  schedule_upcoming_meeting_notification
22
+ send_notification
22
23
  end
23
24
 
24
25
  broadcast(:ok, @meeting)
@@ -27,7 +28,9 @@ module Decidim
27
28
  private
28
29
 
29
30
  def create_meeting!
30
- @meeting = Meeting.create!(
31
+ @meeting = Decidim.traceability.create!(
32
+ Meeting,
33
+ @form.current_user,
31
34
  scope: @form.scope,
32
35
  category: @form.category,
33
36
  title: @form.title,
@@ -50,6 +53,15 @@ module Decidim
50
53
  .set(wait_until: @meeting.start_time - 2.days)
51
54
  .perform_later(@meeting.id, checksum)
52
55
  end
56
+
57
+ def send_notification
58
+ Decidim::EventsManager.publish(
59
+ event: "decidim.events.meetings.meeting_created",
60
+ event_class: Decidim::Meetings::CreateMeetingEvent,
61
+ resource: @meeting,
62
+ recipient_ids: @meeting.participatory_space.followers.pluck(:id)
63
+ )
64
+ end
53
65
  end
54
66
  end
55
67
  end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Meetings
5
+ module Admin
6
+ # This command is executed when the user destroys a Meeting from the admin
7
+ # panel.
8
+ class DestroyMeeting < Rectify::Command
9
+ # Initializes a CloseMeeting Command.
10
+ #
11
+ # meeting - The current instance of the page to be closed.
12
+ # current_user - the user performing the action
13
+ def initialize(meeting, current_user)
14
+ @meeting = meeting
15
+ @current_user = current_user
16
+ end
17
+
18
+ # Destroys the meeting if valid.
19
+ #
20
+ # Broadcasts :ok if successful, :invalid otherwise.
21
+ def call
22
+ destroy_meeting
23
+
24
+ broadcast(:ok)
25
+ end
26
+
27
+ private
28
+
29
+ attr_reader :current_user, :meeting
30
+
31
+ def destroy_meeting
32
+ Decidim.traceability.perform_action!(
33
+ :delete,
34
+ meeting,
35
+ current_user
36
+ ) do
37
+ meeting.destroy!
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -35,7 +35,9 @@ module Decidim
35
35
  attr_reader :form, :meeting
36
36
 
37
37
  def update_meeting!
38
- meeting.update_attributes!(
38
+ Decidim.traceability.update!(
39
+ meeting,
40
+ form.current_user,
39
41
  scope: form.scope,
40
42
  category: form.category,
41
43
  title: form.title,
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Meetings
5
+ module Admin
6
+ # Controller that allows managing all the attachment collections for an assembly.
7
+ #
8
+ class AttachmentCollectionsController < Admin::ApplicationController
9
+ include Decidim::Admin::Concerns::HasAttachmentCollections
10
+
11
+ def after_destroy_path
12
+ meeting_attachment_collections_path(meeting, meeting.feature, current_participatory_space)
13
+ end
14
+
15
+ def collection_for
16
+ meeting
17
+ end
18
+
19
+ def meeting
20
+ @meeting ||= meetings.find(params[:meeting_id])
21
+ end
22
+
23
+ def authorization_object
24
+ meeting.feature
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -46,11 +46,13 @@ module Decidim
46
46
  end
47
47
 
48
48
  def destroy
49
- meeting.destroy!
50
-
51
- flash[:notice] = I18n.t("meetings.destroy.success", scope: "decidim.meetings.admin")
49
+ DestroyMeeting.call(meeting, current_user) do
50
+ on(:ok) do
51
+ flash[:notice] = I18n.t("meetings.destroy.success", scope: "decidim.meetings.admin")
52
52
 
53
- redirect_to meetings_path
53
+ redirect_to meetings_path
54
+ end
55
+ end
54
56
  end
55
57
  end
56
58
  end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Meetings
5
+ class CreateMeetingEvent < Decidim::Events::SimpleEvent
6
+ end
7
+ end
8
+ end
@@ -11,6 +11,7 @@ module Decidim
11
11
  translatable_attribute :description, String
12
12
  translatable_attribute :location, String
13
13
  translatable_attribute :location_hints, String
14
+
14
15
  attribute :address, String
15
16
  attribute :latitude, Float
16
17
  attribute :longitude, Float
@@ -30,7 +31,8 @@ module Decidim
30
31
  validates :current_feature, presence: true
31
32
  validates :category, presence: true, if: ->(form) { form.decidim_category_id.present? }
32
33
  validates :scope, presence: true, if: ->(form) { form.decidim_scope_id.present? }
33
- validate { errors.add(:decidim_scope_id, :invalid) if current_participatory_space&.scope && !current_participatory_space&.scope&.ancestor_of?(scope) }
34
+
35
+ validate :scope_belongs_to_participatory_space_scope
34
36
 
35
37
  delegate :categories, to: :current_feature
36
38
 
@@ -46,8 +48,7 @@ module Decidim
46
48
  #
47
49
  # Returns a Decidim::Scope
48
50
  def scope
49
- return unless current_feature
50
- @scope ||= @decidim_scope_id ? current_feature.scopes.find_by(id: @decidim_scope_id) : current_participatory_space&.scope
51
+ @scope ||= @decidim_scope_id ? current_participatory_space.scopes.find_by(id: @decidim_scope_id) : current_participatory_space.scope
51
52
  end
52
53
 
53
54
  # Scope identifier
@@ -61,6 +62,12 @@ module Decidim
61
62
  return unless current_feature
62
63
  @category ||= categories.find_by(id: decidim_category_id)
63
64
  end
65
+
66
+ private
67
+
68
+ def scope_belongs_to_participatory_space_scope
69
+ errors.add(:decidim_scope_id, :invalid) if current_participatory_space.out_of_scope?(scope)
70
+ end
64
71
  end
65
72
  end
66
73
  end
@@ -35,7 +35,7 @@ module Decidim
35
35
  private
36
36
 
37
37
  def routes
38
- @router ||= Decidim::EngineRouter.main_proxy(@meeting.feature)
38
+ @routes ||= Decidim::EngineRouter.main_proxy(@meeting.feature)
39
39
  end
40
40
  end
41
41
  end
@@ -7,12 +7,15 @@ module Decidim
7
7
  class Meeting < Meetings::ApplicationRecord
8
8
  include Decidim::Resourceable
9
9
  include Decidim::HasAttachments
10
+ include Decidim::HasAttachmentCollections
10
11
  include Decidim::HasFeature
11
12
  include Decidim::HasReference
12
- include Decidim::HasScope
13
+ include Decidim::ScopableFeature
13
14
  include Decidim::HasCategory
14
15
  include Decidim::Followable
15
16
  include Decidim::Comments::Commentable
17
+ include Decidim::Traceable
18
+ include Decidim::Loggable
16
19
 
17
20
  has_many :registrations, class_name: "Decidim::Meetings::Registration", foreign_key: "decidim_meeting_id", dependent: :destroy
18
21
 
@@ -22,6 +25,13 @@ module Decidim
22
25
 
23
26
  geocoded_by :address, http_headers: ->(proposal) { { "Referer" => proposal.feature.organization.host } }
24
27
 
28
+ scope :past, -> { where(arel_table[:end_time].lteq(Time.current)) }
29
+ scope :upcoming, -> { where(arel_table[:start_time].gt(Time.current)) }
30
+
31
+ def self.log_presenter_class_for(_log)
32
+ Decidim::Meetings::AdminLog::MeetingPresenter
33
+ end
34
+
25
35
  def closed?
26
36
  closed_at.present?
27
37
  end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Meetings
5
+ module AdminLog
6
+ # This class holds the logic to present a `Decidim::Meetings::Meeting`
7
+ # for the `AdminLog` log.
8
+ #
9
+ # Usage should be automatic and you shouldn't need to call this class
10
+ # directly, but here's an example:
11
+ #
12
+ # action_log = Decidim::ActionLog.last
13
+ # view_helpers # => this comes from the views
14
+ # MeetingPresenter.new(action_log, view_helpers).present
15
+ class MeetingPresenter < Decidim::Log::BasePresenter
16
+ private
17
+
18
+ def diff_fields_mapping
19
+ {
20
+ address: :string,
21
+ attendees_count: :integer,
22
+ attending_organizations: :string,
23
+ closed_at: :date,
24
+ closing_report: :i18n,
25
+ description: :i18n,
26
+ end_date: :date,
27
+ location: :i18n,
28
+ location_hints: :i18n,
29
+ start_date: :date,
30
+ title: :i18n
31
+ }
32
+ end
33
+
34
+ def action_string
35
+ case action
36
+ when "close", "create", "delete", "update"
37
+ "decidim.meetings.admin_log.meeting.#{action}"
38
+ else
39
+ super
40
+ end
41
+ end
42
+
43
+ def i18n_labels_scope
44
+ "activemodel.attributes.meeting"
45
+ end
46
+
47
+ def has_diff?
48
+ action == "close" || super
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -57,6 +57,10 @@
57
57
  <%= icon_link_to "lock-locked", edit_meeting_meeting_close_path(meeting_id: meeting.id, id: meeting.id), t("actions.close", scope: "decidim.meetings"), class: "action-icon--close" %>
58
58
  <% end %>
59
59
 
60
+ <% if can? :update, current_feature %>
61
+ <%= icon_link_to "folder", meeting_attachment_collections_path(meeting), t("actions.attachment_collections", scope: "decidim.meetings"), class: "action-icon--attachment_collections" %>
62
+ <% end %>
63
+
60
64
  <% if can? :update, current_feature %>
61
65
  <%= icon_link_to "paperclip", meeting_attachments_path(meeting), t("actions.attachments", scope: "decidim.meetings"), class: "action-icon--attachments" %>
62
66
  <% end %>
@@ -56,7 +56,7 @@
56
56
  </div>
57
57
  <% end %>
58
58
  </div>
59
- <%= feature_reference(meeting) %>
59
+ <%= resource_reference(meeting) %>
60
60
  <%= render partial: "decidim/shared/share_modal" %>
61
61
  <%= embed_modal_for meeting_meeting_widget_url(meeting, format: :js) %>
62
62
  </div>
@@ -0,0 +1,15 @@
1
+ <% if upcoming_meetings.any? %>
2
+ <section class="section row collapse upcoming_meetings">
3
+ <h2 class="section-heading"><%= t(".upcoming_meetings") %></h2>
4
+ <div class="row small-up-1 medium-up-2 large-up-3 card-grid">
5
+ <%= render partial: 'decidim/participatory_processes/participatory_process_groups/meeting', collection: upcoming_meetings %>
6
+ </div>
7
+ </section>
8
+ <% elsif past_meetings.any? %>
9
+ <section class="section row collapse past_meetings">
10
+ <h2 class="section-heading"><%= t(".past_meetings") %></h2>
11
+ <div class="row small-up-1 medium-up-2 large-up-3 card-grid">
12
+ <%= render partial: 'decidim/participatory_processes/participatory_process_groups/meeting', collection: past_meetings %>
13
+ </div>
14
+ </section>
15
+ <% end %>
@@ -0,0 +1,10 @@
1
+ <div class="column">
2
+ <article class="card card--meeting">
3
+ <div class="card__content">
4
+ <%= link_to resource_locator(meeting).path, class: "card__link" do %>
5
+ <h5 class="card__title"><%= translated_attribute meeting.title %></h5>
6
+ <% end %>
7
+ <%= render partial: "decidim/meetings/meetings/datetime", locals: { meeting: meeting } %>
8
+ </div>
9
+ </article>
10
+ </div>
@@ -0,0 +1,19 @@
1
+ <% if upcoming_meetings.any? %>
2
+ <div class="section upcoming_meetings">
3
+ <h4 class="section-heading">
4
+ <%= t(".upcoming_meetings") %> <a href="<%= main_feature_path(upcoming_meetings.first.feature) %>" class="text-small"><%= t(".see_all_meetings") %></a>
5
+ </h4>
6
+ <div class="card card--list">
7
+ <%= render partial: 'decidim/participatory_spaces/meeting', collection: upcoming_meetings %>
8
+ </div>
9
+ </div>
10
+ <% elsif past_meetings.any? %>
11
+ <div class="section past_meetings">
12
+ <h4 class="section-heading">
13
+ <%= t(".past_meetings") %> <a href="<%= main_feature_path(past_meetings.first.feature) %>" class="text-small"><%= t(".see_all_meetings") %></a>
14
+ </h4>
15
+ <div class="card card--list">
16
+ <%= render partial: 'decidim/participatory_spaces/meeting', collection: past_meetings %>
17
+ </div>
18
+ </div>
19
+ <% end %>
@@ -0,0 +1,14 @@
1
+ <div class="card--list__item">
2
+ <div class="card--list__text">
3
+ <div>
4
+ <a href="<%= resource_locator(meeting).path %>" class="card__link">
5
+ <h6 class="card--list__heading heading6">
6
+ <%= translated_attribute meeting.title %>
7
+ </h6>
8
+ <span class="text-medium">
9
+ <%= l meeting.start_time, format: :decidim_day_of_year %> - <%= l meeting.start_time, format: :time_of_day %> - <%= l meeting.end_time, format: :time_of_day %>
10
+ </span>
11
+ </a>
12
+ </div>
13
+ </div>
14
+ </div>
@@ -19,7 +19,7 @@ ca:
19
19
  registration_terms: Termes i condicions de l'inscripció
20
20
  registrations_enabled: Inscripcions obertes
21
21
  start_time: Hora d'inici
22
- title: Editar trobada
22
+ title: Títol
23
23
  decidim:
24
24
  events:
25
25
  meetings:
@@ -28,6 +28,11 @@ ca:
28
28
  email_outro: Has rebut aquesta notificació perquè estàs seguint la trobada "%{resource_title}". Pots deixar-la de seguir des de l'enllaç anterior.
29
29
  email_subject: S'ha tancat la trobada "%{resource_title}"
30
30
  notification_title: La trobada de <a href="%{resource_path}">%{resource_title}</a> s'ha tancat.
31
+ meeting_created:
32
+ email_intro: S'ha afegit la trobada "%{resource_title}" a l'espai "%{participatory_space_title}" que estàs seguint.
33
+ email_outro: Has rebut aquesta notificació perquè estàs seguint "%{participatory_space_title}". Pots deixar de seguir-lo des de l'enllaç anterior.
34
+ email_subject: Nova trobada a %{participatory_space_title}
35
+ notification_title: S'ha afegit la trobada <a href="%{resource_path}">%{resource_title}</a> a %{participatory_space_title}
31
36
  meeting_registrations_over_percentage:
32
37
  email_intro: La disponibilitat d'espais a la trobada "%{resource_title}" està per sobre del %{percentage}%.
33
38
  email_outro: Has rebut aquesta notificació perquè ets un administrador de l'espai participatiu d'aquesta trobada.
@@ -62,6 +67,7 @@ ca:
62
67
  comments_blocked: Comentaris bloquejats
63
68
  meetings:
64
69
  actions:
70
+ attachment_collections: Col·leccions
65
71
  attachments: Adjunts
66
72
  close: Tancar
67
73
  confirm_destroy: Segur que vols suprimir aquesta trobada?
@@ -124,6 +130,12 @@ ca:
124
130
  update:
125
131
  invalid: S'ha produït un problema en desar la configuració de la inscripció.
126
132
  success: La configuració de les inscripcions de la trobada s'ha desat correctament.
133
+ admin_log:
134
+ meeting:
135
+ close: "%{user_name} ha tancat la trobada %{resource_name} a l'espai %{space_name}"
136
+ create: "%{user_name} ha creat la trobada %{resource_name} a l'espai %{space_name}"
137
+ delete: "%{user_name} ha eliminat la trobada %{resource_name} a l'espai %{space_name}"
138
+ update: "%{user_name} ha actualitzat la trobada %{resource_name} a l'espai %{space_name}"
127
139
  mailer:
128
140
  invite_join_meeting_mailer:
129
141
  invite:
@@ -183,6 +195,16 @@ ca:
183
195
  destroy:
184
196
  invalid: Hi ha hagut un problema en sortir d'aquesta trobada.
185
197
  success: Heu deixat la trobada amb èxit.
198
+ participatory_processes:
199
+ participatory_process_groups:
200
+ highlighted_meetings:
201
+ past_meetings: Trobades anteriors
202
+ upcoming_meetings: Properes trobades
203
+ participatory_spaces:
204
+ highlighted_meetings:
205
+ past_meetings: Trobades anteriors
206
+ see_all_meetings: Veure totes les trobades
207
+ upcoming_meetings: Properes rrobades
186
208
  resource_links:
187
209
  meetings_through_proposals:
188
210
  meeting_results: 'Resultats relacionats:'
@@ -29,6 +29,11 @@ en:
29
29
  email_outro: You have received this notification because you are following the "%{resource_title}" meeting. You can unfollow it from the previous link.
30
30
  email_subject: The "%{resource_title}" meeting was closed
31
31
  notification_title: The <a href="%{resource_path}">%{resource_title}</a> meeting was closed.
32
+ meeting_created:
33
+ email_intro: The meeting "%{resource_title}" has been added to "%{participatory_space_title}" that you are following.
34
+ email_outro: You have received this notification because you are following "%{participatory_space_title}". You can unfollow it from the previous link.
35
+ email_subject: New meeting added to %{participatory_space_title}
36
+ notification_title: The meeting <a href="%{resource_path}">%{resource_title}</a> has been added to %{participatory_space_title}
32
37
  meeting_registrations_over_percentage:
33
38
  email_intro: The "%{resource_title}" meeting occupied slots are over %{percentage}%.
34
39
  email_outro: You have received this notification because you are an admin of the meeting's participatory space.
@@ -63,6 +68,7 @@ en:
63
68
  comments_blocked: Comments blocked
64
69
  meetings:
65
70
  actions:
71
+ attachment_collections: Collections
66
72
  attachments: Attachments
67
73
  close: Close
68
74
  confirm_destroy: Are you sure you want to delete this meeting?
@@ -126,6 +132,12 @@ en:
126
132
  update:
127
133
  invalid: There's been a problem saving the registration settings.
128
134
  success: Meeting registrations settings successfully saved.
135
+ admin_log:
136
+ meeting:
137
+ close: "%{user_name} closed the %{resource_name} meeting on the %{space_name} space"
138
+ create: "%{user_name} created the %{resource_name} meeting on the %{space_name} space"
139
+ delete: "%{user_name} deleted the %{resource_name} meeting on the %{space_name} space"
140
+ update: "%{user_name} updated the %{resource_name} meeting on the %{space_name} space"
129
141
  mailer:
130
142
  invite_join_meeting_mailer:
131
143
  invite:
@@ -186,6 +198,16 @@ en:
186
198
  destroy:
187
199
  invalid: There's been a problem leaving this meeting.
188
200
  success: You have left the meeting successfully.
201
+ participatory_processes:
202
+ participatory_process_groups:
203
+ highlighted_meetings:
204
+ past_meetings: Past meetings
205
+ upcoming_meetings: Upcoming meetings
206
+ participatory_spaces:
207
+ highlighted_meetings:
208
+ past_meetings: Past meetings
209
+ see_all_meetings: See all meetings
210
+ upcoming_meetings: Upcoming meetings
189
211
  resource_links:
190
212
  meetings_through_proposals:
191
213
  meeting_results: 'Related results:'
@@ -28,6 +28,11 @@ es:
28
28
  email_outro: Has recibido esta notificación porque sigues el encuentro "%{resource_title}". Puedes dejar de seguirlo en el enlace anterior.
29
29
  email_subject: Se ha cerrado el encuentro "%{resource_title}"
30
30
  notification_title: El encuentro <a href="%{resource_path}">%{resource_title}</a> ha sido cerrada.
31
+ meeting_created:
32
+ email_intro: Se ha añadido el encuentro "%{resource_title}" al espacio "%{participatory_space_title}" que estás siguiendo.
33
+ email_outro: Has recibido esta notificación porque sigues "%{participatory_space_title}". Puedes dejar de seguirlo en el enlace anterior.
34
+ email_subject: Nuevo encuentro añadido a %{participatory_space_title}
35
+ notification_title: Se ha añadido el encuentro <a href="%{resource_path}">%{resource_title}</a> a %{participatory_space_title}
31
36
  meeting_registrations_over_percentage:
32
37
  email_intro: Las inscripciones ocupadas en "%{resource_title}" son %{percentage}%.
33
38
  email_outro: Has recibido esta notificación porque eres es un administrador del espacio participativo de la reunión.
@@ -62,6 +67,7 @@ es:
62
67
  comments_blocked: Comentarios bloqueados
63
68
  meetings:
64
69
  actions:
70
+ attachment_collections: Colecciones
65
71
  attachments: Archivos adjuntos
66
72
  close: Cerrar
67
73
  confirm_destroy: '¿Está seguro de que quiere eliminar este encuentro?'
@@ -124,6 +130,12 @@ es:
124
130
  update:
125
131
  invalid: Se ha producido un problema al guardar la configuración de la inscripción.
126
132
  success: Se han guardado correctamente las configuraciones de inscripciones de encuentros.
133
+ admin_log:
134
+ meeting:
135
+ close: "%{user_name} cerró el encuentro %{resource_name} en el espacio %{space_name}"
136
+ create: "%{user_name} creó el encuentro %{resource_name} en el espacio %{space_name}"
137
+ delete: "%{user_name} eliminó el encuentro %{resource_name} en el espacio %{space_name}"
138
+ update: "%{user_name} actualizó el encuentro %{resource_name} en el espacio %{space_name}"
127
139
  mailer:
128
140
  invite_join_meeting_mailer:
129
141
  invite:
@@ -183,6 +195,16 @@ es:
183
195
  destroy:
184
196
  invalid: Ha habido un problema al salir de esta encuentro.
185
197
  success: Has salido del encuentro con éxito.
198
+ participatory_processes:
199
+ participatory_process_groups:
200
+ highlighted_meetings:
201
+ past_meetings: Encuentros pasados
202
+ upcoming_meetings: Próximos encuentros
203
+ participatory_spaces:
204
+ highlighted_meetings:
205
+ past_meetings: Encuentros pasados
206
+ see_all_meetings: Ver todos los encuentros
207
+ upcoming_meetings: Próximos encuentros
186
208
  resource_links:
187
209
  meetings_through_proposals:
188
210
  meeting_results: 'Resultados relacionados:'
@@ -28,6 +28,11 @@ eu:
28
28
  email_outro: Jakinarazpen hori jaso duzu "%{resource_title}" bilera jarraitzen duzulako. Aurreko esteka estekan jarrai dezakezu.
29
29
  email_subject: '"%{resource_title}" bilera itxita zegoen'
30
30
  notification_title: <a href="%{resource_path}">%{resource_title}</a> bilera itxita zegoen.
31
+ meeting_created:
32
+ email_intro: Bilera "%{resource_title}" | gehitu da "%{participatory_space_title}" " jarraitzen ari zarela.
33
+ email_outro: Jakinarazpena jaso duzu "%{participatory_space_title}" jarraitzen ari zarenagatik. Aurreko esteka estekan jarrai dezakezu.
34
+ email_subject: Bilera berria %{participatory_space_title}
35
+ notification_title: Bilera <a href="%{resource_path}">%{resource_title}</a> gehitu da %{participatory_space_title}
31
36
  meeting_registrations_over_percentage:
32
37
  email_intro: '"%{resource_title}" bilera okupatutako zirrikituak %{percentage} baino gehiagokoak dira.'
33
38
  email_outro: Jakinarazpen hau jaso duzu bileraren parte hartzaileen gunea delako.
@@ -62,6 +67,7 @@ eu:
62
67
  comments_blocked: Iruzkinak blokeatuta
63
68
  meetings:
64
69
  actions:
70
+ attachment_collections: Bilduma
65
71
  attachments: Eranskinak
66
72
  close: Itxi
67
73
  confirm_destroy: Ziur zaude topaketa hau ezabatu nahi duzula?
@@ -124,6 +130,12 @@ eu:
124
130
  update:
125
131
  invalid: Arazo bat izan da izen-ematearen konfigurazioa gordetzean.
126
132
  success: Topaketen izen-emateen konfigurazioak zuzen gorde dira.
133
+ admin_log:
134
+ meeting:
135
+ close: "%{user_name} %{resource_name} bilera %{space_name} espazioan itxi zen"
136
+ create: "%{user_name} %{resource_name} bilera sortu zen %{space_name} espazioan"
137
+ delete: "%{user_name} %{resource_name} topaketa ezabatu da %{space_name} espazioan"
138
+ update: "%{user_name} %{resource_name} topaketa %{space_name} espazioan eguneratu zen"
127
139
  mailer:
128
140
  invite_join_meeting_mailer:
129
141
  invite:
@@ -183,6 +195,16 @@ eu:
183
195
  destroy:
184
196
  invalid: Arazo bat izan da topaketa honetatik ateratzean.
185
197
  success: Topaketatik ongi atera zara.
198
+ participatory_processes:
199
+ participatory_process_groups:
200
+ highlighted_meetings:
201
+ past_meetings: Azken bilerak
202
+ upcoming_meetings: Hurrengo topaketak
203
+ participatory_spaces:
204
+ highlighted_meetings:
205
+ past_meetings: Azken bilerak
206
+ see_all_meetings: Ikusi bilera guztiak
207
+ upcoming_meetings: Hurrengo topaketak
186
208
  resource_links:
187
209
  meetings_through_proposals:
188
210
  meeting_results: 'Topaketaren emaitzak:'