92 ConvertibleTimestamp $ts,
94 LoggerInterface $logger
96 $pageLang = $parser->getTargetLanguage();
98 $cacheTTL = self::CACHE_TTL_BY_ID[$id] ?? -1;
99 if ( $cacheTTL > -1 ) {
100 $parser->
getOutput()->updateCacheExpiry( $cacheTTL );
109 self::applyUnitTimestampDeadline( $parser, $ts,
'M' );
111 return $pageLang->formatNumNoSeparators( $ts->format(
'm' ) );
112 case 'currentmonth1':
113 self::applyUnitTimestampDeadline( $parser, $ts,
'M' );
115 return $pageLang->formatNumNoSeparators( $ts->format(
'n' ) );
116 case 'currentmonthname':
117 self::applyUnitTimestampDeadline( $parser, $ts,
'M' );
119 return $pageLang->getMonthName( (
int)$ts->format(
'n' ) );
120 case 'currentmonthnamegen':
121 self::applyUnitTimestampDeadline( $parser, $ts,
'M' );
123 return $pageLang->getMonthNameGen( (
int)$ts->format(
'n' ) );
124 case 'currentmonthabbrev':
125 self::applyUnitTimestampDeadline( $parser, $ts,
'M' );
127 return $pageLang->getMonthAbbreviation( (
int)$ts->format(
'n' ) );
129 self::applyUnitTimestampDeadline( $parser, $ts,
'D' );
131 return $pageLang->formatNumNoSeparators( $ts->format(
'j' ) );
133 self::applyUnitTimestampDeadline( $parser, $ts,
'D' );
135 return $pageLang->formatNumNoSeparators( $ts->format(
'd' ) );
137 $localTs = self::makeTsLocal( $svcOptions, $ts );
138 self::applyUnitTimestampDeadline( $parser, $localTs,
'M' );
140 return $pageLang->formatNumNoSeparators( $localTs->format(
'm' ) );
142 $localTs = self::makeTsLocal( $svcOptions, $ts );
143 self::applyUnitTimestampDeadline( $parser, $localTs,
'M' );
145 return $pageLang->formatNumNoSeparators( $localTs->format(
'n' ) );
146 case 'localmonthname':
147 $localTs = self::makeTsLocal( $svcOptions, $ts );
148 self::applyUnitTimestampDeadline( $parser, $localTs,
'M' );
150 return $pageLang->getMonthName( (
int)$localTs->format(
'n' ) );
151 case 'localmonthnamegen':
152 $localTs = self::makeTsLocal( $svcOptions, $ts );
153 self::applyUnitTimestampDeadline( $parser, $localTs,
'M' );
155 return $pageLang->getMonthNameGen( (
int)$localTs->format(
'n' ) );
156 case 'localmonthabbrev':
157 $localTs = self::makeTsLocal( $svcOptions, $ts );
158 self::applyUnitTimestampDeadline( $parser, $localTs,
'M' );
160 return $pageLang->getMonthAbbreviation( (
int)$localTs->format(
'n' ) );
162 $localTs = self::makeTsLocal( $svcOptions, $ts );
163 self::applyUnitTimestampDeadline( $parser, $localTs,
'D' );
165 return $pageLang->formatNumNoSeparators( $localTs->format(
'j' ) );
167 $localTs = self::makeTsLocal( $svcOptions, $ts );
168 self::applyUnitTimestampDeadline( $parser, $localTs,
'D' );
170 return $pageLang->formatNumNoSeparators( $localTs->format(
'd' ) );
174 case 'fullpagenamee':
178 case 'rootpagenamee':
180 case 'basepagenamee':
182 case 'talkpagenamee':
183 case 'subjectpagename':
184 case 'subjectpagenamee':
190 case 'revisionmonth':
191 case 'revisionmonth1':
193 case 'revisiontimestamp':
196 case 'namespacenumber':
200 case 'subjectspacee':
201 case 'cascadingsources':
202 # First argument of the corresponding parser function
203 # (second argument of the PHP implementation) is
206 # Note that for many of these {{FOO}} is subtly different
207 # from {{FOO:{{PAGENAME}}}}, so we can't pass $title here
208 # we have to explicitly use the "no arguments" form of the
209 # parser function by passing `null` to indicate a missing
210 # argument (which then defaults to the current page title).
211 return CoreParserFunctions::$id( $parser,
null );
214 case 'currentdayname':
215 self::applyUnitTimestampDeadline( $parser, $ts,
'D' );
217 return $pageLang->getWeekdayName( (
int)$ts->format(
'w' ) + 1 );
219 self::applyUnitTimestampDeadline( $parser, $ts,
'Y' );
221 return $pageLang->formatNumNoSeparators( $ts->format(
'Y' ) );
223 return $pageLang->time( $ts->getTimestamp( TS_MW ),
false,
false );
225 self::applyUnitTimestampDeadline( $parser, $ts,
'H' );
227 return $pageLang->formatNumNoSeparators( $ts->format(
'H' ) );
229 self::applyUnitTimestampDeadline( $parser, $ts,
'D' );
232 return $pageLang->formatNum( (
int)$ts->format(
'W' ) );
234 self::applyUnitTimestampDeadline( $parser, $ts,
'D' );
236 return $pageLang->formatNum( $ts->format(
'w' ) );
238 $localTs = self::makeTsLocal( $svcOptions, $ts );
239 self::applyUnitTimestampDeadline( $parser, $localTs,
'D' );
241 return $pageLang->getWeekdayName( (
int)$localTs->format(
'w' ) + 1 );
243 $localTs = self::makeTsLocal( $svcOptions, $ts );
244 self::applyUnitTimestampDeadline( $parser, $localTs,
'Y' );
246 return $pageLang->formatNumNoSeparators( $localTs->format(
'Y' ) );
248 $localTs = self::makeTsLocal( $svcOptions, $ts );
250 return $pageLang->time(
251 $localTs->format(
'YmdHis' ),
256 $localTs = self::makeTsLocal( $svcOptions, $ts );
257 self::applyUnitTimestampDeadline( $parser, $localTs,
'H' );
259 return $pageLang->formatNumNoSeparators( $localTs->format(
'H' ) );
261 $localTs = self::makeTsLocal( $svcOptions, $ts );
262 self::applyUnitTimestampDeadline( $parser, $localTs,
'D' );
265 return $pageLang->formatNum( (
int)$localTs->format(
'W' ) );
267 $localTs = self::makeTsLocal( $svcOptions, $ts );
268 self::applyUnitTimestampDeadline( $parser, $localTs,
'D' );
270 return $pageLang->formatNum( $localTs->format(
'w' ) );
271 case 'numberofarticles':
272 case 'numberoffiles':
273 case 'numberofusers':
274 case 'numberofactiveusers':
275 case 'numberofpages':
276 case 'numberofadmins':
277 case 'numberofedits':
278 # second argument is 'raw'; magic variables are "not raw"
279 return CoreParserFunctions::$id( $parser,
null );
280 case 'currenttimestamp':
281 return $ts->getTimestamp( TS_MW );
282 case 'localtimestamp':
283 $localTs = self::makeTsLocal( $svcOptions, $ts );
285 return $localTs->format(
'YmdHis' );
286 case 'currentversion':
287 return SpecialVersion::getVersion();
300 case 'directionmark':
301 return $pageLang->getDirMark();
302 case 'contentlanguage':
305 return $pageLang->getCode();
310 return $pageLang->getCode();
315 # magic variables are the same as empty/default first argument
316 return CoreParserFunctions::$id( $parser );