Skip to content

Commit bde32d0

Browse files
committed
Migrate to non-deprecated MediaWiki API
1 parent 80c0eb0 commit bde32d0

File tree

2 files changed

+28
-15
lines changed

2 files changed

+28
-15
lines changed

src/AutoCreatePage.php

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,16 @@
22

33
namespace ACP;
44

5-
use ContentHandler;
5+
use CommentStoreComment;
66
use MediaWiki\Hook\ParserFirstCallInitHook;
7+
use MediaWiki\MediaWikiServices;
8+
use MediaWiki\Revision\SlotRecord;
79
use MediaWiki\SpecialPage\Hook\SpecialPageAfterExecuteHook;
810
use MediaWiki\SpecialPage\Hook\SpecialPageBeforeExecuteHook;
911
use MediaWiki\Storage\Hook\RevisionDataUpdatesHook;
1012
use Parser;
1113
use Title;
12-
use WikiPage;
14+
use WikitextContent;
1315

1416
/**
1517
* This extension provides a parser function #createpageifnotex that can be used to create
@@ -77,19 +79,23 @@ public static function createPageIfNotExisting( $parser, $newPageTitleText, $new
7779

7880
// Get the raw text of $newPageContent as it was before stripping <nowiki>:
7981
$newPageContent = $parser->getStripState()->unstripNoWiki( $newPageContent );
82+
$newPageData = [
83+
"content" => $newPageContent,
84+
"user" => $parser->getUserIdentity()
85+
];
8086

8187
$enabledSpecialPage = self::enabledSpecialPage();
8288
if ( $enabledSpecialPage ) {
8389
// Store data in static variable for later use in onSpecialPageAfterExecute:
84-
$enabledSpecialPage->addPageToCreate( $newPageTitleText, $newPageContent );
90+
$enabledSpecialPage->addPageToCreate( $newPageTitleText, $newPageData );
8591
} elseif ( in_array( $parser->getTitle()->getNamespace(), $autoCreatePageNamespaces ) ) {
8692
// For pages with namespace in $autoCreatePageNamespaces store data in the parser output
8793
// for later use in onRevisionDataUpdates:s
8894
$createPageData = $parser->getOutput()->getExtensionData( 'createPage' );
8995
if ( $createPageData === null ) {
9096
$createPageData = [];
9197
}
92-
$createPageData[$newPageTitleText] = $newPageContent;
98+
$createPageData[$newPageTitleText] = $newPageData;
9399
$parser->getOutput()->setExtensionData( 'createPage', $createPageData );
94100
}
95101

@@ -114,8 +120,8 @@ public function onRevisionDataUpdates( $title, $renderedRevision, &$updates ) {
114120
// Prevent pages to be created by pages that are created to avoid loops:
115121
$egAutoCreatePageMaxRecursion--;
116122

117-
foreach ( $createPageData as $pageTitleText => $pageContentText ) {
118-
self::createPage( $title, $pageTitleText, $pageContentText );
123+
foreach ( $createPageData as $pageTitleText => $pageContentData ) {
124+
self::createPage( $title, $pageTitleText, $pageContentData );
119125
}
120126

121127
// Reset state. Probably not needed since parsing is usually done here anyway:
@@ -142,8 +148,8 @@ public function onSpecialPageAfterExecute( $special, $subPage ) {
142148
$specialPage = array_pop( self::$specialPageStack );
143149

144150
if ( $specialPage->isEnabled() ) {
145-
foreach ( $specialPage->pagesToCreate() as $pageTitleText => $pageContentText ) {
146-
self::createPage( $special->getFullTitle(), $pageTitleText, $pageContentText );
151+
foreach ( $specialPage->pagesToCreate() as $pageTitleText => $pageContentData ) {
152+
self::createPage( $special->getFullTitle(), $pageTitleText, $pageContentData );
147153
}
148154
}
149155
}
@@ -157,16 +163,23 @@ private static function enabledSpecialPage() {
157163
return $currentSpecialPage !== null && $currentSpecialPage->isEnabled() ? $currentSpecialPage : null;
158164
}
159165

160-
private static function createPage( $sourceTitle, $pageTitleText, $pageContentText ) {
166+
private static function createPage( $sourceTitle, $pageTitleText, $pageContentData ) {
167+
$pageContentText = new WikitextContent( $pageContentData["content"] );
168+
$author = $pageContentData["user"];
161169
$sourceTitleText = $sourceTitle->getPrefixedText();
162170
$pageTitle = Title::newFromText( $pageTitleText );
163171
// wfDebugLog( 'createpage', "CREATE " . $pageTitle->getText() . " Text: " . $pageContent );
164172

165173
if ( $pageTitle !== null && !$pageTitle->isKnown() && $pageTitle->canExist() ) {
166-
$newWikiPage = new WikiPage( $pageTitle );
167-
$pageContent = ContentHandler::makeContent( $pageContentText, $sourceTitle );
168-
$newWikiPage->doEditContent( $pageContent,
169-
"Page created automatically by parser function on page [[$sourceTitleText]]" ); // TODO i18n
174+
$page = $pageTitle->toPageIdentity();
175+
$comment = CommentStoreComment::newUnsavedComment(
176+
"Page created automatically by parser function on page [[$sourceTitleText]]" // TODO i18n
177+
);
178+
$factory = MediaWikiServices::getInstance()->getPageUpdaterFactory();
179+
$updater = $factory->newPageUpdater( $page, $author );
180+
$updater->setContent( SlotRecord::MAIN, $pageContentText );
181+
$updater->saveRevision( $comment );
182+
170183
// wfDebugLog( 'createpage', "CREATED PAGE " . $pageTitle->getText() . " Text: " . $pageContent );
171184
}
172185
}

src/SpecialPage.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ public function isEnabled() {
1515
return $this->isEnabled;
1616
}
1717

18-
public function addPageToCreate( $titleText, $content ) {
19-
$this->pagesToCreate[$titleText] = $content;
18+
public function addPageToCreate( $titleText, $data ) {
19+
$this->pagesToCreate[$titleText] = $data;
2020
}
2121

2222
public function pagesToCreate() {

0 commit comments

Comments
 (0)