public function onView() { // TODO: use $this->useTransactionalTimeLimit(); when POST only wfTransactionalTimeLimit(); $details = null; $request = $this->getRequest(); $user = $this->getUser(); $result = $this->page->doRollback($request->getVal('from'), $request->getText('summary'), $request->getVal('token'), $request->getBool('bot'), $details, $this->getUser()); if (in_array(array('actionthrottledtext'), $result)) { throw new ThrottledError(); } if (isset($result[0][0]) && ($result[0][0] == 'alreadyrolled' || $result[0][0] == 'cantrollback')) { $this->getOutput()->setPageTitle($this->msg('rollbackfailed')); $errArray = $result[0]; $errMsg = array_shift($errArray); $this->getOutput()->addWikiMsgArray($errMsg, $errArray); if (isset($details['current'])) { /** @var Revision $current */ $current = $details['current']; if ($current->getComment() != '') { $this->getOutput()->addHTML($this->msg('editcomment')->rawParams(Linker::formatComment($current->getComment()))->parse()); } } return; } #NOTE: Permission errors already handled by Action::checkExecute. if ($result == array(array('readonlytext'))) { throw new ReadOnlyError(); } #XXX: Would be nice if ErrorPageError could take multiple errors, and/or a status object. # Right now, we only show the first error foreach ($result as $error) { throw new ErrorPageError('rollbackfailed', $error[0], array_slice($error, 1)); } /** @var Revision $current */ $current = $details['current']; $target = $details['target']; $newId = $details['newid']; $this->getOutput()->setPageTitle($this->msg('actioncomplete')); $this->getOutput()->setRobotPolicy('noindex,nofollow'); $old = Linker::revUserTools($current); $new = Linker::revUserTools($target); $this->getOutput()->addHTML($this->msg('rollback-success')->rawParams($old, $new)->parseAsBlock()); if ($user->getBoolOption('watchrollback')) { $user->addWatch($this->page->getTitle(), WatchedItem::IGNORE_USER_RIGHTS); } $this->getOutput()->returnToMain(false, $this->getTitle()); if (!$request->getBool('hidediff', false) && !$this->getUser()->getBoolOption('norollbackdiff', false)) { $contentHandler = $current->getContentHandler(); $de = $contentHandler->createDifferenceEngine($this->getContext(), $current->getId(), $newId, false, true); $de->showDiff('', ''); } }
/** * Call wfTransactionalTimeLimit() if this request was POSTed * @since 1.26 */ protected function useTransactionalTimeLimit() { if ($this->getRequest()->wasPosted()) { wfTransactionalTimeLimit(); } }