From 1b097dddf3b909745fc9f3beb6274d29fa0ff69c Mon Sep 17 00:00:00 2001 From: paladox Date: Sat, 20 Mar 2021 21:54:50 +0000 Subject: [PATCH 01/18] Use MultiContentSave hook --- includes/Extension.php | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/includes/Extension.php b/includes/Extension.php index 0997c7d..a14eb36 100644 --- a/includes/Extension.php +++ b/includes/Extension.php @@ -21,14 +21,49 @@ * * @author Daniel Kraus */ + namespace LinkTitles; +use CommentStoreComment; +use MediaWiki\Revision\RenderedRevision; +use MediaWiki\Revision\SlotRecord; +use Status; +use WikiPage; +use User; + /** * Provides event handlers and entry points for the extension. */ class Extension { const URL = 'https://github.com/bovender/LinkTitles'; + /** + * Event handler for the MultiContentSave hook. + * + * This handler is used if the parseOnEdit configuration option is set. + */ + public static function onMultiContentSave( RenderedRevision $renderedRevision, User $user, CommentStoreComment $summary, $flags, Status $hookStatus ) { + $config = new Config(); + if ( !$config->parseOnEdit ) return true; + $title = $renderedRevision->getRevision()->getPageAsLinkTarget(); + $slots = $renderedRevision->getRevision()->getSlots(); + $content = $renderedRevision->getRevision()->getSlots()->getContent( SlotRecord::MAIN ); + $articleID = $renderedRevision->getRevision()->getPageId(); + $wikiPage = WikiPage::newFromID( $articleID ); + $source = Source::createFromPageandContent( $wikiPage, $content, $config ); + $linker = new Linker( $config ); + $result = $linker->linkContent( $source ); + if ( $result ) { + $source->setText( $result ); + + $text = $source->getText($result); + $slots = $renderedRevision->getRevision()->getSlots(); + $slots->setContent( 'main', \ContentHandler::makeContent( $text, $title ) ); + } + + return true; + } + /** * Event handler for the PageContentSave hook. * From 0cd8872d924213957cbb79e9f341c36ef7e3c0be Mon Sep 17 00:00:00 2001 From: paladox Date: Sat, 20 Mar 2021 21:55:27 +0000 Subject: [PATCH 02/18] Update extension.json --- extension.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extension.json b/extension.json index d23825f..7f5749b 100644 --- a/extension.json +++ b/extension.json @@ -19,7 +19,7 @@ }, "config": { "LinkTitlesParseOnEdit": true, - "LinkTitlesParseOnRender": true, + "LinkTitlesParseOnRender": false, "LinkTitlesParseHeadings": false, "LinkTitlesSkipTemplates": true, "LinkTitlesPreferShortTitles": true, From 440b2f55b1755e0e07425f9c5ce4da9b02d18f30 Mon Sep 17 00:00:00 2001 From: paladox Date: Sat, 20 Mar 2021 21:59:00 +0000 Subject: [PATCH 03/18] Update Extension.php --- includes/Extension.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/includes/Extension.php b/includes/Extension.php index a14eb36..8009f4f 100644 --- a/includes/Extension.php +++ b/includes/Extension.php @@ -25,6 +25,7 @@ namespace LinkTitles; use CommentStoreComment; +use ContentHandler; use MediaWiki\Revision\RenderedRevision; use MediaWiki\Revision\SlotRecord; use Status; @@ -50,6 +51,9 @@ class Extension { $content = $renderedRevision->getRevision()->getSlots()->getContent( SlotRecord::MAIN ); $articleID = $renderedRevision->getRevision()->getPageId(); $wikiPage = WikiPage::newFromID( $articleID ); + if ( $wikiPage == null ) { + return true; + } $source = Source::createFromPageandContent( $wikiPage, $content, $config ); $linker = new Linker( $config ); $result = $linker->linkContent( $source ); @@ -58,7 +62,7 @@ class Extension { $text = $source->getText($result); $slots = $renderedRevision->getRevision()->getSlots(); - $slots->setContent( 'main', \ContentHandler::makeContent( $text, $title ) ); + $slots->setContent( 'main', ContentHandler::makeContent( $text, $title ) ); } return true; From 73eaefc78b8a32f7cc8baab2b9d5ea2eb2c6b0ce Mon Sep 17 00:00:00 2001 From: paladox Date: Sat, 20 Mar 2021 21:59:37 +0000 Subject: [PATCH 04/18] Update Extension.php --- includes/Extension.php | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/includes/Extension.php b/includes/Extension.php index 8009f4f..a679d78 100644 --- a/includes/Extension.php +++ b/includes/Extension.php @@ -44,26 +44,26 @@ class Extension { * This handler is used if the parseOnEdit configuration option is set. */ public static function onMultiContentSave( RenderedRevision $renderedRevision, User $user, CommentStoreComment $summary, $flags, Status $hookStatus ) { - $config = new Config(); - if ( !$config->parseOnEdit ) return true; + $config = new Config(); + if ( !$config->parseOnEdit ) return true; $title = $renderedRevision->getRevision()->getPageAsLinkTarget(); $slots = $renderedRevision->getRevision()->getSlots(); - $content = $renderedRevision->getRevision()->getSlots()->getContent( SlotRecord::MAIN ); - $articleID = $renderedRevision->getRevision()->getPageId(); - $wikiPage = WikiPage::newFromID( $articleID ); + $content = $renderedRevision->getRevision()->getSlots()->getContent( SlotRecord::MAIN ); + $articleID = $renderedRevision->getRevision()->getPageId(); + $wikiPage = WikiPage::newFromID( $articleID ); if ( $wikiPage == null ) { return true; } - $source = Source::createFromPageandContent( $wikiPage, $content, $config ); - $linker = new Linker( $config ); - $result = $linker->linkContent( $source ); - if ( $result ) { - $source->setText( $result ); + $source = Source::createFromPageandContent( $wikiPage, $content, $config ); + $linker = new Linker( $config ); + $result = $linker->linkContent( $source ); + if ( $result ) { + $source->setText( $result ); - $text = $source->getText($result); + $text = $source->getText($result); $slots = $renderedRevision->getRevision()->getSlots(); - $slots->setContent( 'main', ContentHandler::makeContent( $text, $title ) ); - } + $slots->setContent( 'main', ContentHandler::makeContent( $text, $title ) ); + } return true; } From 095384e4536f43ba6eaf2d59fcc2fef81a6d4123 Mon Sep 17 00:00:00 2001 From: paladox Date: Sat, 20 Mar 2021 23:27:43 +0000 Subject: [PATCH 05/18] Update Extension.php --- includes/Extension.php | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/includes/Extension.php b/includes/Extension.php index a679d78..2a78e6e 100644 --- a/includes/Extension.php +++ b/includes/Extension.php @@ -46,23 +46,18 @@ class Extension { public static function onMultiContentSave( RenderedRevision $renderedRevision, User $user, CommentStoreComment $summary, $flags, Status $hookStatus ) { $config = new Config(); if ( !$config->parseOnEdit ) return true; - $title = $renderedRevision->getRevision()->getPageAsLinkTarget(); - $slots = $renderedRevision->getRevision()->getSlots(); - $content = $renderedRevision->getRevision()->getSlots()->getContent( SlotRecord::MAIN ); - $articleID = $renderedRevision->getRevision()->getPageId(); - $wikiPage = WikiPage::newFromID( $articleID ); - if ( $wikiPage == null ) { - return true; - } + + $revision = $renderedRevision->getRevision(); + $slots = $revision->getSlots(); + $content = $slots->getContent( SlotRecord::MAIN ); + + $wikiPage = WikiPage::factory( $title ); $source = Source::createFromPageandContent( $wikiPage, $content, $config ); $linker = new Linker( $config ); $result = $linker->linkContent( $source ); if ( $result ) { - $source->setText( $result ); - - $text = $source->getText($result); - $slots = $renderedRevision->getRevision()->getSlots(); - $slots->setContent( 'main', ContentHandler::makeContent( $text, $title ) ); + $content = $source->setText( $result ); + $slots->setContent( 'main', $content ); } return true; From 315c4e04f2eb4f9155e09e960e2dabd9e499405b Mon Sep 17 00:00:00 2001 From: paladox Date: Sat, 20 Mar 2021 23:28:11 +0000 Subject: [PATCH 06/18] Update extension.json --- extension.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/extension.json b/extension.json index 7f5749b..f1af96a 100644 --- a/extension.json +++ b/extension.json @@ -59,6 +59,9 @@ } }, "Hooks": { + "MultiContentSave": [ + "LinkTitles\\Extension::onMultiContentSave" + ], "PageContentSave": [ "LinkTitles\\Extension::onPageContentSave" ], From a238b3c8cea99153a09ec17a25cd7d1875ac8e3a Mon Sep 17 00:00:00 2001 From: paladox Date: Sat, 20 Mar 2021 23:46:42 +0000 Subject: [PATCH 07/18] Update Extension.php --- includes/Extension.php | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/includes/Extension.php b/includes/Extension.php index 2a78e6e..2a3b29c 100644 --- a/includes/Extension.php +++ b/includes/Extension.php @@ -25,7 +25,6 @@ namespace LinkTitles; use CommentStoreComment; -use ContentHandler; use MediaWiki\Revision\RenderedRevision; use MediaWiki\Revision\SlotRecord; use Status; @@ -43,11 +42,18 @@ class Extension { * * This handler is used if the parseOnEdit configuration option is set. */ - public static function onMultiContentSave( RenderedRevision $renderedRevision, User $user, CommentStoreComment $summary, $flags, Status $hookStatus ) { + public static function onMultiContentSave( + RenderedRevision $renderedRevision, + User $user, + CommentStoreComment $summary, + $flags, + Status $hookStatus + ) { $config = new Config(); if ( !$config->parseOnEdit ) return true; - + $revision = $renderedRevision->getRevision(); + $title = $revision->getPageAsLinkTarget(); $slots = $revision->getSlots(); $content = $slots->getContent( SlotRecord::MAIN ); From 80fd7d9803fbc0f94ecf28cb8e4539eb04cef84a Mon Sep 17 00:00:00 2001 From: paladox Date: Sat, 20 Mar 2021 23:52:50 +0000 Subject: [PATCH 08/18] Update Extension.php --- includes/Extension.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/includes/Extension.php b/includes/Extension.php index 2a3b29c..69f639d 100644 --- a/includes/Extension.php +++ b/includes/Extension.php @@ -76,6 +76,14 @@ class Extension { */ public static function onPageContentSave( &$wikiPage, &$user, &$content, &$summary, $isMinor, $isWatch, $section, &$flags, &$status ) { + global $wgVersion; + + if ( version_compare( $wgVersion, '1.35', '>=' ) ) { + // This hook is deprecated and does not work as intended on MW 1.32+. + // Instead we use onMultiContentSave which works from 1.35+. + return true; + } + $config = new Config(); if ( !$config->parseOnEdit || $isMinor ) return true; $source = Source::createFromPageandContent( $wikiPage, $content, $config ); From 8e8355117e5a765ec4f685d32080c67c45e82575 Mon Sep 17 00:00:00 2001 From: paladox Date: Sat, 20 Mar 2021 23:55:25 +0000 Subject: [PATCH 09/18] Update Extension.php --- includes/Extension.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/Extension.php b/includes/Extension.php index 69f639d..67b2665 100644 --- a/includes/Extension.php +++ b/includes/Extension.php @@ -80,7 +80,7 @@ class Extension { if ( version_compare( $wgVersion, '1.35', '>=' ) ) { // This hook is deprecated and does not work as intended on MW 1.32+. - // Instead we use onMultiContentSave which works from 1.35+. + // Instead we use MultiContentSave which works from 1.35+. return true; } From 6cbe075bdb492bf7e42e6b2197c34fdfaa4da26a Mon Sep 17 00:00:00 2001 From: paladox Date: Sun, 21 Mar 2021 00:10:44 +0000 Subject: [PATCH 10/18] Update extension.json --- extension.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extension.json b/extension.json index f1af96a..0926469 100644 --- a/extension.json +++ b/extension.json @@ -11,7 +11,7 @@ ], "type": "parserhook", "url": "https://www.mediawiki.org/wiki/Extension:LinkTitles", - "version": "6.0.0", + "version": "6.1.0", "license-name": "GPL-2.0+", "descriptionmsg": "linktitles-desc", "requires": { From 702c090ad3b640aba8caf99e7d024fa2ecd0c5a4 Mon Sep 17 00:00:00 2001 From: paladox Date: Sun, 21 Mar 2021 00:11:01 +0000 Subject: [PATCH 11/18] Update Extension.php --- includes/Extension.php | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/includes/Extension.php b/includes/Extension.php index 67b2665..5c8841f 100644 --- a/includes/Extension.php +++ b/includes/Extension.php @@ -69,32 +69,6 @@ class Extension { return true; } - /** - * Event handler for the PageContentSave hook. - * - * This handler is used if the parseOnEdit configuration option is set. - */ - public static function onPageContentSave( &$wikiPage, &$user, &$content, &$summary, - $isMinor, $isWatch, $section, &$flags, &$status ) { - global $wgVersion; - - if ( version_compare( $wgVersion, '1.35', '>=' ) ) { - // This hook is deprecated and does not work as intended on MW 1.32+. - // Instead we use MultiContentSave which works from 1.35+. - return true; - } - - $config = new Config(); - if ( !$config->parseOnEdit || $isMinor ) return true; - $source = Source::createFromPageandContent( $wikiPage, $content, $config ); - $linker = new Linker( $config ); - $result = $linker->linkContent( $source ); - if ( $result ) { - $content = $source->setText( $result ); - } - return true; - } - /* * Event handler for the InternalParseBeforeLinks hook. * From 37e5b79db0b48b19dc5adfbf39f9fad505116f1a Mon Sep 17 00:00:00 2001 From: paladox Date: Sun, 21 Mar 2021 00:11:18 +0000 Subject: [PATCH 12/18] Update extension.json --- extension.json | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/extension.json b/extension.json index 0926469..eaba85b 100644 --- a/extension.json +++ b/extension.json @@ -15,7 +15,7 @@ "license-name": "GPL-2.0+", "descriptionmsg": "linktitles-desc", "requires": { - "MediaWiki": ">= 1.32.0" + "MediaWiki": ">= 1.35.0" }, "config": { "LinkTitlesParseOnEdit": true, @@ -62,9 +62,6 @@ "MultiContentSave": [ "LinkTitles\\Extension::onMultiContentSave" ], - "PageContentSave": [ - "LinkTitles\\Extension::onPageContentSave" - ], "InternalParseBeforeLinks": [ "LinkTitles\\Extension::onInternalParseBeforeLinks" ], From f8dbdefdec6e0364ba6058526bbe8d59170cd44e Mon Sep 17 00:00:00 2001 From: paladox Date: Sun, 21 Mar 2021 00:17:56 +0000 Subject: [PATCH 13/18] Update Extension.php --- includes/Extension.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/includes/Extension.php b/includes/Extension.php index 5c8841f..7fe9e0e 100644 --- a/includes/Extension.php +++ b/includes/Extension.php @@ -49,8 +49,10 @@ class Extension { $flags, Status $hookStatus ) { + $isMinor = $flags & EDIT_MINOR; + $config = new Config(); - if ( !$config->parseOnEdit ) return true; + if ( !$config->parseOnEdit && $isMinor ) return true; $revision = $renderedRevision->getRevision(); $title = $revision->getPageAsLinkTarget(); From 3d834a1ed57ceae234aa3fef568f4c505a5a1da2 Mon Sep 17 00:00:00 2001 From: paladox Date: Sun, 21 Mar 2021 00:19:00 +0000 Subject: [PATCH 14/18] Update Extension.php --- includes/Extension.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/Extension.php b/includes/Extension.php index 7fe9e0e..9f6c60a 100644 --- a/includes/Extension.php +++ b/includes/Extension.php @@ -52,7 +52,7 @@ class Extension { $isMinor = $flags & EDIT_MINOR; $config = new Config(); - if ( !$config->parseOnEdit && $isMinor ) return true; + if ( !$config->parseOnEdit || $isMinor ) return true; $revision = $renderedRevision->getRevision(); $title = $revision->getPageAsLinkTarget(); From dde4ef93418abc5baa84273ed506e123eb447f1c Mon Sep 17 00:00:00 2001 From: paladox Date: Sun, 21 Mar 2021 15:42:00 +0000 Subject: [PATCH 15/18] Update extension.json --- extension.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extension.json b/extension.json index eaba85b..12f5523 100644 --- a/extension.json +++ b/extension.json @@ -11,7 +11,7 @@ ], "type": "parserhook", "url": "https://www.mediawiki.org/wiki/Extension:LinkTitles", - "version": "6.1.0", + "version": "7.1.0", "license-name": "GPL-2.0+", "descriptionmsg": "linktitles-desc", "requires": { From 5d77ff103391b4245a6069a847aefc7ba6e1c4a4 Mon Sep 17 00:00:00 2001 From: paladox Date: Sun, 21 Mar 2021 15:42:52 +0000 Subject: [PATCH 16/18] Update NEWS.md --- NEWS.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/NEWS.md b/NEWS.md index 7a9da2f..8b609dc 100644 --- a/NEWS.md +++ b/NEWS.md @@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 For changes prior to version 6.0.0, please see [`NEWS.old`](news.old). +## [7.1.0][] - 2021-03-21 + +### Changed + +- The minimum required version of MediaWiki is now 1.35. + +### Fixed + +- Fixed compatibility with MediaWiki version 1.35+. + ## [7.0.0][] - 2020-12-23 ### Changed From 7d8aab21e49cde5188e0e1dc1c2fea545516294b Mon Sep 17 00:00:00 2001 From: paladox Date: Sun, 21 Mar 2021 15:44:24 +0000 Subject: [PATCH 17/18] Update NEWS.md --- NEWS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS.md b/NEWS.md index 8b609dc..2044b0a 100644 --- a/NEWS.md +++ b/NEWS.md @@ -15,7 +15,7 @@ For changes prior to version 6.0.0, please see [`NEWS.old`](news.old). ### Fixed -- Fixed compatibility with MediaWiki version 1.35+. +- Replace PageContentSave with MultiContentSave to fix compatibility with MediaWiki 1.35. ## [7.0.0][] - 2020-12-23 From c1277c3677263b661bf66cb71ce523884d862bef Mon Sep 17 00:00:00 2001 From: paladox Date: Sun, 21 Mar 2021 15:45:30 +0000 Subject: [PATCH 18/18] Update NEWS.md --- NEWS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS.md b/NEWS.md index 2044b0a..5dddf01 100644 --- a/NEWS.md +++ b/NEWS.md @@ -16,6 +16,8 @@ For changes prior to version 6.0.0, please see [`NEWS.old`](news.old). ### Fixed - Replace PageContentSave with MultiContentSave to fix compatibility with MediaWiki 1.35. +- The default value for wgLinkTitlesParseOnRender is change back to `false` as support + for MediaWiki 1.35+ is fixed. ## [7.0.0][] - 2020-12-23