fca9e5911b04a73a47ca85574c2e28562de5c0b2
4 * Created on Jun 20, 2007
5 * API for MediaWiki 1.8+
7 * Copyright (C) 2007 Roan Kattouw <Firstname>.<Lastname>@home.nl
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License along
20 * with this program; if not, write to the Free Software Foundation, Inc.,
21 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22 * http://www.gnu.org/copyleft/gpl.html
25 if ( !defined( 'MEDIAWIKI' ) ) {
26 // Eclipse helper - will be ignored in production
27 require_once ( "ApiBase.php" );
33 class ApiRollback
extends ApiBase
{
35 public function __construct( $main, $action ) {
36 parent
:: __construct( $main, $action );
39 public function execute() {
40 $params = $this->extractRequestParams();
43 if ( !isset( $params['title'] ) )
44 $this->dieUsageMsg( array( 'missingparam', 'title' ) );
45 if ( !isset( $params['user'] ) )
46 $this->dieUsageMsg( array( 'missingparam', 'user' ) );
47 if ( !isset( $params['token'] ) )
48 $this->dieUsageMsg( array( 'missingparam', 'token' ) );
50 $titleObj = Title
::newFromText( $params['title'] );
52 $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
53 if ( !$titleObj->exists() )
54 $this->dieUsageMsg( array( 'notanarticle' ) );
56 // We need to be able to revert IPs, but getCanonicalName rejects them
57 $username = User
::isIP( $params['user'] )
59 : User
::getCanonicalName( $params['user'] );
61 $this->dieUsageMsg( array( 'invaliduser', $params['user'] ) );
63 $articleObj = new Article( $titleObj );
64 $summary = ( isset( $params['summary'] ) ?
$params['summary'] : "" );
66 $retval = $articleObj->doRollback( $username, $summary, $params['token'], $params['markbot'], $details );
69 // We don't care about multiple errors, just report one of them
70 $this->dieUsageMsg( reset( $retval ) );
73 'title' => $titleObj->getPrefixedText(),
74 'pageid' => intval( $details['current']->getPage() ),
75 'summary' => $details['summary'],
76 'revid' => intval( $details['newid'] ),
77 'old_revid' => intval( $details['current']->getID() ),
78 'last_revid' => intval( $details['target']->getID() )
81 $this->getResult()->addValue( null, $this->getModuleName(), $info );
84 public function mustBePosted() { return true; }
86 public function isWriteMode() {
90 public function getAllowedParams() {
100 public function getParamDescription() {
102 'title' => 'Title of the page you want to rollback.',
103 'user' => 'Name of the user whose edits are to be rolled back. If set incorrectly, you\'ll get a badtoken error.',
104 'token' => 'A rollback token previously retrieved through prop=revisions',
105 'summary' => 'Custom edit summary. If not set, default summary will be used.',
106 'markbot' => 'Mark the reverted edits and the revert as bot edits'
110 public function getDescription() {
112 'Undo the last edit to the page. If the last user who edited the page made multiple edits in a row,',
113 'they will all be rolled back.'
117 public function getPossibleErrors() {
118 return array_merge( parent
::getPossibleErrors(), array(
119 array( 'missingparam', 'title' ),
120 array( 'missingparam', 'user' ),
121 array( 'missingparam', 'token' ),
122 array( 'invalidtitle', 'title' ),
123 array( 'notanarticle' ),
124 array( 'invaliduser', 'user' ),
128 protected function getExamples() {
130 'api.php?action=rollback&title=Main%20Page&user=Catrope&token=123ABC',
131 'api.php?action=rollback&title=Main%20Page&user=217.121.114.116&token=123ABC&summary=Reverting%20vandalism&markbot=1'
135 public function getVersion() {
136 return __CLASS__
. ': $Id$';