decidim-conferences 0.16.1 → 0.19.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheet/decidim/conferences/conferences.scss +3 -0
  3. data/app/cells/decidim/conferences/conference_address/show.erb +1 -1
  4. data/app/cells/decidim/conferences/conference_m/footer.erb +1 -1
  5. data/app/cells/decidim/conferences/conference_speaker/show.erb +2 -2
  6. data/app/cells/decidim/conferences/conference_speaker_cell.rb +6 -2
  7. data/app/cells/decidim/conferences/content_blocks/highlighted_conferences_cell.rb +0 -1
  8. data/app/cells/decidim/conferences/linked_participatory_spaces_cell.rb +6 -0
  9. data/app/cells/decidim/conferences/partner_cell.rb +2 -0
  10. data/app/cells/decidim/conferences/photos_list_cell.rb +1 -0
  11. data/app/cells/decidim/conferences/registration_type_cell.rb +2 -0
  12. data/app/commands/decidim/conferences/admin/confirm_conference_registration.rb +1 -0
  13. data/app/commands/decidim/conferences/admin/create_conference.rb +0 -10
  14. data/app/commands/decidim/conferences/admin/create_conference_admin.rb +1 -0
  15. data/app/commands/decidim/conferences/admin/publish_conference.rb +12 -0
  16. data/app/commands/decidim/conferences/admin/update_conference.rb +6 -2
  17. data/app/commands/decidim/conferences/admin/update_diploma.rb +1 -0
  18. data/app/commands/decidim/conferences/join_conference.rb +2 -0
  19. data/app/commands/decidim/conferences/leave_conference.rb +1 -0
  20. data/app/controllers/decidim/conferences/admin/application_controller.rb +5 -4
  21. data/app/controllers/decidim/conferences/admin/concerns/conference_admin.rb +6 -4
  22. data/app/controllers/decidim/conferences/admin/conference_registrations_controller.rb +1 -0
  23. data/app/controllers/decidim/conferences/application_controller.rb +6 -5
  24. data/app/controllers/decidim/conferences/conference_program_controller.rb +4 -1
  25. data/app/controllers/decidim/conferences/conference_registrations_controller.rb +1 -0
  26. data/app/controllers/decidim/conferences/conference_speakers_controller.rb +1 -0
  27. data/app/controllers/decidim/conferences/media_controller.rb +1 -0
  28. data/app/controllers/decidim/conferences/registration_types_controller.rb +1 -0
  29. data/app/forms/decidim/conferences/admin/conference_form.rb +4 -0
  30. data/app/forms/decidim/conferences/admin/conference_speaker_form.rb +1 -0
  31. data/app/forms/decidim/conferences/admin/registration_type_form.rb +1 -0
  32. data/app/helpers/decidim/conferences/conference_helper.rb +1 -0
  33. data/app/models/decidim/conference.rb +9 -4
  34. data/app/models/decidim/conference_user_role.rb +1 -0
  35. data/app/permissions/decidim/conferences/permissions.rb +6 -0
  36. data/app/presenters/decidim/conferences/admin_log/value_types/role_presenter.rb +1 -0
  37. data/app/presenters/decidim/log/value_types/conference_presenter.rb +1 -0
  38. data/app/queries/decidim/conferences/admin/admin_users.rb +8 -1
  39. data/app/queries/decidim/conferences/admin/conference_invites.rb +1 -0
  40. data/app/queries/decidim/conferences/admin/conference_speakers.rb +1 -0
  41. data/app/views/decidim/conferences/admin/conference_user_roles/index.html.erb +3 -3
  42. data/app/views/decidim/conferences/admin/conferences/index.html.erb +3 -3
  43. data/app/views/decidim/conferences/admin/send_conference_diploma_mailer/diploma_user.html.erb +1 -1
  44. data/app/views/decidim/conferences/conferences/_partners.html.erb +1 -1
  45. data/app/views/decidim/conferences/conferences/_promoted_conference.html.erb +1 -1
  46. data/app/views/decidim/conferences/conferences/show.html.erb +3 -3
  47. data/app/views/decidim/conferences/media/index.html.erb +2 -2
  48. data/app/views/layouts/decidim/_conference_hero.html.erb +3 -3
  49. data/app/views/layouts/decidim/diploma.html.erb +2 -2
  50. data/config/locales/ar-SA.yml +132 -22
  51. data/config/locales/ar.yml +589 -0
  52. data/config/locales/ca.yml +192 -191
  53. data/config/locales/cs-CZ.yml +3 -3
  54. data/config/locales/cs.yml +581 -0
  55. data/config/locales/de.yml +15 -14
  56. data/config/locales/en.yml +87 -85
  57. data/config/locales/eo-UY.yml +1 -0
  58. data/config/locales/es-MX.yml +7 -6
  59. data/config/locales/es-PY.yml +8 -7
  60. data/config/locales/es.yml +161 -160
  61. data/config/locales/eu.yml +6 -5
  62. data/config/locales/fi-pl.yml +3 -3
  63. data/config/locales/fi-plain.yml +571 -0
  64. data/config/locales/fi.yml +65 -64
  65. data/config/locales/fr.yml +100 -99
  66. data/config/locales/gl.yml +6 -5
  67. data/config/locales/hu.yml +9 -8
  68. data/config/locales/id-ID.yml +6 -5
  69. data/config/locales/it.yml +9 -8
  70. data/config/locales/nl.yml +8 -7
  71. data/config/locales/no.yml +5 -0
  72. data/config/locales/pl.yml +6 -5
  73. data/config/locales/pt-BR.yml +6 -5
  74. data/config/locales/pt.yml +6 -5
  75. data/config/locales/sv.yml +206 -205
  76. data/config/locales/tr-TR.yml +6 -5
  77. data/lib/decidim/conferences/admin_engine.rb +1 -0
  78. data/lib/decidim/conferences/participatory_space.rb +2 -0
  79. data/lib/decidim/conferences/version.rb +1 -1
  80. metadata +26 -21
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b5466e2076f3b13ddcbf7efff46d9faf4386dad859aa18320eb7d779ee3ab205
4
- data.tar.gz: 0fdd4cd0e5ac9e90674929714a598904210a691744adfded1320899424c87ff1
3
+ metadata.gz: a350885d8989dcbed020295a179753dd257966cc6ea5234188a5257dc506d1c6
4
+ data.tar.gz: b28820eefb620c35d49d9caabae092c086397940793d510aad55d10c61148278
5
5
  SHA512:
6
- metadata.gz: 00d2717138aff2524d063888374305526f3a500b6be4584f44e0fe6330dc0a86b67952f7673fd52a39f30c097c407959d7ff740b7420658cb2ddbba66aa1c484
7
- data.tar.gz: 7ee62dcfa7c09f024e31253d7d98b38da7af991aaa4c850ad057c80311bc50669a2ad50305d78c2dcc4db6eee159cb4eb5f810ff513f8a4d02d331f4f2fbee8a
6
+ metadata.gz: 33434c66f9cbf62b02131047146097f0283b1e3cd9dc7a5bb11f41ca42589c8de7ceb30349ab23b19738b30286960f3c7f3aa30a1598b6ee08c5a74262a0b7b9
7
+ data.tar.gz: e1902107434422ba5f6527297db272b71cb536810e90fbbef7a5cb1d82575f956b4af61fc30e3519d3488ae06928d5dddb00606e8f6e9f05a4b2945c47553007
@@ -0,0 +1,3 @@
1
+ .conference--date{
2
+ cursor: default;
3
+ }
@@ -1,7 +1,7 @@
1
1
  <div class="mb-s">
2
2
  <% if model.respond_to? :location %>
3
3
  <div>
4
- <strong><%= translated_attribute model.location %></strong><br />
4
+ <strong><%= translated_attribute model.location %></strong><br>
5
5
  </div>
6
6
  <% end %>
7
7
  <div class="text-medium"><%= model.address %></div>
@@ -1,7 +1,7 @@
1
1
  <div class="card__footer card__footer--spaces">
2
2
  <div class="card__support">
3
3
  <%= link_to(
4
- t("layouts.decidim.conferences.conference.take_part"),
4
+ t(model.cta_button_text_key, scope: "layouts.decidim.conferences.conference"),
5
5
  resource_path,
6
6
  class: "card__button button button--sc secondary light small"
7
7
  ) %>
@@ -67,14 +67,14 @@
67
67
  <% end %>
68
68
  </div>
69
69
  <% if meetings.present? %>
70
- <hr class="reset mt-none mb-s" />
70
+ <hr class="reset mt-none mb-s">
71
71
  <div class="row">
72
72
  <div class="column medium-12">
73
73
  <div class="bio-acts">Speaking at</div>
74
74
 
75
75
  <ul class="list-reset">
76
76
  <% meetings.each do |meeting| %>
77
- <%= meeting_title meeting %> <br />
77
+ <%= meeting_title meeting %> <br>
78
78
  <% end %>
79
79
  </ul>
80
80
  </div>
@@ -41,6 +41,7 @@ module Decidim
41
41
 
42
42
  def avatar
43
43
  return model.user.avatar if model.user.present?
44
+
44
45
  model.avatar
45
46
  end
46
47
 
@@ -58,17 +59,20 @@ module Decidim
58
59
 
59
60
  def short_bio
60
61
  return unless model.short_bio.presence
62
+
61
63
  translated_attribute model.short_bio
62
64
  end
63
65
 
64
66
  def twitter_handle
65
67
  return unless model.twitter_handle.presence
66
- link_to t(".go_to_twitter"), "https://twitter.com/#{model.twitter_handle}", target: "_blank"
68
+
69
+ link_to t(".go_to_twitter"), "https://twitter.com/#{model.twitter_handle}", target: "_blank", rel: "noopener"
67
70
  end
68
71
 
69
72
  def personal_url
70
73
  return unless model.personal_url.presence || (model.user.presence && model.user.personal_url.presence)
71
- link_to model.personal_url || model.user.personal_url, target: "_blank", class: "card-link" do
74
+
75
+ link_to model.personal_url || model.user.personal_url, target: "_blank", class: "card-link", rel: "noopener" do
72
76
  "#{icon "external-link"}" "&nbsp;#{t(".personal_website")}"
73
77
  end
74
78
  end
@@ -4,7 +4,6 @@ module Decidim
4
4
  module Conferences
5
5
  module ContentBlocks
6
6
  class HighlightedConferencesCell < Decidim::ViewModel
7
- delegate :current_organization, to: :controller
8
7
  delegate :current_user, to: :controller
9
8
 
10
9
  def show
@@ -20,22 +20,28 @@ module Decidim
20
20
 
21
21
  def conference_participatory_processes
22
22
  return unless Decidim.participatory_space_manifests.map(&:name).include?(:participatory_processes)
23
+
23
24
  processes = model.linked_participatory_space_resources(:participatory_processes, "included_participatory_processes")
24
25
  return unless processes.any?
26
+
25
27
  processes
26
28
  end
27
29
 
28
30
  def conference_assemblies
29
31
  return unless Decidim.participatory_space_manifests.map(&:name).include?(:assemblies)
32
+
30
33
  assemblies = model.linked_participatory_space_resources(:assemblies, "included_assemblies")
31
34
  return unless assemblies.any?
35
+
32
36
  assemblies
33
37
  end
34
38
 
35
39
  def conference_consultations
36
40
  return unless Decidim.participatory_space_manifests.map(&:name).include?(:consultations)
41
+
37
42
  consultations = model.linked_participatory_space_resources(:consultations, "included_consultations")
38
43
  return unless consultations.any?
44
+
39
45
  consultations
40
46
  end
41
47
 
@@ -12,11 +12,13 @@ module Decidim
12
12
 
13
13
  def name
14
14
  return unless model.name.presence
15
+
15
16
  "<div class='text-medium'> #{model.name} </div>"
16
17
  end
17
18
 
18
19
  def logo
19
20
  return unless model.logo.presence
21
+
20
22
  "<div class='card p-m flex--cc'> #{image_tag model.logo.medium.url} </div>"
21
23
  end
22
24
  end
@@ -10,6 +10,7 @@ module Decidim
10
10
 
11
11
  def show
12
12
  return unless model.any?
13
+
13
14
  render
14
15
  end
15
16
  end
@@ -27,6 +27,7 @@ module Decidim
27
27
 
28
28
  def price
29
29
  return I18n.t("free", scope: "decidim.conferences.conference.show") if model.price.blank?
30
+
30
31
  number_to_currency(model.price, locale: I18n.locale, unit: Decidim.currency_unit)
31
32
  end
32
33
 
@@ -44,6 +45,7 @@ module Decidim
44
45
 
45
46
  def i18n_join_text
46
47
  return I18n.t("registration", scope: "decidim.conferences.conference.show") if conference.has_available_slots?
48
+
47
49
  I18n.t("no_slots_available", scope: "decidim.conferences.conference.show")
48
50
  end
49
51
  end
@@ -20,6 +20,7 @@ module Decidim
20
20
  def call
21
21
  @conference_registration.with_lock do
22
22
  return broadcast(:invalid) unless can_join_conference?
23
+
23
24
  confirm_registration
24
25
  send_email_confirmation
25
26
  send_notification_confirmation
@@ -29,7 +29,6 @@ module Decidim
29
29
  link_consultations
30
30
 
31
31
  broadcast(:ok, conference)
32
- send_notification
33
32
  else
34
33
  form.errors.add(:hero_image, conference.errors[:hero_image]) if conference.errors.include? :hero_image
35
34
  form.errors.add(:banner_image, conference.errors[:banner_image]) if conference.errors.include? :banner_image
@@ -81,15 +80,6 @@ module Decidim
81
80
  end
82
81
  end
83
82
 
84
- def send_notification
85
- Decidim::EventsManager.publish(
86
- event: "decidim.events.conferences.registrations_enabled",
87
- event_class: Decidim::Conferences::ConferenceRegistrationsEnabledEvent,
88
- resource: conference,
89
- followers: conference.followers
90
- )
91
- end
92
-
93
83
  def participatory_processes
94
84
  @participatory_processes ||= conference.participatory_space_sibling_scope(:participatory_processes).where(id: @form.participatory_processes_ids)
95
85
  end
@@ -91,6 +91,7 @@ module Decidim
91
91
 
92
92
  def invitation_instructions
93
93
  return "invite_admin" if form.role == "admin"
94
+
94
95
  "invite_collaborator"
95
96
  end
96
97
 
@@ -28,11 +28,23 @@ module Decidim
28
28
  end
29
29
 
30
30
  broadcast(:ok)
31
+ send_notification
31
32
  end
32
33
 
33
34
  private
34
35
 
35
36
  attr_reader :conference, :current_user
37
+
38
+ def send_notification
39
+ return unless conference.registrations_enabled?
40
+
41
+ Decidim::EventsManager.publish(
42
+ event: "decidim.events.conferences.registrations_enabled",
43
+ event_class: Decidim::Conferences::ConferenceRegistrationsEnabledEvent,
44
+ resource: conference,
45
+ followers: conference.followers
46
+ )
47
+ end
36
48
  end
37
49
  end
38
50
  end
@@ -23,6 +23,7 @@ module Decidim
23
23
  # Returns nothing.
24
24
  def call
25
25
  return broadcast(:invalid) if form.invalid?
26
+
26
27
  update_conference
27
28
  link_participatory_processes
28
29
  link_assemblies
@@ -99,7 +100,9 @@ module Decidim
99
100
  end
100
101
 
101
102
  def should_notify_followers_registrations_enabled?
102
- @conference.previous_changes["registrations_enabled"].present? && @conference.registrations_enabled?
103
+ @conference.previous_changes["registrations_enabled"].present? &&
104
+ @conference.registrations_enabled? &&
105
+ @conference.published?
103
106
  end
104
107
 
105
108
  def send_notification_update_conference
@@ -112,7 +115,8 @@ module Decidim
112
115
  end
113
116
 
114
117
  def should_notify_followers_update_conference?
115
- important_attributes.any? { |attr| @conference.previous_changes[attr].present? }
118
+ important_attributes.any? { |attr| @conference.previous_changes[attr].present? } &&
119
+ @conference.published?
116
120
  end
117
121
 
118
122
  def important_attributes
@@ -20,6 +20,7 @@ module Decidim
20
20
  def call
21
21
  @conference.with_lock do
22
22
  return broadcast(:invalid) if form.invalid?
23
+
23
24
  update_conference_diploma
24
25
  Decidim.traceability.perform_action!(:update_diploma, @conference, form.current_user) do
25
26
  @conference
@@ -22,6 +22,7 @@ module Decidim
22
22
  def call
23
23
  conference.with_lock do
24
24
  return broadcast(:invalid) unless can_join_conference?
25
+
25
26
  create_registration
26
27
  create_meetings_registrations
27
28
  accept_invitation
@@ -77,6 +78,7 @@ module Decidim
77
78
  def notify_admin_over_percentage
78
79
  return send_notification_over(0.5) if occupied_slots_over?(0.5)
79
80
  return send_notification_over(0.8) if occupied_slots_over?(0.8)
81
+
80
82
  send_notification_over(1.0) if occupied_slots_over?(1.0)
81
83
  end
82
84
 
@@ -23,6 +23,7 @@ module Decidim
23
23
  @conference.with_lock do
24
24
  return broadcast(:invalid) unless registration
25
25
  return broadcast(:invalid) unless meetings_registrations
26
+
26
27
  destroy_registration
27
28
  destroy_meeting_registration
28
29
  end
@@ -5,6 +5,10 @@ module Decidim
5
5
  module Admin
6
6
  # The main admin application controller for conferences
7
7
  class ApplicationController < Decidim::Admin::ApplicationController
8
+ register_permissions(::Decidim::Conferences::Admin::ApplicationController,
9
+ Decidim::Conferences::Permissions,
10
+ Decidim::Admin::Permissions)
11
+
8
12
  private
9
13
 
10
14
  def permissions_context
@@ -14,10 +18,7 @@ module Decidim
14
18
  end
15
19
 
16
20
  def permission_class_chain
17
- [
18
- Decidim::Conferences::Permissions,
19
- Decidim::Admin::Permissions
20
- ]
21
+ ::Decidim.permissions_registry.chain_for(::Decidim::Conferences::Admin::ApplicationController)
21
22
  end
22
23
  end
23
24
  end
@@ -12,6 +12,11 @@ module Decidim
12
12
  module ConferenceAdmin
13
13
  extend ActiveSupport::Concern
14
14
 
15
+ RegistersPermissions
16
+ .register_permissions(::Decidim::Conferences::Admin::Concerns::ConferenceAdmin,
17
+ ::Decidim::Conferences::Permissions,
18
+ ::Decidim::Admin::Permissions)
19
+
15
20
  included do
16
21
  include Decidim::Admin::ParticipatorySpaceAdminContext
17
22
  participatory_space_admin_layout
@@ -35,10 +40,7 @@ module Decidim
35
40
  end
36
41
 
37
42
  def permission_class_chain
38
- [
39
- Decidim::Conferences::Permissions,
40
- Decidim::Admin::Permissions
41
- ]
43
+ PermissionsRegistry.chain_for(ConferenceAdmin)
42
44
  end
43
45
  end
44
46
  end
@@ -52,6 +52,7 @@ module Decidim
52
52
 
53
53
  def conference_registration
54
54
  return if params[:id].blank?
55
+
55
56
  @conference_registration ||= conference.conference_registrations.find_by(id: params[:id])
56
57
  end
57
58
  end
@@ -10,6 +10,11 @@ module Decidim
10
10
 
11
11
  include NeedsPermission
12
12
 
13
+ register_permissions(::Decidim::Conferences::ApplicationController,
14
+ Decidim::Conferences::Permissions,
15
+ Decidim::Admin::Permissions,
16
+ Decidim::Permissions)
17
+
13
18
  private
14
19
 
15
20
  def permissions_context
@@ -19,11 +24,7 @@ module Decidim
19
24
  end
20
25
 
21
26
  def permission_class_chain
22
- [
23
- Decidim::Conferences::Permissions,
24
- Decidim::Admin::Permissions,
25
- Decidim::Permissions
26
- ]
27
+ ::Decidim.permissions_registry.chain_for(::Decidim::Conferences::ApplicationController)
27
28
  end
28
29
 
29
30
  def permission_scope
@@ -11,7 +11,8 @@ module Decidim
11
11
  helper_method :collection, :conference, :meeting_days, :meeting_component
12
12
 
13
13
  def show
14
- raise ActionController::RoutingError, "No meetings for this conference " if meetings.empty?
14
+ raise ActionController::RoutingError, "No meetings for this conference " if meetings.blank?
15
+
15
16
  enforce_permission_to :list, :program
16
17
  redirect_to decidim_conferences.conference_path(current_participatory_space) unless current_user_can_visit_space?
17
18
  end
@@ -20,11 +21,13 @@ module Decidim
20
21
 
21
22
  def meeting_component
22
23
  return if params[:id].blank?
24
+
23
25
  @meeting_component ||= current_participatory_space.components.where(manifest_name: "meetings").find_by(id: params[:id])
24
26
  end
25
27
 
26
28
  def meetings
27
29
  return unless meeting_component.published? || !meeting_component.presence
30
+
28
31
  @meetings ||= Decidim::Meetings::Meeting.where(component: meeting_component).visible_meeting_for(current_user).order(:start_time)
29
32
  end
30
33
 
@@ -65,6 +65,7 @@ module Decidim
65
65
  def redirect_after_path
66
66
  referer = request.headers["Referer"]
67
67
  return redirect_to(conference_path(conference)) if referer =~ /invitation_token/
68
+
68
69
  redirect_back fallback_location: conference_path(conference)
69
70
  end
70
71
  end
@@ -11,6 +11,7 @@ module Decidim
11
11
 
12
12
  def index
13
13
  raise ActionController::RoutingError, "No speakers for this conference " if speakers.empty?
14
+
14
15
  enforce_permission_to :list, :speakers
15
16
  redirect_to decidim_conferences.conference_path(current_participatory_space) unless current_user_can_visit_space?
16
17
  end
@@ -13,6 +13,7 @@ module Decidim
13
13
 
14
14
  def index
15
15
  raise ActionController::RoutingError, "No media_links for this conference " if media_links.empty? && current_participatory_space.attachments.empty?
16
+
16
17
  enforce_permission_to :list, :media_links
17
18
  redirect_to decidim_conferences.conference_path(current_participatory_space) unless current_user_can_visit_space?
18
19
  end
@@ -11,6 +11,7 @@ module Decidim
11
11
 
12
12
  def index
13
13
  raise ActionController::RoutingError, "No registration types for this conference " if registration_types.empty? && current_participatory_space.registrations_enabled.empty?
14
+
14
15
  enforce_permission_to :list, :registration_types
15
16
  redirect_to decidim_conferences.conference_path(current_participatory_space) unless current_user_can_visit_space?
16
17
  end
@@ -62,6 +62,7 @@ module Decidim
62
62
 
63
63
  def processes_for_select
64
64
  return unless Decidim.participatory_space_manifests.map(&:name).include?(:participatory_processes)
65
+
65
66
  @processes_for_select ||= Decidim.find_participatory_space_manifest(:participatory_processes)
66
67
  .participatory_spaces.call(current_organization)&.order(title: :asc)&.map do |process|
67
68
  [
@@ -73,6 +74,7 @@ module Decidim
73
74
 
74
75
  def assemblies_for_select
75
76
  return unless Decidim.participatory_space_manifests.map(&:name).include?(:assemblies)
77
+
76
78
  @assemblies_for_select ||= Decidim.find_participatory_space_manifest(:assemblies)
77
79
  .participatory_spaces.call(current_organization)&.order(title: :asc)&.map do |assembly|
78
80
  [
@@ -84,6 +86,7 @@ module Decidim
84
86
 
85
87
  def consultations_for_select
86
88
  return unless Decidim.participatory_space_manifests.map(&:name).include?(:consultations)
89
+
87
90
  @consultations_for_select ||= Decidim.find_participatory_space_manifest(:consultations)
88
91
  .participatory_spaces.call(current_organization)&.order(title: :asc)&.map do |consultation|
89
92
  [
@@ -98,6 +101,7 @@ module Decidim
98
101
  def available_slots_greater_than_or_equal_to_registrations_count
99
102
  conference = OrganizationConferences.new(current_organization).query.find_by(slug: slug)
100
103
  return true if conference.blank?
104
+
101
105
  errors.add(:available_slots, :invalid) if available_slots < conference.conference_registrations.count
102
106
  end
103
107