From 9398fcaaa1ae23d1801967187d0c866191d96b93 Mon Sep 17 00:00:00 2001 From: Sam Minnee Date: Wed, 30 Mar 2011 18:57:50 +1300 Subject: [PATCH] BUGFIX: Fix SiteTree broken link correction to handle the fact that relations aren't cached. --- code/model/SiteTreeFileExtension.php | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/code/model/SiteTreeFileExtension.php b/code/model/SiteTreeFileExtension.php index 337c95bc..d794f28d 100644 --- a/code/model/SiteTreeFileExtension.php +++ b/code/model/SiteTreeFileExtension.php @@ -31,17 +31,23 @@ class SiteTreeFileExtension extends DataExtension { * Updates link tracking. */ function onAfterDelete() { - $brokenPages = $this->owner->BackLinkTracking(); - if($brokenPages) { + // We query the explicit ID list, because BackLinkTracking will get modified after the stage + // site does its thing + $brokenPageIDs = $this->owner->BackLinkTracking()->column("ID"); + if($brokenPageIDs) { $origStage = Versioned::current_stage(); // This will syncLinkTracking on draft Versioned::reading_stage('Stage'); + $brokenPages = DataObject::get('SiteTree')->byIDs($brokenPageIDs); foreach($brokenPages as $brokenPage) $brokenPage->write(); // This will syncLinkTracking on published Versioned::reading_stage('Live'); - foreach($brokenPages as $brokenPage) $brokenPage->write(); + $liveBrokenPages = DataObject::get('SiteTree')->byIDs($brokenPageIDs); + foreach($liveBrokenPages as $brokenPage) { + $brokenPage->write(); + } Versioned::reading_stage($origStage); }