mirror of
https://github.com/silverstripe/silverstripe-subsites
synced 2024-10-22 11:05:55 +02:00
FIX Duplicate page's parent IDs are now assumed or zeroed after duplication
This commit is contained in:
parent
7f28c32427
commit
e8a72e1c33
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace SilverStripe\Subsites\Extensions;
|
namespace SilverStripe\Subsites\Extensions;
|
||||||
|
|
||||||
|
use Page;
|
||||||
use SilverStripe\CMS\Model\SiteTree;
|
use SilverStripe\CMS\Model\SiteTree;
|
||||||
use SilverStripe\Control\Controller;
|
use SilverStripe\Control\Controller;
|
||||||
use SilverStripe\Control\Director;
|
use SilverStripe\Control\Director;
|
||||||
@ -192,12 +193,30 @@ class SiteTreeSubsites extends DataExtension
|
|||||||
$page = $this->owner;
|
$page = $this->owner;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
// We have no idea what the ParentID should be, but it shouldn't be the same as it was since
|
||||||
|
// we're now in a different subsite. As a workaround use the url-segment and subsite ID.
|
||||||
|
if ($page->Parent()) {
|
||||||
|
$parentSeg = $page->Parent()->URLSegment;
|
||||||
|
$newParentPage = Page::get()->filter('URLSegment', $parentSeg)->first();
|
||||||
|
$originalParentID = $page->ParentID;
|
||||||
|
if ($newParentPage) {
|
||||||
|
$page->ParentID = (int) $newParentPage->ID;
|
||||||
|
} else {
|
||||||
|
// reset it to the top level, so the user can decide where to put it
|
||||||
|
$page->ParentID = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Disable query filtering by subsite during actual duplication
|
||||||
$originalFilter = Subsite::$disable_subsite_filter;
|
$originalFilter = Subsite::$disable_subsite_filter;
|
||||||
Subsite::disable_subsite_filter(true);
|
Subsite::disable_subsite_filter(true);
|
||||||
|
|
||||||
return $includeChildren ? $page->duplicateWithChildren() : $page->duplicate(false);
|
return $includeChildren ? $page->duplicateWithChildren() : $page->duplicate(false);
|
||||||
} finally {
|
} finally {
|
||||||
Subsite::disable_subsite_filter($originalFilter);
|
Subsite::disable_subsite_filter($originalFilter);
|
||||||
|
|
||||||
|
// Re-set the original parent ID for the current page
|
||||||
|
$page->ParentID = $originalParentID;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user