]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blobdiff - includes/api/ApiMove.php
MediaWiki 1.15.0
[autoinstallsdev/mediawiki.git] / includes / api / ApiMove.php
index 13b058c920e1ef1cc3992ee31b5a7e3793496a13..e22d029470024a0167688fb80691bde85c8c796c 100644 (file)
@@ -39,7 +39,6 @@ class ApiMove extends ApiBase {
 
        public function execute() {
                global $wgUser;
-               $this->getMain()->requestWriteMode();
                $params = $this->extractRequestParams();
                if(is_null($params['reason']))
                        $params['reason'] = '';
@@ -73,6 +72,7 @@ class ApiMove extends ApiBase {
                        $this->dieUsageMsg(array('invalidtitle', $params['to']));
                $toTalk = $toTitle->getTalkPage();
 
+               # Move the page
                $hookErr = null;
                $retval = $fromTitle->moveTo($toTitle, true, $params['reason'], !$params['noredirect']);
                if($retval !== true)
@@ -82,10 +82,9 @@ class ApiMove extends ApiBase {
                if(!$params['noredirect'] || !$wgUser->isAllowed('suppressredirect'))
                        $r['redirectcreated'] = '';
 
+               # Move the talk page
                if($params['movetalk'] && $fromTalk->exists() && !$fromTitle->isTalkPage())
                {
-                       // We need to move the talk page as well
-                       $toTalk = $toTitle->getTalkPage();
                        $retval = $fromTalk->moveTo($toTalk, true, $params['reason'], !$params['noredirect']);
                        if($retval === true)
                        {
@@ -101,6 +100,20 @@ class ApiMove extends ApiBase {
                        }
                }
 
+               # Move subpages
+               if($params['movesubpages'])
+               {
+                       $r['subpages'] = $this->moveSubpages($fromTitle, $toTitle,
+                                       $params['reason'], $params['noredirect']);
+                       $this->getResult()->setIndexedTagName($r['subpages'], 'subpage');
+                       if($params['movetalk'])
+                       {
+                               $r['subpages-talk'] = $this->moveSubpages($fromTalk, $toTalk,
+                                       $params['reason'], $params['noredirect']);
+                               $this->getResult()->setIndexedTagName($r['subpages-talk'], 'subpage');
+                       }
+               }
+
                # Watch pages
                if($params['watch'] || $wgUser->getOption('watchmoves'))
                {
@@ -114,9 +127,37 @@ class ApiMove extends ApiBase {
                }
                $this->getResult()->addValue(null, $this->getModuleName(), $r);
        }
+       
+       public function moveSubpages($fromTitle, $toTitle, $reason, $noredirect)
+       {
+               $retval = array();
+               $success = $fromTitle->moveSubpages($toTitle, true, $reason, !$noredirect);
+               if(isset($success[0]))
+                       return array('error' => $this->parseMsg($success));
+               else
+               {
+                       // At least some pages could be moved
+                       // Report each of them separately
+                       foreach($success as $oldTitle => $newTitle)
+                       {
+                               $r = array('from' => $oldTitle);
+                               if(is_array($newTitle))
+                                       $r['error'] = $this->parseMsg(reset($newTitle));
+                               else
+                                       // Success
+                                       $r['to'] = $newTitle;
+                               $retval[] = $r;
+                       }
+               }
+               return $retval;
+       }
 
        public function mustBePosted() { return true; }
 
+       public function isWriteMode() {
+               return true;
+       }
+
        public function getAllowedParams() {
                return array (
                        'from' => null,
@@ -127,6 +168,7 @@ class ApiMove extends ApiBase {
                        'token' => null,
                        'reason' => null,
                        'movetalk' => false,
+                       'movesubpages' => false,
                        'noredirect' => false,
                        'watch' => false,
                        'unwatch' => false
@@ -141,6 +183,7 @@ class ApiMove extends ApiBase {
                        'token' => 'A move token previously retrieved through prop=info',
                        'reason' => 'Reason for the move (optional).',
                        'movetalk' => 'Move the talk page, if it exists.',
+                       'movesubpages' => 'Move subpages, if applicable',
                        'noredirect' => 'Don\'t create a redirect',
                        'watch' => 'Add the page and the redirect to your watchlist',
                        'unwatch' => 'Remove the page and the redirect from your watchlist'
@@ -160,6 +203,6 @@ class ApiMove extends ApiBase {
        }
 
        public function getVersion() {
-               return __CLASS__ . ': $Id: ApiMove.php 47041 2009-02-09 14:39:41Z catrope $';
+               return __CLASS__ . ': $Id: ApiMove.php 48091 2009-03-06 13:49:44Z catrope $';
        }
 }