Merge "Make errors from ArticleSave hooks propagate to the interface"
[lhc/web/wiklou.git] / includes / api / ApiEditPage.php
index f45f9fd..0b7ac41 100644 (file)
@@ -48,8 +48,9 @@ class ApiEditPage extends ApiBase {
                        $this->dieUsageMsg( 'missingtext' );
                }
 
-               $titleObj = Title::newFromText( $params['title'] );
-               if ( !$titleObj || $titleObj->isExternal() ) {
+               $pageObj = $this->getTitleOrPageId( $params );
+               $titleObj = $pageObj->getTitle();
+               if ( $titleObj->isExternal() ) {
                        $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
                }
 
@@ -282,9 +283,6 @@ class ApiEditPage extends ApiBase {
                        case EditPage::AS_SPAM_ERROR:
                                $this->dieUsageMsg( array( 'spamdetected', $result['spam'] ) );
 
-                       case EditPage::AS_FILTERING:
-                               $this->dieUsageMsg( 'filtered' );
-
                        case EditPage::AS_BLOCKED_PAGE_FOR_USER:
                                $this->dieUsageMsg( 'blockedtext' );
 
@@ -342,12 +340,11 @@ class ApiEditPage extends ApiBase {
                                $this->dieUsageMsg( 'summaryrequired' );
 
                        case EditPage::AS_END:
+                       default:
                                // $status came from WikiPage::doEdit()
                                $errors = $status->getErrorsArray();
                                $this->dieUsageMsg( $errors[0] ); // TODO: Add new errors to message map
                                break;
-                       default:
-                               $this->dieUsageMsg( array( 'unknownerror', $status->value ) );
                }
                $apiResult->addValue( null, $this->getModuleName(), $r );
        }
@@ -367,45 +364,48 @@ class ApiEditPage extends ApiBase {
        public function getPossibleErrors() {
                global $wgMaxArticleSize;
 
-               return array_merge( parent::getPossibleErrors(), array(
-                       array( 'missingtext' ),
-                       array( 'invalidtitle', 'title' ),
-                       array( 'createonly-exists' ),
-                       array( 'nocreate-missing' ),
-                       array( 'nosuchrevid', 'undo' ),
-                       array( 'nosuchrevid', 'undoafter' ),
-                       array( 'revwrongpage', 'id', 'text' ),
-                       array( 'undo-failure' ),
-                       array( 'hashcheckfailed' ),
-                       array( 'hookaborted' ),
-                       array( 'noimageredirect-anon' ),
-                       array( 'noimageredirect-logged' ),
-                       array( 'spamdetected', 'spam' ),
-                       array( 'summaryrequired' ),
-                       array( 'filtered' ),
-                       array( 'blockedtext' ),
-                       array( 'contenttoobig', $wgMaxArticleSize ),
-                       array( 'noedit-anon' ),
-                       array( 'noedit' ),
-                       array( 'actionthrottledtext' ),
-                       array( 'wasdeleted' ),
-                       array( 'nocreate-loggedin' ),
-                       array( 'blankpage' ),
-                       array( 'editconflict' ),
-                       array( 'emptynewsection' ),
-                       array( 'unknownerror', 'retval' ),
-                       array( 'code' => 'nosuchsection', 'info' => 'There is no section section.' ),
-                       array( 'code' => 'invalidsection', 'info' => 'The section parameter must be set to an integer or \'new\'' ),
-                       array( 'customcssprotected' ),
-                       array( 'customjsprotected' ),
-               ) );
+               return array_merge( parent::getPossibleErrors(),
+                       $this->getTitleOrPageIdErrorMessage(),
+                       array(
+                               array( 'missingtext' ),
+                               array( 'createonly-exists' ),
+                               array( 'nocreate-missing' ),
+                               array( 'nosuchrevid', 'undo' ),
+                               array( 'nosuchrevid', 'undoafter' ),
+                               array( 'revwrongpage', 'id', 'text' ),
+                               array( 'undo-failure' ),
+                               array( 'hashcheckfailed' ),
+                               array( 'hookaborted' ),
+                               array( 'noimageredirect-anon' ),
+                               array( 'noimageredirect-logged' ),
+                               array( 'spamdetected', 'spam' ),
+                               array( 'summaryrequired' ),
+                               array( 'blockedtext' ),
+                               array( 'contenttoobig', $wgMaxArticleSize ),
+                               array( 'noedit-anon' ),
+                               array( 'noedit' ),
+                               array( 'actionthrottledtext' ),
+                               array( 'wasdeleted' ),
+                               array( 'nocreate-loggedin' ),
+                               array( 'blankpage' ),
+                               array( 'editconflict' ),
+                               array( 'emptynewsection' ),
+                               array( 'unknownerror', 'retval' ),
+                               array( 'code' => 'nosuchsection', 'info' => 'There is no section section.' ),
+                               array( 'code' => 'invalidsection', 'info' => 'The section parameter must be set to an integer or \'new\'' ),
+                               array( 'customcssprotected' ),
+                               array( 'customjsprotected' ),
+                       )
+               );
        }
 
        public function getAllowedParams() {
                return array(
                        'title' => array(
                                ApiBase::PARAM_TYPE => 'string',
-                               ApiBase::PARAM_REQUIRED => true
+                       ),
+                       'pageid' => array(
+                               ApiBase::PARAM_TYPE => 'integer',
                        ),
                        'section' => null,
                        'sectiontitle' => array(
@@ -459,19 +459,20 @@ class ApiEditPage extends ApiBase {
        public function getParamDescription() {
                $p = $this->getModulePrefix();
                return array(
-                       'title' => 'Page title',
+                       'title' => "Title of the page you want to edit. Cannot be used together with {$p}pageid",
+                       'pageid' => "Page ID of the page you want to edit. Cannot be used together with {$p}title",
                        'section' => 'Section number. 0 for the top section, \'new\' for a new section',
                        'sectiontitle' => 'The title for a new section',
                        'text' => 'Page content',
                        'token' => array( 'Edit token. You can get one of these through prop=info.',
-                                               'The token should always be sent as the last parameter, or at least, after the text parameter'
+                                               "The token should always be sent as the last parameter, or at least, after the {$p}text parameter"
                        ),
-                       'summary' => 'Edit summary. Also section title when section=new',
+                       'summary' => "Edit summary. Also section title when {$p}section=new and {$p}sectiontitle is not set",
                        'minor' => 'Minor edit',
                        'notminor' => 'Non-minor edit',
                        'bot' => 'Mark this edit as bot',
                        'basetimestamp' => array( 'Timestamp of the base revision (obtained through prop=revisions&rvprop=timestamp).',
-                                               'Used to detect edit conflicts; leave unset to ignore conflicts.'
+                                               'Used to detect edit conflicts; leave unset to ignore conflicts'
                        ),
                        'starttimestamp' => array( 'Timestamp when you obtained the edit token.',
                                                'Used to detect edit conflicts; leave unset to ignore conflicts'
@@ -485,7 +486,8 @@ class ApiEditPage extends ApiBase {
                        'md5' => array( "The MD5 hash of the {$p}text parameter, or the {$p}prependtext and {$p}appendtext parameters concatenated.",
                                        'If set, the edit won\'t be done unless the hash is correct' ),
                        'prependtext' => "Add this text to the beginning of the page. Overrides {$p}text",
-                       'appendtext' => "Add this text to the end of the page. Overrides {$p}text",
+                       'appendtext' => array( "Add this text to the end of the page. Overrides {$p}text.",
+                                               "Use {$p}section=new to append a new section" ),
                        'undo' => "Undo this revision. Overrides {$p}text, {$p}prependtext and {$p}appendtext",
                        'undoafter' => 'Undo all revisions from undo to this one. If not set, just undo one revision',
                        'redirect' => 'Automatically resolve redirects',
@@ -502,12 +504,14 @@ class ApiEditPage extends ApiBase {
 
        public function getExamples() {
                return array(
-                       'Edit a page (anonymous user):',
-                       '    api.php?action=edit&title=Test&summary=test%20summary&text=article%20content&basetimestamp=20070824123454&token=%2B\\',
-                       'Prepend __NOTOC__ to a page (anonymous user):',
-                       '    api.php?action=edit&title=Test&summary=NOTOC&minor=&prependtext=__NOTOC__%0A&basetimestamp=20070824123454&token=%2B\\',
-                       'Undo r13579 through r13585 with autosummary (anonymous user):',
-                       '    api.php?action=edit&title=Test&undo=13585&undoafter=13579&basetimestamp=20070824123454&token=%2B\\',
+
+                       'api.php?action=edit&title=Test&summary=test%20summary&text=article%20content&basetimestamp=20070824123454&token=%2B\\'
+                               => 'Edit a page (anonymous user)',
+
+                       'api.php?action=edit&title=Test&summary=NOTOC&minor=&prependtext=__NOTOC__%0A&basetimestamp=20070824123454&token=%2B\\'
+                               => 'Prepend __NOTOC__ to a page (anonymous user)',
+                       'api.php?action=edit&title=Test&undo=13585&undoafter=13579&basetimestamp=20070824123454&token=%2B\\'
+                               => 'Undo r13579 through r13585 with autosummary (anonymous user)',
                );
        }