decidim-conferences 0.17.1 → 0.19.1

This diff has not been reviewed by any users.
Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) 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/linked_participatory_spaces_cell.rb +6 -0
  8. data/app/cells/decidim/conferences/partner_cell.rb +2 -0
  9. data/app/cells/decidim/conferences/photos_list_cell.rb +1 -0
  10. data/app/cells/decidim/conferences/registration_type_cell.rb +2 -0
  11. data/app/commands/decidim/conferences/admin/confirm_conference_registration.rb +1 -0
  12. data/app/commands/decidim/conferences/admin/create_conference.rb +0 -10
  13. data/app/commands/decidim/conferences/admin/create_conference_admin.rb +1 -0
  14. data/app/commands/decidim/conferences/admin/publish_conference.rb +12 -0
  15. data/app/commands/decidim/conferences/admin/update_conference.rb +6 -2
  16. data/app/commands/decidim/conferences/admin/update_diploma.rb +1 -0
  17. data/app/commands/decidim/conferences/join_conference.rb +2 -0
  18. data/app/commands/decidim/conferences/leave_conference.rb +1 -0
  19. data/app/controllers/decidim/conferences/admin/application_controller.rb +5 -4
  20. data/app/controllers/decidim/conferences/admin/concerns/conference_admin.rb +6 -4
  21. data/app/controllers/decidim/conferences/admin/conference_registrations_controller.rb +1 -0
  22. data/app/controllers/decidim/conferences/application_controller.rb +6 -5
  23. data/app/controllers/decidim/conferences/conference_program_controller.rb +4 -1
  24. data/app/controllers/decidim/conferences/conference_registrations_controller.rb +1 -0
  25. data/app/controllers/decidim/conferences/conference_speakers_controller.rb +1 -0
  26. data/app/controllers/decidim/conferences/media_controller.rb +1 -0
  27. data/app/controllers/decidim/conferences/registration_types_controller.rb +1 -0
  28. data/app/forms/decidim/conferences/admin/conference_form.rb +4 -0
  29. data/app/forms/decidim/conferences/admin/conference_speaker_form.rb +1 -0
  30. data/app/forms/decidim/conferences/admin/registration_type_form.rb +1 -0
  31. data/app/helpers/decidim/conferences/conference_helper.rb +1 -0
  32. data/app/models/decidim/conference.rb +9 -4
  33. data/app/models/decidim/conference_user_role.rb +1 -0
  34. data/app/permissions/decidim/conferences/permissions.rb +6 -0
  35. data/app/presenters/decidim/conferences/admin_log/value_types/role_presenter.rb +1 -0
  36. data/app/presenters/decidim/log/value_types/conference_presenter.rb +1 -0
  37. data/app/queries/decidim/conferences/admin/admin_users.rb +8 -1
  38. data/app/queries/decidim/conferences/admin/conference_invites.rb +1 -0
  39. data/app/queries/decidim/conferences/admin/conference_speakers.rb +1 -0
  40. data/app/views/decidim/conferences/admin/conference_user_roles/index.html.erb +3 -3
  41. data/app/views/decidim/conferences/admin/conferences/index.html.erb +3 -3
  42. data/app/views/decidim/conferences/admin/send_conference_diploma_mailer/diploma_user.html.erb +1 -1
  43. data/app/views/decidim/conferences/conferences/_partners.html.erb +1 -1
  44. data/app/views/decidim/conferences/conferences/_promoted_conference.html.erb +1 -1
  45. data/app/views/decidim/conferences/conferences/show.html.erb +3 -3
  46. data/app/views/decidim/conferences/media/index.html.erb +2 -2
  47. data/app/views/layouts/decidim/_conference_hero.html.erb +2 -2
  48. data/app/views/layouts/decidim/diploma.html.erb +2 -2
  49. data/config/locales/ar-SA.yml +1 -0
  50. data/config/locales/ar.yml +589 -0
  51. data/config/locales/ca.yml +1 -0
  52. data/config/locales/cs.yml +56 -55
  53. data/config/locales/de.yml +10 -9
  54. data/config/locales/en.yml +1 -0
  55. data/config/locales/eo-UY.yml +1 -0
  56. data/config/locales/es-MX.yml +1 -0
  57. data/config/locales/es-PY.yml +1 -0
  58. data/config/locales/es.yml +1 -0
  59. data/config/locales/eu.yml +1 -0
  60. data/config/locales/fi-plain.yml +1 -0
  61. data/config/locales/fi.yml +1 -0
  62. data/config/locales/fr.yml +95 -94
  63. data/config/locales/gl.yml +1 -0
  64. data/config/locales/hu.yml +4 -3
  65. data/config/locales/id-ID.yml +1 -0
  66. data/config/locales/it.yml +4 -3
  67. data/config/locales/nl.yml +3 -2
  68. data/config/locales/no.yml +117 -0
  69. data/config/locales/pl.yml +1 -0
  70. data/config/locales/pt-BR.yml +1 -0
  71. data/config/locales/pt.yml +1 -0
  72. data/config/locales/sv.yml +204 -203
  73. data/config/locales/tr-TR.yml +1 -0
  74. data/lib/decidim/conferences/participatory_space.rb +1 -0
  75. data/lib/decidim/conferences/version.rb +1 -1
  76. metadata +23 -20
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: be8713913c47729de41f1227fd6a6a5160532873aaa6c687755b2fdcefeedd1e
4
- data.tar.gz: 1ef095af2890054a071be3aaca82fce0a82034bc6a7921d943fa7dd3a254bafb
3
+ metadata.gz: 17b13f7756447bf49686845ee1c035fd843c7187110f1e2fe0c3938d8b42d5eb
4
+ data.tar.gz: 0b7c31d1b7feeefb0e7eb727269002479e7bdb57eadf61a0c7bd2cc1c95a5664
5
5
  SHA512:
6
- metadata.gz: fdba6944828ed4c2948dd2585233bfa697cd791428476d255d718f02d580dfdc08d87183bfaecda06ca81e94e1ad0bf8097ff847de22055823602ac032e6d091
7
- data.tar.gz: 8f4a1b3bcff980f3844d9167858f60421491baa94d8bdae4f8d9a269885354ed952d0c6af54b5a2e7ef717bf1a29f21cc42356e2a10c3fb8a61bebb20ddfb860
6
+ metadata.gz: 42f0d7c52d5f2eb0c555d145505372412fd5e763cc4bc546c7a356bd6bdf774d601f3a620965bed1f068eaa6a1df5986b930cb2771538d6646a2a489d0bde293
7
+ data.tar.gz: 8af57513c692428d9c7a9685441bd13470e271b15d4dd0960b5a2c8a0fad6ea4c790434c9f2b7557d9961db5efabe47b6ccf92679c0b0903a021db39147424f6
@@ -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
@@ -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