5 * Created on Jul 3, 2007
7 * Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
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 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
22 * http://www.gnu.org/copyleft/gpl.html
30 class ApiUndelete
extends ApiBase
{
32 public function execute() {
33 $params = $this->extractRequestParams();
35 if ( !$this->getUser()->isAllowed( 'undelete' ) ) {
36 $this->dieUsageMsg( 'permdenied-undelete' );
39 if ( $this->getUser()->isBlocked() ) {
40 $this->dieUsageMsg( 'blockedtext' );
43 $titleObj = Title
::newFromText( $params['title'] );
44 if ( !$titleObj ||
$titleObj->isExternal() ) {
45 $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
49 if ( !isset( $params['timestamps'] ) ) {
50 $params['timestamps'] = array();
52 if ( !is_array( $params['timestamps'] ) ) {
53 $params['timestamps'] = array( $params['timestamps'] );
55 foreach ( $params['timestamps'] as $i => $ts ) {
56 $params['timestamps'][$i] = wfTimestamp( TS_MW
, $ts );
59 $pa = new PageArchive( $titleObj, $this->getConfig() );
60 $retval = $pa->undelete(
61 ( isset( $params['timestamps'] ) ?
$params['timestamps'] : array() ),
67 if ( !is_array( $retval ) ) {
68 $this->dieUsageMsg( 'cannotundelete' );
72 wfRunHooks( 'FileUndeleteComplete',
73 array( $titleObj, $params['fileids'], $this->getUser(), $params['reason'] ) );
76 $this->setWatch( $params['watchlist'], $titleObj );
78 $info['title'] = $titleObj->getPrefixedText();
79 $info['revisions'] = intval( $retval[0] );
80 $info['fileversions'] = intval( $retval[1] );
81 $info['reason'] = $retval[2];
82 $this->getResult()->addValue( null, $this->getModuleName(), $info );
85 public function mustBePosted() {
89 public function isWriteMode() {
93 public function getAllowedParams() {
96 ApiBase
::PARAM_TYPE
=> 'string',
97 ApiBase
::PARAM_REQUIRED
=> true
100 'timestamps' => array(
101 ApiBase
::PARAM_TYPE
=> 'timestamp',
102 ApiBase
::PARAM_ISMULTI
=> true,
105 ApiBase
::PARAM_TYPE
=> 'integer',
106 ApiBase
::PARAM_ISMULTI
=> true,
108 'watchlist' => array(
109 ApiBase
::PARAM_DFLT
=> 'preferences',
110 ApiBase
::PARAM_TYPE
=> array(
120 public function getParamDescription() {
122 'title' => 'Title of the page you want to restore',
123 'reason' => 'Reason for restoring',
124 'timestamps' => array(
125 'Timestamps of the revisions to restore.',
126 'If both timestamps and fileids are empty, all will be restored.',
129 'IDs of the file revisions to restore.',
130 'If both timestamps and fileids are empty, all will be restored.',
132 'watchlist' => 'Unconditionally add or remove the page from your ' .
133 'watchlist, use preferences or do not change watch',
137 public function getDescription() {
139 'Restore certain revisions of a deleted page. A list of deleted revisions ',
140 '(including timestamps) can be retrieved through list=deletedrevs, and a list',
141 'of deleted file ids can be retrieved through list=filearchive.'
145 public function needsToken() {
149 public function getExamples() {
151 'api.php?action=undelete&title=Main%20Page&token=123ABC&reason=Restoring%20main%20page',
152 'api.php?action=undelete&title=Main%20Page&token=123ABC×tamps=20070703220045|20070702194856'
156 public function getHelpUrls() {
157 return 'https://www.mediawiki.org/wiki/API:Undelete';