summaryrefslogtreecommitdiff
path: root/Vote.php
diff options
context:
space:
mode:
Diffstat (limited to 'Vote.php')
-rw-r--r--Vote.php21
1 files changed, 21 insertions, 0 deletions
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('/(?<!<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)";
+}