/** * Ensure that BasePage is valid: * For New pages BasePage is set to their URLSegment. If URLSegment of page is changed this is updated. * If URLSegment doesn't exist (page deleted e.g.) it is updated to URLSegment of current page. */ function onBeforeWrite() { if (!$this->owner->ID) { $this->owner->BasePage = $this->owner->URLSegment; } else { if ($this->owner->BasePage != null) { $storedData = Page::get_by_id('Page', $this->owner->ID); if (isset($storedData->BasePage) && ($storedData->BasePage != $this->owner->BasePage || $storedData->URLSegment != $this->owner->URLSegment) && $storedData->BasePage == $storedData->URLSegment) { $this->owner->BasePage = $this->owner->URLSegment; } else { $basePageSQL = Convert::raw2sql($this->owner->BasePage); $pageExists = DataObject::get_one('Page', "URLSegment = '{$basePageSQL}'"); if (!$pageExists) { $this->owner->BasePage = $this->owner->URLSegment; } } } } parent::onBeforeWrite(); }