jenkins-bot has submitted this change and it was merged. Change subject: Enable the creation of empty pages ......................................................................
Enable the creation of empty pages This change enables the direct creation of empty pages without needing to use a work-around (such as "{{subst:ns:0}}"). A warning is added as the message "blankarticle" to request confirmation that the empty page was meant to be blank. A automatic edit summary has been added when creating a blank page. The message is: "autosumm-newblank." The API has been updated to permit the creation of empty pages, when "text" is null, but not non-existant. Unit tests have also been added to test these features. Bug: 57238 Bug: 65206 Change-Id: I3457c36a909d1dbfaeed04a1f0568c69e0ef3386 --- M RELEASE-NOTES-1.24 M includes/EditPage.php M includes/api/ApiEditPage.php M includes/content/ContentHandler.php M languages/i18n/en.json M languages/i18n/qqq.json M tests/phpunit/includes/EditPageTest.php M tests/phpunit/includes/api/ApiEditPageTest.php 8 files changed, 46 insertions(+), 15 deletions(-) Approvals: Parent5446: Looks good to me, approved jenkins-bot: Verified diff --git a/RELEASE-NOTES-1.24 b/RELEASE-NOTES-1.24 index cd24ef0..fa24dad 100644 --- a/RELEASE-NOTES-1.24 +++ b/RELEASE-NOTES-1.24 @@ -161,6 +161,7 @@ wrong constraints. * (bug 67870) wfShellExec() cuts off stdout at multiples of 8192 bytes. * $wgRunJobsAsync now works with private wikis (e.g. read requires login). +* (bugs 57238, 65206) Blank pages can now be directly created. === Web API changes in 1.24 === * action=parse API now supports prop=modules, which provides the list of diff --git a/includes/EditPage.php b/includes/EditPage.php index 5864c9b..50225cc 100644 --- a/includes/EditPage.php +++ b/includes/EditPage.php @@ -99,7 +99,7 @@ const AS_NO_CREATE_PERMISSION = 223; /** - * Status: user tried to create a blank page + * Status: user tried to create a blank page and wpIgnoreBlankArticle == false */ const AS_BLANK_ARTICLE = 224; @@ -243,6 +243,12 @@ /** @var bool */ protected $allowBlankSummary = false; + + /** @var bool */ + protected $blankArticle = false; + + /** @var bool */ + protected $allowBlankArticle = false; /** @var string */ protected $autoSumm = ''; @@ -850,6 +856,8 @@ } $this->autoSumm = $request->getText( 'wpAutoSummary' ); + + $this->allowBlankArticle = $request->getBool( 'wpIgnoreBlankArticle' ); } else { # Not a posted form? Start with nothing. wfDebug( __METHOD__ . ": Not a posted form.\n" ); @@ -1390,6 +1398,7 @@ case self::AS_TEXTBOX_EMPTY: case self::AS_MAX_ARTICLE_SIZE_EXCEEDED: case self::AS_END: + case self::AS_BLANK_ARTICLE: return true; case self::AS_HOOK_ERROR: @@ -1423,10 +1432,6 @@ } } $wgOut->redirect( $this->mTitle->getFullURL( $extraQuery ) . $sectionanchor ); - return false; - - case self::AS_BLANK_ARTICLE: - $wgOut->redirect( $this->getContextTitle()->getFullURL() ); return false; case self::AS_SPAM_ERROR: @@ -1767,7 +1772,9 @@ $defaultText = ''; } - if ( $this->textbox1 === $defaultText ) { + if ( !$this->allowBlankArticle && $this->textbox1 === $defaultText ) { + $this->blankArticle = true; + $status->fatal( 'blankarticle' ); $status->setResult( false, self::AS_BLANK_ARTICLE ); wfProfileOut( __METHOD__ ); return $status; @@ -2521,6 +2528,10 @@ $wgOut->addHTML( EditPage::getEditToolbar() ); } + if ( $this->blankArticle ) { + $wgOut->addHTML( Html::hidden( 'wpIgnoreBlankArticle', true ) ); + } + if ( $this->isConflict ) { // In an edit conflict bypass the overridable content form method // and fallback to the raw wpTextbox1 since editconflicts can't be @@ -2649,6 +2660,10 @@ $wgOut->wrapWikiMsg( "<div id='mw-missingcommentheader'>\n$1\n</div>", 'missingcommentheader' ); } + if ( $this->blankArticle ) { + $wgOut->wrapWikiMsg( "<div id='mw-blankarticle'>\n$1\n</div>", 'blankarticle' ); + } + if ( $this->hookError !== '' ) { $wgOut->addWikiText( $this->hookError ); } diff --git a/includes/api/ApiEditPage.php b/includes/api/ApiEditPage.php index 884306a..8a0c280 100644 --- a/includes/api/ApiEditPage.php +++ b/includes/api/ApiEditPage.php @@ -252,7 +252,8 @@ 'format' => $contentFormat, 'model' => $contentHandler->getModelID(), 'wpEditToken' => $params['token'], - 'wpIgnoreBlankSummary' => '' + 'wpIgnoreBlankSummary' => '', + 'wpIgnoreBlankArticle' => true ); if ( !is_null( $params['summary'] ) ) { diff --git a/includes/content/ContentHandler.php b/includes/content/ContentHandler.php index 6be06c6..1d7a7a7 100644 --- a/includes/content/ContentHandler.php +++ b/includes/content/ContentHandler.php @@ -821,6 +821,11 @@ ->inContentLanguage()->text(); } + // New blank article auto-summary + if ( $flags && EDIT_NEW && $newContent->getSize() == 0 ) { + return wfMessage( 'autosumm-newblank' ) ->inContentLanguage()->text(); + } + // If we reach this point, there's no applicable auto-summary for our // case, so our auto-summary is empty. return ''; diff --git a/languages/i18n/en.json b/languages/i18n/en.json index e235ad0..fa0d758 100644 --- a/languages/i18n/en.json +++ b/languages/i18n/en.json @@ -582,6 +582,7 @@ "preview": "Preview", "showpreview": "Show preview", "showdiff": "Show changes", + "blankarticle": "<strong>Warning:</strong> The page you are creating is blank.\nIf you click \"{{int:savearticle}}\" again, the page will be created without any content.", "anoneditwarning": "<strong>Warning:</strong> You are not logged in.\nYour IP address will be recorded in this page's edit history.", "anonpreviewwarning": "<em>You are not logged in. Saving will record your IP address in this page's edit history.</em>", "missingsummary": "<strong>Reminder:</strong> You have not provided an edit summary.\nIf you click \"{{int:savearticle}}\" again, your edit will be saved without one.", @@ -3113,6 +3114,7 @@ "autosumm-replace": "Replaced content with \"$1\"", "autoredircomment": "Redirected page to [[$1]]", "autosumm-new": "Created page with \"$1\"", + "autosumm-newblank": "Created blank page", "autoblock_whitelist": "AOL http://webmaster.info.aol.com/proxyinfo.html\n*64.12.96.0/19\n*149.174.160.0/20\n*152.163.240.0/21\n*152.163.248.0/22\n*152.163.252.0/23\n*152.163.96.0/22\n*152.163.100.0/23\n*195.93.32.0/22\n*195.93.48.0/22\n*195.93.64.0/19\n*195.93.96.0/19\n*195.93.16.0/20\n*198.81.0.0/22\n*198.81.16.0/20\n*198.81.8.0/23\n*202.67.64.128/25\n*205.188.192.0/20\n*205.188.208.0/23\n*205.188.112.0/20\n*205.188.146.144/30\n*207.200.112.0/21", "size-bytes": "$1 B", "size-kilobytes": "$1 KB", diff --git a/languages/i18n/qqq.json b/languages/i18n/qqq.json index ea6a839..b221ee5 100644 --- a/languages/i18n/qqq.json +++ b/languages/i18n/qqq.json @@ -744,6 +744,7 @@ "preview": "The title of the Preview page shown after clicking the \"Show preview\" button in the edit page. Since this is a heading, it should probably be translated as a noun and not as a verb.\n\n{{Identical|Preview}}", "showpreview": "The text of the button to preview the page you are editing. See also {{msg-mw|showdiff}} and {{msg-mw|savearticle}} for the other buttons.\n\nSee also:\n* {{msg-mw|Showpreview}}\n* {{msg-mw|Accesskey-preview}}\n* {{msg-mw|Tooltip-preview}}\n{{Identical|Show preview}}", "showdiff": "Button below the edit page. See also {{msg-mw|Showpreview}} and {{msg-mw|Savearticle}} for the other buttons.\n\nSee also:\n* {{msg-mw|Showdiff}}\n* {{msg-mw|Accesskey-diff}}\n* {{msg-mw|Tooltip-diff}}\n{{Identical|Show change}}", + "blankarticle": "Notice displayed once after the user tries to save an empty page.", "anoneditwarning": "Shown when editing a page anonymously.\nSee also:\n* {{msg-mw|Sf autoedit anoneditwarning}}\n* {{msg-mw|Wikibase-anonymouseditwarning-property}}\n* {{msg-mw|Wikibase-anonymouseditwarning-item}}\n* {{msg-mw|Anonpreviewwarning}}", "anonpreviewwarning": "See also:\n* {{msg-mw|Anoneditwarning}}", "missingsummary": "The text \"edit summary\" is in {{msg-mw|Summary}}.\n\nSee also:\n* {{msg-mw|Missingcommentheader}}\n* {{msg-mw|Savearticle}}", @@ -3275,6 +3276,7 @@ "autosumm-replace": "The auto summary when a user removes a lot of characters in the page.\n\nParameters:\n* $1 - truncated text", "autoredircomment": "The auto summary when making a redirect. Parameters:\n* $1 - the page where it redirects to\n* $2 - (Optional) the first X number of characters of the redirect ($2 is usually only used when end users customize the message)", "autosumm-new": "The auto summary when creating a new page. $1 are the first X number of characters of the new page.", + "autosumm-newblank": "The automatic edit summary when creating a blank page. This is not the same as blanking a page.", "autoblock_whitelist": "{{notranslate}}", "size-bytes": "{{optional}}\nSize (of a page, typically) in bytes.", "size-kilobytes": "{{optional}}\nSize (of a page, typically) in kibibytes (1 kibibyte = 1024 bytes).", diff --git a/tests/phpunit/includes/EditPageTest.php b/tests/phpunit/includes/EditPageTest.php index 28c35b3..6537364 100644 --- a/tests/phpunit/includes/EditPageTest.php +++ b/tests/phpunit/includes/EditPageTest.php @@ -265,6 +265,19 @@ null, "expected MediaWiki: page not being created if text equals default message" ); + + $this->assertEdit( + 'EditPageTest_testCreatePage', + null, + null, + array( + 'wpTextbox1' => "", + 'wpIgnoreBlankArticle' => 1, + ), + EditPage::AS_SUCCESS_NEW_ARTICLE, + "", + "expected empty article being created" + )->doDeleteArticleReal( 'EditPageTest_testCreatePage' ); } public function testUpdatePage() { diff --git a/tests/phpunit/includes/api/ApiEditPageTest.php b/tests/phpunit/includes/api/ApiEditPageTest.php index 9f8c139..3179a45 100644 --- a/tests/phpunit/includes/api/ApiEditPageTest.php +++ b/tests/phpunit/includes/api/ApiEditPageTest.php @@ -161,14 +161,6 @@ // -- create page (or not) ----------------------------------------- if ( $text !== null ) { - if ( $text === '' ) { - // can't create an empty page, so create it with some content - $this->doApiRequestWithToken( array( - 'action' => 'edit', - 'title' => $name, - 'text' => '(dummy)', ) ); - } - list( $re ) = $this->doApiRequestWithToken( array( 'action' => 'edit', 'title' => $name, -- To view, visit https://gerrit.wikimedia.org/r/145899 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I3457c36a909d1dbfaeed04a1f0568c69e0ef3386 Gerrit-PatchSet: 21 Gerrit-Project: mediawiki/core Gerrit-Branch: master Gerrit-Owner: Ebe123 <beauleetien...@gmail.com> Gerrit-Reviewer: Anomie <bjor...@wikimedia.org> Gerrit-Reviewer: Ebe123 <beauleetien...@gmail.com> Gerrit-Reviewer: Florianschmidtwelzow <florian.schmidt.wel...@t-online.de> Gerrit-Reviewer: Jackmcbarn <jackmcb...@gmail.com> Gerrit-Reviewer: Jdlrobson <jrob...@wikimedia.org> Gerrit-Reviewer: Jforrester <jforres...@wikimedia.org> Gerrit-Reviewer: Legoktm <legoktm.wikipe...@gmail.com> Gerrit-Reviewer: Nikerabbit <niklas.laxst...@gmail.com> Gerrit-Reviewer: Parent5446 <tylerro...@gmail.com> Gerrit-Reviewer: Reedy <re...@wikimedia.org> Gerrit-Reviewer: SPQRobin <robinp.1...@gmail.com> Gerrit-Reviewer: Siebrand <siebr...@kitano.nl> Gerrit-Reviewer: Vogone <leon.liese...@wikipedia.de> Gerrit-Reviewer: Yurik <yu...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits