2
2
3
3
namespace ACP ;
4
4
5
- use ContentHandler ;
5
+ use CommentStoreComment ;
6
6
use MediaWiki \Hook \ParserFirstCallInitHook ;
7
+ use MediaWiki \MediaWikiServices ;
8
+ use MediaWiki \Revision \SlotRecord ;
7
9
use MediaWiki \SpecialPage \Hook \SpecialPageAfterExecuteHook ;
8
10
use MediaWiki \SpecialPage \Hook \SpecialPageBeforeExecuteHook ;
9
11
use MediaWiki \Storage \Hook \RevisionDataUpdatesHook ;
10
12
use Parser ;
11
13
use Title ;
12
- use WikiPage ;
14
+ use WikitextContent ;
13
15
14
16
/**
15
17
* This extension provides a parser function #createpageifnotex that can be used to create
@@ -77,19 +79,23 @@ public static function createPageIfNotExisting( $parser, $newPageTitleText, $new
77
79
78
80
// Get the raw text of $newPageContent as it was before stripping <nowiki>:
79
81
$ newPageContent = $ parser ->getStripState ()->unstripNoWiki ( $ newPageContent );
82
+ $ newPageData = [
83
+ "content " => $ newPageContent ,
84
+ "user " => $ parser ->getUserIdentity ()
85
+ ];
80
86
81
87
$ enabledSpecialPage = self ::enabledSpecialPage ();
82
88
if ( $ enabledSpecialPage ) {
83
89
// Store data in static variable for later use in onSpecialPageAfterExecute:
84
- $ enabledSpecialPage ->addPageToCreate ( $ newPageTitleText , $ newPageContent );
90
+ $ enabledSpecialPage ->addPageToCreate ( $ newPageTitleText , $ newPageData );
85
91
} elseif ( in_array ( $ parser ->getTitle ()->getNamespace (), $ autoCreatePageNamespaces ) ) {
86
92
// For pages with namespace in $autoCreatePageNamespaces store data in the parser output
87
93
// for later use in onRevisionDataUpdates:s
88
94
$ createPageData = $ parser ->getOutput ()->getExtensionData ( 'createPage ' );
89
95
if ( $ createPageData === null ) {
90
96
$ createPageData = [];
91
97
}
92
- $ createPageData [$ newPageTitleText ] = $ newPageContent ;
98
+ $ createPageData [$ newPageTitleText ] = $ newPageData ;
93
99
$ parser ->getOutput ()->setExtensionData ( 'createPage ' , $ createPageData );
94
100
}
95
101
@@ -114,13 +120,12 @@ public function onRevisionDataUpdates( $title, $renderedRevision, &$updates ) {
114
120
// Prevent pages to be created by pages that are created to avoid loops:
115
121
$ egAutoCreatePageMaxRecursion --;
116
122
117
- foreach ( $ createPageData as $ pageTitleText => $ pageContentText ) {
118
- self ::createPage ( $ title , $ pageTitleText , $ pageContentText );
123
+ foreach ( $ createPageData as $ pageTitleText => $ pageContentData ) {
124
+ self ::createPage ( $ title , $ pageTitleText , $ pageContentData );
119
125
}
120
126
121
127
// Reset state. Probably not needed since parsing is usually done here anyway:
122
128
$ output ->setExtensionData ( 'createPage ' , null );
123
- $ egAutoCreatePageMaxRecursion ++;
124
129
125
130
return true ;
126
131
}
@@ -142,8 +147,8 @@ public function onSpecialPageAfterExecute( $special, $subPage ) {
142
147
$ specialPage = array_pop ( self ::$ specialPageStack );
143
148
144
149
if ( $ specialPage ->isEnabled () ) {
145
- foreach ( $ specialPage ->pagesToCreate () as $ pageTitleText => $ pageContentText ) {
146
- self ::createPage ( $ special ->getFullTitle (), $ pageTitleText , $ pageContentText );
150
+ foreach ( $ specialPage ->pagesToCreate () as $ pageTitleText => $ pageContentData ) {
151
+ self ::createPage ( $ special ->getFullTitle (), $ pageTitleText , $ pageContentData );
147
152
}
148
153
}
149
154
}
@@ -157,16 +162,23 @@ private static function enabledSpecialPage() {
157
162
return $ currentSpecialPage !== null && $ currentSpecialPage ->isEnabled () ? $ currentSpecialPage : null ;
158
163
}
159
164
160
- private static function createPage ( $ sourceTitle , $ pageTitleText , $ pageContentText ) {
165
+ private static function createPage ( $ sourceTitle , $ pageTitleText , $ pageContentData ) {
166
+ $ pageContentText = new WikitextContent ( $ pageContentData ["content " ] );
167
+ $ author = $ pageContentData ["user " ];
161
168
$ sourceTitleText = $ sourceTitle ->getPrefixedText ();
162
169
$ pageTitle = Title::newFromText ( $ pageTitleText );
163
170
// wfDebugLog( 'createpage', "CREATE " . $pageTitle->getText() . " Text: " . $pageContent );
164
171
165
172
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
173
+ $ page = $ pageTitle ->toPageIdentity ();
174
+ $ comment = CommentStoreComment::newUnsavedComment (
175
+ "Page created automatically by parser function on page [[ $ sourceTitleText]] " // TODO i18n
176
+ );
177
+ $ factory = MediaWikiServices::getInstance ()->getPageUpdaterFactory ();
178
+ $ updater = $ factory ->newPageUpdater ( $ page , $ author );
179
+ $ updater ->setContent ( SlotRecord::MAIN , $ pageContentText );
180
+ $ updater ->saveRevision ( $ comment );
181
+
170
182
// wfDebugLog( 'createpage', "CREATED PAGE " . $pageTitle->getText() . " Text: " . $pageContent );
171
183
}
172
184
}
0 commit comments