MediaWiki  1.33.0
CoreParserFunctions.php
Go to the documentation of this file.
1 <?php
24 
34  public static function register( $parser ) {
36 
37  # Syntax for arguments (see Parser::setFunctionHook):
38  # "name for lookup in localized magic words array",
39  # function callback,
40  # optional Parser::SFH_NO_HASH to omit the hash from calls (e.g. {{int:...}}
41  # instead of {{#int:...}})
42  $noHashFunctions = [
43  'ns', 'nse', 'urlencode', 'lcfirst', 'ucfirst', 'lc', 'uc',
44  'localurl', 'localurle', 'fullurl', 'fullurle', 'canonicalurl',
45  'canonicalurle', 'formatnum', 'grammar', 'gender', 'plural', 'bidi',
46  'numberofpages', 'numberofusers', 'numberofactiveusers',
47  'numberofarticles', 'numberoffiles', 'numberofadmins',
48  'numberingroup', 'numberofedits', 'language',
49  'padleft', 'padright', 'anchorencode', 'defaultsort', 'filepath',
50  'pagesincategory', 'pagesize', 'protectionlevel', 'protectionexpiry',
51  'namespacee', 'namespacenumber', 'talkspace', 'talkspacee',
52  'subjectspace', 'subjectspacee', 'pagename', 'pagenamee',
53  'fullpagename', 'fullpagenamee', 'rootpagename', 'rootpagenamee',
54  'basepagename', 'basepagenamee', 'subpagename', 'subpagenamee',
55  'talkpagename', 'talkpagenamee', 'subjectpagename',
56  'subjectpagenamee', 'pageid', 'revisionid', 'revisionday',
57  'revisionday2', 'revisionmonth', 'revisionmonth1', 'revisionyear',
58  'revisiontimestamp', 'revisionuser', 'cascadingsources',
59  ];
60  foreach ( $noHashFunctions as $func ) {
61  $parser->setFunctionHook( $func, [ __CLASS__, $func ], Parser::SFH_NO_HASH );
62  }
63 
64  $parser->setFunctionHook(
65  'namespace',
66  [ __CLASS__, 'mwnamespace' ],
68  );
69  $parser->setFunctionHook( 'int', [ __CLASS__, 'intFunction' ], Parser::SFH_NO_HASH );
70  $parser->setFunctionHook( 'special', [ __CLASS__, 'special' ] );
71  $parser->setFunctionHook( 'speciale', [ __CLASS__, 'speciale' ] );
72  $parser->setFunctionHook( 'tag', [ __CLASS__, 'tagObj' ], Parser::SFH_OBJECT_ARGS );
73  $parser->setFunctionHook( 'formatdate', [ __CLASS__, 'formatDate' ] );
74 
75  if ( $wgAllowDisplayTitle ) {
76  $parser->setFunctionHook(
77  'displaytitle',
78  [ __CLASS__, 'displaytitle' ],
80  );
81  }
83  $parser->setFunctionHook(
84  'pagesinnamespace',
85  [ __CLASS__, 'pagesinnamespace' ],
87  );
88  }
89  }
90 
96  public static function intFunction( $parser, $part1 = '' /*, ... */ ) {
97  if ( strval( $part1 ) !== '' ) {
98  $args = array_slice( func_get_args(), 2 );
99  $message = wfMessage( $part1, $args )
100  ->inLanguage( $parser->getOptions()->getUserLangObj() );
101  return [ $message->plain(), 'noparse' => false ];
102  } else {
103  return [ 'found' => false ];
104  }
105  }
106 
114  public static function formatDate( $parser, $date, $defaultPref = null ) {
115  $lang = $parser->getFunctionLang();
117 
118  $date = trim( $date );
119 
120  $pref = $parser->getOptions()->getDateFormat();
121 
122  // Specify a different default date format other than the normal default
123  // if the user has 'default' for their setting
124  if ( $pref == 'default' && $defaultPref ) {
125  $pref = $defaultPref;
126  }
127 
128  $date = $df->reformat( $pref, $date, [ 'match-whole' ] );
129  return $date;
130  }
131 
132  public static function ns( $parser, $part1 = '' ) {
133  if ( intval( $part1 ) || $part1 == "0" ) {
134  $index = intval( $part1 );
135  } else {
136  $index = $parser->getContentLanguage()->getNsIndex( str_replace( ' ', '_', $part1 ) );
137  }
138  if ( $index !== false ) {
139  return $parser->getContentLanguage()->getFormattedNsText( $index );
140  } else {
141  return [ 'found' => false ];
142  }
143  }
144 
145  public static function nse( $parser, $part1 = '' ) {
146  $ret = self::ns( $parser, $part1 );
147  if ( is_string( $ret ) ) {
148  $ret = wfUrlencode( str_replace( ' ', '_', $ret ) );
149  }
150  return $ret;
151  }
152 
165  public static function urlencode( $parser, $s = '', $arg = null ) {
166  static $magicWords = null;
167  if ( is_null( $magicWords ) ) {
168  $magicWords =
169  $parser->getMagicWordFactory()->newArray( [ 'url_path', 'url_query', 'url_wiki' ] );
170  }
171  switch ( $magicWords->matchStartToEnd( $arg ) ) {
172  // Encode as though it's a wiki page, '_' for ' '.
173  case 'url_wiki':
174  $func = 'wfUrlencode';
175  $s = str_replace( ' ', '_', $s );
176  break;
177 
178  // Encode for an HTTP Path, '%20' for ' '.
179  case 'url_path':
180  $func = 'rawurlencode';
181  break;
182 
183  // Encode for HTTP query, '+' for ' '.
184  case 'url_query':
185  default:
186  $func = 'urlencode';
187  }
188  // See T105242, where the choice to kill markers and various
189  // other options were discussed.
190  return $func( $parser->killMarkers( $s ) );
191  }
192 
193  public static function lcfirst( $parser, $s = '' ) {
194  return $parser->getContentLanguage()->lcfirst( $s );
195  }
196 
197  public static function ucfirst( $parser, $s = '' ) {
198  return $parser->getContentLanguage()->ucfirst( $s );
199  }
200 
206  public static function lc( $parser, $s = '' ) {
207  return $parser->markerSkipCallback( $s, [ $parser->getContentLanguage(), 'lc' ] );
208  }
209 
215  public static function uc( $parser, $s = '' ) {
216  return $parser->markerSkipCallback( $s, [ $parser->getContentLanguage(), 'uc' ] );
217  }
218 
219  public static function localurl( $parser, $s = '', $arg = null ) {
220  return self::urlFunction( 'getLocalURL', $s, $arg );
221  }
222 
223  public static function localurle( $parser, $s = '', $arg = null ) {
224  $temp = self::urlFunction( 'getLocalURL', $s, $arg );
225  if ( !is_string( $temp ) ) {
226  return $temp;
227  } else {
228  return htmlspecialchars( $temp );
229  }
230  }
231 
232  public static function fullurl( $parser, $s = '', $arg = null ) {
233  return self::urlFunction( 'getFullURL', $s, $arg );
234  }
235 
236  public static function fullurle( $parser, $s = '', $arg = null ) {
237  $temp = self::urlFunction( 'getFullURL', $s, $arg );
238  if ( !is_string( $temp ) ) {
239  return $temp;
240  } else {
241  return htmlspecialchars( $temp );
242  }
243  }
244 
245  public static function canonicalurl( $parser, $s = '', $arg = null ) {
246  return self::urlFunction( 'getCanonicalURL', $s, $arg );
247  }
248 
249  public static function canonicalurle( $parser, $s = '', $arg = null ) {
250  $temp = self::urlFunction( 'getCanonicalURL', $s, $arg );
251  if ( !is_string( $temp ) ) {
252  return $temp;
253  } else {
254  return htmlspecialchars( $temp );
255  }
256  }
257 
258  public static function urlFunction( $func, $s = '', $arg = null ) {
260  # Due to order of execution of a lot of bits, the values might be encoded
261  # before arriving here; if that's true, then the title can't be created
262  # and the variable will fail. If we can't get a decent title from the first
263  # attempt, url-decode and try for a second.
264  if ( is_null( $title ) ) {
265  $title = Title::newFromURL( urldecode( $s ) );
266  }
267  if ( !is_null( $title ) ) {
268  # Convert NS_MEDIA -> NS_FILE
269  if ( $title->inNamespace( NS_MEDIA ) ) {
270  $title = Title::makeTitle( NS_FILE, $title->getDBkey() );
271  }
272  if ( !is_null( $arg ) ) {
273  $text = $title->$func( $arg );
274  } else {
275  $text = $title->$func();
276  }
277  return $text;
278  } else {
279  return [ 'found' => false ];
280  }
281  }
282 
289  public static function formatnum( $parser, $num = '', $arg = null ) {
290  if ( self::matchAgainstMagicword( $parser->getMagicWordFactory(), 'rawsuffix', $arg ) ) {
291  $func = [ $parser->getFunctionLang(), 'parseFormattedNumber' ];
292  } elseif (
293  self::matchAgainstMagicword( $parser->getMagicWordFactory(), 'nocommafysuffix', $arg )
294  ) {
295  $func = [ $parser->getFunctionLang(), 'formatNumNoSeparators' ];
296  } else {
297  $func = [ $parser->getFunctionLang(), 'formatNum' ];
298  }
299  return $parser->markerSkipCallback( $num, $func );
300  }
301 
308  public static function grammar( $parser, $case = '', $word = '' ) {
309  $word = $parser->killMarkers( $word );
310  return $parser->getFunctionLang()->convertGrammar( $word, $case );
311  }
312 
318  public static function gender( $parser, $username ) {
319  $forms = array_slice( func_get_args(), 2 );
320 
321  // Some shortcuts to avoid loading user data unnecessarily
322  if ( count( $forms ) === 0 ) {
323  return '';
324  } elseif ( count( $forms ) === 1 ) {
325  return $forms[0];
326  }
327 
328  $username = trim( $username );
329 
330  $gender = User::getDefaultOption( 'gender' );
331 
332  // allow prefix and normalize (e.g. "&#42;foo" -> "*foo" ).
334 
335  if ( $title && $title->inNamespace( NS_USER ) ) {
336  $username = $title->getText();
337  }
338 
339  // check parameter, or use the ParserOptions if in interface message
341  $genderCache = MediaWikiServices::getInstance()->getGenderCache();
342  if ( $user ) {
343  $gender = $genderCache->getGenderOf( $user, __METHOD__ );
344  } elseif ( $username === '' && $parser->getOptions()->getInterfaceMessage() ) {
345  $gender = $genderCache->getGenderOf( $parser->getOptions()->getUser(), __METHOD__ );
346  }
347  $ret = $parser->getFunctionLang()->gender( $gender, $forms );
348  return $ret;
349  }
350 
356  public static function plural( $parser, $text = '' ) {
357  $forms = array_slice( func_get_args(), 2 );
358  $text = $parser->getFunctionLang()->parseFormattedNumber( $text );
359  settype( $text, ctype_digit( $text ) ? 'int' : 'float' );
360  return $parser->getFunctionLang()->convertPlural( $text, $forms );
361  }
362 
368  public static function bidi( $parser, $text = '' ) {
369  return $parser->getFunctionLang()->embedBidi( $text );
370  }
371 
381  public static function displaytitle( $parser, $text = '', $uarg = '' ) {
383 
384  static $magicWords = null;
385  if ( is_null( $magicWords ) ) {
386  $magicWords = $parser->getMagicWordFactory()->newArray(
387  [ 'displaytitle_noerror', 'displaytitle_noreplace' ] );
388  }
389  $arg = $magicWords->matchStartToEnd( $uarg );
390 
391  // parse a limited subset of wiki markup (just the single quote items)
392  $text = $parser->doQuotes( $text );
393 
394  // remove stripped text (e.g. the UNIQ-QINU stuff) that was generated by tag extensions/whatever
395  $text = $parser->killMarkers( $text );
396 
397  // list of disallowed tags for DISPLAYTITLE
398  // these will be escaped even though they are allowed in normal wiki text
399  $bad = [ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'blockquote', 'ol', 'ul', 'li', 'hr',
400  'table', 'tr', 'th', 'td', 'dl', 'dd', 'caption', 'p', 'ruby', 'rb', 'rt', 'rtc', 'rp', 'br' ];
401 
402  // disallow some styles that could be used to bypass $wgRestrictDisplayTitle
403  if ( $wgRestrictDisplayTitle ) {
404  $htmlTagsCallback = function ( &$params ) {
405  $decoded = Sanitizer::decodeTagAttributes( $params );
406 
407  if ( isset( $decoded['style'] ) ) {
408  // this is called later anyway, but we need it right now for the regexes below to be safe
409  // calling it twice doesn't hurt
410  $decoded['style'] = Sanitizer::checkCss( $decoded['style'] );
411 
412  if ( preg_match( '/(display|user-select|visibility)\s*:/i', $decoded['style'] ) ) {
413  $decoded['style'] = '/* attempt to bypass $wgRestrictDisplayTitle */';
414  }
415  }
416 
417  $params = Sanitizer::safeEncodeTagAttributes( $decoded );
418  };
419  } else {
420  $htmlTagsCallback = null;
421  }
422 
423  // only requested titles that normalize to the actual title are allowed through
424  // if $wgRestrictDisplayTitle is true (it is by default)
425  // mimic the escaping process that occurs in OutputPage::setPageTitle
426  $text = Sanitizer::normalizeCharReferences( Sanitizer::removeHTMLtags(
427  $text,
428  $htmlTagsCallback,
429  [],
430  [],
431  $bad
432  ) );
433  $title = Title::newFromText( Sanitizer::stripAllTags( $text ) );
434 
435  if ( !$wgRestrictDisplayTitle ||
436  ( $title instanceof Title
437  && !$title->hasFragment()
438  && $title->equals( $parser->mTitle ) )
439  ) {
440  $old = $parser->mOutput->getProperty( 'displaytitle' );
441  if ( $old === false || $arg !== 'displaytitle_noreplace' ) {
442  $parser->mOutput->setDisplayTitle( $text );
443  }
444  if ( $old !== false && $old !== $text && !$arg ) {
445  $converter = $parser->getTargetLanguage()->getConverter();
446  return '<span class="error">' .
447  wfMessage( 'duplicate-displaytitle',
448  // Message should be parsed, but these params should only be escaped.
449  $converter->markNoConversion( wfEscapeWikiText( $old ) ),
450  $converter->markNoConversion( wfEscapeWikiText( $text ) )
451  )->inContentLanguage()->text() .
452  '</span>';
453  } else {
454  return '';
455  }
456  } else {
457  $parser->getOutput()->addWarning(
458  wfMessage( 'restricted-displaytitle',
459  // Message should be parsed, but this param should only be escaped.
460  wfEscapeWikiText( $text )
461  )->text()
462  );
463  $parser->addTrackingCategory( 'restricted-displaytitle-ignored' );
464  }
465  }
466 
476  private static function matchAgainstMagicword(
477  MagicWordFactory $magicWordFactory, $magicword, $value
478  ) {
479  $value = trim( strval( $value ) );
480  if ( $value === '' ) {
481  return false;
482  }
483  $mwObject = $magicWordFactory->get( $magicword );
484  return $mwObject->matchStartToEnd( $value );
485  }
486 
496  public static function formatRaw(
497  $num, $raw, $language, MagicWordFactory $magicWordFactory = null
498  ) {
499  if ( $raw !== null && !$magicWordFactory ) {
500  $magicWordFactory = MediaWikiServices::getInstance()->getMagicWordFactory();
501  }
502  if (
503  $raw !== null && self::matchAgainstMagicword( $magicWordFactory, 'rawsuffix', $raw )
504  ) {
505  return $num;
506  } else {
507  return $language->formatNum( $num );
508  }
509  }
510 
511  public static function numberofpages( $parser, $raw = null ) {
512  return self::formatRaw( SiteStats::pages(), $raw, $parser->getFunctionLang() );
513  }
514 
515  public static function numberofusers( $parser, $raw = null ) {
516  return self::formatRaw( SiteStats::users(), $raw, $parser->getFunctionLang() );
517  }
518  public static function numberofactiveusers( $parser, $raw = null ) {
519  return self::formatRaw( SiteStats::activeUsers(), $raw, $parser->getFunctionLang() );
520  }
521 
522  public static function numberofarticles( $parser, $raw = null ) {
523  return self::formatRaw( SiteStats::articles(), $raw, $parser->getFunctionLang() );
524  }
525 
526  public static function numberoffiles( $parser, $raw = null ) {
527  return self::formatRaw( SiteStats::images(), $raw, $parser->getFunctionLang() );
528  }
529 
530  public static function numberofadmins( $parser, $raw = null ) {
531  return self::formatRaw(
532  SiteStats::numberingroup( 'sysop' ),
533  $raw,
534  $parser->getFunctionLang()
535  );
536  }
537 
538  public static function numberofedits( $parser, $raw = null ) {
539  return self::formatRaw( SiteStats::edits(), $raw, $parser->getFunctionLang() );
540  }
541 
542  public static function pagesinnamespace( $parser, $namespace = 0, $raw = null ) {
543  return self::formatRaw(
544  SiteStats::pagesInNs( intval( $namespace ) ),
545  $raw,
546  $parser->getFunctionLang()
547  );
548  }
549  public static function numberingroup( $parser, $name = '', $raw = null ) {
550  return self::formatRaw(
551  SiteStats::numberingroup( strtolower( $name ) ),
552  $raw,
553  $parser->getFunctionLang()
554  );
555  }
556 
566  public static function mwnamespace( $parser, $title = null ) {
568  if ( is_null( $t ) ) {
569  return '';
570  }
571  return str_replace( '_', ' ', $t->getNsText() );
572  }
573  public static function namespacee( $parser, $title = null ) {
575  if ( is_null( $t ) ) {
576  return '';
577  }
578  return wfUrlencode( $t->getNsText() );
579  }
580  public static function namespacenumber( $parser, $title = null ) {
582  if ( is_null( $t ) ) {
583  return '';
584  }
585  return $t->getNamespace();
586  }
587  public static function talkspace( $parser, $title = null ) {
589  if ( is_null( $t ) || !$t->canHaveTalkPage() ) {
590  return '';
591  }
592  return str_replace( '_', ' ', $t->getTalkNsText() );
593  }
594  public static function talkspacee( $parser, $title = null ) {
596  if ( is_null( $t ) || !$t->canHaveTalkPage() ) {
597  return '';
598  }
599  return wfUrlencode( $t->getTalkNsText() );
600  }
601  public static function subjectspace( $parser, $title = null ) {
603  if ( is_null( $t ) ) {
604  return '';
605  }
606  return str_replace( '_', ' ', $t->getSubjectNsText() );
607  }
608  public static function subjectspacee( $parser, $title = null ) {
610  if ( is_null( $t ) ) {
611  return '';
612  }
613  return wfUrlencode( $t->getSubjectNsText() );
614  }
615 
623  public static function pagename( $parser, $title = null ) {
625  if ( is_null( $t ) ) {
626  return '';
627  }
628  return wfEscapeWikiText( $t->getText() );
629  }
630  public static function pagenamee( $parser, $title = null ) {
632  if ( is_null( $t ) ) {
633  return '';
634  }
635  return wfEscapeWikiText( $t->getPartialURL() );
636  }
637  public static function fullpagename( $parser, $title = null ) {
639  if ( is_null( $t ) || !$t->canHaveTalkPage() ) {
640  return '';
641  }
642  return wfEscapeWikiText( $t->getPrefixedText() );
643  }
644  public static function fullpagenamee( $parser, $title = null ) {
646  if ( is_null( $t ) || !$t->canHaveTalkPage() ) {
647  return '';
648  }
649  return wfEscapeWikiText( $t->getPrefixedURL() );
650  }
651  public static function subpagename( $parser, $title = null ) {
653  if ( is_null( $t ) ) {
654  return '';
655  }
656  return wfEscapeWikiText( $t->getSubpageText() );
657  }
658  public static function subpagenamee( $parser, $title = null ) {
660  if ( is_null( $t ) ) {
661  return '';
662  }
663  return wfEscapeWikiText( $t->getSubpageUrlForm() );
664  }
665  public static function rootpagename( $parser, $title = null ) {
667  if ( is_null( $t ) ) {
668  return '';
669  }
670  return wfEscapeWikiText( $t->getRootText() );
671  }
672  public static function rootpagenamee( $parser, $title = null ) {
674  if ( is_null( $t ) ) {
675  return '';
676  }
677  return wfEscapeWikiText( wfUrlencode( str_replace( ' ', '_', $t->getRootText() ) ) );
678  }
679  public static function basepagename( $parser, $title = null ) {
681  if ( is_null( $t ) ) {
682  return '';
683  }
684  return wfEscapeWikiText( $t->getBaseText() );
685  }
686  public static function basepagenamee( $parser, $title = null ) {
688  if ( is_null( $t ) ) {
689  return '';
690  }
691  return wfEscapeWikiText( wfUrlencode( str_replace( ' ', '_', $t->getBaseText() ) ) );
692  }
693  public static function talkpagename( $parser, $title = null ) {
695  if ( is_null( $t ) || !$t->canHaveTalkPage() ) {
696  return '';
697  }
698  return wfEscapeWikiText( $t->getTalkPage()->getPrefixedText() );
699  }
700  public static function talkpagenamee( $parser, $title = null ) {
702  if ( is_null( $t ) || !$t->canHaveTalkPage() ) {
703  return '';
704  }
705  return wfEscapeWikiText( $t->getTalkPage()->getPrefixedURL() );
706  }
707  public static function subjectpagename( $parser, $title = null ) {
709  if ( is_null( $t ) ) {
710  return '';
711  }
712  return wfEscapeWikiText( $t->getSubjectPage()->getPrefixedText() );
713  }
714  public static function subjectpagenamee( $parser, $title = null ) {
716  if ( is_null( $t ) ) {
717  return '';
718  }
719  return wfEscapeWikiText( $t->getSubjectPage()->getPrefixedURL() );
720  }
721 
732  public static function pagesincategory( $parser, $name = '', $arg1 = null, $arg2 = null ) {
733  static $magicWords = null;
734  if ( is_null( $magicWords ) ) {
735  $magicWords = $parser->getMagicWordFactory()->newArray( [
736  'pagesincategory_all',
737  'pagesincategory_pages',
738  'pagesincategory_subcats',
739  'pagesincategory_files'
740  ] );
741  }
742  static $cache = [];
743 
744  // split the given option to its variable
745  if ( self::matchAgainstMagicword( $parser->getMagicWordFactory(), 'rawsuffix', $arg1 ) ) {
746  // {{pagesincategory:|raw[|type]}}
747  $raw = $arg1;
748  $type = $magicWords->matchStartToEnd( $arg2 );
749  } else {
750  // {{pagesincategory:[|type[|raw]]}}
751  $type = $magicWords->matchStartToEnd( $arg1 );
752  $raw = $arg2;
753  }
754  if ( !$type ) { // backward compatibility
755  $type = 'pagesincategory_all';
756  }
757 
759  if ( !$title ) { # invalid title
760  return self::formatRaw( 0, $raw, $parser->getFunctionLang() );
761  }
762  $parser->getContentLanguage()->findVariantLink( $name, $title, true );
763 
764  // Normalize name for cache
765  $name = $title->getDBkey();
766 
767  if ( !isset( $cache[$name] ) ) {
768  $category = Category::newFromTitle( $title );
769 
770  $allCount = $subcatCount = $fileCount = $pagesCount = 0;
771  if ( $parser->incrementExpensiveFunctionCount() ) {
772  // $allCount is the total number of cat members,
773  // not the count of how many members are normal pages.
774  $allCount = (int)$category->getPageCount();
775  $subcatCount = (int)$category->getSubcatCount();
776  $fileCount = (int)$category->getFileCount();
777  $pagesCount = $allCount - $subcatCount - $fileCount;
778  }
779  $cache[$name]['pagesincategory_all'] = $allCount;
780  $cache[$name]['pagesincategory_pages'] = $pagesCount;
781  $cache[$name]['pagesincategory_subcats'] = $subcatCount;
782  $cache[$name]['pagesincategory_files'] = $fileCount;
783  }
784 
785  $count = $cache[$name][$type];
786  return self::formatRaw( $count, $raw, $parser->getFunctionLang() );
787  }
788 
798  public static function pagesize( $parser, $page = '', $raw = null ) {
799  $title = Title::newFromText( $page );
800 
801  if ( !is_object( $title ) ) {
802  return self::formatRaw( 0, $raw, $parser->getFunctionLang() );
803  }
804 
805  // fetch revision from cache/database and return the value
807  $length = $rev ? $rev->getSize() : 0;
808  if ( $length === null ) {
809  // We've had bugs where rev_len was not being recorded for empty pages, see T135414
810  $length = 0;
811  }
812  return self::formatRaw( $length, $raw, $parser->getFunctionLang() );
813  }
814 
827  public static function protectionlevel( $parser, $type = '', $title = '' ) {
828  $titleObject = Title::newFromText( $title );
829  if ( !( $titleObject instanceof Title ) ) {
830  $titleObject = $parser->mTitle;
831  }
832  if ( $titleObject->areRestrictionsLoaded() || $parser->incrementExpensiveFunctionCount() ) {
833  $restrictions = $titleObject->getRestrictions( strtolower( $type ) );
834  # Title::getRestrictions returns an array, its possible it may have
835  # multiple values in the future
836  return implode( ',', $restrictions );
837  }
838  return '';
839  }
840 
853  public static function protectionexpiry( $parser, $type = '', $title = '' ) {
854  $titleObject = Title::newFromText( $title );
855  if ( !( $titleObject instanceof Title ) ) {
856  $titleObject = $parser->mTitle;
857  }
858  if ( $titleObject->areRestrictionsLoaded() || $parser->incrementExpensiveFunctionCount() ) {
859  $expiry = $titleObject->getRestrictionExpiry( strtolower( $type ) );
860  // getRestrictionExpiry() returns false on invalid type; trying to
861  // match protectionlevel() function that returns empty string instead
862  if ( $expiry === false ) {
863  $expiry = '';
864  }
865  return $expiry;
866  }
867  return '';
868  }
869 
877  public static function language( $parser, $code = '', $inLanguage = '' ) {
878  $code = strtolower( $code );
879  $inLanguage = strtolower( $inLanguage );
880  $lang = Language::fetchLanguageName( $code, $inLanguage );
881  return $lang !== '' ? $lang : LanguageCode::bcp47( $code );
882  }
883 
893  public static function pad(
894  $parser, $string, $length, $padding = '0', $direction = STR_PAD_RIGHT
895  ) {
896  $padding = $parser->killMarkers( $padding );
897  $lengthOfPadding = mb_strlen( $padding );
898  if ( $lengthOfPadding == 0 ) {
899  return $string;
900  }
901 
902  # The remaining length to add counts down to 0 as padding is added
903  $length = min( (int)$length, 500 ) - mb_strlen( $string );
904  if ( $length <= 0 ) {
905  // Nothing to add
906  return $string;
907  }
908 
909  # $finalPadding is just $padding repeated enough times so that
910  # mb_strlen( $string ) + mb_strlen( $finalPadding ) == $length
911  $finalPadding = '';
912  while ( $length > 0 ) {
913  # If $length < $lengthofPadding, truncate $padding so we get the
914  # exact length desired.
915  $finalPadding .= mb_substr( $padding, 0, $length );
916  $length -= $lengthOfPadding;
917  }
918 
919  if ( $direction == STR_PAD_LEFT ) {
920  return $finalPadding . $string;
921  } else {
922  return $string . $finalPadding;
923  }
924  }
925 
926  public static function padleft( $parser, $string = '', $length = 0, $padding = '0' ) {
927  return self::pad( $parser, $string, $length, $padding, STR_PAD_LEFT );
928  }
929 
930  public static function padright( $parser, $string = '', $length = 0, $padding = '0' ) {
931  return self::pad( $parser, $string, $length, $padding );
932  }
933 
939  public static function anchorencode( $parser, $text ) {
940  $text = $parser->killMarkers( $text );
941  $section = (string)substr( $parser->guessSectionNameFromWikiText( $text ), 1 );
942  return Sanitizer::safeEncodeAttribute( $section );
943  }
944 
945  public static function special( $parser, $text ) {
946  list( $page, $subpage ) = MediaWikiServices::getInstance()->getSpecialPageFactory()->
947  resolveAlias( $text );
948  if ( $page ) {
949  $title = SpecialPage::getTitleFor( $page, $subpage );
950  return $title->getPrefixedText();
951  } else {
952  // unknown special page, just use the given text as its title, if at all possible
954  return $title ? $title->getPrefixedText() : self::special( $parser, 'Badtitle' );
955  }
956  }
957 
958  public static function speciale( $parser, $text ) {
959  return wfUrlencode( str_replace( ' ', '_', self::special( $parser, $text ) ) );
960  }
961 
970  public static function defaultsort( $parser, $text, $uarg = '' ) {
971  static $magicWords = null;
972  if ( is_null( $magicWords ) ) {
973  $magicWords = $parser->getMagicWordFactory()->newArray(
974  [ 'defaultsort_noerror', 'defaultsort_noreplace' ] );
975  }
976  $arg = $magicWords->matchStartToEnd( $uarg );
977 
978  $text = trim( $text );
979  if ( strlen( $text ) == 0 ) {
980  return '';
981  }
982  $old = $parser->getCustomDefaultSort();
983  if ( $old === false || $arg !== 'defaultsort_noreplace' ) {
984  $parser->setDefaultSort( $text );
985  }
986 
987  if ( $old === false || $old == $text || $arg ) {
988  return '';
989  } else {
990  $converter = $parser->getTargetLanguage()->getConverter();
991  return '<span class="error">' .
992  wfMessage( 'duplicate-defaultsort',
993  // Message should be parsed, but these params should only be escaped.
994  $converter->markNoConversion( wfEscapeWikiText( $old ) ),
995  $converter->markNoConversion( wfEscapeWikiText( $text ) )
996  )->inContentLanguage()->text() .
997  '</span>';
998  }
999  }
1000 
1012  public static function filepath( $parser, $name = '', $argA = '', $argB = '' ) {
1013  $file = wfFindFile( $name );
1014 
1015  if ( $argA == 'nowiki' ) {
1016  // {{filepath: | option [| size] }}
1017  $isNowiki = true;
1018  $parsedWidthParam = Parser::parseWidthParam( $argB );
1019  } else {
1020  // {{filepath: [| size [|option]] }}
1021  $parsedWidthParam = Parser::parseWidthParam( $argA );
1022  $isNowiki = ( $argB == 'nowiki' );
1023  }
1024 
1025  if ( $file ) {
1026  $url = $file->getFullUrl();
1027 
1028  // If a size is requested...
1029  if ( count( $parsedWidthParam ) ) {
1030  $mto = $file->transform( $parsedWidthParam );
1031  // ... and we can
1032  if ( $mto && !$mto->isError() ) {
1033  // ... change the URL to point to a thumbnail.
1034  $url = wfExpandUrl( $mto->getUrl(), PROTO_RELATIVE );
1035  }
1036  }
1037  if ( $isNowiki ) {
1038  return [ $url, 'nowiki' => true ];
1039  }
1040  return $url;
1041  } else {
1042  return '';
1043  }
1044  }
1045 
1053  public static function tagObj( $parser, $frame, $args ) {
1054  if ( !count( $args ) ) {
1055  return '';
1056  }
1057  $tagName = strtolower( trim( $frame->expand( array_shift( $args ) ) ) );
1058 
1059  if ( count( $args ) ) {
1060  $inner = $frame->expand( array_shift( $args ) );
1061  } else {
1062  $inner = null;
1063  }
1064 
1065  $attributes = [];
1066  foreach ( $args as $arg ) {
1067  $bits = $arg->splitArg();
1068  if ( strval( $bits['index'] ) === '' ) {
1069  $name = trim( $frame->expand( $bits['name'], PPFrame::STRIP_COMMENTS ) );
1070  $value = trim( $frame->expand( $bits['value'] ) );
1071  if ( preg_match( '/^(?:["\'](.+)["\']|""|\'\')$/s', $value, $m ) ) {
1072  $value = $m[1] ?? '';
1073  }
1074  $attributes[$name] = $value;
1075  }
1076  }
1077 
1078  $stripList = $parser->getStripList();
1079  if ( !in_array( $tagName, $stripList ) ) {
1080  // we can't handle this tag (at least not now), so just re-emit it as an ordinary tag
1081  $attrText = '';
1082  foreach ( $attributes as $name => $value ) {
1083  $attrText .= ' ' . htmlspecialchars( $name ) . '="' . htmlspecialchars( $value ) . '"';
1084  }
1085  if ( $inner === null ) {
1086  return "<$tagName$attrText/>";
1087  }
1088  return "<$tagName$attrText>$inner</$tagName>";
1089  }
1090 
1091  $params = [
1092  'name' => $tagName,
1093  'inner' => $inner,
1094  'attributes' => $attributes,
1095  'close' => "</$tagName>",
1096  ];
1097  return $parser->extensionSubstitution( $params, $frame );
1098  }
1099 
1112  private static function getCachedRevisionObject( $parser, $title = null ) {
1113  if ( is_null( $title ) ) {
1114  return null;
1115  }
1116 
1117  // Use the revision from the parser itself, when param is the current page
1118  // and the revision is the current one
1119  if ( $title->equals( $parser->getTitle() ) ) {
1120  $parserRev = $parser->getRevisionObject();
1121  if ( $parserRev && $parserRev->isCurrent() ) {
1122  // force reparse after edit with vary-revision flag
1123  $parser->getOutput()->setFlag( 'vary-revision' );
1124  wfDebug( __METHOD__ . ": use current revision from parser, setting vary-revision...\n" );
1125  return $parserRev;
1126  }
1127  }
1128 
1129  // Normalize name for cache
1130  $page = $title->getPrefixedDBkey();
1131 
1132  if ( !( $parser->currentRevisionCache && $parser->currentRevisionCache->has( $page ) )
1133  && !$parser->incrementExpensiveFunctionCount() ) {
1134  return null;
1135  }
1136  $rev = $parser->fetchCurrentRevisionOfTitle( $title );
1137  $pageID = $rev ? $rev->getPage() : 0;
1138  $revID = $rev ? $rev->getId() : 0;
1139 
1140  // Register dependency in templatelinks
1141  $parser->getOutput()->addTemplate( $title, $pageID, $revID );
1142 
1143  return $rev;
1144  }
1145 
1153  public static function pageid( $parser, $title = null ) {
1155  if ( is_null( $t ) ) {
1156  return '';
1157  }
1158  // Use title from parser to have correct pageid after edit
1159  if ( $t->equals( $parser->getTitle() ) ) {
1160  $t = $parser->getTitle();
1161  return $t->getArticleID();
1162  }
1163 
1164  // These can't have ids
1165  if ( !$t->canExist() || $t->isExternal() ) {
1166  return 0;
1167  }
1168 
1169  // Check the link cache, maybe something already looked it up.
1170  $linkCache = MediaWikiServices::getInstance()->getLinkCache();
1171  $pdbk = $t->getPrefixedDBkey();
1172  $id = $linkCache->getGoodLinkID( $pdbk );
1173  if ( $id != 0 ) {
1174  $parser->mOutput->addLink( $t, $id );
1175  return $id;
1176  }
1177  if ( $linkCache->isBadLink( $pdbk ) ) {
1178  $parser->mOutput->addLink( $t, 0 );
1179  return $id;
1180  }
1181 
1182  // We need to load it from the DB, so mark expensive
1183  if ( $parser->incrementExpensiveFunctionCount() ) {
1184  $id = $t->getArticleID();
1185  $parser->mOutput->addLink( $t, $id );
1186  return $id;
1187  }
1188  return null;
1189  }
1190 
1198  public static function revisionid( $parser, $title = null ) {
1200  if ( is_null( $t ) ) {
1201  return '';
1202  }
1203  // fetch revision from cache/database and return the value
1205  return $rev ? $rev->getId() : '';
1206  }
1207 
1215  public static function revisionday( $parser, $title = null ) {
1217  if ( is_null( $t ) ) {
1218  return '';
1219  }
1220  // fetch revision from cache/database and return the value
1222  return $rev ? MWTimestamp::getLocalInstance( $rev->getTimestamp() )->format( 'j' ) : '';
1223  }
1224 
1232  public static function revisionday2( $parser, $title = null ) {
1234  if ( is_null( $t ) ) {
1235  return '';
1236  }
1237  // fetch revision from cache/database and return the value
1239  return $rev ? MWTimestamp::getLocalInstance( $rev->getTimestamp() )->format( 'd' ) : '';
1240  }
1241 
1249  public static function revisionmonth( $parser, $title = null ) {
1251  if ( is_null( $t ) ) {
1252  return '';
1253  }
1254  // fetch revision from cache/database and return the value
1256  return $rev ? MWTimestamp::getLocalInstance( $rev->getTimestamp() )->format( 'm' ) : '';
1257  }
1258 
1266  public static function revisionmonth1( $parser, $title = null ) {
1268  if ( is_null( $t ) ) {
1269  return '';
1270  }
1271  // fetch revision from cache/database and return the value
1273  return $rev ? MWTimestamp::getLocalInstance( $rev->getTimestamp() )->format( 'n' ) : '';
1274  }
1275 
1283  public static function revisionyear( $parser, $title = null ) {
1285  if ( is_null( $t ) ) {
1286  return '';
1287  }
1288  // fetch revision from cache/database and return the value
1290  return $rev ? MWTimestamp::getLocalInstance( $rev->getTimestamp() )->format( 'Y' ) : '';
1291  }
1292 
1300  public static function revisiontimestamp( $parser, $title = null ) {
1302  if ( is_null( $t ) ) {
1303  return '';
1304  }
1305  // fetch revision from cache/database and return the value
1307  return $rev ? MWTimestamp::getLocalInstance( $rev->getTimestamp() )->format( 'YmdHis' ) : '';
1308  }
1309 
1317  public static function revisionuser( $parser, $title = null ) {
1319  if ( is_null( $t ) ) {
1320  return '';
1321  }
1322  // fetch revision from cache/database and return the value
1324  return $rev ? $rev->getUserText() : '';
1325  }
1326 
1339  public static function cascadingsources( $parser, $title = '' ) {
1340  $titleObject = Title::newFromText( $title );
1341  if ( !( $titleObject instanceof Title ) ) {
1342  $titleObject = $parser->mTitle;
1343  }
1344  if ( $titleObject->areCascadeProtectionSourcesLoaded()
1345  || $parser->incrementExpensiveFunctionCount()
1346  ) {
1347  $names = [];
1348  $sources = $titleObject->getCascadeProtectionSources();
1349  foreach ( $sources[0] as $sourceTitle ) {
1350  $names[] = $sourceTitle->getPrefixedText();
1351  }
1352  return implode( '|', $names );
1353  }
1354  return '';
1355  }
1356 
1357 }
User\getDefaultOption
static getDefaultOption( $opt)
Get a given default option value.
Definition: User.php:1818
CoreParserFunctions\protectionexpiry
static protectionexpiry( $parser, $type='', $title='')
Returns the requested protection expiry for the current page.
Definition: CoreParserFunctions.php:853
SiteStats\articles
static articles()
Definition: SiteStats.php:103
Language\fetchLanguageName
static fetchLanguageName( $code, $inLanguage=self::AS_AUTONYMS, $include=self::ALL)
Definition: Language.php:933
$user
return true to allow those checks to and false if checking is done & $user
Definition: hooks.txt:1476
Title\newFromText
static newFromText( $text, $defaultNamespace=NS_MAIN)
Create a new Title from text, such as what one would find in a link.
Definition: Title.php:306
PPFrame\STRIP_COMMENTS
const STRIP_COMMENTS
Definition: Preprocessor.php:169
CoreParserFunctions\displaytitle
static displaytitle( $parser, $text='', $uarg='')
Override the title of the page when viewed, provided we've been given a title which will normalise to...
Definition: CoreParserFunctions.php:381
$file
if(PHP_SAPI !='cli-server') if(!isset( $_SERVER['SCRIPT_FILENAME'])) $file
Definition: router.php:42
false
processing should stop and the error should be shown to the user * false
Definition: hooks.txt:187
SiteStats\users
static users()
Definition: SiteStats.php:121
MagicWordFactory
A factory that stores information about MagicWords, and creates them on demand with caching.
Definition: MagicWordFactory.php:34
SiteStats\activeUsers
static activeUsers()
Definition: SiteStats.php:130
CoreParserFunctions\pad
static pad( $parser, $string, $length, $padding='0', $direction=STR_PAD_RIGHT)
Unicode-safe str_pad with the restriction that $length is forced to be <= 500.
Definition: CoreParserFunctions.php:893
$lang
if(!isset( $args[0])) $lang
Definition: testCompression.php:33
CoreParserFunctions\numberofactiveusers
static numberofactiveusers( $parser, $raw=null)
Definition: CoreParserFunctions.php:518
CoreParserFunctions\pageid
static pageid( $parser, $title=null)
Get the pageid of a specified page.
Definition: CoreParserFunctions.php:1153
captcha-old.count
count
Definition: captcha-old.py:249
CoreParserFunctions\talkpagename
static talkpagename( $parser, $title=null)
Definition: CoreParserFunctions.php:693
CoreParserFunctions\rootpagename
static rootpagename( $parser, $title=null)
Definition: CoreParserFunctions.php:665
CoreParserFunctions\tagObj
static tagObj( $parser, $frame, $args)
Parser function to extension tag adaptor.
Definition: CoreParserFunctions.php:1053
CoreParserFunctions\pagesize
static pagesize( $parser, $page='', $raw=null)
Return the size of the given page, or 0 if it's nonexistent.
Definition: CoreParserFunctions.php:798
CoreParserFunctions\formatRaw
static formatRaw( $num, $raw, $language, MagicWordFactory $magicWordFactory=null)
Formats a number according to a language.
Definition: CoreParserFunctions.php:496
SiteStats\pages
static pages()
Definition: SiteStats.php:112
CoreParserFunctions\rootpagenamee
static rootpagenamee( $parser, $title=null)
Definition: CoreParserFunctions.php:672
CoreParserFunctions\protectionlevel
static protectionlevel( $parser, $type='', $title='')
Returns the requested protection level for the current page.
Definition: CoreParserFunctions.php:827
wfUrlencode
wfUrlencode( $s)
We want some things to be included as literal characters in our title URLs for prettiness,...
Definition: GlobalFunctions.php:333
SiteStats\numberingroup
static numberingroup( $group)
Find the number of users in a given user group.
Definition: SiteStats.php:150
SFH_OBJECT_ARGS
const SFH_OBJECT_ARGS
Definition: Defines.php:198
CoreParserFunctions\nse
static nse( $parser, $part1='')
Definition: CoreParserFunctions.php:145
NS_FILE
const NS_FILE
Definition: Defines.php:70
$params
$params
Definition: styleTest.css.php:44
CoreParserFunctions\revisionmonth1
static revisionmonth1( $parser, $title=null)
Get the month from the last revision of a specified page.
Definition: CoreParserFunctions.php:1266
User\newFromName
static newFromName( $name, $validate='valid')
Static factory method for creation from username.
Definition: User.php:585
$s
$s
Definition: mergeMessageFileList.php:186
SpecialPage\getTitleFor
static getTitleFor( $name, $subpage=false, $fragment='')
Get a localised Title object for a specified special page name If you don't need a full Title object,...
Definition: SpecialPage.php:82
CoreParserFunctions\namespacenumber
static namespacenumber( $parser, $title=null)
Definition: CoreParserFunctions.php:580
CoreParserFunctions\talkspace
static talkspace( $parser, $title=null)
Definition: CoreParserFunctions.php:587
CoreParserFunctions\grammar
static grammar( $parser, $case='', $word='')
Definition: CoreParserFunctions.php:308
CoreParserFunctions\defaultsort
static defaultsort( $parser, $text, $uarg='')
Definition: CoreParserFunctions.php:970
php
injection txt This is an overview of how MediaWiki makes use of dependency injection The design described here grew from the discussion of RFC T384 The term dependency this means that anything an object needs to operate should be injected from the the object itself should only know narrow no concrete implementation of the logic it relies on The requirement to inject everything typically results in an architecture that based on two main types of and essentially stateless service objects that use other service objects to operate on the value objects As of the beginning MediaWiki is only starting to use the DI approach Much of the code still relies on global state or direct resulting in a highly cyclical dependency which acts as the top level factory for services in MediaWiki which can be used to gain access to default instances of various services MediaWikiServices however also allows new services to be defined and default services to be redefined Services are defined or redefined by providing a callback the instantiator that will return a new instance of the service When it will create an instance of MediaWikiServices and populate it with the services defined in the files listed by thereby bootstrapping the DI framework Per $wgServiceWiringFiles lists includes ServiceWiring php
Definition: injection.txt:35
CoreParserFunctions\revisionday
static revisionday( $parser, $title=null)
Get the day from the last revision of a specified page.
Definition: CoreParserFunctions.php:1215
CoreParserFunctions\pagename
static pagename( $parser, $title=null)
Functions to get and normalize pagenames, corresponding to the magic words of the same names.
Definition: CoreParserFunctions.php:623
SiteStats\images
static images()
Definition: SiteStats.php:139
CoreParserFunctions\revisionid
static revisionid( $parser, $title=null)
Get the id from the last revision of a specified page.
Definition: CoreParserFunctions.php:1198
CoreParserFunctions\talkspacee
static talkspacee( $parser, $title=null)
Definition: CoreParserFunctions.php:594
CoreParserFunctions\localurle
static localurle( $parser, $s='', $arg=null)
Definition: CoreParserFunctions.php:223
CoreParserFunctions\getCachedRevisionObject
static getCachedRevisionObject( $parser, $title=null)
Fetched the current revision of the given title and return this.
Definition: CoreParserFunctions.php:1112
NS_SPECIAL
const NS_SPECIAL
Definition: Defines.php:53
$title
namespace and then decline to actually register it file or subcat img or subcat $title
Definition: hooks.txt:925
CoreParserFunctions\plural
static plural( $parser, $text='')
Definition: CoreParserFunctions.php:356
CoreParserFunctions\numberofpages
static numberofpages( $parser, $raw=null)
Definition: CoreParserFunctions.php:511
CoreParserFunctions\basepagenamee
static basepagenamee( $parser, $title=null)
Definition: CoreParserFunctions.php:686
CoreParserFunctions\matchAgainstMagicword
static matchAgainstMagicword(MagicWordFactory $magicWordFactory, $magicword, $value)
Matches the given value against the value of given magic word.
Definition: CoreParserFunctions.php:476
CoreParserFunctions\revisionyear
static revisionyear( $parser, $title=null)
Get the year from the last revision of a specified page.
Definition: CoreParserFunctions.php:1283
CoreParserFunctions\mwnamespace
static mwnamespace( $parser, $title=null)
Given a title, return the namespace name that would be given by the corresponding magic word Note: fu...
Definition: CoreParserFunctions.php:566
CoreParserFunctions\fullurle
static fullurle( $parser, $s='', $arg=null)
Definition: CoreParserFunctions.php:236
use
as see the revision history and available at free of to any person obtaining a copy of this software and associated documentation to deal in the Software without including without limitation the rights to use
Definition: MIT-LICENSE.txt:10
$code
this hook is for auditing only or null if authentication failed before getting that far or null if we can t even determine that When $user is not it can be in the form of< username >< more info > e g for bot passwords intended to be added to log contexts Fields it might only if the login was with a bot password it is not rendered in wiki pages or galleries in category pages allow injecting custom HTML after the section Any uses of the hook need to handle escaping see BaseTemplate::getToolbox and BaseTemplate::makeListItem for details on the format of individual items inside of this array or by returning and letting standard HTTP rendering take place modifiable or by returning false and taking over the output modifiable & $code
Definition: hooks.txt:780
$parser
see documentation in includes Linker php for Linker::makeImageLink or false for current used if you return false $parser
Definition: hooks.txt:1802
CoreParserFunctions\numberofedits
static numberofedits( $parser, $raw=null)
Definition: CoreParserFunctions.php:538
CoreParserFunctions\revisionday2
static revisionday2( $parser, $title=null)
Get the day with leading zeros from the last revision of a specified page.
Definition: CoreParserFunctions.php:1232
CoreParserFunctions\fullurl
static fullurl( $parser, $s='', $arg=null)
Definition: CoreParserFunctions.php:232
CoreParserFunctions\ucfirst
static ucfirst( $parser, $s='')
Definition: CoreParserFunctions.php:197
Title\makeTitle
static makeTitle( $ns, $title, $fragment='', $interwiki='')
Create a new Title from a namespace index and a DB key.
Definition: Title.php:576
NS_CATEGORY
const NS_CATEGORY
Definition: Defines.php:78
CoreParserFunctions\fullpagenamee
static fullpagenamee( $parser, $title=null)
Definition: CoreParserFunctions.php:644
$magicWords
magicword txt Magic Words are some phrases used in the wikitext They are used for two that looks like templates but that don t accept any parameter *Parser functions(like {{fullurl:...}}, {{#special:...}}) $magicWords['en']
Definition: magicword.txt:33
CoreParserFunctions\gender
static gender( $parser, $username)
Definition: CoreParserFunctions.php:318
CoreParserFunctions\pagenamee
static pagenamee( $parser, $title=null)
Definition: CoreParserFunctions.php:630
CoreParserFunctions\ns
static ns( $parser, $part1='')
Definition: CoreParserFunctions.php:132
CoreParserFunctions\subjectpagename
static subjectpagename( $parser, $title=null)
Definition: CoreParserFunctions.php:707
CoreParserFunctions\language
static language( $parser, $code='', $inLanguage='')
Gives language names.
Definition: CoreParserFunctions.php:877
wfDebug
wfDebug( $text, $dest='all', array $context=[])
Sends a line to the debug log if enabled or, optionally, to a comment in output.
Definition: GlobalFunctions.php:949
string
This code would result in ircNotify being run twice when an article is and once for brion Hooks can return three possible true was required This is the default since MediaWiki *some string
Definition: hooks.txt:175
CoreParserFunctions\revisiontimestamp
static revisiontimestamp( $parser, $title=null)
Get the timestamp from the last revision of a specified page.
Definition: CoreParserFunctions.php:1300
list
deferred txt A few of the database updates required by various functions here can be deferred until after the result page is displayed to the user For updating the view updating the linked to tables after a etc PHP does not yet have any way to tell the server to actually return and disconnect while still running these but it might have such a feature in the future We handle these by creating a deferred update object and putting those objects on a global list
Definition: deferred.txt:11
CoreParserFunctions\bidi
static bidi( $parser, $text='')
Definition: CoreParserFunctions.php:368
Category\newFromTitle
static newFromTitle( $title)
Factory function.
Definition: Category.php:146
$name
Allows to change the fields on the form that will be generated $name
Definition: hooks.txt:271
CoreParserFunctions\urlencode
static urlencode( $parser, $s='', $arg=null)
urlencodes a string according to one of three patterns: (T24474)
Definition: CoreParserFunctions.php:165
CoreParserFunctions\formatDate
static formatDate( $parser, $date, $defaultPref=null)
Definition: CoreParserFunctions.php:114
Title\makeTitleSafe
static makeTitleSafe( $ns, $title, $fragment='', $interwiki='')
Create a new Title from a namespace index and a DB key.
Definition: Title.php:604
CoreParserFunctions\fullpagename
static fullpagename( $parser, $title=null)
Definition: CoreParserFunctions.php:637
SiteStats\pagesInNs
static pagesInNs( $ns)
Definition: SiteStats.php:201
MagicWordFactory\get
get( $id)
Factory: creates an object representing an ID.
Definition: MagicWordFactory.php:219
$value
$value
Definition: styleTest.css.php:49
NS_MEDIA
const NS_MEDIA
Definition: Defines.php:52
CoreParserFunctions\padleft
static padleft( $parser, $string='', $length=0, $padding='0')
Definition: CoreParserFunctions.php:926
title
title
Definition: parserTests.txt:245
CoreParserFunctions\padright
static padright( $parser, $string='', $length=0, $padding='0')
Definition: CoreParserFunctions.php:930
Title\newFromURL
static newFromURL( $url)
THIS IS NOT THE FUNCTION YOU WANT.
Definition: Title.php:394
CoreParserFunctions\revisionmonth
static revisionmonth( $parser, $title=null)
Get the month with leading zeros from the last revision of a specified page.
Definition: CoreParserFunctions.php:1249
wfEscapeWikiText
wfEscapeWikiText( $text)
Escapes the given text so that it may be output using addWikiText() without any linking,...
Definition: GlobalFunctions.php:1577
PROTO_RELATIVE
const PROTO_RELATIVE
Definition: Defines.php:221
$ret
null means default in associative array with keys and values unescaped Should be merged with default with a value of false meaning to suppress the attribute in associative array with keys and values unescaped noclasses & $ret
Definition: hooks.txt:1985
CoreParserFunctions\subjectspacee
static subjectspacee( $parser, $title=null)
Definition: CoreParserFunctions.php:608
CoreParserFunctions\speciale
static speciale( $parser, $text)
Definition: CoreParserFunctions.php:958
CoreParserFunctions\urlFunction
static urlFunction( $func, $s='', $arg=null)
Definition: CoreParserFunctions.php:258
CoreParserFunctions\lc
static lc( $parser, $s='')
Definition: CoreParserFunctions.php:206
CoreParserFunctions\subjectspace
static subjectspace( $parser, $title=null)
Definition: CoreParserFunctions.php:601
CoreParserFunctions\subjectpagenamee
static subjectpagenamee( $parser, $title=null)
Definition: CoreParserFunctions.php:714
format
if the prop value should be in the metadata multi language array format
Definition: hooks.txt:1644
wfFindFile
wfFindFile( $title, $options=[])
Find a file.
Definition: GlobalFunctions.php:2677
SFH_NO_HASH
const SFH_NO_HASH
Definition: Defines.php:197
text
This list may contain false positives That usually means there is additional text with links below the first Each row contains links to the first and second as well as the first line of the second redirect text
Definition: All_system_messages.txt:1267
$args
if( $line===false) $args
Definition: cdb.php:64
Title
Represents a title within MediaWiki.
Definition: Title.php:40
CoreParserFunctions\numberofadmins
static numberofadmins( $parser, $raw=null)
Definition: CoreParserFunctions.php:530
CoreParserFunctions\cascadingsources
static cascadingsources( $parser, $title='')
Returns the sources of any cascading protection acting on a specified page.
Definition: CoreParserFunctions.php:1339
CoreParserFunctions\anchorencode
static anchorencode( $parser, $text)
Definition: CoreParserFunctions.php:939
$cache
$cache
Definition: mcc.php:33
CoreParserFunctions\uc
static uc( $parser, $s='')
Definition: CoreParserFunctions.php:215
CoreParserFunctions\special
static special( $parser, $text)
Definition: CoreParserFunctions.php:945
CoreParserFunctions\subpagenamee
static subpagenamee( $parser, $title=null)
Definition: CoreParserFunctions.php:658
CoreParserFunctions\filepath
static filepath( $parser, $name='', $argA='', $argB='')
Usage {{filepath|300}}, {{filepath|nowiki}}, {{filepath|nowiki|300}} or {{filepath|300|nowiki}} or {{...
Definition: CoreParserFunctions.php:1012
CoreParserFunctions\namespacee
static namespacee( $parser, $title=null)
Definition: CoreParserFunctions.php:573
CoreParserFunctions\numberofarticles
static numberofarticles( $parser, $raw=null)
Definition: CoreParserFunctions.php:522
$section
usually copyright or history_copyright This message must be in HTML not wikitext if the section is included from a template $section
Definition: hooks.txt:3053
$rev
presenting them properly to the user as errors is done by the caller return true use this to change the list i e etc $rev
Definition: hooks.txt:1769
as
This document is intended to provide useful advice for parties seeking to redistribute MediaWiki to end users It s targeted particularly at maintainers for Linux since it s been observed that distribution packages of MediaWiki often break We ve consistently had to recommend that users seeking support use official tarballs instead of their distribution s and this often solves whatever problem the user is having It would be nice if this could such as
Definition: distributors.txt:9
LanguageCode\bcp47
static bcp47( $code)
Get the normalised IETF language tag See unit test for examples.
Definition: LanguageCode.php:179
CoreParserFunctions
Various core parser functions, registered in Parser::firstCallInit()
Definition: CoreParserFunctions.php:29
CoreParserFunctions\subpagename
static subpagename( $parser, $title=null)
Definition: CoreParserFunctions.php:651
NS_USER
const NS_USER
Definition: Defines.php:66
CoreParserFunctions\revisionuser
static revisionuser( $parser, $title=null)
Get the user from the last revision of a specified page.
Definition: CoreParserFunctions.php:1317
true
null means default in associative array with keys and values unescaped Should be merged with default with a value of false meaning to suppress the attribute in associative array with keys and values unescaped noclasses just before the function returns a value If you return true
Definition: hooks.txt:1985
CoreParserFunctions\numberingroup
static numberingroup( $parser, $name='', $raw=null)
Definition: CoreParserFunctions.php:549
CoreParserFunctions\numberofusers
static numberofusers( $parser, $raw=null)
Definition: CoreParserFunctions.php:515
$t
$t
Definition: testCompression.php:69
CoreParserFunctions\pagesincategory
static pagesincategory( $parser, $name='', $arg1=null, $arg2=null)
Return the number of pages, files or subcats in the given category, or 0 if it's nonexistent.
Definition: CoreParserFunctions.php:732
$wgAllowSlowParserFunctions
$wgAllowSlowParserFunctions
Enable slow parser functions.
Definition: DefaultSettings.php:2276
MediaWikiServices
injection txt This is an overview of how MediaWiki makes use of dependency injection The design described here grew from the discussion of RFC T384 The term dependency this means that anything an object needs to operate should be injected from the the object itself should only know narrow no concrete implementation of the logic it relies on The requirement to inject everything typically results in an architecture that based on two main types of and essentially stateless service objects that use other service objects to operate on the value objects As of the beginning MediaWiki is only starting to use the DI approach Much of the code still relies on global state or direct resulting in a highly cyclical dependency MediaWikiServices
Definition: injection.txt:23
CoreParserFunctions\numberoffiles
static numberoffiles( $parser, $raw=null)
Definition: CoreParserFunctions.php:526
CoreParserFunctions\pagesinnamespace
static pagesinnamespace( $parser, $namespace=0, $raw=null)
Definition: CoreParserFunctions.php:542
wfMessage
either a unescaped string or a HtmlArmor object after in associative array form externallinks including delete and has completed for all link tables whether this was an auto creation use $formDescriptor instead default is conds Array Extra conditions for the No matching items in log is displayed if loglist is empty msgKey Array If you want a nice box with a set this to the key of the message First element is the message additional optional elements are parameters for the key that are processed with wfMessage() -> params() ->parseAsBlock() - offset Set to overwrite offset parameter in $wgRequest set to '' to unset offset - wrap String Wrap the message in html(usually something like "&lt
$wgRestrictDisplayTitle
$wgRestrictDisplayTitle
For consistency, restrict DISPLAYTITLE to text that normalizes to the same canonical DB key.
Definition: DefaultSettings.php:4302
$wgAllowDisplayTitle
$wgAllowDisplayTitle
Allow DISPLAYTITLE to change title display.
Definition: DefaultSettings.php:4295
CoreParserFunctions\formatnum
static formatnum( $parser, $num='', $arg=null)
Definition: CoreParserFunctions.php:289
CoreParserFunctions\lcfirst
static lcfirst( $parser, $s='')
Definition: CoreParserFunctions.php:193
CoreParserFunctions\canonicalurl
static canonicalurl( $parser, $s='', $arg=null)
Definition: CoreParserFunctions.php:245
$username
this hook is for auditing only or null if authentication failed before getting that far $username
Definition: hooks.txt:780
MWTimestamp\getLocalInstance
static getLocalInstance( $ts=false)
Get a timestamp instance in the server local timezone ($wgLocaltimezone)
Definition: MWTimestamp.php:204
SiteStats\edits
static edits()
Definition: SiteStats.php:94
CoreParserFunctions\intFunction
static intFunction( $parser, $part1='')
Definition: CoreParserFunctions.php:96
CoreParserFunctions\basepagename
static basepagename( $parser, $title=null)
Definition: CoreParserFunctions.php:679
DateFormatter\getInstance
static getInstance(Language $lang=null)
Get a DateFormatter object.
Definition: DateFormatter.php:135
CoreParserFunctions\canonicalurle
static canonicalurle( $parser, $s='', $arg=null)
Definition: CoreParserFunctions.php:249
wfExpandUrl
wfExpandUrl( $url, $defaultProto=PROTO_CURRENT)
Expand a potentially local URL to a fully-qualified URL.
Definition: GlobalFunctions.php:515
CoreParserFunctions\localurl
static localurl( $parser, $s='', $arg=null)
Definition: CoreParserFunctions.php:219
$type
$type
Definition: testCompression.php:48
CoreParserFunctions\talkpagenamee
static talkpagenamee( $parser, $title=null)
Definition: CoreParserFunctions.php:700