decidim-conferences 0.18.0 → 0.19.0

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 (52) 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 +1 -0
  19. data/app/controllers/decidim/conferences/conference_program_controller.rb +4 -1
  20. data/app/controllers/decidim/conferences/conference_registrations_controller.rb +1 -0
  21. data/app/controllers/decidim/conferences/conference_speakers_controller.rb +1 -0
  22. data/app/controllers/decidim/conferences/media_controller.rb +1 -0
  23. data/app/controllers/decidim/conferences/registration_types_controller.rb +1 -0
  24. data/app/forms/decidim/conferences/admin/conference_form.rb +4 -0
  25. data/app/forms/decidim/conferences/admin/conference_speaker_form.rb +1 -0
  26. data/app/forms/decidim/conferences/admin/registration_type_form.rb +1 -0
  27. data/app/helpers/decidim/conferences/conference_helper.rb +1 -0
  28. data/app/models/decidim/conference.rb +4 -4
  29. data/app/models/decidim/conference_user_role.rb +1 -0
  30. data/app/permissions/decidim/conferences/permissions.rb +6 -0
  31. data/app/presenters/decidim/conferences/admin_log/value_types/role_presenter.rb +1 -0
  32. data/app/presenters/decidim/log/value_types/conference_presenter.rb +1 -0
  33. data/app/queries/decidim/conferences/admin/conference_invites.rb +1 -0
  34. data/app/queries/decidim/conferences/admin/conference_speakers.rb +1 -0
  35. data/app/views/decidim/conferences/admin/conference_user_roles/index.html.erb +3 -3
  36. data/app/views/decidim/conferences/admin/conferences/index.html.erb +3 -3
  37. data/app/views/decidim/conferences/admin/send_conference_diploma_mailer/diploma_user.html.erb +1 -1
  38. data/app/views/decidim/conferences/conferences/_partners.html.erb +1 -1
  39. data/app/views/decidim/conferences/conferences/show.html.erb +3 -3
  40. data/app/views/decidim/conferences/media/index.html.erb +2 -2
  41. data/app/views/layouts/decidim/_conference_hero.html.erb +2 -2
  42. data/app/views/layouts/decidim/diploma.html.erb +2 -2
  43. data/config/locales/ar.yml +1 -0
  44. data/config/locales/cs.yml +55 -55
  45. data/config/locales/de.yml +10 -10
  46. data/config/locales/fr.yml +94 -94
  47. data/config/locales/it.yml +3 -3
  48. data/config/locales/nl.yml +2 -2
  49. data/config/locales/no.yml +5 -0
  50. data/lib/decidim/conferences/participatory_space.rb +1 -0
  51. data/lib/decidim/conferences/version.rb +1 -1
  52. metadata +21 -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: a350885d8989dcbed020295a179753dd257966cc6ea5234188a5257dc506d1c6
4
+ data.tar.gz: b28820eefb620c35d49d9caabae092c086397940793d510aad55d10c61148278
5
5
  SHA512:
6
- metadata.gz: 1fb525774a7fa599adf5f6b7cb736cd9b1ee11a5ef7d7668a0a72ed26511b9424f862f3c9da1e89bfc6660608bc3f3c720f2b5d095cc379438b7f8cb546d7d5d
7
- data.tar.gz: 0a16252c6a48fdab476be5217fac2966c009fa5387479e2818f788e028a5be8ee1105037dad3a999815156160e167a7a1f04776855fd70f2071a92957187eecd
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>
@@ -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
@@ -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
@@ -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
 
@@ -50,6 +50,7 @@ module Decidim
50
50
  def conference_meetings
51
51
  meeting_components = current_participatory_space.components.where(manifest_name: "meetings")
52
52
  return unless meeting_components || conference_meeting_ids.delete("").present?
53
+
53
54
  @conference_meetings ||= Decidim::ConferenceMeeting.where(component: meeting_components).where(id: conference_meeting_ids)
54
55
  end
55
56
 
@@ -36,6 +36,7 @@ module Decidim
36
36
  def conference_meetings
37
37
  meeting_components = current_participatory_space.components.where(manifest_name: "meetings")
38
38
  return unless meeting_components || conference_meeting_ids.delete("").present?
39
+
39
40
  @conference_meetings ||= Decidim::ConferenceMeeting.where(component: meeting_components).where(id: conference_meeting_ids)
40
41
  end
41
42
  end
@@ -8,6 +8,7 @@ module Decidim
8
8
  #
9
9
  def render_date(conference)
10
10
  return l(conference.start_date, format: :decidim_with_month_name_short) if conference.start_date == conference.end_date
11
+
11
12
  "#{l(conference.start_date, format: :decidim_with_month_name_short)} - #{l(conference.end_date, format: :decidim_with_month_name_short)}"
12
13
  end
13
14
  end
@@ -20,10 +20,7 @@ module Decidim
20
20
  belongs_to :organization,
21
21
  foreign_key: "decidim_organization_id",
22
22
  class_name: "Decidim::Organization"
23
- belongs_to :area,
24
- foreign_key: "decidim_area_id",
25
- class_name: "Decidim::Area",
26
- optional: true
23
+
27
24
  has_many :categories,
28
25
  foreign_key: "decidim_participatory_space_id",
29
26
  foreign_type: "decidim_participatory_space_type",
@@ -87,6 +84,7 @@ module Decidim
87
84
 
88
85
  def has_available_slots?
89
86
  return true if available_slots.zero?
87
+
90
88
  available_slots > conference_registrations.count
91
89
  end
92
90
 
@@ -96,11 +94,13 @@ module Decidim
96
94
 
97
95
  def diploma_sent?
98
96
  return false if diploma_sent_at.nil?
97
+
99
98
  true
100
99
  end
101
100
 
102
101
  def closed?
103
102
  return false if end_date.blank?
103
+
104
104
  end_date < Date.current
105
105
  end
106
106
  end
@@ -24,6 +24,7 @@ module Decidim
24
24
  # Private: check if the process and the user have the same organization
25
25
  def user_and_conference_same_organization
26
26
  return if !conference || !user
27
+
27
28
  errors.add(:conference, :invalid) unless user.organization == conference.organization
28
29
  end
29
30
  end
@@ -30,6 +30,7 @@ module Decidim
30
30
  end
31
31
 
32
32
  return permission_action unless user
33
+
33
34
  if !has_manageable_conferences? && !user.admin?
34
35
  disallow!
35
36
  return permission_action
@@ -94,12 +95,14 @@ module Decidim
94
95
  # Checks if it has any manageable conference, with any possible role.
95
96
  def has_manageable_conferences?(role: :any)
96
97
  return unless user
98
+
97
99
  conferences_with_role_privileges(role).any?
98
100
  end
99
101
 
100
102
  # Whether the user can manage the given conference or not.
101
103
  def can_manage_conference?(role: :any)
102
104
  return unless user
105
+
103
106
  conferences_with_role_privileges(role).include? conference
104
107
  end
105
108
 
@@ -123,6 +126,7 @@ module Decidim
123
126
 
124
127
  return allow! if user&.admin?
125
128
  return allow! if conference.published?
129
+
126
130
  toggle_allow(can_manage_conference?)
127
131
  end
128
132
 
@@ -222,12 +226,14 @@ module Decidim
222
226
  # Everyone can read the conference list
223
227
  def user_can_read_conference_list?
224
228
  return unless read_conference_list_permission_action?
229
+
225
230
  toggle_allow(user.admin? || has_manageable_conferences?)
226
231
  end
227
232
 
228
233
  def user_can_read_current_conference?
229
234
  return unless read_conference_list_permission_action?
230
235
  return if permission_action.subject == :conference_list
236
+
231
237
  toggle_allow(user.admin? || can_manage_conference?)
232
238
  end
233
239