From 166d0fbe2f0355d81669b5fde9c2a9bc576da88a Mon Sep 17 00:00:00 2001 From: Martin Fischer Date: Sat, 8 Oct 2022 20:12:14 +0200 Subject: add workaround to expand signatures within --- Vote.php | 21 +++++++++++++++++++++ extension.json | 3 ++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/Vote.php b/Vote.php index 2eae79d..cbb1c62 100644 --- a/Vote.php +++ b/Vote.php @@ -8,6 +8,16 @@ class VoteHooks { $parser->setHook( 'vote', [ self::class, 'renderVoteTag' ] ); } + public static function onParserPreSaveTransformComplete( Parser $parser, string &$text ) { + // workaround for https://phabricator.wikimedia.org/T319221 + $sigText = $parser->getUserSig(RequestContext::getMain()->getUser()); + $datetime = getFormattedTimestamp($parser); + $text = preg_replace('/(?)(?)~~~~/', "$sigText $datetime", $text); + // NOTE: this regex obviously matches false positives, however since + // it's quite uncommon for ~~~~ to occur in wiki pages this is deemed good enough + // until T319221 is addressed and this workaround is no longer necessary + } + // Render public static function renderVoteTag( $input, array $args, Parser $parser, PPFrame $frame ) { @@ -322,3 +332,14 @@ function formatError($error) { // The CSS class is provided by MediaWiki. return "$error"; } + +function getFormattedTimestamp($parser) { + // This function exists solely because of the onParserPreSaveTransformComplete workaround for https://phabricator.wikimedia.org/T319221. + // It is supposed to mirror the behavior of https://gerrit.wikimedia.org/r/plugins/gitiles/mediawiki/core/+/refs/tags/1.38.4/includes/parser/Parser.php#4575. + + $ts = $parser->mOptions->getTimestamp(); + $timestamp = MWTimestamp::getLocalInstance( $ts ); + $ts = $timestamp->format( 'YmdHis' ); + $tzMsg = $timestamp->getTimezoneMessage()->inContentLanguage()->text(); + return $parser->getContentLanguage()->timeanddate( $ts, false, false ) . " ($tzMsg)"; +} diff --git a/extension.json b/extension.json index 4cd2418..bdea38d 100644 --- a/extension.json +++ b/extension.json @@ -19,7 +19,8 @@ "InsertVote": "SpecialInsertVote" }, "Hooks": { - "ParserFirstCallInit": "VoteHooks::onParserFirstCallInit" + "ParserFirstCallInit": "VoteHooks::onParserFirstCallInit", + "ParserPreSaveTransformComplete": "VoteHooks::onParserPreSaveTransformComplete" }, "ResourceModules": { "ext.vote-css": { -- cgit v1.2.3