From 23908b5f1e2222db3e4ec11b9d0aa9341e343dca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Gaya?= <sebastien.gaya@gmail.com> Date: Thu, 27 Jan 2022 15:16:00 +0100 Subject: [PATCH] static views + associations --- app/models/communication/website/with_abouts.rb | 12 ++++++------ app/models/education/program.rb | 17 ++++++++++++----- app/models/education/school.rb | 14 ++++++++------ app/models/research/journal.rb | 2 +- app/models/research/journal/article.rb | 1 + app/models/research/journal/volume.rb | 2 +- app/models/university/person.rb | 2 +- app/models/university/person/involvement.rb | 2 +- app/models/university/role.rb | 3 ++- .../admin/education/programs/static.html.erb | 16 ++++++++-------- .../admin/education/schools/static.html.erb | 10 +++++----- 11 files changed, 46 insertions(+), 35 deletions(-) diff --git a/app/models/communication/website/with_abouts.rb b/app/models/communication/website/with_abouts.rb index 570c59f6f..90a8cc6e0 100644 --- a/app/models/communication/website/with_abouts.rb +++ b/app/models/communication/website/with_abouts.rb @@ -66,8 +66,8 @@ module Communication::Website::WithAbouts @people ||= begin people = authors if about_school? - people += about.university_people_through_teachers - people += about.university_people_through_administrators + people += about.university_people_through_involvements + people += about.university_people_through_roles elsif about_journal? people += about.people end @@ -79,10 +79,10 @@ module Communication::Website::WithAbouts @people_with_facets ||= begin people = authors + authors.compact.map(&:author) if about_school? - people += about.university_people_through_teachers - people += about.university_people_through_teachers.map(&:teacher) - people += about.university_people_through_administrators - people += about.university_people_through_administrators.map(&:administrator) + people += about.university_people_through_involvements + people += about.university_people_through_involvements.map(&:teacher) + people += about.university_people_through_roles + people += about.university_people_through_roles.map(&:administrator) elsif about_journal? people += about.people people += about.people.map(&:researcher) diff --git a/app/models/education/program.rb b/app/models/education/program.rb index 735de5888..fcebaba4a 100644 --- a/app/models/education/program.rb +++ b/app/models/education/program.rb @@ -83,13 +83,18 @@ class Education::Program < ApplicationRecord as: :target, dependent: :destroy has_many :involvements_through_roles, - class_name: 'University::Person::Involvement', through: :university_roles, source: :involvements + has_many :university_people_through_role_involvements, + through: :involvements_through_roles, + source: :person has_many :university_person_involvements, class_name: 'University::Person::Involvement', as: :target, dependent: :destroy + has_many :university_people_through_involvements, + through: :university_person_involvements, + source: :person has_many :website_categories, class_name: 'Communication::Website::Category', dependent: :destroy @@ -134,10 +139,12 @@ class Education::Program < ApplicationRecord def git_dependencies(website) [self] + active_storage_blobs + - university_people_through_teachers + - university_people_through_teachers.map(&:teacher) + - university_people_through_roles - # TODO: les administrative via roles + university_people_through_involvements + + university_people_through_involvements.map(&:active_storage_blobs) + + university_people_through_involvements.map(&:teacher) + + university_people_through_role_involvements + + university_people_through_role_involvements.map(&:active_storage_blobs) + + university_people_through_role_involvements.map(&:administrator) end def git_destroy_dependencies(website) diff --git a/app/models/education/school.rb b/app/models/education/school.rb index 03f46b569..4859bc521 100644 --- a/app/models/education/school.rb +++ b/app/models/education/school.rb @@ -33,10 +33,6 @@ class Education::School < ApplicationRecord -> { distinct }, through: :administrators, source: :person - has_many :university_roles, class_name: 'University::Role', as: :target, dependent: :destroy - has_many :university_people_through_roles, - through: :university_roles, - source: :person has_and_belongs_to_many :programs, class_name: 'Education::Program', join_table: 'education_programs_schools', @@ -48,6 +44,12 @@ class Education::School < ApplicationRecord through: :teachers, source: :person + has_many :university_roles, class_name: 'University::Role', as: :target, dependent: :destroy + has_many :involvements_through_roles, through: :university_roles, source: :involvements + has_many :university_people_through_involvements, + through: :involvements_through_roles, + source: :person + validates :name, :address, :city, :zipcode, :country, presence: true scope :ordered, -> { order(:name) } @@ -62,7 +64,7 @@ class Education::School < ApplicationRecord def git_dependencies(website) [self] + - university_people_through_administrators + - university_people_through_administrators.map(&:administrator) + university_people_through_involvements + + university_people_through_involvements.map(&:administrator) end end diff --git a/app/models/research/journal.rb b/app/models/research/journal.rb index b7badad3e..f4f6fc15f 100644 --- a/app/models/research/journal.rb +++ b/app/models/research/journal.rb @@ -40,7 +40,7 @@ class Research::Journal < ApplicationRecord end def git_dependencies(website) - [self] + articles + volumes + people + people.map(&:researcher) + [self] + articles + volumes + people + people.map(&:active_storage_blobs).flatten + people.map(&:researcher) end def git_destroy_dependencies(website) diff --git a/app/models/research/journal/article.rb b/app/models/research/journal/article.rb index 561720247..1d899b51a 100644 --- a/app/models/research/journal/article.rb +++ b/app/models/research/journal/article.rb @@ -66,6 +66,7 @@ class Research::Journal::Article < ApplicationRecord active_storage_blobs + other_articles_in_the_volume + people + + people.map(&:active_storage_blobs).flatten + people.map(&:researcher) end diff --git a/app/models/research/journal/volume.rb b/app/models/research/journal/volume.rb index 80c1fb01f..2fd9f3340 100644 --- a/app/models/research/journal/volume.rb +++ b/app/models/research/journal/volume.rb @@ -51,7 +51,7 @@ class Research::Journal::Volume < ApplicationRecord end def git_dependencies(website) - [self] + articles + people + people.map(&:researcher) + active_storage_blobs + [self] + articles + people + people.map(&:active_storage_blobs).flatten + people.map(&:researcher) + active_storage_blobs end def git_destroy_dependencies(website) diff --git a/app/models/university/person.rb b/app/models/university/person.rb index 69f326d06..3b36941df 100644 --- a/app/models/university/person.rb +++ b/app/models/university/person.rb @@ -120,7 +120,7 @@ class University::Person < ApplicationRecord dependencies = [] if for_website?(website) dependencies << self - dependencies << best_picture.blob + dependencies.concat active_storage_blobs end dependencies << administrator if administrator.for_website?(website) dependencies << author if author.for_website?(website) diff --git a/app/models/university/person/involvement.rb b/app/models/university/person/involvement.rb index f2c8f6c28..9da1b3c05 100644 --- a/app/models/university/person/involvement.rb +++ b/app/models/university/person/involvement.rb @@ -30,7 +30,7 @@ class University::Person::Involvement < ApplicationRecord enum kind: { administrator: 10, researcher: 20, teacher: 30 } belongs_to :university - belongs_to :person + belongs_to :person, class_name: 'University::Person' belongs_to :target, polymorphic: true after_commit :sync_with_git diff --git a/app/models/university/role.rb b/app/models/university/role.rb index a128dbb4f..befa1d6c7 100644 --- a/app/models/university/role.rb +++ b/app/models/university/role.rb @@ -25,7 +25,8 @@ class University::Role < ApplicationRecord belongs_to :university belongs_to :target, polymorphic: true, optional: true - has_many :involvements, class_name: 'University::Person::Involvement', as: :target + has_many :involvements, class_name: 'University::Person::Involvement', as: :target, dependent: :destroy + has_many :people, through: :involvements def to_s "#{description}" diff --git a/app/views/admin/education/programs/static.html.erb b/app/views/admin/education/programs/static.html.erb index 505c7a206..326cede3d 100644 --- a/app/views/admin/education/programs/static.html.erb +++ b/app/views/admin/education/programs/static.html.erb @@ -11,21 +11,21 @@ image_alt: "<%= @program.featured_image_alt %>" <% end %> category: "<%= @website.categories.find_by(program_id: @program.id)&.path %>/" teachers: -<% @program.teachers.includes(:person).ordered.each do |teacher| %> - - "<%= teacher.person.slug %>" +<% @program.university_person_involvements.includes(:person).ordered.each do |involvement| %> + - "<%= involvement.person.slug %>" <% end %> teachers_description: -<% @program.teachers.includes(:person).ordered.each do |teacher| %> - "<%= teacher.person.slug %>": > - <%= teacher.best_description %> +<% @program.university_person_involvements.includes(:person).ordered.each do |involvement| %> + "<%= involvement.person.slug %>": > + <%= involvement.description %> <% end %> roles: -<% @program.roles.ordered.each do |role| %> +<% @program.university_roles.ordered.each do |role| %> - title: > <%= role.to_s %> persons: - <% role.people.includes(:person).ordered.each do |role_person| %> - - "<%= role_person.person.slug %>" + <% role.involvements.includes(:person).ordered.each do |involvement| %> + - "<%= involvement.person.slug %>" <% end %> <% end %> continuing: <%= @program.continuing %> diff --git a/app/views/admin/education/schools/static.html.erb b/app/views/admin/education/schools/static.html.erb index 800d8c5b1..f750e28fa 100644 --- a/app/views/admin/education/schools/static.html.erb +++ b/app/views/admin/education/schools/static.html.erb @@ -12,12 +12,12 @@ country: > phone: > <%= @school.phone %> administrators: -<% @school.administrators.includes(:person).ordered.each do |administrator| %> - - "<%= administrator.person.slug %>" +<% @school.involvements_through_roles.includes(:person).ordered.each do |involvement| %> + - "<%= involvement.person.slug %>" <% end %> administrators_description: -<% @school.administrators.includes(:person).ordered.each do |administrator| %> - "<%= administrator.person.slug %>": > - <%= administrator.best_description %> +<% @school.involvements_through_roles.includes(:person).ordered.each do |involvement| %> + "<%= involvement.person.slug %>": > + <%= involvement.best_description %> <% end %> --- -- GitLab