diff --git a/app/assets/stylesheets/admin/design-system/layout.sass b/app/assets/stylesheets/admin/design-system/layout.sass index 4ddf7561f22c5479fb5fb6b328f4354b8e00f070..66765752820ce5295745d0850992c93dd73fbe66 100644 --- a/app/assets/stylesheets/admin/design-system/layout.sass +++ b/app/assets/stylesheets/admin/design-system/layout.sass @@ -5,7 +5,7 @@ body padding-left: var(--bs-gutter-x) padding-right: var(--bs-gutter-x) @media (min-width: 768px) - --bs-gutter-x: 4rem + #{--bs-gutter-x}: 4rem main min-height: 70vh diff --git a/app/models/communication/website/page/organization.rb b/app/models/communication/website/page/organization.rb index f510c62c10dd05c65b283e8cb92c910377e61fa7..010ac0bbec3b4fc05ea53ba969f919a3b7eaae9f 100644 --- a/app/models/communication/website/page/organization.rb +++ b/app/models/communication/website/page/organization.rb @@ -4,11 +4,22 @@ class Communication::Website::Page::Organization < Communication::Website::Page def dependencies super + [website.config_default_languages] + + explicitly_connected_organizations + end + + # https://developers.osuny.org/docs/admin/sites-web/git/dependencies/iteration-9/ + def references website.connected_organizations.where(language_id: language_id) end + # For implicit connections, direct_source_type is "Communication::Website::Page" + # Whereas for explicit, it will be "Communication::Website::Page::Organization" def explicitly_connected_organizations - ids = website.connections.where(indirect_object_type: 'University::Organization', direct_source_type: 'Communication::Website::Page::Organization', direct_source_id: self.id).pluck(:indirect_object_id) + ids = website.connections.where( + indirect_object_type: 'University::Organization', + direct_source_type: 'Communication::Website::Page::Organization', + direct_source_id: self.id + ).pluck(:indirect_object_id) University::Organization.where(id: ids) end diff --git a/app/models/communication/website/page/person.rb b/app/models/communication/website/page/person.rb index 55fd76d311b09e0eb8c3dd2962ed5742aedbcf0c..1a984b3606778735d042e73c93d2d9504805e965 100644 --- a/app/models/communication/website/page/person.rb +++ b/app/models/communication/website/page/person.rb @@ -3,11 +3,22 @@ class Communication::Website::Page::Person < Communication::Website::Page def dependencies super + [website.config_default_languages] + + explicitly_connected_people + end + + # https://developers.osuny.org/docs/admin/sites-web/git/dependencies/iteration-9/ + def references website.connected_people.where(language_id: language_id) end + # For implicit connections, direct_source_type is "Communication::Website::Page" + # Whereas for explicit, it will be "Communication::Website::Page::Person" def explicitly_connected_people - 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) + 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_publication.rb b/app/models/communication/website/page/research_publication.rb index 87ee86a6c6ecae761344b2d7b2f3bdcef1b11feb..b59cbb11bafa46763e9f7b385f1f1bff9e65c8f0 100644 --- a/app/models/communication/website/page/research_publication.rb +++ b/app/models/communication/website/page/research_publication.rb @@ -14,7 +14,11 @@ class Communication::Website::Page::ResearchPublication < Communication::Website def dependencies super + - [website.config_default_languages] + + [website.config_default_languages] + end + + # https://developers.osuny.org/docs/admin/sites-web/git/dependencies/iteration-9/ + def references website.connected_publications end diff --git a/app/models/communication/website/with_connected_objects.rb b/app/models/communication/website/with_connected_objects.rb index 15cbd6ddda42cd4c467885306b807ea975c3e7f8..c756cd9e3b686b73db359c9c1ad4778907c8ec2f 100644 --- a/app/models/communication/website/with_connected_objects.rb +++ b/app/models/communication/website/with_connected_objects.rb @@ -2,6 +2,11 @@ module Communication::Website::WithConnectedObjects extend ActiveSupport::Concern included do + CONNECTIONS_BLACKLIST = [ + # Les blobs ne sont jamais modifiés, donc on n'a aucun besoin de savoir à quoi ils sont connectés + 'ActiveStorage::Blob' + ].freeze + has_many :connections after_save :connect_about, if: :saved_change_to_about_id? @@ -62,8 +67,13 @@ module Communication::Website::WithConnectedObjects end def connect(indirect_object, direct_source, direct_source_type: nil) - connect_object indirect_object, direct_source, direct_source_type: direct_source_type - return unless indirect_object.respond_to?(:recursive_dependencies) + # https://developers.osuny.org/docs/admin/sites-web/git/dependencies/iteration-9/ + connect_object( + indirect_object, + direct_source, + direct_source_type: direct_source_type + ) if should_connect?(indirect_object, direct_source) + return unless should_connect_recursive_dependencies?(indirect_object) indirect_object.recursive_dependencies.each do |dependency| connect_object dependency, direct_source end @@ -163,7 +173,18 @@ module Communication::Website::WithConnectedObjects # On ne connecte pas les objets directs (en principe ça n'arrive pas) !indirect_object.try(:is_direct_object?) && # On ne connecte pas des objets qui ne sont pas issus de modèles ActiveRecord (comme les composants des blocs) - indirect_object.is_a?(ActiveRecord::Base) + indirect_object.is_a?(ActiveRecord::Base) && + # On ne connecte pas certains types d'objets, listés dans une black list + !indirect_object.class.to_s.in?(CONNECTIONS_BLACKLIST) + end + + def should_connect_recursive_dependencies?(indirect_object) + # On ne suit pas les objets inexistants + indirect_object.present? && + # On ne suit pas les objets qui n'ont pas de dépendances + indirect_object.respond_to?(:recursive_dependencies) && + # On ne suit pas les objets directs + !indirect_object.try(:is_direct_object?) end # On passe par les connexions pour éviter d'analyser des objets directs qui n'ont pas d'objets indirects du tout