diff options
Diffstat (limited to 'Vote.php')
-rw-r--r-- | Vote.php | 21 |
1 files changed, 21 insertions, 0 deletions
@@ -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('/(?<!<nowiki>)(?<!<pre>)~~~~/', "$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 <vote> 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 "<span class=error>$error</span>"; } + +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)"; +} |