Skip to content

Commit cddce93

Browse files
authored
Merge pull request #17 from mkroetzsch/rebase-139
Modernise for 1.39
2 parents 5a4ee90 + daffa10 commit cddce93

File tree

6 files changed

+62
-57
lines changed

6 files changed

+62
-57
lines changed

.github/workflows/ci.yml

Lines changed: 26 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,26 @@
1-
name: CI
2-
3-
on:
4-
push:
5-
branches: [ master ]
6-
pull_request:
7-
branches: [ master ]
8-
workflow_dispatch:
9-
10-
jobs:
11-
12-
ci:
13-
14-
runs-on: ubuntu-20.04
15-
continue-on-error: ${{ matrix.experimental }}
16-
17-
strategy:
18-
matrix:
19-
include:
20-
- mediawiki_version: '1.35'
21-
experimental: false
22-
- mediawiki_version: '1.36'
23-
experimental: true
24-
- mediawiki_version: '1.37'
25-
experimental: true
26-
27-
env:
28-
MW_VERSION: ${{ matrix.mediawiki_version }}
29-
30-
steps:
31-
- uses: actions/checkout@v3
32-
- run: make ci
1+
name: CI
2+
3+
on:
4+
push:
5+
branches: [master]
6+
pull_request:
7+
branches: [master]
8+
workflow_dispatch:
9+
10+
jobs:
11+
ci:
12+
runs-on: ubuntu-20.04
13+
continue-on-error: ${{ matrix.experimental }}
14+
15+
strategy:
16+
matrix:
17+
include:
18+
- mediawiki_version: "1.39"
19+
experimental: false
20+
21+
env:
22+
MW_VERSION: ${{ matrix.mediawiki_version }}
23+
24+
steps:
25+
- uses: actions/checkout@v3
26+
- run: make ci

Makefile

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ MW_VERSION ?= 1.35
55
EXTENSION_FOLDER := /var/www/html/extensions/$(EXTENSION)
66
IMAGE_NAME := $(shell echo $(EXTENSION) | tr A-Z a-z}):test-$(MW_VERSION)
77
PWD := $(shell bash -c "pwd -W 2>/dev/null || pwd")# this way it works on Windows and Linux
8+
DOCKER ?= docker
89
DOCKER_RUN_ARGS := --rm -v $(PWD)/coverage:$(EXTENSION_FOLDER)/coverage -w $(EXTENSION_FOLDER) $(IMAGE_NAME)
9-
docker_run := docker run $(DOCKER_RUN_ARGS)
10+
docker_run := $(DOCKER) run $(DOCKER_RUN_ARGS)
1011

1112
.PHONY: all
1213
all:
@@ -21,7 +22,7 @@ ci-coverage: build test-coverage
2122

2223
.PHONY: build
2324
build:
24-
docker build --tag $(IMAGE_NAME) \
25+
$(DOCKER) build --tag $(IMAGE_NAME) \
2526
--build-arg=MW_VERSION=$(MW_VERSION) \
2627
.
2728

@@ -41,11 +42,11 @@ composer-test-coverage:
4142

4243
.PHONY: bash
4344
bash:
44-
docker run -it -v $(PWD):/src $(DOCKER_RUN_ARGS) bash
45+
$(docker) run -it -v $(PWD):/src $(DOCKER_RUN_ARGS) bash
4546

4647
.PHONY: dev-bash
4748
dev-bash:
48-
docker run -it --rm -p 8080:8080 \
49+
$(docker) run -it --rm -p 8080:8080 \
4950
-v $(PWD):$(EXTENSION_FOLDER) \
5051
-v $(EXTENSION_FOLDER)/vendor/ \
5152
-w $(EXTENSION_FOLDER) $(IMAGE_NAME) bash -c 'service apache2 start && bash'

README.md

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@ directory of your MediaWiki installation. You can do this with git by calling:
5252

5353
from your extension directory. Then add to your LocalSettings.php:
5454

55-
`include_once "$IP/extensions/AutoCreatePage/AutoCreatePage.php";`
55+
`mfLoadExtension( 'AutoCreatePage' );`
5656

57-
The code requires MediaWiki 1.21 to work. It has been tested on MediaWiki 1.23.
57+
The code requires MediaWiki 1.39 to work. It has been tested on MediaWiki 1.39.
5858
Future versions might also work.
5959

6060

@@ -84,9 +84,7 @@ Status
8484

8585
This code is experimental. Use with care. Internationalization is largely missing.
8686

87-
As of MediaWiki 1.23, the code avoids deprecated functions or hooks. However, it
88-
accesses the parser's `mStripState` member (intended private?) to process nowiki
89-
tags. This might have to be replaced by some other approach in the future.
87+
As of MediaWiki 1.39, the code avoids deprecated functions or hooks.
9088

9189

9290
Credits

coverage/.keepdir

Whitespace-only changes.

src/AutoCreatePage.php

Lines changed: 26 additions & 14 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,13 +120,12 @@ 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:
122128
$output->setExtensionData( 'createPage', null );
123-
$egAutoCreatePageMaxRecursion++;
124129

125130
return true;
126131
}
@@ -142,8 +147,8 @@ public function onSpecialPageAfterExecute( $special, $subPage ) {
142147
$specialPage = array_pop( self::$specialPageStack );
143148

144149
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 );
147152
}
148153
}
149154
}
@@ -157,16 +162,23 @@ private static function enabledSpecialPage() {
157162
return $currentSpecialPage !== null && $currentSpecialPage->isEnabled() ? $currentSpecialPage : null;
158163
}
159164

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"];
161168
$sourceTitleText = $sourceTitle->getPrefixedText();
162169
$pageTitle = Title::newFromText( $pageTitleText );
163170
// wfDebugLog( 'createpage', "CREATE " . $pageTitle->getText() . " Text: " . $pageContent );
164171

165172
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+
170182
// wfDebugLog( 'createpage', "CREATED PAGE " . $pageTitle->getText() . " Text: " . $pageContent );
171183
}
172184
}

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)