diff --git a/app/controllers/server/websites_controller.rb b/app/controllers/server/websites_controller.rb index 8e1992e01650fe13ba78754da0c4ce5e6eed065c..a5b335d147c051a3f5796e8826dfe35251c330eb 100644 --- a/app/controllers/server/websites_controller.rb +++ b/app/controllers/server/websites_controller.rb @@ -27,10 +27,6 @@ class Server::WebsitesController < Server::ApplicationController def update @website.update(website_params) - @website.recursive_dependencies.each do |dependency| - next unless dependency.respond_to?(:university_id) - dependency.update_column :university_id, @website.university_id - end redirect_to server_website_path(@website), notice: t('admin.successfully_updated_html', model: @website.to_s) end diff --git a/app/models/communication/website.rb b/app/models/communication/website.rb index 0886d3dfcc57f6cdc360b6c147ce63507a18a4dc..f94b13404ba25c0719e9e5a69543e92eb73f6a5c 100644 --- a/app/models/communication/website.rb +++ b/app/models/communication/website.rb @@ -81,6 +81,7 @@ class Communication::Website < ApplicationRecord validates :default_image, size: { less_than: 5.megabytes } before_validation :sanitize_fields + after_save :manage_university_change scope :ordered, -> { order(:name) } scope :in_production, -> { where(in_production: true) } @@ -155,4 +156,21 @@ class Communication::Website < ApplicationRecord self.repository = Osuny::Sanitizer.sanitize(self.repository, 'string') self.url = Osuny::Sanitizer.sanitize(self.url, 'string') end + + def manage_university_change + if saved_change_to_university_id? + recursive_dependencies.each do |dependency| + reconnect_dependency dependency + end + end + end + + def reconnect_dependency(dependency) + return unless dependency.respond_to?(:university_id) + # vérifier par les connexions qu'un objet indirect n'est pas utilisé dans un autre website + return if dependency.connections.where.not(website: self).any? + # il faut si l'objet est une person déconnecter le user éventuellement associé. + dependency.update_column :user_id, nil if dependency.is_a? University::Person + dependency.update_column :university_id, university_id + end end