diff --git a/app/models/communication/block/template/person.rb b/app/models/communication/block/template/person.rb index 9a01a2d608b7e3112e81302ca2a0e75b1e225ec7..8cfbb025523ccd6baf8261e403158212fa580c66 100644 --- a/app/models/communication/block/template/person.rb +++ b/app/models/communication/block/template/person.rb @@ -14,8 +14,12 @@ class Communication::Block::Template::Person < Communication::Block::Template::B end @elements end + + def people + @people ||= elements.collect(&:person).compact.uniq + end def children - elements + people end end diff --git a/app/models/concerns/backlinkable.rb b/app/models/concerns/backlinkable.rb index 255131c6727ba904cbf1713f6e4c2072a2fc198f..4a5b6b2388ab9840f4da3035c16b8fd173d56663 100644 --- a/app/models/concerns/backlinkable.rb +++ b/app/models/concerns/backlinkable.rb @@ -26,14 +26,18 @@ module Backlinkable protected def backlinks(kind, website) - connections - .where( - direct_source_type: kind.to_s, - website_id: website.id - ) - .collect(&:direct_source) - .compact - .select { |source| source.published? } - .select { |source| source.language == language } + backlinks_blocks(website).published.map { |block| + block.about if backlink_in_block?(block, kind) + }.compact + end + + def backlink_in_block?(block, kind) + block.about.is_a?(kind) && # Correct kind + self.in?(block.template.children) && # Mentioning self + block.about.published? # About published + end + + def backlinks_blocks(website) + raise NotImplementedError end end \ No newline at end of file diff --git a/app/models/university/organization.rb b/app/models/university/organization.rb index e05c4178c8c8808c3bf561aff6ef86c6c544e050..3d2ed70191a43be0f59aede521971f4a02822e9b 100644 --- a/app/models/university/organization.rb +++ b/app/models/university/organization.rb @@ -130,6 +130,10 @@ class University::Organization < ApplicationRecord protected + def backlinks_blocks(website) + website.blocks.organizations + end + def explicit_blob_ids [ logo&.blob_id, diff --git a/app/models/university/person.rb b/app/models/university/person.rb index 930ef5a1dfd5409f5098d6fc2d20c83a86b2c873..8f7e1823e9eb277c60dde5972d576a8231dbc321 100644 --- a/app/models/university/person.rb +++ b/app/models/university/person.rb @@ -232,6 +232,10 @@ class University::Person < ApplicationRecord protected + def backlinks_blocks(website) + website.blocks.persons + end + def explicit_blob_ids [picture&.blob_id] end