/** * Lock the page for editing * * @param SiteTree $page * The page being edited * @param boolean $doLock * Whether to actually lock the page for ourselves * @return array * The names of any existing editors */ protected function getEditingLocks($page, $doLock = false) { $currentStage = Versioned::current_stage(); Versioned::reading_stage('Stage'); $filter = array('WikiPage.ID' => $page->ID, 'WikiLockExpiry' => date('Y-m-d H:i:s')); $user = Member::currentUser(); $currentLock = WikiPage::get()->filter($filter)->first(); $lock = null; if ($currentLock && $currentLock->ID) { // if there's a current lock in place, lets return that value $lock = array('user' => $currentLock->WikiLastEditor, 'expires' => $currentLock->WikiLockExpiry); } // If we're trying to take the lock, make sure that a) there's no existing // lock or b) we currently hold the lock if ($doLock && ($currentLock == null || !$currentLock->ID || $currentLock->WikiLastEditor == $user->Email)) { $page->lock(); } Versioned::reading_stage($currentStage); return $lock; }