MediaWiki  master
CoreMagicVariables.php
Go to the documentation of this file.
1 <?php
25 use Psr\Log\LoggerInterface;
26 use Wikimedia\Timestamp\ConvertibleTimestamp;
27 
34 
47  public static function expand(
48  // Fundamental options
49  Parser $parser,
50  string $id,
51  // Context passed over from the parser
52  ConvertibleTimestamp $ts,
53  ServiceOptions $svcOptions,
54  LoggerInterface $logger
55  ): ?string {
56  $pageLang = $parser->getTargetLanguage();
57 
58  switch ( $id ) {
59  case '!':
60  return '|';
61  case '=':
62  return '=';
63  case 'currentmonth':
64  return $pageLang->formatNumNoSeparators( $ts->format( 'm' ) );
65  case 'currentmonth1':
66  return $pageLang->formatNumNoSeparators( $ts->format( 'n' ) );
67  case 'currentmonthname':
68  return $pageLang->getMonthName( (int)$ts->format( 'n' ) );
69  case 'currentmonthnamegen':
70  return $pageLang->getMonthNameGen( (int)$ts->format( 'n' ) );
71  case 'currentmonthabbrev':
72  return $pageLang->getMonthAbbreviation( (int)$ts->format( 'n' ) );
73  case 'currentday':
74  return $pageLang->formatNumNoSeparators( $ts->format( 'j' ) );
75  case 'currentday2':
76  return $pageLang->formatNumNoSeparators( $ts->format( 'd' ) );
77  case 'localmonth':
78  return $pageLang->formatNumNoSeparators( self::makeTsLocal( $svcOptions, $ts )->format( 'm' ) );
79  case 'localmonth1':
80  return $pageLang->formatNumNoSeparators( self::makeTsLocal( $svcOptions, $ts )->format( 'n' ) );
81  case 'localmonthname':
82  return $pageLang->getMonthName( (int)self::makeTsLocal( $svcOptions, $ts )->format( 'n' ) );
83  case 'localmonthnamegen':
84  return $pageLang->getMonthNameGen( (int)self::makeTsLocal( $svcOptions, $ts )->format( 'n' ) );
85  case 'localmonthabbrev':
86  return $pageLang->getMonthAbbreviation( (int)self::makeTsLocal( $svcOptions, $ts )->format( 'n' ) );
87  case 'localday':
88  return $pageLang->formatNumNoSeparators( self::makeTsLocal( $svcOptions, $ts )->format( 'j' ) );
89  case 'localday2':
90  return $pageLang->formatNumNoSeparators( self::makeTsLocal( $svcOptions, $ts )->format( 'd' ) );
91  case 'pagename':
92  case 'pagenamee':
93  case 'fullpagename':
94  case 'fullpagenamee':
95  case 'subpagename':
96  case 'subpagenamee':
97  case 'rootpagename':
98  case 'rootpagenamee':
99  case 'basepagename':
100  case 'basepagenamee':
101  case 'talkpagename':
102  case 'talkpagenamee':
103  case 'subjectpagename':
104  case 'subjectpagenamee':
105  case 'pageid':
106  case 'revisionid':
107  case 'revisionuser':
108  case 'revisionday':
109  case 'revisionday2':
110  case 'revisionmonth':
111  case 'revisionmonth1':
112  case 'revisionyear':
113  case 'revisiontimestamp':
114  case 'namespace':
115  case 'namespacee':
116  case 'namespacenumber':
117  case 'talkspace':
118  case 'talkspacee':
119  case 'subjectspace':
120  case 'subjectspacee':
121  case 'cascadingsources':
122  # First argument of the corresponding parser function
123  # (second argument of the PHP implementation) is
124  # "title".
125 
126  # Note that for many of these {{FOO}} is subtly different
127  # from {{FOO:{{PAGENAME}}}}, so we can't pass $title here
128  # we have to explicitly use the "no arguments" form of the
129  # parser function by passing `null` to indicate a missing
130  # argument (which then defaults to the current page title).
131  return CoreParserFunctions::$id( $parser, null );
132  case 'revisionsize':
133  return (string)$parser->getRevisionSize();
134  case 'currentdayname':
135  return $pageLang->getWeekdayName( (int)$ts->format( 'w' ) + 1 );
136  case 'currentyear':
137  return $pageLang->formatNumNoSeparators( $ts->format( 'Y' ) );
138  case 'currenttime':
139  return $pageLang->time( $ts->getTimestamp( TS_MW ), false, false );
140  case 'currenthour':
141  return $pageLang->formatNumNoSeparators( $ts->format( 'H' ) );
142  case 'currentweek':
143  // @bug T6594 PHP5 has it zero padded, PHP4 does not, cast to
144  // int to remove the padding
145  return $pageLang->formatNum( (int)$ts->format( 'W' ) );
146  case 'currentdow':
147  return $pageLang->formatNum( $ts->format( 'w' ) );
148  case 'localdayname':
149  return $pageLang->getWeekdayName(
150  (int)self::makeTsLocal( $svcOptions, $ts )->format( 'w' ) + 1
151  );
152  case 'localyear':
153  return $pageLang->formatNumNoSeparators( self::makeTsLocal( $svcOptions, $ts )->format( 'Y' ) );
154  case 'localtime':
155  return $pageLang->time(
156  self::makeTsLocal( $svcOptions, $ts )->format( 'YmdHis' ),
157  false,
158  false
159  );
160  case 'localhour':
161  return $pageLang->formatNumNoSeparators( self::makeTsLocal( $svcOptions, $ts )->format( 'H' ) );
162  case 'localweek':
163  // @bug T6594 PHP5 has it zero padded, PHP4 does not, cast to
164  // int to remove the padding
165  return $pageLang->formatNum( (int)self::makeTsLocal( $svcOptions, $ts )->format( 'W' ) );
166  case 'localdow':
167  return $pageLang->formatNum( self::makeTsLocal( $svcOptions, $ts )->format( 'w' ) );
168  case 'numberofarticles':
169  case 'numberoffiles':
170  case 'numberofusers':
171  case 'numberofactiveusers':
172  case 'numberofpages':
173  case 'numberofadmins':
174  case 'numberofedits':
175  # second argument is 'raw'; magic variables are "not raw"
176  return CoreParserFunctions::$id( $parser, null );
177  case 'currenttimestamp':
178  return $ts->getTimestamp( TS_MW );
179  case 'localtimestamp':
180  return self::makeTsLocal( $svcOptions, $ts )->format( 'YmdHis' );
181  case 'currentversion':
183  case 'articlepath':
184  return (string)$svcOptions->get( MainConfigNames::ArticlePath );
185  case 'sitename':
186  return (string)$svcOptions->get( MainConfigNames::Sitename );
187  case 'server':
188  return (string)$svcOptions->get( MainConfigNames::Server );
189  case 'servername':
190  return (string)$svcOptions->get( MainConfigNames::ServerName );
191  case 'scriptpath':
192  return (string)$svcOptions->get( MainConfigNames::ScriptPath );
193  case 'stylepath':
194  return (string)$svcOptions->get( MainConfigNames::StylePath );
195  case 'directionmark':
196  return $pageLang->getDirMark();
197  case 'contentlanguage':
198  return $parser->getContentLanguage()->getCode();
199  case 'pagelanguage':
200  return $pageLang->getCode();
201  default:
202  // This is not one of the core magic variables
203  return null;
204  }
205  }
206 
214  private static function makeTsLocal( $svcOptions, $ts ) {
215  $localtimezone = $svcOptions->get( MainConfigNames::Localtimezone );
216  $ts->setTimezone( $localtimezone );
217  return $ts;
218  }
219 }
Expansions of core magic variables, used by the parser.
static expand(Parser $parser, string $id, ConvertibleTimestamp $ts, ServiceOptions $svcOptions, LoggerInterface $logger)
Expand the magic variable given by $index.
A class for passing options to services.
A class containing constants representing the names of configuration variables.
PHP Parser - Processes wiki markup (which uses a more user-friendly syntax, such as "[[link]]" for ma...
Definition: Parser.php:107
getRevisionSize()
Get the size of the revision.
Definition: Parser.php:6086
getContentLanguage()
Get the content language that this Parser is using.
Definition: Parser.php:1227
static getVersion( $flags='', $lang=null)
Return a string of the MediaWiki version with Git revision if available.