decidim-conferences 0.18.0 → 0.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) 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_speaker/show.erb +2 -2
  5. data/app/cells/decidim/conferences/conference_speaker_cell.rb +6 -2
  6. data/app/cells/decidim/conferences/linked_participatory_spaces_cell.rb +6 -0
  7. data/app/cells/decidim/conferences/partner_cell.rb +2 -0
  8. data/app/cells/decidim/conferences/photos_list_cell.rb +1 -0
  9. data/app/cells/decidim/conferences/registration_type_cell.rb +2 -0
  10. data/app/commands/decidim/conferences/admin/confirm_conference_registration.rb +1 -0
  11. data/app/commands/decidim/conferences/admin/create_conference.rb +0 -10
  12. data/app/commands/decidim/conferences/admin/create_conference_admin.rb +1 -0
  13. data/app/commands/decidim/conferences/admin/publish_conference.rb +12 -0
  14. data/app/commands/decidim/conferences/admin/update_conference.rb +6 -2
  15. data/app/commands/decidim/conferences/admin/update_diploma.rb +1 -0
  16. data/app/commands/decidim/conferences/join_conference.rb +2 -0
  17. data/app/commands/decidim/conferences/leave_conference.rb +1 -0
  18. data/app/controllers/decidim/conferences/admin/conference_registrations_controller.rb +3 -1
  19. data/app/controllers/decidim/conferences/admin/conference_speakers_controller.rb +2 -1
  20. data/app/controllers/decidim/conferences/admin/conference_user_roles_controller.rb +2 -1
  21. data/app/controllers/decidim/conferences/admin/conferences_controller.rb +2 -1
  22. data/app/controllers/decidim/conferences/admin/media_links_controller.rb +2 -1
  23. data/app/controllers/decidim/conferences/admin/partners_controller.rb +2 -1
  24. data/app/controllers/decidim/conferences/admin/registration_types_controller.rb +2 -1
  25. data/app/controllers/decidim/conferences/conference_program_controller.rb +4 -1
  26. data/app/controllers/decidim/conferences/conference_registrations_controller.rb +1 -0
  27. data/app/controllers/decidim/conferences/conference_speakers_controller.rb +1 -0
  28. data/app/controllers/decidim/conferences/media_controller.rb +1 -0
  29. data/app/controllers/decidim/conferences/registration_types_controller.rb +1 -0
  30. data/app/forms/decidim/conferences/admin/conference_form.rb +4 -0
  31. data/app/forms/decidim/conferences/admin/conference_speaker_form.rb +1 -0
  32. data/app/forms/decidim/conferences/admin/registration_type_form.rb +1 -0
  33. data/app/helpers/decidim/conferences/conference_helper.rb +1 -0
  34. data/app/models/decidim/conference.rb +17 -4
  35. data/app/models/decidim/conference_user_role.rb +1 -0
  36. data/app/permissions/decidim/conferences/permissions.rb +6 -0
  37. data/app/presenters/decidim/conferences/admin_log/value_types/role_presenter.rb +1 -0
  38. data/app/presenters/decidim/log/value_types/conference_presenter.rb +1 -0
  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_speakers/index.html.erb +1 -0
  42. data/app/views/decidim/conferences/admin/conference_user_roles/index.html.erb +4 -3
  43. data/app/views/decidim/conferences/admin/conferences/index.html.erb +4 -3
  44. data/app/views/decidim/conferences/admin/partners/index.html.erb +1 -0
  45. data/app/views/decidim/conferences/admin/registration_types/index.html.erb +1 -0
  46. data/app/views/decidim/conferences/admin/send_conference_diploma_mailer/diploma_user.html.erb +1 -1
  47. data/app/views/decidim/conferences/conference_registration_mailer/confirmation.html.erb +1 -1
  48. data/app/views/decidim/conferences/conference_registration_mailer/pending_validation.html.erb +1 -1
  49. data/app/views/decidim/conferences/conferences/_partners.html.erb +1 -1
  50. data/app/views/decidim/conferences/conferences/show.html.erb +3 -3
  51. data/app/views/decidim/conferences/media/index.html.erb +2 -2
  52. data/app/views/layouts/decidim/_conference_hero.html.erb +2 -2
  53. data/app/views/layouts/decidim/diploma.html.erb +2 -2
  54. data/config/locales/ar.yml +5 -2
  55. data/config/locales/cs.yml +55 -55
  56. data/config/locales/de.yml +10 -10
  57. data/config/locales/el-GR.yml +1 -0
  58. data/config/locales/fr.yml +94 -94
  59. data/config/locales/hu.yml +1 -1
  60. data/config/locales/is-IS.yml +1 -0
  61. data/config/locales/it.yml +3 -3
  62. data/config/locales/nl.yml +2 -2
  63. data/config/locales/no.yml +571 -0
  64. data/lib/decidim/conferences/participatory_space.rb +3 -0
  65. data/lib/decidim/conferences/version.rb +1 -1
  66. metadata +23 -20
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e0e842238aaaceb5245a50065ab55bded2a36ea31fa14c54dc8631f223ff75d3
4
- data.tar.gz: c47d206b41f4c12721743942fdb7efe0e519f3c4fb4a8737f9a9a0cfc1bdc015
3
+ metadata.gz: 073cb7b12f74449977cfec9e2d7adb06068471c034cd41bfd4d7bfb18a34e178
4
+ data.tar.gz: 5f10e62f54d3a8511f565ef53c7b2d50ab49f1e75da0df5f89f35056efb36284
5
5
  SHA512:
6
- metadata.gz: 1fb525774a7fa599adf5f6b7cb736cd9b1ee11a5ef7d7668a0a72ed26511b9424f862f3c9da1e89bfc6660608bc3f3c720f2b5d095cc379438b7f8cb546d7d5d
7
- data.tar.gz: 0a16252c6a48fdab476be5217fac2966c009fa5387479e2818f788e028a5be8ee1105037dad3a999815156160e167a7a1f04776855fd70f2071a92957187eecd
6
+ metadata.gz: 5ab470eaa1b17bbd6cee13c6238fe492abd41f2888728dde9c650c7ac595b5af7852532740626726b457ca81933519c4673fcb66c81295d303ca2a65cb221145
7
+ data.tar.gz: 3a7469d214456fb69eb48eeeb0afe2656df021d630dba27dc97beac8eafd751960f047dcbcbb6816f4f2db20ae795a48295fd356c51c16ff32814984619eec53
@@ -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>
@@ -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
@@ -9,13 +9,14 @@ module Decidim
9
9
  #
10
10
  class ConferenceRegistrationsController < Decidim::Conferences::Admin::ApplicationController
11
11
  include Concerns::ConferenceAdmin
12
+ include Decidim::Paginable
12
13
 
13
14
  helper_method :conference
14
15
 
15
16
  def index
16
17
  enforce_permission_to :read_conference_registrations, :conference, conference: conference
17
18
 
18
- @conference_registrations = Decidim::Conferences::ConferenceRegistration.where(conference: conference).page(params[:page]).per(15)
19
+ @conference_registrations = paginate(Decidim::Conferences::ConferenceRegistration.where(conference: conference))
19
20
  end
20
21
 
21
22
  def export
@@ -52,6 +53,7 @@ module Decidim
52
53
 
53
54
  def conference_registration
54
55
  return if params[:id].blank?
56
+
55
57
  @conference_registration ||= conference.conference_registrations.find_by(id: params[:id])
56
58
  end
57
59
  end
@@ -8,13 +8,14 @@ module Decidim
8
8
  class ConferenceSpeakersController < Decidim::Conferences::Admin::ApplicationController
9
9
  helper Decidim::Conferences::Admin::ConferenceSpeakersHelper
10
10
  include Concerns::ConferenceAdmin
11
+ include Decidim::Paginable
11
12
 
12
13
  def index
13
14
  enforce_permission_to :index, :conference_speaker
14
15
 
15
16
  @query = params[:q]
16
17
 
17
- @conference_speakers = Decidim::Conferences::Admin::ConferenceSpeakers.for(collection, @query).page(params[:page]).per(15)
18
+ @conference_speakers = paginate(Decidim::Conferences::Admin::ConferenceSpeakers.for(collection, @query))
18
19
  end
19
20
 
20
21
  def new
@@ -7,10 +7,11 @@ module Decidim
7
7
  #
8
8
  class ConferenceUserRolesController < Decidim::Conferences::Admin::ApplicationController
9
9
  include Concerns::ConferenceAdmin
10
+ include Decidim::Paginable
10
11
 
11
12
  def index
12
13
  enforce_permission_to :index, :conference_user_role
13
- @conference_user_roles = collection
14
+ @conference_user_roles = paginate(collection)
14
15
  end
15
16
 
16
17
  def new
@@ -8,10 +8,11 @@ module Decidim
8
8
  class ConferencesController < Decidim::Conferences::Admin::ApplicationController
9
9
  helper_method :current_conference, :current_participatory_space
10
10
  layout "decidim/admin/conferences"
11
+ include Decidim::Paginable
11
12
 
12
13
  def index
13
14
  enforce_permission_to :read, :conference_list
14
- @conferences = collection
15
+ @conferences = paginate(collection)
15
16
  end
16
17
 
17
18
  def new
@@ -6,11 +6,12 @@ module Decidim
6
6
  # Controller that allows managing conference media links.
7
7
  class MediaLinksController < Decidim::Conferences::Admin::ApplicationController
8
8
  include Concerns::ConferenceAdmin
9
+ include Decidim::Paginable
9
10
 
10
11
  def index
11
12
  enforce_permission_to :index, :media_link
12
13
 
13
- @media_links = collection.page(params[:page]).per(15)
14
+ @media_links = paginate(collection)
14
15
  end
15
16
 
16
17
  def new
@@ -7,11 +7,12 @@ module Decidim
7
7
  #
8
8
  class PartnersController < Decidim::Conferences::Admin::ApplicationController
9
9
  include Concerns::ConferenceAdmin
10
+ include Decidim::Paginable
10
11
 
11
12
  def index
12
13
  enforce_permission_to :index, :partner
13
14
 
14
- @partners = collection.page(params[:page]).per(15)
15
+ @partners = paginate(collection)
15
16
  end
16
17
 
17
18
  def new
@@ -8,11 +8,12 @@ module Decidim
8
8
  class RegistrationTypesController < Decidim::Conferences::Admin::ApplicationController
9
9
  include Concerns::ConferenceAdmin
10
10
  include Decidim::ApplicationHelper
11
+ include Decidim::Paginable
11
12
 
12
13
  def index
13
14
  enforce_permission_to :index, :registration_type
14
15
 
15
- @registration_types = collection.page(params[:page]).per(15)
16
+ @registration_types = paginate(collection)
16
17
  end
17
18
 
18
19
  def new
@@ -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