From c0c4fc05fdd21a11fb803f9853f1d6d3d802486e Mon Sep 17 00:00:00 2001 From: Arnaud Levy <contact@arnaudlevy.com> Date: Tue, 17 Oct 2023 19:05:44 +0200 Subject: [PATCH] =?UTF-8?q?=C3=A0=20tester?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/server/websites_controller.rb | 4 ---- app/models/communication/website.rb | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/app/controllers/server/websites_controller.rb b/app/controllers/server/websites_controller.rb index 8e1992e01..a5b335d14 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 0886d3dfc..f94b13404 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 -- GitLab