Skip to content
Snippets Groups Projects
Unverified Commit 579ba6de authored by Sébastien Gaya's avatar Sébastien Gaya Committed by GitHub
Browse files

Nettoyage des connexions (#1979)


* clean connections

Co-authored-by: default avatarPierre-André Boissinot <pierreandre.boissinot@noesya.coop>
Co-authored-by: Arnaud Levy's avatarArnaud Levy <arnaud.levy@noesya.coop>

* fix sass

* readability

* fix double double quote

---------

Co-authored-by: default avatarPierre-André Boissinot <pierreandre.boissinot@noesya.coop>
Co-authored-by: Arnaud Levy's avatarArnaud Levy <arnaud.levy@noesya.coop>
parent 71a734f8
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
......@@ -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
......
......@@ -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
......
......@@ -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
......
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment