decidim-meetings 0.17.2 → 0.18.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/meetings/join_meeting_button/registration_confirm.erb +19 -9
  3. data/app/cells/decidim/meetings/join_meeting_button_cell.rb +18 -0
  4. data/app/commands/decidim/meetings/admin/copy_meeting.rb +1 -0
  5. data/app/commands/decidim/meetings/join_meeting.rb +19 -15
  6. data/app/controllers/decidim/meetings/meetings_controller.rb +5 -1
  7. data/app/controllers/decidim/meetings/registrations_controller.rb +3 -1
  8. data/app/forms/decidim/meetings/admin/meeting_copy_form.rb +4 -0
  9. data/app/forms/decidim/meetings/join_meeting_form.rb +9 -0
  10. data/app/helpers/decidim/meetings/meetings_helper.rb +10 -8
  11. data/app/models/decidim/meetings/meeting.rb +10 -7
  12. data/app/models/decidim/meetings/registration.rb +13 -0
  13. data/app/serializers/decidim/meetings/registration_serializer.rb +2 -1
  14. data/app/views/decidim/meetings/admin/agenda/_agenda_item.html.erb +1 -7
  15. data/app/views/decidim/meetings/admin/agenda/_agenda_item_child_template.html.erb +7 -0
  16. data/app/views/decidim/meetings/admin/agenda/_form.html.erb +9 -7
  17. data/app/views/decidim/meetings/admin/meetings/_services.html.erb +2 -2
  18. data/app/views/decidim/meetings/admin/registrations/_form.html.erb +1 -1
  19. data/app/views/decidim/meetings/meetings/_meeting_minutes.html.erb +1 -1
  20. data/app/views/decidim/meetings/meetings/show.html.erb +18 -2
  21. data/config/locales/ar-SA.yml +1 -0
  22. data/config/locales/ar.yml +463 -0
  23. data/config/locales/ca.yml +1 -0
  24. data/config/locales/en.yml +1 -0
  25. data/config/locales/es-MX.yml +1 -0
  26. data/config/locales/es-PY.yml +1 -0
  27. data/config/locales/es.yml +1 -0
  28. data/config/locales/fi-plain.yml +1 -0
  29. data/config/locales/fi.yml +1 -0
  30. data/config/locales/hu.yml +1 -0
  31. data/config/locales/it.yml +1 -0
  32. data/config/locales/sv.yml +1 -0
  33. data/config/locales/tr-TR.yml +1 -0
  34. data/db/migrate/20190404132923_add_user_group_to_meetings_registrations.rb +7 -0
  35. data/lib/decidim/meetings/version.rb +1 -1
  36. metadata +17 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5509f63dae5de40739ffaeac9574a4cafc541841b3a841e330419d0d040715f5
4
- data.tar.gz: 2dd811174374b27d4aeb2683b3e4c1227689f1cb4aa8fcb5e8d41ddf88b04ef7
3
+ metadata.gz: acf4dd236d144b7df6c838924436126b8d2d76c95014aaf0b6a62595e4d832cc
4
+ data.tar.gz: bdb73743ed8d64b222f541858f0b0124829a6b786c9a428e6c8830e6349d2033
5
5
  SHA512:
6
- metadata.gz: 2f213478987ea434925bb550ac71ddcdb2bf514502ee44ddc74463939101e0a253a6d6748555bfa3013067d228fe0a24761e9cb1bd03d7ac557da1df6d5e4e3d
7
- data.tar.gz: 2ed24adf14c5b18d0db09ff4d7340f2da42d57fa8a41dd02f5bb616ce7d09ae26cad14073c724dc4eae1815d5f680a183063f60cb880fe14b64b4ab5032a83c5
6
+ metadata.gz: 689b028281536116bca5b37d9e3e73d00b45b3b7b51ffa7e0b10da752874636d3f239e66791ac1f4db3fd30a26d548fdef0b0d0b9e44a965c893973be1e806ed
7
+ data.tar.gz: 4e7811d23760587f636fef8c142bd6ccb5ebff8098706262bcf6cbe49f2bc7b50ac4c7e656f361d0f5912fa360a5bbfe7006f358f44ea3280bcb0a003fb47b63
@@ -1,15 +1,25 @@
1
1
  <div class="reveal" data-reveal id="meeting-registration-confirm-<%= model.id %>">
2
- <div class="row">
3
- <div class="columns medium-10 medium-offset-1 help-text">
4
- <%= decidim_sanitize translated_attribute(model.registration_terms) %>
2
+ <%= decidim_form_for(registration_form, url: meeting_registration_path(model), method: :post) do |form| %>
3
+ <div class="row">
4
+ <div class="columns medium-10 medium-offset-1">
5
+ <%= cell("decidim/represent_user_group", form) %>
6
+ </div>
5
7
  </div>
6
- </div>
7
- <div class="row">
8
- <div class="columns medium-8 medium-offset-2">
9
- <%= button_to t("confirm", scope: "decidim.meetings.meetings.registration_confirm"), meeting_registration_path(model), class: "button expanded", data: { disable: true } %>
8
+
9
+ <div class="row">
10
+ <div class="columns medium-10 medium-offset-1 help-text">
11
+ <%= registration_terms_text %>
12
+ </div>
10
13
  </div>
11
- </div>
14
+
15
+ <div class="row">
16
+ <div class="columns medium-8 medium-offset-2">
17
+ <%= form.submit i18n_confirm_text, class: "button expanded", data: { disable: true } %>
18
+ </div>
19
+ </div>
20
+ <% end %>
21
+
12
22
  <div class="text-center">
13
- <button class="link" data-close><%= t("cancel", scope: "decidim.meetings.meetings.registration_confirm") %></button>
23
+ <button class="link" data-close><%= i18n_cancel_text %></button>
14
24
  </div>
15
25
  </div>
@@ -6,6 +6,8 @@ module Decidim
6
6
  class JoinMeetingButtonCell < Decidim::ViewModel
7
7
  include MeetingCellsHelper
8
8
  include Decidim::SanitizeHelper
9
+ include ActionView::Helpers::FormTagHelper
10
+ include ActionView::Helpers::FormOptionsHelper
9
11
 
10
12
  def show
11
13
  render
@@ -36,6 +38,22 @@ module Decidim
36
38
  return I18n.t("join", scope: "decidim.meetings.meetings.show") if model.has_available_slots?
37
39
  I18n.t("no_slots_available", scope: "decidim.meetings.meetings.show")
38
40
  end
41
+
42
+ def i18n_confirm_text
43
+ I18n.t("confirm", scope: "decidim.meetings.meetings.registration_confirm")
44
+ end
45
+
46
+ def i18n_cancel_text
47
+ I18n.t("cancel", scope: "decidim.meetings.meetings.registration_confirm")
48
+ end
49
+
50
+ def registration_terms_text
51
+ decidim_sanitize translated_attribute(model.registration_terms)
52
+ end
53
+
54
+ def registration_form
55
+ @registration_form ||= Decidim::Meetings::JoinMeetingForm.new
56
+ end
39
57
  end
40
58
  end
41
59
  end
@@ -60,6 +60,7 @@ module Decidim
60
60
  private_meeting: @form.private_meeting,
61
61
  transparent: @form.transparent,
62
62
  organizer: @form.organizer,
63
+ questionnaire: @form.questionnaire,
63
64
  registrations_enabled: @meeting.registrations_enabled,
64
65
  available_slots: @meeting.available_slots,
65
66
  registration_terms: @meeting.registration_terms
@@ -8,10 +8,11 @@ module Decidim
8
8
  #
9
9
  # meeting - The current instance of the meeting to be joined.
10
10
  # user - The user joining the meeting.
11
- # registration_form - The questionnaire filled by the attendee
12
- def initialize(meeting, user, registration_form = nil)
11
+ # registration_form - A form object with params; can be a questionnaire.
12
+ def initialize(meeting, user, registration_form)
13
13
  @meeting = meeting
14
14
  @user = user
15
+ @user_group = Decidim::UserGroup.find_by(id: registration_form.user_group_id)
15
16
  @registration_form = registration_form
16
17
  end
17
18
 
@@ -22,12 +23,9 @@ module Decidim
22
23
  def call
23
24
  meeting.with_lock do
24
25
  return broadcast(:invalid) unless can_join_meeting?
26
+ return broadcast(:invalid_form) unless registration_form.valid?
25
27
 
26
- if registration_form
27
- return broadcast(:invalid_form) unless registration_form.valid?
28
- save_registration_form
29
- end
30
-
28
+ answer_questionnaire
31
29
  create_registration
32
30
  accept_invitation
33
31
  send_email_confirmation
@@ -40,18 +38,24 @@ module Decidim
40
38
 
41
39
  private
42
40
 
43
- attr_reader :meeting, :user, :registration, :registration_form
41
+ attr_reader :meeting, :user, :user_group, :registration, :registration_form
44
42
 
45
43
  def accept_invitation
46
44
  meeting.invites.find_by(user: user)&.accept!
47
45
  end
48
46
 
49
- def save_registration_form
47
+ def answer_questionnaire
48
+ return unless questionnaire?
49
+
50
50
  Decidim::Forms::AnswerQuestionnaire.call(registration_form, user, meeting.questionnaire)
51
51
  end
52
52
 
53
53
  def create_registration
54
- @registration = Decidim::Meetings::Registration.create!(meeting: meeting, user: user)
54
+ @registration = Decidim::Meetings::Registration.create!(
55
+ meeting: meeting,
56
+ user: user,
57
+ user_group: user_group
58
+ )
55
59
  end
56
60
 
57
61
  def can_join_meeting?
@@ -60,11 +64,7 @@ module Decidim
60
64
  end
61
65
 
62
66
  def send_email_confirmation
63
- Decidim::Meetings::RegistrationMailer.confirmation(
64
- @user,
65
- @meeting,
66
- @registration
67
- ).deliver_now
67
+ Decidim::Meetings::RegistrationMailer.confirmation(user, meeting, registration).deliver_later
68
68
  end
69
69
 
70
70
  def send_notification_confirmation
@@ -108,6 +108,10 @@ module Decidim
108
108
  def occupied_slots_over?(percentage)
109
109
  @meeting.remaining_slots == (@meeting.available_slots * (1 - percentage)).round
110
110
  end
111
+
112
+ def questionnaire?
113
+ registration_form.model_name == "Questionnaire"
114
+ end
111
115
  end
112
116
  end
113
117
  end
@@ -8,7 +8,7 @@ module Decidim
8
8
  include Paginable
9
9
  helper Decidim::WidgetUrlsHelper
10
10
 
11
- helper_method :meetings, :meeting, :search
11
+ helper_method :meetings, :meeting, :registration, :search
12
12
 
13
13
  def index
14
14
  return unless search.results.empty? && params.dig("filter", "date") != "past"
@@ -38,6 +38,10 @@ module Decidim
38
38
  @meetings ||= paginate(search.results)
39
39
  end
40
40
 
41
+ def registration
42
+ @registration ||= meeting.registrations.find_by(user: current_user)
43
+ end
44
+
41
45
  def search_klass
42
46
  MeetingSearch
43
47
  end
@@ -32,7 +32,9 @@ module Decidim
32
32
  def create
33
33
  enforce_permission_to :join, :meeting, meeting: meeting
34
34
 
35
- JoinMeeting.call(meeting, current_user) do
35
+ @form = JoinMeetingForm.from_params(params)
36
+
37
+ JoinMeeting.call(meeting, current_user, @form) do
36
38
  on(:ok) do
37
39
  flash[:notice] = I18n.t("registrations.create.success", scope: "decidim.meetings")
38
40
  redirect_after_path
@@ -56,6 +56,10 @@ module Decidim
56
56
  def organizer
57
57
  @organizer ||= current_organization.users.find_by(id: organizer_id)
58
58
  end
59
+
60
+ def questionnaire
61
+ Decidim::Forms::Questionnaire.new
62
+ end
59
63
  end
60
64
  end
61
65
  end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Meetings
5
+ class JoinMeetingForm < Decidim::Form
6
+ attribute :user_group_id, Integer
7
+ end
8
+ end
9
+ end
@@ -88,18 +88,20 @@ module Decidim
88
88
  html.html_safe
89
89
  end
90
90
 
91
- def registration
92
- @registration ||= Decidim::Meetings::Registration
93
- .where(decidim_user_id: current_user)
94
- .find_by(decidim_meeting_id: @meeting.id)
95
- end
96
-
91
+ # Public: Registration code generic help text.
92
+ #
93
+ # Returns a String.
97
94
  def registration_code_help_text
98
95
  t("registration_code_help_text", scope: "decidim.meetings.meetings.show")
99
96
  end
100
97
 
101
- def registration_validation_state
102
- if @registration.validated_at
98
+ # Public: Registration validation state as text.
99
+ #
100
+ # registration - The registration that holds the validation code.
101
+ #
102
+ # Returns a String.
103
+ def validation_state_for(registration)
104
+ if registration.validated?
103
105
  t("validated", scope: "decidim.meetings.meetings.show.registration_state")
104
106
  else
105
107
  t("validation_pending", scope: "decidim.meetings.meetings.show.registration_state")
@@ -56,6 +56,11 @@ module Decidim
56
56
  index_on_create: ->(meeting) { meeting.visible? },
57
57
  index_on_update: ->(meeting) { meeting.visible? })
58
58
 
59
+ # Return registrations of a particular meeting made by users representing a group
60
+ def user_group_registrations
61
+ registrations.where.not(decidim_user_group_id: nil)
62
+ end
63
+
59
64
  def self.log_presenter_class_for(_log)
60
65
  Decidim::Meetings::AdminLog::MeetingPresenter
61
66
  end
@@ -111,6 +116,11 @@ module Decidim
111
116
  followers
112
117
  end
113
118
 
119
+ # Public: Whether the object can have new comments or not.
120
+ def user_allowed_to_comment?(user)
121
+ can_participate?(user)
122
+ end
123
+
114
124
  def can_participate?(user)
115
125
  can_participate_in_space?(user) && can_participate_in_meeting?(user)
116
126
  end
@@ -156,13 +166,6 @@ module Decidim
156
166
 
157
167
  private
158
168
 
159
- def can_participate_in_space?(user)
160
- return true unless participatory_space.try(:private_space?)
161
- return false unless user
162
-
163
- participatory_space.users.include?(user)
164
- end
165
-
166
169
  def can_participate_in_meeting?(user)
167
170
  return true unless private_meeting?
168
171
  return false unless user
@@ -8,6 +8,7 @@ module Decidim
8
8
 
9
9
  belongs_to :meeting, foreign_key: "decidim_meeting_id", class_name: "Decidim::Meetings::Meeting"
10
10
  belongs_to :user, foreign_key: "decidim_user_id", class_name: "Decidim::User"
11
+ belongs_to :user_group, foreign_key: "decidim_user_group_id", class_name: "Decidim::UserGroup", optional: true
11
12
 
12
13
  validates :user, uniqueness: { scope: :meeting }
13
14
  validates :code, uniqueness: { allow_blank: true, scope: :meeting }
@@ -23,6 +24,18 @@ module Decidim
23
24
  Decidim::Meetings::DataPortabilityRegistrationSerializer
24
25
  end
25
26
 
27
+ # Pluck all Decidim::UserGroup ID's
28
+ def self.user_group_ids
29
+ pluck(:decidim_user_group_id)
30
+ end
31
+
32
+ # Public: Checks if the registration has been validated.
33
+ #
34
+ # Returns Boolean.
35
+ def validated?
36
+ validated_at?
37
+ end
38
+
26
39
  private
27
40
 
28
41
  def generate_code
@@ -11,7 +11,8 @@ module Decidim
11
11
  code: resource.code,
12
12
  user: {
13
13
  name: resource.user.name,
14
- email: resource.user.email
14
+ email: resource.user.email,
15
+ user_group: resource.user_group&.name || ""
15
16
  },
16
17
  registration_form_answers: serialize_answers
17
18
  }
@@ -28,13 +28,7 @@
28
28
  <h2 class="card-title"><%= t(".agenda_item_children") %></h2>
29
29
  </div>
30
30
  <div class="card-section">
31
- <div class="meeting-agenda-item-childs">
32
- <template>
33
- <%= fields_for "meeting_agenda[agenda_items][#{agenda_item.to_param}][agenda_item_children][#{blank_agenda_item.to_param_child}]", blank_agenda_item do |agenda_item_child_form| %>
34
- <%= render "agenda_item_child", form: agenda_item_child_form, tabs_id: tabs_id, tabs_id_child: tabs_id_for_agenda_item_child(blank_agenda_item), editable: true %>
35
- <% end %>
36
- </template>
37
-
31
+ <div class="meeting-agenda-item-childs" data-template="<%= child_template_selector %>">
38
32
  <div class="meeting-agenda-item-childs-list">
39
33
  <% agenda_item.agenda_item_children.each do |agenda_item_child| %>
40
34
  <%= fields_for "meeting_agenda[agenda_items][#{agenda_item.to_param}][agenda_item_children][]", agenda_item_child do |agenda_item_child_form| %>
@@ -0,0 +1,7 @@
1
+ <% agenda_item = form.object %>
2
+
3
+ <script type="text/template" class="decidim-template" id="<%= template_id %>">
4
+ <%= fields_for "meeting_agenda[agenda_items][#{agenda_item.to_param}][agenda_item_children][#{blank_agenda_item.to_param_child}]", blank_agenda_item do |agenda_item_child_form| %>
5
+ <%= render "agenda_item_child", form: agenda_item_child_form, tabs_id: tabs_id_for_agenda_item(blank_agenda_item), tabs_id_child: tabs_id_for_agenda_item_child(blank_agenda_item), editable: editable %>
6
+ <% end %>
7
+ </script>
@@ -45,16 +45,18 @@
45
45
 
46
46
  <div class="card-section">
47
47
  <div class="meeting-agenda-items">
48
- <template>
49
- <%= fields_for "meeting_agenda[agenda_items][#{blank_agenda_item.to_param}]", blank_agenda_item do |agenda_item_form| %>
50
- <%= render "agenda_item", form: agenda_item_form, tabs_id: tabs_id_for_agenda_item(blank_agenda_item), editable: true %>
51
- <% end %>
52
- </template>
48
+ <%= fields_for "meeting_agenda[agenda_items][#{blank_agenda_item.to_param}]", blank_agenda_item do |agenda_item_form| %>
49
+ <script type="text/template" class="decidim-template">
50
+ <%= render "agenda_item", form: agenda_item_form, tabs_id: tabs_id_for_agenda_item(blank_agenda_item), editable: true, child_template_selector: "#agenda-item-child-template-dummy" %>
51
+ </script>
52
+ <%= render "agenda_item_child_template", form: agenda_item_form, editable: true, template_id: "agenda-item-child-template-dummy" %>
53
+ <% end %>
53
54
 
54
55
  <div class="meeting-agenda-items-list">
55
- <% @form.agenda_items.each do |agenda_item| %>
56
+ <% @form.agenda_items.each_with_index do |agenda_item, index| %>
56
57
  <%= fields_for "meeting_agenda[agenda_items][]", agenda_item do |agenda_item_form| %>
57
- <%= render "agenda_item", form: agenda_item_form, tabs_id: tabs_id_for_agenda_item(agenda_item), editable: true %>
58
+ <%= render "agenda_item", form: agenda_item_form, tabs_id: tabs_id_for_agenda_item(agenda_item), editable: true, child_template_selector: "#agenda-item-child-template-#{index}" %>
59
+ <%= render "agenda_item_child_template", form: agenda_item_form, editable: true, template_id: "agenda-item-child-template-#{index}" %>
58
60
  <% end %>
59
61
  <% end %>
60
62
  </div>
@@ -5,11 +5,11 @@
5
5
 
6
6
  <div class="card-section">
7
7
  <div class="meeting-services">
8
- <template>
8
+ <script type="text/template" class="decidim-template">
9
9
  <%= fields_for "meeting[services][#{blank_service.to_param}]", blank_service do |service_form| %>
10
10
  <%= render "decidim/meetings/admin/meetings/service", form: service_form, id: tabs_id_for_service(blank_service) %>
11
11
  <% end %>
12
- </template>
12
+ </script>
13
13
 
14
14
  <div class="meeting-services-list">
15
15
  <% form.object.services.each do |service| %>
@@ -1,7 +1,7 @@
1
1
  <div class="card">
2
2
  <div class="card-divider">
3
3
  <h2 class="card-title">
4
- <%= title %>
4
+ <%= t(".title") %>
5
5
  <%= link_to t(".invites"), meeting_registrations_invites_path(meeting), class: "button tiny button--title #{'disabled' unless allowed_to? :read_invites, :meeting, meeting: meeting}" %>
6
6
  <% if allowed_to? :export_registrations, :meeting, meeting: meeting %>
7
7
  <span class="exports dropdown tiny button button--simple button--title" data-toggle="export-dropdown"><%= t "actions.export", scope: "decidim.admin" %></span>
@@ -28,7 +28,7 @@
28
28
  </div>
29
29
  </div>
30
30
  <% end %>
31
- <% if meeting.minutes.video_url.presence %>
31
+ <% if meeting.minutes.audio_url.presence %>
32
32
  <div class="card--list__item">
33
33
  <div class="card--list__text">
34
34
  <div>
@@ -60,13 +60,13 @@ edit_link(
60
60
  <% end %>
61
61
  </div>
62
62
 
63
- <% if registration %>
63
+ <% if registration.present? %>
64
64
  <div class="card extra">
65
65
  <div class="card__content">
66
66
  <div class="registration_code">
67
67
  <span><%= registration_code_help_text %></span>
68
68
  <span><strong><%= registration.code %></strong></span>
69
- <div class="text-small"><%= registration_validation_state %></div>
69
+ <div class="text-small"><%= validation_state_for(registration) %></div>
70
70
  </div>
71
71
  </div>
72
72
  </div>
@@ -117,6 +117,22 @@ edit_link(
117
117
  <%= render "meeting_minutes" %>
118
118
  <% end %>
119
119
 
120
+ <% if !meeting.closed? && meeting.user_group_registrations.any? %>
121
+ <% user_group_ids = meeting.user_group_registrations.user_group_ids %>
122
+ <div class="section">
123
+ <h4 class="section-heading"><%= t(".organizations") %></h4>
124
+ <div class="card card--list">
125
+ <% Decidim::UserGroup.where(id: user_group_ids).each do |group| %>
126
+ <div class="card--list__item">
127
+ <div class="card--list__text card--list__text--top">
128
+ <%= cell "decidim/author", present(group) %>
129
+ </div>
130
+ </div>
131
+ <% end %>
132
+ </div>
133
+ </div>
134
+ <% end %>
135
+
120
136
  <% if meeting.closed? %>
121
137
  <div class="section">
122
138
  <h3 class="section-heading"><%= t(".meeting_report") %></h3>
@@ -297,6 +297,7 @@ ar:
297
297
  other: كان هناك %{count} التسجيلات.
298
298
  reserved_slots_help: اتركه إلى 0 إذا لم يكن لديك فتحات محجوزة
299
299
  reserved_slots_less_than: يجب أن يكون أقل من أو يساوي %{count}
300
+ title: التسجيلات
300
301
  update:
301
302
  invalid: حدثت مشكلة أثناء حفظ إعدادات التسجيل.
302
303
  success: تم حفظ إعدادات تسجيل الاجتماع بنجاح.
@@ -0,0 +1,463 @@
1
+ ar:
2
+ activemodel:
3
+ attributes:
4
+ agenda:
5
+ description: وصف
6
+ duration: المدة الزمنية
7
+ title: عنوان
8
+ close_meeting:
9
+ attendees_count: عدد الحضور
10
+ attending_organizations: قائمة المنظمات التي حضرت
11
+ closing_report: أبلغ عن
12
+ contributions_count: عدد المساهمات
13
+ proposal_ids: المقترحات التي تم إنشاؤها في الاجتماع
14
+ meeting:
15
+ address: عنوان
16
+ available_slots: فتحات المتاحة لهذا الاجتماع
17
+ decidim_category_id: الفئة
18
+ decidim_scope_id: نطاق
19
+ description: وصف
20
+ end_time: وقت النهاية
21
+ location: موقعك
22
+ location_hints: تلميحات الموقع
23
+ organizer_id: منظم
24
+ private_meeting: اجتماع خاص
25
+ registration_form_enabled: تم تمكين نموذج التسجيل
26
+ registration_terms: شروط التسجيل
27
+ registrations_enabled: تم تمكين التسجيلات
28
+ start_time: وقت البدء
29
+ title: عنوان
30
+ transparent: شفاف
31
+ minutes:
32
+ audio_url: العنوان الشبكي للصوت
33
+ description: وصف
34
+ video_url: العنوان الشبكي للفيديو
35
+ visible: مرئي
36
+ errors:
37
+ models:
38
+ meeting_agenda:
39
+ attributes:
40
+ base:
41
+ too_many_minutes: تتجاوز مدة العناصر مدة الاجتماع بـ %{count} دقيقة
42
+ too_many_minutes_child: تتجاوز مدة العنصر التابع للطفل مدة الأصل "%{parent_title}" لعنصر جدول الأعمال بمقدار دقيقة %{count}
43
+ meeting_registration_invite:
44
+ attributes:
45
+ email:
46
+ already_invited: تمت دعوة حساب البريد الإلكتروني هذا بالفعل
47
+ models:
48
+ decidim/meetings/close_meeting_event: تم إغلاق الاجتماع
49
+ decidim/meetings/create_meeting_event: لقاء
50
+ decidim/meetings/meeting_registrations_enabled_event: تم تمكين التسجيلات
51
+ decidim/meetings/meeting_registrations_over_percentage_event: التسجيلات فوق الحد
52
+ decidim/meetings/upcoming_meeting_event: الاجتماع القادم
53
+ decidim/meetings/update_meeting_event: تم تحديث الاجتماع
54
+ activerecord:
55
+ models:
56
+ decidim/meetings/meeting:
57
+ zero: اجتماعات
58
+ one: لقاء
59
+ two: اجتماعات
60
+ few: اجتماعات
61
+ many: اجتماعات
62
+ other: اجتماعات
63
+ decidim/meetings/minutes:
64
+ zero: الدقائق
65
+ one: الدقائق
66
+ two: الدقائق
67
+ few: الدقائق
68
+ many: الدقائق
69
+ other: الدقائق
70
+ decidim/meetings/registration:
71
+ zero: التسجيلات
72
+ one: التسجيل
73
+ two: التسجيلات
74
+ few: التسجيلات
75
+ many: التسجيلات
76
+ other: التسجيلات
77
+ decidim:
78
+ admin:
79
+ meeting_copies:
80
+ create:
81
+ error: كانت هناك مشكلة في تكرار هذا الاجتماع.
82
+ success: تم تكرار الاجتماع بنجاح.
83
+ new:
84
+ copy: نسخ
85
+ select: حدد البيانات التي ترغب في تكرارها
86
+ title: اجتماع مكرر
87
+ components:
88
+ meetings:
89
+ actions:
90
+ join: انضم
91
+ name: اجتماعات
92
+ settings:
93
+ global:
94
+ announcement: إعلان
95
+ comments_enabled: تم تمكين التعليقات
96
+ default_registration_terms: شروط التسجيل الافتراضية
97
+ enable_pads_creation: تمكين إنشاء منصات
98
+ resources_permissions_enabled: يمكن تعيين أذونات الإجراءات لكل اجتماع
99
+ step:
100
+ announcement: إعلان
101
+ comments_blocked: تم حظر التعليقات
102
+ events:
103
+ meetings:
104
+ meeting_closed:
105
+ affected_user:
106
+ email_intro: 'تم إغلاق اجتماعك "%{resource_title}". يمكنك قراءة الاستنتاجات من صفحتها:'
107
+ email_outro: لقد تلقيت هذا الإشعار لأنك نظمت اجتماع "%{resource_title}".
108
+ follower:
109
+ email_outro: لقد تلقيت هذا الإشعار لأنك تتابع اجتماع "%{resource_title}". يمكنك إلغاء تتبعه من الرابط السابق.
110
+ meeting_created:
111
+ email_intro: تمت إضافة الاجتماع "%{resource_title}" إلى "%{participatory_space_title}" الذي تتابعه.
112
+ email_outro: لقد تلقيت هذا الإشعار لأنك تتابع "%{participatory_space_title}". يمكنك إلغاء تتبعه من الرابط السابق.
113
+ email_subject: تمت إضافة اجتماع جديد إلى %{participatory_space_title}
114
+ notification_title: تمت إضافة الاجتماع <a href="%{resource_path}">%{resource_title}</a> إلى %{participatory_space_title}
115
+ meeting_registration_confirmed:
116
+ notification_title: تم تأكيد تسجيلك للاجتماع <a href="%{resource_url}">%{resource_title}</a> . رمز التسجيل الخاص بك هو %{registration_code}.
117
+ meeting_registrations_over_percentage:
118
+ email_intro: الشقوق المخصصة للاجتماع "%{resource_title}" تزيد عن %{percentage}٪.
119
+ email_outro: لقد تلقيت هذا الإشعار لأنك مسؤول عن المساحة التشاركية للاجتماع.
120
+ email_subject: الشقوق المخصصة للاجتماع "%{resource_title}" تتجاوز %{percentage}٪
121
+ notification_title: تتجاوز الفواصل المخصصة للاجتماع <a href="%{resource_path}">%{resource_title}</a> ٪ %{percentage}.
122
+ meeting_updated:
123
+ email_intro: 'تم تحديث الاجتماع "%{resource_title}". يمكنك قراءة الإصدار الجديد من صفحته:'
124
+ email_outro: لقد تلقيت هذا الإشعار لأنك تتابع اجتماع "%{resource_title}". يمكنك إلغاء تتبعه من الرابط السابق.
125
+ email_subject: تم تحديث الاجتماع "%{resource_title}"
126
+ notification_title: تم تحديث الاجتماع <a href="%{resource_path}">%{resource_title}</a>.
127
+ registration_code_validated:
128
+ email_intro: تم التحقق من صحة رمز التسجيل "%{registration_code}" الخاص باجتماع "%{resource_title}".
129
+ email_outro: لقد تلقيت هذا الإشعار لأنه تم التحقق من صحة رمز التسجيل الخاص بالاجتماع "%{resource_title}".
130
+ email_subject: تم التحقق من صحة رمز التسجيل "%{registration_code}" الخاص باجتماع "%{resource_title}"
131
+ notification_title: تم التحقق من صحة رمز التسجيل "%{registration_code}" الخاص بالاجتماع <a href="%{resource_path}">%{resource_title}</a>.
132
+ registrations_enabled:
133
+ email_intro: 'لقد مكّن الاجتماع "%{resource_title}" التسجيلات. يمكنك تسجيل نفسك على صفحتها:'
134
+ email_outro: لقد تلقيت هذا الإشعار لأنك تتابع اجتماع "%{resource_title}". يمكنك إلغاء تتبعه من الرابط السابق.
135
+ email_subject: لقد مكّن الاجتماع "%{resource_title}" التسجيلات.
136
+ notification_title: لقد مكّن الاجتماع <a href="%{resource_path}">%{resource_title}</a> التسجيلات.
137
+ upcoming_meeting:
138
+ email_intro: سيبدأ الاجتماع "%{resource_title}" في أقل من 48 ساعة.
139
+ email_outro: لقد تلقيت هذا الإشعار لأنك تتابع اجتماع "%{resource_title}". يمكنك إلغاء تتبعه من الرابط السابق.
140
+ email_subject: سيبدأ الاجتماع "%{resource_title}" في أقل من 48 ساعة.
141
+ notification_title: سيبدأ الاجتماع <a href="%{resource_path}">%{resource_title}</a> في أقل من 48 ساعة.
142
+ gamification:
143
+ badges:
144
+ attended_meetings:
145
+ conditions:
146
+ - سجل للاجتماعات التي تريد حضورها
147
+ description: تُمنح هذه الشارة عند حضور العديد من الاجتماعات المباشرة.
148
+ description_another: حضر هذا المشارك %{score} جلسة.
149
+ description_own: لقد حضرت %{score} اجتماع.
150
+ name: حضور الاجتماعات
151
+ next_level_in: حضور %{score} اجتماعات أخرى للوصول إلى المستوى التالي!
152
+ unearned_another: هذا المشارك لم يحضر أي اجتماع حتى الآن.
153
+ unearned_own: لم تحضر أي اجتماع بعد.
154
+ meetings:
155
+ actions:
156
+ agenda: جدول أعمال
157
+ attachment_collections: المجلدات
158
+ attachments: مرفقات
159
+ close: قريب
160
+ confirm_destroy: هل أنت متأكد أنك تريد حذف هذا الاجتماع؟
161
+ destroy: حذف
162
+ edit: تعديل
163
+ minutes: الدقائق
164
+ new: اجتماع جديد
165
+ preview: معاينة
166
+ registrations: التسجيلات
167
+ title: أفعال
168
+ admin:
169
+ agenda:
170
+ agenda_item:
171
+ add_agenda_item_child: إضافة بند جدول الأعمال الفرعي
172
+ agenda_item: البند من جدول الأعمال
173
+ agenda_item_children: بنود جدول الأعمال الفرعية
174
+ down: أسفل
175
+ remove: إزالة
176
+ up: فوق
177
+ agenda_item_child:
178
+ agenda_item_child: بند جدول الأعمال الفرعي
179
+ down: أسفل
180
+ remove: إزالة
181
+ up: فوق
182
+ create:
183
+ invalid: كانت هناك مشكلة في إنشاء جدول الأعمال هذا
184
+ success: تم إنشاء جدول الأعمال بنجاح
185
+ edit:
186
+ title: تحرير جدول الأعمال
187
+ update: تحديث
188
+ form:
189
+ add_agenda_item: إضافة عنصر جدول الأعمال
190
+ agenda_items: بنود جدول الأعمال
191
+ end_date: تاريخ الانتهاء
192
+ start_date: تاريخ البدء
193
+ new:
194
+ create: إنشاء
195
+ title: جدول أعمال جديد
196
+ update:
197
+ invalid: حدثت مشكلة أثناء تحديث جدول الأعمال هذا
198
+ success: تم تحديث جدول الأعمال بنجاح
199
+ exports:
200
+ meetings: اجتماعات
201
+ registrations: التسجيلات
202
+ invite_join_meeting_mailer:
203
+ invite:
204
+ decline: رفض الدعوة
205
+ invited_you_to_join_a_meeting: "%{invited_by} للانضمام إلى اجتماع في %{application}. يمكنك رفضه أو قبوله من خلال الروابط أدناه."
206
+ join: انضم إلى الاجتماع "%{meeting_title}"
207
+ invites:
208
+ create:
209
+ error: حدثت مشكلة أثناء دعوة المشارك للانضمام إلى الاجتماع.
210
+ success: تمت دعوة المشارك بنجاح للانضمام إلى الاجتماع.
211
+ form:
212
+ attendee_type: نوع الحضور
213
+ existing_user: المشارك الحالي
214
+ invite: دعا
215
+ invite_explanation: سيتم دعوة المشارك للانضمام إلى الاجتماع وإلى المنظمة أيضًا.
216
+ non_user: مشارك غير موجود
217
+ select_user: اختر المشارك
218
+ index:
219
+ filter:
220
+ accepted: وافقت
221
+ all: الكل
222
+ rejected: مرفوض
223
+ sent: أرسلت
224
+ filter_by: مصنف بواسطة
225
+ invite_attendee: دعوة الحضور
226
+ invites: تدعو
227
+ registrations_disabled: لا يمكنك دعوة أحد الحاضرين لأن التسجيلات معطلة.
228
+ search: بحث
229
+ meeting_closes:
230
+ edit:
231
+ close: قريب
232
+ title: اجتماع قريب
233
+ meeting_copies:
234
+ form:
235
+ select_organizer: اختر المنظم
236
+ meetings:
237
+ close:
238
+ invalid: حدثت مشكلة أثناء اختتام هذا الاجتماع
239
+ success: تم إغلاق الاجتماع بنجاح
240
+ create:
241
+ invalid: كانت هناك مشكلة في إنشاء هذا الاجتماع
242
+ success: تم إنشاء الاجتماع بنجاح
243
+ destroy:
244
+ success: تم حذف الاجتماع بنجاح
245
+ edit:
246
+ update: تحديث
247
+ form:
248
+ select_organizer: اختر المنظم
249
+ index:
250
+ title: اجتماعات
251
+ new:
252
+ create: إنشاء
253
+ title: إنشاء اجتماع
254
+ service:
255
+ description: وصف
256
+ down: أسفل
257
+ remove: إزالة
258
+ service: الخدمات
259
+ title: عنوان
260
+ up: فوق
261
+ services:
262
+ add_service: إضافة الخدمة
263
+ services: خدمات
264
+ update:
265
+ invalid: حدثت مشكلة أثناء تحديث هذا الاجتماع
266
+ success: تم تحديث الاجتماع بنجاح
267
+ minutes:
268
+ create:
269
+ invalid: كانت هناك مشكلة في إنشاء هذه الدقائق
270
+ success: تم إنشاء الدقائق بنجاح
271
+ edit:
272
+ update: تحديث
273
+ new:
274
+ create: إنشاء
275
+ title: خلق دقائق
276
+ update:
277
+ invalid: حدثت مشكلة أثناء تحديث هذه الدقائق
278
+ success: تم تحديث الدقائق بنجاح
279
+ models:
280
+ meeting:
281
+ name: لقاء
282
+ registrations:
283
+ edit:
284
+ save: حفظ
285
+ validate: التحقق من صحة
286
+ validate_registration_code: التحقق من صحة رمز التسجيل
287
+ form:
288
+ available_slots_help: اتركه إلى 0 إذا كان لديك فتحات غير محدودة المتاحة.
289
+ invites: دعوات
290
+ registration_form: إستمارة تسجيل
291
+ registrations_count:
292
+ zero: كان هناك %{count} التسجيلات.
293
+ one: كان هناك %{count} تسجيل.
294
+ two: كان هناك %{count} التسجيلات.
295
+ few: كان هناك %{count} التسجيلات.
296
+ many: كان هناك %{count} التسجيلات.
297
+ other: كان هناك %{count} التسجيلات.
298
+ reserved_slots_help: اتركه إلى 0 إذا لم يكن لديك فتحات محجوزة
299
+ reserved_slots_less_than: يجب أن يكون أقل من أو يساوي %{count}
300
+ title: التسجيلات
301
+ update:
302
+ invalid: حدثت مشكلة أثناء حفظ إعدادات التسجيل.
303
+ success: تم حفظ إعدادات تسجيل الاجتماع بنجاح.
304
+ validate_registration_code:
305
+ invalid: رمز التسجيل هذا غير صالح.
306
+ success: تم التحقق من صحة رمز التسجيل بنجاح.
307
+ admin_log:
308
+ invite:
309
+ create: "%{user_name} دعا %{attendee_name} للانضمام إلى اجتماع %{resource_name} في الفضاء %{space_name}"
310
+ deleted: "%{user_name} غير مدعو %{attendee_name} من الانضمام إلى اجتماع %{resource_name} في الفضاء %{space_name}"
311
+ update: "%{user_name} دعا %{attendee_name} للانضمام إلى اجتماع %{resource_name} في الفضاء %{space_name}"
312
+ meeting:
313
+ close: "%{user_name} أغلقت الجلسة %{resource_name} على %{space_name} الفضاء"
314
+ create: "%{user_name} إنشاء الاجتماع %{resource_name} على %{space_name} الفضاء"
315
+ delete: "%{user_name} حذف الاجتماع %{resource_name} على %{space_name} الفضاء"
316
+ export_registrations: "%{user_name} تصدير التسجيلات للجلسة %{resource_name} على %{space_name} الفضاء"
317
+ update: "%{user_name} تحديث الاجتماع %{resource_name} على %{space_name} الفضاء"
318
+ value_types:
319
+ organizer_presenter:
320
+ not_found: 'لم يتم العثور على المنظم في قاعدة البيانات (المعرف: %{id})'
321
+ minutes:
322
+ create: "%{user_name} خلق محضر الاجتماع %{resource_name} على %{space_name} الفضاء"
323
+ update: "%{user_name} تحديث محضر الاجتماع %{resource_name} على %{space_name} الفضاء"
324
+ calendar_modal:
325
+ calendar_url: العنوان الشبكي للتقويم
326
+ close_window: أغلق النافذة
327
+ export_calendar: تصدير التقويم
328
+ conference_venues: أماكن المؤتمر
329
+ content_blocks:
330
+ upcoming_events:
331
+ name: الأحداث القادمة
332
+ upcoming_events: الاجتماعات القادمة
333
+ view_all_events: عرض الكل
334
+ directory:
335
+ meetings:
336
+ index:
337
+ all: الكل
338
+ date: تاريخ
339
+ meetings: اجتماعات
340
+ past: الماضي
341
+ search: بحث
342
+ space_type: الفضاء التشاركي
343
+ upcoming: القادمة
344
+ last_activity:
345
+ new_meeting_at_html: "<span>اجتماع جديد في %{link}</span>"
346
+ mailer:
347
+ invite_join_meeting_mailer:
348
+ invite:
349
+ subject: دعوة للانضمام إلى اجتماع
350
+ registration_mailer:
351
+ confirmation:
352
+ subject: تم تأكيد تسجيل اجتماعك
353
+ meeting:
354
+ not_allowed: غير مسموح لك بمشاهدة هذا الاجتماع
355
+ meetings:
356
+ filters:
357
+ category: الفئة
358
+ category_prompt: اختر تصنيف
359
+ date: تاريخ
360
+ past: الماضي
361
+ search: بحث
362
+ upcoming: القادمة
363
+ filters_small_view:
364
+ close_modal: إغلاق مشروط
365
+ filter: منقي
366
+ filter_by: مصنف بواسطة
367
+ unfold: كشف
368
+ meeting_minutes:
369
+ meeting_minutes: محضر الاجتماع
370
+ related_information: معلومات ذات صله
371
+ meetings:
372
+ no_meetings_warning: لا توجد اجتماعات تطابق معايير البحث الخاصة بك أو لا يوجد أي اجتماع مجدولة.
373
+ upcoming_meetings_warning: حاليًا ، لا توجد اجتماعات مجدولة ، ولكن يمكنك هنا العثور على جميع الاجتماعات السابقة المدرجة.
374
+ registration_confirm:
375
+ cancel: إلغاء
376
+ confirm: تؤكد
377
+ show:
378
+ attendees: الحضور الحضور
379
+ contributions: عدد المساهمات
380
+ going: ذاهب
381
+ join: أنضم إلى الأجتماع
382
+ meeting_report: تقرير الاجتماع
383
+ no_slots_available: لا فتحات المتاحة
384
+ organizations: حضور المنظمات
385
+ registration_code_help_text: رمز التسجيل الخاص بك
386
+ registration_state:
387
+ validated: التحقق من صحة
388
+ validation_pending: جاري التأكد
389
+ remaining_slots:
390
+ zero: "%{count} فتحات المتبقية"
391
+ one: "%{count} فتحة المتبقية"
392
+ two: "%{count} فتحات المتبقية"
393
+ few: "%{count} فتحات المتبقية"
394
+ many: "%{count} فتحات المتبقية"
395
+ other: "%{count} فتحات المتبقية"
396
+ view: رأي
397
+ meetings_map:
398
+ view_meeting: عرض الاجتماع
399
+ models:
400
+ invite:
401
+ fields:
402
+ email: البريد الإلكتروني
403
+ name: اسم
404
+ sent_at: أرسلت في
405
+ status: الحالة
406
+ status:
407
+ accepted: مقبول (%{at})
408
+ rejected: مرفوض (%{at})
409
+ sent: أرسلت
410
+ meeting:
411
+ fields:
412
+ closed: مغلق
413
+ end_time: تاريخ الانتهاء
414
+ map: خريطة
415
+ start_time: تاريخ البدء
416
+ title: عنوان
417
+ read_more: "(قراءة المزيد)"
418
+ registration_mailer:
419
+ confirmation:
420
+ confirmed_html: تم تأكيد تسجيلك للاجتماع <a href="%{url}">%{title}</a>.
421
+ details: ستجد تفاصيل الاجتماع في المرفق.
422
+ registration_code: رمز التسجيل الخاص بك هو %{code}.
423
+ registrations:
424
+ create:
425
+ invalid: حدثت مشكلة أثناء الانضمام إلى هذا الاجتماع.
426
+ success: لقد انضممت إلى الاجتماع بنجاح.
427
+ decline_invitation:
428
+ invalid: حدثت مشكلة في رفض الدعوة.
429
+ success: لقد رفضت الدعوة بنجاح.
430
+ destroy:
431
+ invalid: حدثت مشكلة أثناء مغادرة هذا الاجتماع.
432
+ success: لقد تركت الاجتماع بنجاح.
433
+ types:
434
+ private_meeting: اجتماع خاص
435
+ transparent: شفاف
436
+ metrics:
437
+ meetings:
438
+ description: عدد الاجتماعات التي تم إنشاؤها
439
+ object: اجتماعات
440
+ title: اجتماعات
441
+ participatory_processes:
442
+ participatory_process_groups:
443
+ highlighted_meetings:
444
+ past_meetings: الاجتماعات السابقة
445
+ upcoming_meetings: الاجتماعات القادمة
446
+ participatory_spaces:
447
+ highlighted_meetings:
448
+ past_meetings: الاجتماعات السابقة
449
+ see_all: شاهد الكل (%{count})
450
+ upcoming_meetings: الاجتماعات القادمة
451
+ upcoming_meeting_for_card:
452
+ upcoming_meeting: الاجتماع القادم
453
+ resource_links:
454
+ meetings_through_proposals:
455
+ meeting_result: 'النتائج ذات الصلة:'
456
+ result_meeting: 'اجتماعات ذات صلة:'
457
+ proposals_from_meeting:
458
+ meeting_proposal: 'المقترحات ذات الصلة:'
459
+ proposal_meeting: 'اجتماعات ذات صلة:'
460
+ devise:
461
+ mailer:
462
+ join_meeting:
463
+ subject: دعوة للانضمام إلى اجتماع
@@ -286,6 +286,7 @@ ca:
286
286
  other: Hi ha hagut %{count} inscripcions.
287
287
  reserved_slots_help: Deixar a 0 si no hi ha espais reservats
288
288
  reserved_slots_less_than: Ha de ser inferior o igual que %{count}
289
+ title: Inscripcions
289
290
  update:
290
291
  invalid: S'ha produït un error en desar la configuració de la inscripció.
291
292
  success: La configuració de les inscripcions de la trobada s'ha desat correctament.
@@ -287,6 +287,7 @@ en:
287
287
  other: There has been %{count} registrations.
288
288
  reserved_slots_help: Leave it to 0 if you don't have reserved slots
289
289
  reserved_slots_less_than: Must be less than or equal to %{count}
290
+ title: Registrations
290
291
  update:
291
292
  invalid: There was a problem saving the registration settings.
292
293
  success: Meeting registrations settings successfully saved.
@@ -286,6 +286,7 @@ es-MX:
286
286
  other: Ha habido %{count} inscripciones.
287
287
  reserved_slots_help: Déjalo en 0 si no tienes espacios reservados
288
288
  reserved_slots_less_than: Debe ser menor que o igual a %{count}
289
+ title: Registros
289
290
  update:
290
291
  invalid: Se ha producido un problema al guardar la configuración de la inscripción.
291
292
  success: Se han guardado correctamente las configuraciones de inscripciones de encuentros.
@@ -286,6 +286,7 @@ es-PY:
286
286
  other: Ha habido %{count} registros.
287
287
  reserved_slots_help: Déjalo en 0 si no tienes espacios reservados
288
288
  reserved_slots_less_than: Debe ser menor que o igual a %{count}
289
+ title: Registros
289
290
  update:
290
291
  invalid: Se ha producido un problema al guardar la configuración de la inscripción.
291
292
  success: Se han guardado correctamente las configuraciones de inscripciones de encuentros.
@@ -286,6 +286,7 @@ es:
286
286
  other: Ha habido %{count} inscripciones.
287
287
  reserved_slots_help: Dejar en 0 si no hay espacios reservados
288
288
  reserved_slots_less_than: Debe ser inferior o igual que %{count}
289
+ title: Registros
289
290
  update:
290
291
  invalid: Se ha producido un error al guardar la configuración de la inscripción.
291
292
  success: La configuración de las inscripciones del encuentro se ha guardado correctamente.
@@ -286,6 +286,7 @@ fi-pl:
286
286
  other: Tapahtumaan on %{count} ilmoittautumista.
287
287
  reserved_slots_help: Jätä arvoksi 0, jos sinulla ei ole varattuja paikkoja
288
288
  reserved_slots_less_than: Täytyy olla vähemmän tai yhtä paljon kuin %{count}
289
+ title: Rekisteröitymiset
289
290
  update:
290
291
  invalid: Ilmoittautumisasetusten tallentamisessa esiintyi ongelma.
291
292
  success: Tapahtumailmoittautumisasetukset tallennettiin onnistuneesti.
@@ -286,6 +286,7 @@ fi:
286
286
  other: Tapahtumaan on %{count} ilmoittautumista.
287
287
  reserved_slots_help: Jätä arvoksi 0, jos sinulla ei ole varattuja paikkoja
288
288
  reserved_slots_less_than: Täytyy olla vähemmän tai yhtä paljon kuin %{count}
289
+ title: Rekisteröitymiset
289
290
  update:
290
291
  invalid: Rekisteröitymisasetusten päivitys epäonnistui.
291
292
  success: Tapahtumailmoittautumisasetukset tallennettiin onnistuneesti.
@@ -286,6 +286,7 @@ hu:
286
286
  other: '%{count} regisztráció volt.'
287
287
  reserved_slots_help: Hagyd "0" értéken, ha nincsenek foglalt helyek
288
288
  reserved_slots_less_than: 'Legalább ennyinek kell lennie: %{count}'
289
+ title: Regisztrációk
289
290
  update:
290
291
  invalid: Probléma történt a regisztrációs beállítások mentésekor.
291
292
  success: Találkozó nyilvántartási beállításainak mentése sikeres.
@@ -286,6 +286,7 @@ it:
286
286
  other: Ci sono state %{count} registrazioni.
287
287
  reserved_slots_help: Lasciare a 0 se non si dispone di slot riservati
288
288
  reserved_slots_less_than: Deve essere minore o uguale a %{count}
289
+ title: Registrazioni
289
290
  update:
290
291
  invalid: Si è verificato un problema salvando le impostazioni di registrazione.
291
292
  success: Le impostazioni di registrazione delle riunioni sono state salvate correttamente.
@@ -286,6 +286,7 @@ sv:
286
286
  other: Det har gjorts %{count} anmälningar.
287
287
  reserved_slots_help: Lämna det till 0 om du inte har reserverade platser
288
288
  reserved_slots_less_than: Måste vara mindre än eller lika med %{count}
289
+ title: Anmälningar
289
290
  update:
290
291
  invalid: Det gick inte att spara inställningarna för anmälan.
291
292
  success: Mötesregistreringsinställningarna har sparats.
@@ -286,6 +286,7 @@ tr:
286
286
  other: '%{count} kayıt var.'
287
287
  reserved_slots_help: Ayrılmış yuvalarınız yoksa 0'a bırakın
288
288
  reserved_slots_less_than: Daha az ya da buna eşit olmalıdır %{count}
289
+ title: Kayıtlar
289
290
  update:
290
291
  invalid: Kayıt ayarları kaydedilirken bir sorun oluştu.
291
292
  success: Toplantı kayıtları ayarları başarıyla kaydedildi.
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddUserGroupToMeetingsRegistrations < ActiveRecord::Migration[5.2]
4
+ def change
5
+ add_column :decidim_meetings_registrations, :decidim_user_group_id, :bigint
6
+ end
7
+ end
@@ -4,7 +4,7 @@ module Decidim
4
4
  # This holds the decidim-meetings version.
5
5
  module Meetings
6
6
  def self.version
7
- "0.17.2"
7
+ "0.18.0"
8
8
  end
9
9
  end
10
10
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-meetings
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.2
4
+ version: 0.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep Jaume Rey Peroy
@@ -46,28 +46,28 @@ dependencies:
46
46
  requirements:
47
47
  - - '='
48
48
  - !ruby/object:Gem::Version
49
- version: 0.17.2
49
+ version: 0.18.0
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
54
  - - '='
55
55
  - !ruby/object:Gem::Version
56
- version: 0.17.2
56
+ version: 0.18.0
57
57
  - !ruby/object:Gem::Dependency
58
58
  name: decidim-forms
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
61
  - - '='
62
62
  - !ruby/object:Gem::Version
63
- version: 0.17.2
63
+ version: 0.18.0
64
64
  type: :runtime
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
68
  - - '='
69
69
  - !ruby/object:Gem::Version
70
- version: 0.17.2
70
+ version: 0.18.0
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: httparty
73
73
  requirement: !ruby/object:Gem::Requirement
@@ -144,56 +144,56 @@ dependencies:
144
144
  requirements:
145
145
  - - '='
146
146
  - !ruby/object:Gem::Version
147
- version: 0.17.2
147
+ version: 0.18.0
148
148
  type: :development
149
149
  prerelease: false
150
150
  version_requirements: !ruby/object:Gem::Requirement
151
151
  requirements:
152
152
  - - '='
153
153
  - !ruby/object:Gem::Version
154
- version: 0.17.2
154
+ version: 0.18.0
155
155
  - !ruby/object:Gem::Dependency
156
156
  name: decidim-assemblies
157
157
  requirement: !ruby/object:Gem::Requirement
158
158
  requirements:
159
159
  - - '='
160
160
  - !ruby/object:Gem::Version
161
- version: 0.17.2
161
+ version: 0.18.0
162
162
  type: :development
163
163
  prerelease: false
164
164
  version_requirements: !ruby/object:Gem::Requirement
165
165
  requirements:
166
166
  - - '='
167
167
  - !ruby/object:Gem::Version
168
- version: 0.17.2
168
+ version: 0.18.0
169
169
  - !ruby/object:Gem::Dependency
170
170
  name: decidim-dev
171
171
  requirement: !ruby/object:Gem::Requirement
172
172
  requirements:
173
173
  - - '='
174
174
  - !ruby/object:Gem::Version
175
- version: 0.17.2
175
+ version: 0.18.0
176
176
  type: :development
177
177
  prerelease: false
178
178
  version_requirements: !ruby/object:Gem::Requirement
179
179
  requirements:
180
180
  - - '='
181
181
  - !ruby/object:Gem::Version
182
- version: 0.17.2
182
+ version: 0.18.0
183
183
  - !ruby/object:Gem::Dependency
184
184
  name: decidim-participatory_processes
185
185
  requirement: !ruby/object:Gem::Requirement
186
186
  requirements:
187
187
  - - '='
188
188
  - !ruby/object:Gem::Version
189
- version: 0.17.2
189
+ version: 0.18.0
190
190
  type: :development
191
191
  prerelease: false
192
192
  version_requirements: !ruby/object:Gem::Requirement
193
193
  requirements:
194
194
  - - '='
195
195
  - !ruby/object:Gem::Version
196
- version: 0.17.2
196
+ version: 0.18.0
197
197
  description: A meetings component for decidim's participatory spaces.
198
198
  email:
199
199
  - josepjaume@gmail.com
@@ -288,6 +288,7 @@ files:
288
288
  - app/forms/decidim/meetings/admin/meeting_service_form.rb
289
289
  - app/forms/decidim/meetings/admin/minutes_form.rb
290
290
  - app/forms/decidim/meetings/admin/validate_registration_code_form.rb
291
+ - app/forms/decidim/meetings/join_meeting_form.rb
291
292
  - app/helpers/decidim/meetings/admin/application_helper.rb
292
293
  - app/helpers/decidim/meetings/application_helper.rb
293
294
  - app/helpers/decidim/meetings/map_helper.rb
@@ -330,6 +331,7 @@ files:
330
331
  - app/views/decidim/meetings/_calendar_modal.html.erb
331
332
  - app/views/decidim/meetings/admin/agenda/_agenda_item.html.erb
332
333
  - app/views/decidim/meetings/admin/agenda/_agenda_item_child.html.erb
334
+ - app/views/decidim/meetings/admin/agenda/_agenda_item_child_template.html.erb
333
335
  - app/views/decidim/meetings/admin/agenda/_agenda_item_fields.html.erb
334
336
  - app/views/decidim/meetings/admin/agenda/_form.html.erb
335
337
  - app/views/decidim/meetings/admin/agenda/edit.html.erb
@@ -375,6 +377,7 @@ files:
375
377
  - app/views/devise/mailer/join_meeting.html.erb
376
378
  - app/views/devise/mailer/join_meeting.text.erb
377
379
  - config/locales/ar-SA.yml
380
+ - config/locales/ar.yml
378
381
  - config/locales/ca.yml
379
382
  - config/locales/cs-CZ.yml
380
383
  - config/locales/cs.yml
@@ -424,6 +427,7 @@ files:
424
427
  - db/migrate/20180801150031_add_registration_form_enabled_to_decidim_meetings.rb
425
428
  - db/migrate/20180809134748_add_upcoming_events_as_content_block.rb
426
429
  - db/migrate/20181107175558_add_questionnaire_to_existing_meetings.rb
430
+ - db/migrate/20190404132923_add_user_group_to_meetings_registrations.rb
427
431
  - lib/decidim/meetings.rb
428
432
  - lib/decidim/meetings/admin.rb
429
433
  - lib/decidim/meetings/admin_engine.rb