From b138eb06ff03308021ddffd75626dea73281b489 Mon Sep 17 00:00:00 2001 From: Maxime Rainville Date: Thu, 15 Nov 2018 15:57:17 +1300 Subject: [PATCH] Revert BackLinkTracking to return Parent Object of the SiteTreeLink rather than SiteTreeLink itself --- code/Model/SiteTree.php | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/code/Model/SiteTree.php b/code/Model/SiteTree.php index e7347328..eb5dfd66 100755 --- a/code/Model/SiteTree.php +++ b/code/Model/SiteTree.php @@ -1734,27 +1734,32 @@ class SiteTree extends DataObject implements PermissionProvider, i18nEntityProvi // @todo - Implement PolymorphicManyManyList to replace this $list = ArrayList::create(); - $joinClause = sprintf( - "\"%s\".\"ParentID\"=\"ParentRelationTable\".\"ID\"", - SiteTreeLink::singleton()->baseTable() - ); + $siteTreelinkTable = SiteTreeLink::singleton()->baseTable(); // Get the list of back links classes - $linkClasses = $this->BackLinks()->exclude(['ParentClass' => null])->columnUnique('ParentClass'); + $parentClasses = $this->BackLinks()->exclude(['ParentClass' => null])->columnUnique('ParentClass'); // Get list of sitreTreelink and join them to the their parent class to make sure we don't get orphan records. - foreach ($linkClasses as $linkClass) { - $links = $this->BackLinks() - ->filter(['ParentClass' => $linkClass]) + foreach ($parentClasses as $parentClass) { + $joinClause = sprintf( + "\"%s\".\"ParentID\"=\"%s\".\"ID\"", + $siteTreelinkTable, + $linkTable, + DataObject::singleton($parentClass)->baseTable() + ); + + $links = DataObject::get($parentClass) ->innerJoin( - DataObject::singleton($linkClass)->baseTable(), - $joinClause, - 'ParentRelationTable' + $siteTreelinkTable, + $joinClause ) + ->where([ + "\"$siteTreelinkTable\".\"LinkedID\"" => $this->ID, + "\"$siteTreelinkTable\".\"ParentClass\"" => $parentClass, + ]) ->alterDataQuery(function ($query) { $query->selectField("'Content link'", "DependentLinkType"); - }) - ; + }); $list->merge($links); }