From dbea65202fea3415a3e0fb0d80fb4c6aeadb4141 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Gaya?= <sebastien.gaya@gmail.com>
Date: Mon, 15 May 2023 10:47:01 +0200
Subject: [PATCH] fix page dependencies based on languages

---
 app/controllers/admin/university/people_controller.rb       | 6 +++---
 app/models/communication/website/page/administrator.rb      | 2 +-
 app/models/communication/website/page/author.rb             | 2 +-
 app/models/communication/website/page/communication_post.rb | 4 ++--
 app/models/communication/website/page/education_diploma.rb  | 1 +
 app/models/communication/website/page/education_program.rb  | 1 +
 app/models/communication/website/page/organization.rb       | 1 +
 app/models/communication/website/page/person.rb             | 3 +--
 app/models/communication/website/page/research_paper.rb     | 1 +
 app/models/communication/website/page/research_volume.rb    | 1 +
 app/models/communication/website/page/researcher.rb         | 2 +-
 app/models/communication/website/page/teacher.rb            | 2 +-
 app/models/university/person.rb                             | 2 +-
 .../admin/communication/extranets/contacts/index.html.erb   | 4 ++--
 .../pages/show/special_pages/_organization.html.erb         | 4 ++--
 .../websites/pages/show/special_pages/_person.html.erb      | 6 +++---
 16 files changed, 23 insertions(+), 19 deletions(-)

diff --git a/app/controllers/admin/university/people_controller.rb b/app/controllers/admin/university/people_controller.rb
index 25679b8f7..8ac8268ef 100644
--- a/app/controllers/admin/university/people_controller.rb
+++ b/app/controllers/admin/university/people_controller.rb
@@ -28,9 +28,9 @@ class Admin::University::PeopleController < Admin::University::ApplicationContro
 
   def search
     @term = params[:term].to_s
-    @people = current_university.people
-                                .for_search_term(@term)
-                                .ordered
+    language = Language.find_by(iso_code: params[:lang])
+    @people = current_university.people.for_search_term(@term).ordered
+    @people = @people.joins(:language).where(languages: { iso_code: language.iso_code }) if language.present?
   end
 
   def show
diff --git a/app/models/communication/website/page/administrator.rb b/app/models/communication/website/page/administrator.rb
index 7e0166f0a..a58eeadb4 100644
--- a/app/models/communication/website/page/administrator.rb
+++ b/app/models/communication/website/page/administrator.rb
@@ -51,7 +51,7 @@ class Communication::Website::Page::Administrator < Communication::Website::Page
   def dependencies
     super +
     [website.config_default_languages] +
-    website&.administrators&.map(&:administrator)
+    website.administrators.where(language_id: language_id).map(&:administrator)
   end
 
   protected
diff --git a/app/models/communication/website/page/author.rb b/app/models/communication/website/page/author.rb
index 8e8d2ea7d..4b3ef3d58 100644
--- a/app/models/communication/website/page/author.rb
+++ b/app/models/communication/website/page/author.rb
@@ -47,7 +47,7 @@ class Communication::Website::Page::Author < Communication::Website::Page
   def dependencies
     super +
     [website.config_default_languages] +
-    website&.authors&.map(&:author)
+    website.authors.where(language_id: language_id).map(&:author)
   end
 
   protected
diff --git a/app/models/communication/website/page/communication_post.rb b/app/models/communication/website/page/communication_post.rb
index cea66d118..873ab1626 100644
--- a/app/models/communication/website/page/communication_post.rb
+++ b/app/models/communication/website/page/communication_post.rb
@@ -55,8 +55,8 @@ class Communication::Website::Page::CommunicationPost < Communication::Website::
   def dependencies
     super +
     [website.config_default_languages] +
-    website.categories +
-    website.posts
+    website.categories.where(language_id: language_id) +
+    website.posts.where(language_id: language_id)
   end
 
   protected
diff --git a/app/models/communication/website/page/education_diploma.rb b/app/models/communication/website/page/education_diploma.rb
index 43ee5782f..d210fe531 100644
--- a/app/models/communication/website/page/education_diploma.rb
+++ b/app/models/communication/website/page/education_diploma.rb
@@ -60,6 +60,7 @@ class Communication::Website::Page::EducationDiploma < Communication::Website::P
     true
   end
 
+  # TODO: Scope .where(language_id: language_id) when diplomas are translatable
   def dependencies
     super +
     [website.config_default_languages] +
diff --git a/app/models/communication/website/page/education_program.rb b/app/models/communication/website/page/education_program.rb
index 45de861ba..9c21eb8fe 100644
--- a/app/models/communication/website/page/education_program.rb
+++ b/app/models/communication/website/page/education_program.rb
@@ -60,6 +60,7 @@ class Communication::Website::Page::EducationProgram < Communication::Website::P
     true
   end
 
+  # TODO: Scope .where(language_id: language_id) when programs are translatable
   def dependencies
     super +
     [website.config_default_languages] +
diff --git a/app/models/communication/website/page/organization.rb b/app/models/communication/website/page/organization.rb
index 87d1694fb..5af8439d1 100644
--- a/app/models/communication/website/page/organization.rb
+++ b/app/models/communication/website/page/organization.rb
@@ -44,6 +44,7 @@
 #
 class Communication::Website::Page::Organization < Communication::Website::Page
 
+  # TODO: Scope .where(language_id: language_id) when organizations are translatable
   def dependencies
     super +
     [website.config_default_languages] +
diff --git a/app/models/communication/website/page/person.rb b/app/models/communication/website/page/person.rb
index ac27f9961..6a16e8d1b 100644
--- a/app/models/communication/website/page/person.rb
+++ b/app/models/communication/website/page/person.rb
@@ -47,12 +47,11 @@ class Communication::Website::Page::Person < Communication::Website::Page
   def dependencies
     super +
     [website.config_default_languages] +
-    # TODO: @arnaud ça te va ?
     explicitly_connected_people
   end
 
   def explicitly_connected_people
-    ids = website.connections.where(indirect_object_type: 'University::Person', direct_source_type: 'Communication::Website::Page::Person').pluck(:indirect_object_id)
+    ids = website.connections.where(indirect_object_type: 'University::Person', direct_source_type: 'Communication::Website::Page::Person', direct_source_id: self.id).pluck(:indirect_object_id)
     University::Person.where(id: ids)
   end
 
diff --git a/app/models/communication/website/page/research_paper.rb b/app/models/communication/website/page/research_paper.rb
index b3e3e3396..be477bb28 100644
--- a/app/models/communication/website/page/research_paper.rb
+++ b/app/models/communication/website/page/research_paper.rb
@@ -48,6 +48,7 @@ class Communication::Website::Page::ResearchPaper < Communication::Website::Page
     website.about && website.about&.respond_to?(:papers)
   end
 
+  # TODO: Scope .where(language_id: language_id) when papers are translatable
   def dependencies
     super +
     [website.config_default_languages] +
diff --git a/app/models/communication/website/page/research_volume.rb b/app/models/communication/website/page/research_volume.rb
index f625016c3..e348a1d91 100644
--- a/app/models/communication/website/page/research_volume.rb
+++ b/app/models/communication/website/page/research_volume.rb
@@ -48,6 +48,7 @@ class Communication::Website::Page::ResearchVolume < Communication::Website::Pag
     website.about && website.about&.respond_to?(:volumes)
   end
 
+  # TODO: Scope .where(language_id: language_id) when volumes are translatable
   def dependencies
     super +
     [website.config_default_languages] +
diff --git a/app/models/communication/website/page/researcher.rb b/app/models/communication/website/page/researcher.rb
index b8f9a3d1b..640edb89d 100644
--- a/app/models/communication/website/page/researcher.rb
+++ b/app/models/communication/website/page/researcher.rb
@@ -51,7 +51,7 @@ class Communication::Website::Page::Researcher < Communication::Website::Page
   def dependencies
     super +
     [website.config_default_languages] +
-    website.researchers&.map(&:researcher)
+    website.researchers.where(language_id: language_id).map(&:researcher)
   end
 
   protected
diff --git a/app/models/communication/website/page/teacher.rb b/app/models/communication/website/page/teacher.rb
index 283d7f9ee..aa07af6db 100644
--- a/app/models/communication/website/page/teacher.rb
+++ b/app/models/communication/website/page/teacher.rb
@@ -51,7 +51,7 @@ class Communication::Website::Page::Teacher < Communication::Website::Page
   def dependencies
     super +
     [website.config_default_languages] +
-    website.teachers&.map(&:teacher)
+    website.teachers.where(language_id: language_id).map(&:teacher)
   end
 
   protected
diff --git a/app/models/university/person.rb b/app/models/university/person.rb
index 0c797db15..a249fbc17 100644
--- a/app/models/university/person.rb
+++ b/app/models/university/person.rb
@@ -181,7 +181,7 @@ class University::Person < ApplicationRecord
   end
 
   def to_s_with_mail
-    "#{to_s} (#{email})"
+    email.present? ? "#{to_s} (#{email})" : to_s
   end
 
   def to_s_alphabetical
diff --git a/app/views/admin/communication/extranets/contacts/index.html.erb b/app/views/admin/communication/extranets/contacts/index.html.erb
index 117a74808..1d5c9c26f 100644
--- a/app/views/admin/communication/extranets/contacts/index.html.erb
+++ b/app/views/admin/communication/extranets/contacts/index.html.erb
@@ -6,7 +6,7 @@
                     class: button_classes('ms-1') if can?(:show, University::Person) %>
   <%= osuny_panel University::Person.model_name.human(count: 2), action: action do %>
     <div class="table-responsive">
-      <table class="<%= table_classes%>">
+      <table class="<%= table_classes %>">
         <tbody>
           <% @people.each do |person| %>
             <tr>
@@ -25,7 +25,7 @@
                     class: button_classes('ms-1') if can?(:show, University::Person) %>
   <%= osuny_panel University::Organization.model_name.human(count: 2), action: action do %>
     <div class="table-responsive">
-      <table class="<%= table_classes%>">
+      <table class="<%= table_classes %>">
         <tbody>
           <% @organizations.each do |organization| %>
             <tr>
diff --git a/app/views/admin/communication/websites/pages/show/special_pages/_organization.html.erb b/app/views/admin/communication/websites/pages/show/special_pages/_organization.html.erb
index 307a28fc0..9292423bb 100644
--- a/app/views/admin/communication/websites/pages/show/special_pages/_organization.html.erb
+++ b/app/views/admin/communication/websites/pages/show/special_pages/_organization.html.erb
@@ -16,12 +16,12 @@
                 }
                 %>
   <% end %>
-  <table class="<%= table_classes%>">
+  <table class="<%= table_classes %>">
     <tbody>
       <% @organizations.each do |organization| %>
         <tr>
           <td><%= link_to organization, [:admin, organization] %></td>
-          <td><%= link_to 'Déconnecter', 
+          <td><%= link_to 'Déconnecter',
                           disconnect_admin_communication_website_page_path(@page, objectId: organization.id, objectType: organization.class),
                           class: button_classes_danger,
                           method: :post %></td>
diff --git a/app/views/admin/communication/websites/pages/show/special_pages/_person.html.erb b/app/views/admin/communication/websites/pages/show/special_pages/_person.html.erb
index d94258d4b..0c263addf 100644
--- a/app/views/admin/communication/websites/pages/show/special_pages/_person.html.erb
+++ b/app/views/admin/communication/websites/pages/show/special_pages/_person.html.erb
@@ -6,7 +6,7 @@
     <%= f.input :name,
                 label: false,
                 as: :autocomplete,
-                url: search_admin_university_people_path(lang: nil, website_id: nil),
+                url: search_admin_university_people_path(lang: @page.language.iso_code, website_id: nil),
                 placeholder: t("university.person.search"),
                 input_html: {
                   data: {
@@ -16,12 +16,12 @@
                 }
                 %>
   <% end %>
-  <table class="<%= table_classes%>">
+  <table class="<%= table_classes %>">
     <tbody>
       <% @people.each do |person| %>
         <tr>
           <td><%= link_to person, [:admin, person] %></td>
-          <td><%= link_to 'Déconnecter', 
+          <td><%= link_to 'Déconnecter',
                           disconnect_admin_communication_website_page_path(@page, objectId: person.id, objectType: person.class),
                           class: button_classes_danger,
                           method: :post %></td>
-- 
GitLab