diff --git a/app/models/communication/website.rb b/app/models/communication/website.rb index 2de5b4a46d557de7f4760a600e9a05de5435df0f..6820e3868a2a2eba2d9d0507535de4d09135d40b 100644 --- a/app/models/communication/website.rb +++ b/app/models/communication/website.rb @@ -88,6 +88,8 @@ class Communication::Website < ApplicationRecord end def dependencies + # Le website est le SEUL cas d'auto-dépendance + [self] + configs + pages + posts + diff --git a/app/models/communication/website/post.rb b/app/models/communication/website/post.rb index 1e61cbe30c244cffa5f117fcd0b299a181d38d7f..6ecfe61261a38fd22f1d6f74454385836379de9d 100644 --- a/app/models/communication/website/post.rb +++ b/app/models/communication/website/post.rb @@ -54,7 +54,7 @@ class Communication::Website::Post < ApplicationRecord has_one :imported_post, class_name: 'Communication::Website::Imported::Post', - dependent: :destroy + dependent: :destroy belongs_to :author, class_name: 'University::Person', optional: true @@ -124,7 +124,8 @@ class Communication::Website::Post < ApplicationRecord def dependencies active_storage_blobs + blocks + - categories + categories + + [author&.author] end def references diff --git a/app/models/communication/website/with_git_repository.rb b/app/models/communication/website/with_git_repository.rb index 3f76c0fe093853a34003fd27b1ea266819f16677..b42580aaef7afa26f77381b63dcd3ec7ffd3734a 100644 --- a/app/models/communication/website/with_git_repository.rb +++ b/app/models/communication/website/with_git_repository.rb @@ -11,11 +11,11 @@ module Communication::Website::WithGitRepository @git_repository ||= Git::Repository.new self end - # Supprimer tous les git_files qui ne sont pas dans les recursive_dependencie_syncable + # Supprimer tous les git_files qui ne sont pas dans les recursive_dependencies_syncable def destroy_obsolete_git_files website_git_files.find_each do |git_file| dependency = git_file.about - is_obsolete = !dependency.in?(recursive_dependencie_syncable) + is_obsolete = !dependency.in?(recursive_dependencies_syncable) if is_obsolete # TODO git_file.destroy serait plus ActiveRecord Communication::Website::GitFile.sync(self, dependency, destroy: true) diff --git a/app/models/concerns/as_direct_object.rb b/app/models/concerns/as_direct_object.rb index cfbaec991499b42af9995809793584b67ba5f761..6b21fb09cbfa59c3a302e7fd43a61f7d46fbe188 100644 --- a/app/models/concerns/as_direct_object.rb +++ b/app/models/concerns/as_direct_object.rb @@ -17,11 +17,13 @@ module AsDirectObject class_name: 'Communication::Website', foreign_key: :communication_website_id - has_many :connections, + has_many :connections, as: :direct_source, class_name: 'Communication::Website::Connection', dependent: :destroy # When the direct object disappears all connections with the object as a source must disappear + after_save :sync_connections + after_touch :sync_connections end def is_direct_object? @@ -31,4 +33,10 @@ module AsDirectObject def is_indirect_object? false end + + def sync_connections + dependencies.each do |dependency| + website.connect(dependency, self) + end + end end \ No newline at end of file diff --git a/app/models/education/diploma.rb b/app/models/education/diploma.rb index 0d31049aadc1a51f4da44ce1d3739b908a7f23e1..980a00f74fa8747f3e75783733d955a4fb41219c 100644 --- a/app/models/education/diploma.rb +++ b/app/models/education/diploma.rb @@ -52,6 +52,10 @@ class Education::Diploma < ApplicationRecord "#{git_path_content_prefix(website)}diplomas/#{slug}/_index.html" if for_website?(website) end + def dependencies + programs + end + def references [] end diff --git a/app/models/university/person.rb b/app/models/university/person.rb index fa91f6d149b2a87287e555d0c4dbb3b193ba5daa..0c797db15fd865c79bbc0609e019990dfa4d36d2 100644 --- a/app/models/university/person.rb +++ b/app/models/university/person.rb @@ -58,13 +58,14 @@ class University::Person < ApplicationRecord include WithBlobs include WithBlocks include WithCountry + # WithRoles included before WithEducation because needed for the latter + include WithRoles include WithEducation include WithExperiences include WithGitFiles include WithPermalink include WithPicture include WithResearch - include WithRoles include WithSlug include WithTranslations include WithUniversity @@ -206,7 +207,11 @@ class University::Person < ApplicationRecord end def references - [] + [administrator, author, researcher, teacher] + end + + def person + @person ||= University::Person.find(id) end def administrator diff --git a/app/models/university/person/administrator.rb b/app/models/university/person/administrator.rb index d223d63092e150c1f7e467438d1a2a536e531b2a..aae047a35bda4b05e961089bda4c377e4971c9e8 100644 --- a/app/models/university/person/administrator.rb +++ b/app/models/university/person/administrator.rb @@ -64,4 +64,12 @@ class University::Person::Administrator < University::Person def template_static "admin/university/people/administrators/static" end + + def dependencies + [person] + end + + def references + education_programs_as_administrator + end end diff --git a/app/models/university/person/author.rb b/app/models/university/person/author.rb index 16d662adc35a7fc4d660b21c6f0792b6d7399fe1..0adb5fac5166e15a9e0133391f0ac09a88617f36 100644 --- a/app/models/university/person/author.rb +++ b/app/models/university/person/author.rb @@ -64,4 +64,12 @@ class University::Person::Author < University::Person def template_static "admin/university/people/authors/static" end + + def dependencies + [person] + end + + def references + communication_website_posts + end end diff --git a/app/models/university/person/researcher.rb b/app/models/university/person/researcher.rb index 4b39dfe8a805aa218616ecca86ac59403f3076a7..6fbd666ad02fadd718e0c2390fe702851f926757 100644 --- a/app/models/university/person/researcher.rb +++ b/app/models/university/person/researcher.rb @@ -64,4 +64,12 @@ class University::Person::Researcher < University::Person def template_static "admin/university/people/researchers/static" end + + def dependencies + [person] + end + + def references + research_journal_papers + end end diff --git a/app/models/university/person/teacher.rb b/app/models/university/person/teacher.rb index 8d05c99b37475977271052658f1576ab14554709..064f031d5669eb7f8147f1309e7c3b6ca829f1fd 100644 --- a/app/models/university/person/teacher.rb +++ b/app/models/university/person/teacher.rb @@ -65,4 +65,12 @@ class University::Person::Teacher < University::Person def template_static "admin/university/people/teachers/static" end + + def dependencies + [person] + end + + def references + education_programs_as_teacher + end end diff --git a/config/initializers/active_storage.rb b/config/initializers/active_storage.rb index 111aff7e39b8b3c3216a4f2e143bfdcdae11411f..750130fecf6e1b2dbe3a2478802fe418dbcf964a 100644 --- a/config/initializers/active_storage.rb +++ b/config/initializers/active_storage.rb @@ -47,6 +47,10 @@ Rails.application.config.to_prepare do "data/media/#{id[0..1]}/#{id}.yml" end + def syncable? + true + end + def exportable_to_git? true end