MediaWiki  1.27.1
CoreParserFunctions.php
Go to the documentation of this file.
1 <?php
33  public static function register( $parser ) {
34  global $wgAllowDisplayTitle, $wgAllowSlowParserFunctions;
35 
36  # Syntax for arguments (see Parser::setFunctionHook):
37  # "name for lookup in localized magic words array",
38  # function callback,
39  # optional Parser::SFH_NO_HASH to omit the hash from calls (e.g. {{int:...}}
40  # instead of {{#int:...}})
41  $noHashFunctions = [
42  'ns', 'nse', 'urlencode', 'lcfirst', 'ucfirst', 'lc', 'uc',
43  'localurl', 'localurle', 'fullurl', 'fullurle', 'canonicalurl',
44  'canonicalurle', 'formatnum', 'grammar', 'gender', 'plural', 'bidi',
45  'numberofpages', 'numberofusers', 'numberofactiveusers',
46  'numberofarticles', 'numberoffiles', 'numberofadmins',
47  'numberingroup', 'numberofedits', 'language',
48  'padleft', 'padright', 'anchorencode', 'defaultsort', 'filepath',
49  'pagesincategory', 'pagesize', 'protectionlevel', 'protectionexpiry',
50  'namespacee', 'namespacenumber', 'talkspace', 'talkspacee',
51  'subjectspace', 'subjectspacee', 'pagename', 'pagenamee',
52  'fullpagename', 'fullpagenamee', 'rootpagename', 'rootpagenamee',
53  'basepagename', 'basepagenamee', 'subpagename', 'subpagenamee',
54  'talkpagename', 'talkpagenamee', 'subjectpagename',
55  'subjectpagenamee', 'pageid', 'revisionid', 'revisionday',
56  'revisionday2', 'revisionmonth', 'revisionmonth1', 'revisionyear',
57  'revisiontimestamp', 'revisionuser', 'cascadingsources',
58  ];
59  foreach ( $noHashFunctions as $func ) {
60  $parser->setFunctionHook( $func, [ __CLASS__, $func ], Parser::SFH_NO_HASH );
61  }
62 
63  $parser->setFunctionHook(
64  'namespace',
65  [ __CLASS__, 'mwnamespace' ],
67  );
68  $parser->setFunctionHook( 'int', [ __CLASS__, 'intFunction' ], Parser::SFH_NO_HASH );
69  $parser->setFunctionHook( 'special', [ __CLASS__, 'special' ] );
70  $parser->setFunctionHook( 'speciale', [ __CLASS__, 'speciale' ] );
71  $parser->setFunctionHook( 'tag', [ __CLASS__, 'tagObj' ], Parser::SFH_OBJECT_ARGS );
72  $parser->setFunctionHook( 'formatdate', [ __CLASS__, 'formatDate' ] );
73 
74  if ( $wgAllowDisplayTitle ) {
75  $parser->setFunctionHook(
76  'displaytitle',
77  [ __CLASS__, 'displaytitle' ],
79  );
80  }
81  if ( $wgAllowSlowParserFunctions ) {
82  $parser->setFunctionHook(
83  'pagesinnamespace',
84  [ __CLASS__, 'pagesinnamespace' ],
86  );
87  }
88  }
89 
95  public static function intFunction( $parser, $part1 = '' /*, ... */ ) {
96  if ( strval( $part1 ) !== '' ) {
97  $args = array_slice( func_get_args(), 2 );
98  $message = wfMessage( $part1, $args )
99  ->inLanguage( $parser->getOptions()->getUserLangObj() );
100  if ( !$message->exists() ) {
101  // When message does not exists, the message name is surrounded by angle
102  // and can result in a tag, therefore escape the angles
103  return $message->escaped();
104  }
105  return [ $message->plain(), 'noparse' => false ];
106  } else {
107  return [ 'found' => false ];
108  }
109  }
110 
118  public static function formatDate( $parser, $date, $defaultPref = null ) {
119  $lang = $parser->getFunctionLang();
121 
122  $date = trim( $date );
123 
124  $pref = $parser->getOptions()->getDateFormat();
125 
126  // Specify a different default date format other than the normal default
127  // if the user has 'default' for their setting
128  if ( $pref == 'default' && $defaultPref ) {
129  $pref = $defaultPref;
130  }
131 
132  $date = $df->reformat( $pref, $date, [ 'match-whole' ] );
133  return $date;
134  }
135 
136  public static function ns( $parser, $part1 = '' ) {
138  if ( intval( $part1 ) || $part1 == "0" ) {
139  $index = intval( $part1 );
140  } else {
141  $index = $wgContLang->getNsIndex( str_replace( ' ', '_', $part1 ) );
142  }
143  if ( $index !== false ) {
144  return $wgContLang->getFormattedNsText( $index );
145  } else {
146  return [ 'found' => false ];
147  }
148  }
149 
150  public static function nse( $parser, $part1 = '' ) {
151  $ret = self::ns( $parser, $part1 );
152  if ( is_string( $ret ) ) {
153  $ret = wfUrlencode( str_replace( ' ', '_', $ret ) );
154  }
155  return $ret;
156  }
157 
170  public static function urlencode( $parser, $s = '', $arg = null ) {
171  static $magicWords = null;
172  if ( is_null( $magicWords ) ) {
173  $magicWords = new MagicWordArray( [ 'url_path', 'url_query', 'url_wiki' ] );
174  }
175  switch ( $magicWords->matchStartToEnd( $arg ) ) {
176 
177  // Encode as though it's a wiki page, '_' for ' '.
178  case 'url_wiki':
179  $func = 'wfUrlencode';
180  $s = str_replace( ' ', '_', $s );
181  break;
182 
183  // Encode for an HTTP Path, '%20' for ' '.
184  case 'url_path':
185  $func = 'rawurlencode';
186  break;
187 
188  // Encode for HTTP query, '+' for ' '.
189  case 'url_query':
190  default:
191  $func = 'urlencode';
192  }
193  // See T105242, where the choice to kill markers and various
194  // other options were discussed.
195  return $func( $parser->killMarkers( $s ) );
196  }
197 
198  public static function lcfirst( $parser, $s = '' ) {
200  return $wgContLang->lcfirst( $s );
201  }
202 
203  public static function ucfirst( $parser, $s = '' ) {
205  return $wgContLang->ucfirst( $s );
206  }
207 
213  public static function lc( $parser, $s = '' ) {
215  return $parser->markerSkipCallback( $s, [ $wgContLang, 'lc' ] );
216  }
217 
223  public static function uc( $parser, $s = '' ) {
225  return $parser->markerSkipCallback( $s, [ $wgContLang, 'uc' ] );
226  }
227 
228  public static function localurl( $parser, $s = '', $arg = null ) {
229  return self::urlFunction( 'getLocalURL', $s, $arg );
230  }
231 
232  public static function localurle( $parser, $s = '', $arg = null ) {
233  $temp = self::urlFunction( 'getLocalURL', $s, $arg );
234  if ( !is_string( $temp ) ) {
235  return $temp;
236  } else {
237  return htmlspecialchars( $temp );
238  }
239  }
240 
241  public static function fullurl( $parser, $s = '', $arg = null ) {
242  return self::urlFunction( 'getFullURL', $s, $arg );
243  }
244 
245  public static function fullurle( $parser, $s = '', $arg = null ) {
246  $temp = self::urlFunction( 'getFullURL', $s, $arg );
247  if ( !is_string( $temp ) ) {
248  return $temp;
249  } else {
250  return htmlspecialchars( $temp );
251  }
252  }
253 
254  public static function canonicalurl( $parser, $s = '', $arg = null ) {
255  return self::urlFunction( 'getCanonicalURL', $s, $arg );
256  }
257 
258  public static function canonicalurle( $parser, $s = '', $arg = null ) {
259  $temp = self::urlFunction( 'getCanonicalURL', $s, $arg );
260  if ( !is_string( $temp ) ) {
261  return $temp;
262  } else {
263  return htmlspecialchars( $temp );
264  }
265  }
266 
267  public static function urlFunction( $func, $s = '', $arg = null ) {
269  # Due to order of execution of a lot of bits, the values might be encoded
270  # before arriving here; if that's true, then the title can't be created
271  # and the variable will fail. If we can't get a decent title from the first
272  # attempt, url-decode and try for a second.
273  if ( is_null( $title ) ) {
274  $title = Title::newFromURL( urldecode( $s ) );
275  }
276  if ( !is_null( $title ) ) {
277  # Convert NS_MEDIA -> NS_FILE
278  if ( $title->getNamespace() == NS_MEDIA ) {
279  $title = Title::makeTitle( NS_FILE, $title->getDBkey() );
280  }
281  if ( !is_null( $arg ) ) {
282  $text = $title->$func( $arg );
283  } else {
284  $text = $title->$func();
285  }
286  return $text;
287  } else {
288  return [ 'found' => false ];
289  }
290  }
291 
298  public static function formatnum( $parser, $num = '', $arg = null ) {
299  if ( self::matchAgainstMagicword( 'rawsuffix', $arg ) ) {
300  $func = [ $parser->getFunctionLang(), 'parseFormattedNumber' ];
301  } elseif ( self::matchAgainstMagicword( 'nocommafysuffix', $arg ) ) {
302  $func = [ $parser->getFunctionLang(), 'formatNumNoSeparators' ];
303  } else {
304  $func = [ $parser->getFunctionLang(), 'formatNum' ];
305  }
306  return $parser->markerSkipCallback( $num, $func );
307  }
308 
315  public static function grammar( $parser, $case = '', $word = '' ) {
316  $word = $parser->killMarkers( $word );
317  return $parser->getFunctionLang()->convertGrammar( $word, $case );
318  }
319 
325  public static function gender( $parser, $username ) {
326  $forms = array_slice( func_get_args(), 2 );
327 
328  // Some shortcuts to avoid loading user data unnecessarily
329  if ( count( $forms ) === 0 ) {
330  return '';
331  } elseif ( count( $forms ) === 1 ) {
332  return $forms[0];
333  }
334 
335  $username = trim( $username );
336 
337  // default
338  $gender = User::getDefaultOption( 'gender' );
339 
340  // allow prefix.
342 
343  if ( $title && $title->getNamespace() == NS_USER ) {
344  $username = $title->getText();
345  }
346 
347  // check parameter, or use the ParserOptions if in interface message
349  if ( $user ) {
350  $gender = GenderCache::singleton()->getGenderOf( $user, __METHOD__ );
351  } elseif ( $username === '' && $parser->getOptions()->getInterfaceMessage() ) {
352  $gender = GenderCache::singleton()->getGenderOf( $parser->getOptions()->getUser(), __METHOD__ );
353  }
354  $ret = $parser->getFunctionLang()->gender( $gender, $forms );
355  return $ret;
356  }
357 
363  public static function plural( $parser, $text = '' ) {
364  $forms = array_slice( func_get_args(), 2 );
365  $text = $parser->getFunctionLang()->parseFormattedNumber( $text );
366  settype( $text, ctype_digit( $text ) ? 'int' : 'float' );
367  return $parser->getFunctionLang()->convertPlural( $text, $forms );
368  }
369 
375  public static function bidi( $parser, $text = '' ) {
376  return $parser->getFunctionLang()->embedBidi( $text );
377  }
378 
388  public static function displaytitle( $parser, $text = '', $uarg = '' ) {
389  global $wgRestrictDisplayTitle;
390 
391  static $magicWords = null;
392  if ( is_null( $magicWords ) ) {
393  $magicWords = new MagicWordArray( [ 'displaytitle_noerror', 'displaytitle_noreplace' ] );
394  }
395  $arg = $magicWords->matchStartToEnd( $uarg );
396 
397  // parse a limited subset of wiki markup (just the single quote items)
398  $text = $parser->doQuotes( $text );
399 
400  // remove stripped text (e.g. the UNIQ-QINU stuff) that was generated by tag extensions/whatever
401  $text = $parser->killMarkers( $text );
402 
403  // list of disallowed tags for DISPLAYTITLE
404  // these will be escaped even though they are allowed in normal wiki text
405  $bad = [ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'blockquote', 'ol', 'ul', 'li', 'hr',
406  'table', 'tr', 'th', 'td', 'dl', 'dd', 'caption', 'p', 'ruby', 'rb', 'rt', 'rtc', 'rp', 'br' ];
407 
408  // disallow some styles that could be used to bypass $wgRestrictDisplayTitle
409  if ( $wgRestrictDisplayTitle ) {
410  $htmlTagsCallback = function ( &$params ) {
412 
413  if ( isset( $decoded['style'] ) ) {
414  // this is called later anyway, but we need it right now for the regexes below to be safe
415  // calling it twice doesn't hurt
416  $decoded['style'] = Sanitizer::checkCss( $decoded['style'] );
417 
418  if ( preg_match( '/(display|user-select|visibility)\s*:/i', $decoded['style'] ) ) {
419  $decoded['style'] = '/* attempt to bypass $wgRestrictDisplayTitle */';
420  }
421  }
422 
424  };
425  } else {
426  $htmlTagsCallback = null;
427  }
428 
429  // only requested titles that normalize to the actual title are allowed through
430  // if $wgRestrictDisplayTitle is true (it is by default)
431  // mimic the escaping process that occurs in OutputPage::setPageTitle
433  $text,
434  $htmlTagsCallback,
435  [],
436  [],
437  $bad
438  ) );
440 
441  if ( !$wgRestrictDisplayTitle ||
442  ( $title instanceof Title
443  && !$title->hasFragment()
444  && $title->equals( $parser->mTitle ) )
445  ) {
446  $old = $parser->mOutput->getProperty( 'displaytitle' );
447  if ( $old === false || $arg !== 'displaytitle_noreplace' ) {
448  $parser->mOutput->setDisplayTitle( $text );
449  }
450  if ( $old !== false && $old !== $text && !$arg ) {
451  $converter = $parser->getConverterLanguage()->getConverter();
452  return '<span class="error">' .
453  wfMessage( 'duplicate-displaytitle',
454  // Message should be parsed, but these params should only be escaped.
455  $converter->markNoConversion( wfEscapeWikiText( $old ) ),
456  $converter->markNoConversion( wfEscapeWikiText( $text ) )
457  )->inContentLanguage()->text() .
458  '</span>';
459  }
460  }
461 
462  return '';
463  }
464 
472  private static function matchAgainstMagicword( $magicword, $value ) {
473  $value = trim( strval( $value ) );
474  if ( $value === '' ) {
475  return false;
476  }
477  $mwObject = MagicWord::get( $magicword );
478  return $mwObject->matchStartToEnd( $value );
479  }
480 
481  public static function formatRaw( $num, $raw ) {
482  if ( self::matchAgainstMagicword( 'rawsuffix', $raw ) ) {
483  return $num;
484  } else {
486  return $wgContLang->formatNum( $num );
487  }
488  }
489  public static function numberofpages( $parser, $raw = null ) {
490  return self::formatRaw( SiteStats::pages(), $raw );
491  }
492  public static function numberofusers( $parser, $raw = null ) {
493  return self::formatRaw( SiteStats::users(), $raw );
494  }
495  public static function numberofactiveusers( $parser, $raw = null ) {
496  return self::formatRaw( SiteStats::activeUsers(), $raw );
497  }
498  public static function numberofarticles( $parser, $raw = null ) {
499  return self::formatRaw( SiteStats::articles(), $raw );
500  }
501  public static function numberoffiles( $parser, $raw = null ) {
502  return self::formatRaw( SiteStats::images(), $raw );
503  }
504  public static function numberofadmins( $parser, $raw = null ) {
505  return self::formatRaw( SiteStats::numberingroup( 'sysop' ), $raw );
506  }
507  public static function numberofedits( $parser, $raw = null ) {
508  return self::formatRaw( SiteStats::edits(), $raw );
509  }
510  public static function pagesinnamespace( $parser, $namespace = 0, $raw = null ) {
511  return self::formatRaw( SiteStats::pagesInNs( intval( $namespace ) ), $raw );
512  }
513  public static function numberingroup( $parser, $name = '', $raw = null ) {
514  return self::formatRaw( SiteStats::numberingroup( strtolower( $name ) ), $raw );
515  }
516 
526  public static function mwnamespace( $parser, $title = null ) {
528  if ( is_null( $t ) ) {
529  return '';
530  }
531  return str_replace( '_', ' ', $t->getNsText() );
532  }
533  public static function namespacee( $parser, $title = null ) {
535  if ( is_null( $t ) ) {
536  return '';
537  }
538  return wfUrlencode( $t->getNsText() );
539  }
540  public static function namespacenumber( $parser, $title = null ) {
542  if ( is_null( $t ) ) {
543  return '';
544  }
545  return $t->getNamespace();
546  }
547  public static function talkspace( $parser, $title = null ) {
549  if ( is_null( $t ) || !$t->canTalk() ) {
550  return '';
551  }
552  return str_replace( '_', ' ', $t->getTalkNsText() );
553  }
554  public static function talkspacee( $parser, $title = null ) {
556  if ( is_null( $t ) || !$t->canTalk() ) {
557  return '';
558  }
559  return wfUrlencode( $t->getTalkNsText() );
560  }
561  public static function subjectspace( $parser, $title = null ) {
563  if ( is_null( $t ) ) {
564  return '';
565  }
566  return str_replace( '_', ' ', $t->getSubjectNsText() );
567  }
568  public static function subjectspacee( $parser, $title = null ) {
570  if ( is_null( $t ) ) {
571  return '';
572  }
573  return wfUrlencode( $t->getSubjectNsText() );
574  }
575 
583  public static function pagename( $parser, $title = null ) {
585  if ( is_null( $t ) ) {
586  return '';
587  }
588  return wfEscapeWikiText( $t->getText() );
589  }
590  public static function pagenamee( $parser, $title = null ) {
592  if ( is_null( $t ) ) {
593  return '';
594  }
595  return wfEscapeWikiText( $t->getPartialURL() );
596  }
597  public static function fullpagename( $parser, $title = null ) {
599  if ( is_null( $t ) || !$t->canTalk() ) {
600  return '';
601  }
602  return wfEscapeWikiText( $t->getPrefixedText() );
603  }
604  public static function fullpagenamee( $parser, $title = null ) {
606  if ( is_null( $t ) || !$t->canTalk() ) {
607  return '';
608  }
609  return wfEscapeWikiText( $t->getPrefixedURL() );
610  }
611  public static function subpagename( $parser, $title = null ) {
613  if ( is_null( $t ) ) {
614  return '';
615  }
616  return wfEscapeWikiText( $t->getSubpageText() );
617  }
618  public static function subpagenamee( $parser, $title = null ) {
620  if ( is_null( $t ) ) {
621  return '';
622  }
623  return wfEscapeWikiText( $t->getSubpageUrlForm() );
624  }
625  public static function rootpagename( $parser, $title = null ) {
627  if ( is_null( $t ) ) {
628  return '';
629  }
630  return wfEscapeWikiText( $t->getRootText() );
631  }
632  public static function rootpagenamee( $parser, $title = null ) {
634  if ( is_null( $t ) ) {
635  return '';
636  }
637  return wfEscapeWikiText( wfUrlencode( str_replace( ' ', '_', $t->getRootText() ) ) );
638  }
639  public static function basepagename( $parser, $title = null ) {
641  if ( is_null( $t ) ) {
642  return '';
643  }
644  return wfEscapeWikiText( $t->getBaseText() );
645  }
646  public static function basepagenamee( $parser, $title = null ) {
648  if ( is_null( $t ) ) {
649  return '';
650  }
651  return wfEscapeWikiText( wfUrlencode( str_replace( ' ', '_', $t->getBaseText() ) ) );
652  }
653  public static function talkpagename( $parser, $title = null ) {
655  if ( is_null( $t ) || !$t->canTalk() ) {
656  return '';
657  }
658  return wfEscapeWikiText( $t->getTalkPage()->getPrefixedText() );
659  }
660  public static function talkpagenamee( $parser, $title = null ) {
662  if ( is_null( $t ) || !$t->canTalk() ) {
663  return '';
664  }
665  return wfEscapeWikiText( $t->getTalkPage()->getPrefixedURL() );
666  }
667  public static function subjectpagename( $parser, $title = null ) {
669  if ( is_null( $t ) ) {
670  return '';
671  }
672  return wfEscapeWikiText( $t->getSubjectPage()->getPrefixedText() );
673  }
674  public static function subjectpagenamee( $parser, $title = null ) {
676  if ( is_null( $t ) ) {
677  return '';
678  }
679  return wfEscapeWikiText( $t->getSubjectPage()->getPrefixedURL() );
680  }
681 
692  public static function pagesincategory( $parser, $name = '', $arg1 = null, $arg2 = null ) {
694  static $magicWords = null;
695  if ( is_null( $magicWords ) ) {
696  $magicWords = new MagicWordArray( [
697  'pagesincategory_all',
698  'pagesincategory_pages',
699  'pagesincategory_subcats',
700  'pagesincategory_files'
701  ] );
702  }
703  static $cache = [];
704 
705  // split the given option to its variable
706  if ( self::matchAgainstMagicword( 'rawsuffix', $arg1 ) ) {
707  // {{pagesincategory:|raw[|type]}}
708  $raw = $arg1;
709  $type = $magicWords->matchStartToEnd( $arg2 );
710  } else {
711  // {{pagesincategory:[|type[|raw]]}}
712  $type = $magicWords->matchStartToEnd( $arg1 );
713  $raw = $arg2;
714  }
715  if ( !$type ) { // backward compatibility
716  $type = 'pagesincategory_all';
717  }
718 
720  if ( !$title ) { # invalid title
721  return self::formatRaw( 0, $raw );
722  }
723  $wgContLang->findVariantLink( $name, $title, true );
724 
725  // Normalize name for cache
726  $name = $title->getDBkey();
727 
728  if ( !isset( $cache[$name] ) ) {
729  $category = Category::newFromTitle( $title );
730 
731  $allCount = $subcatCount = $fileCount = $pagesCount = 0;
732  if ( $parser->incrementExpensiveFunctionCount() ) {
733  // $allCount is the total number of cat members,
734  // not the count of how many members are normal pages.
735  $allCount = (int)$category->getPageCount();
736  $subcatCount = (int)$category->getSubcatCount();
737  $fileCount = (int)$category->getFileCount();
738  $pagesCount = $allCount - $subcatCount - $fileCount;
739  }
740  $cache[$name]['pagesincategory_all'] = $allCount;
741  $cache[$name]['pagesincategory_pages'] = $pagesCount;
742  $cache[$name]['pagesincategory_subcats'] = $subcatCount;
743  $cache[$name]['pagesincategory_files'] = $fileCount;
744  }
745 
746  $count = $cache[$name][$type];
747  return self::formatRaw( $count, $raw );
748  }
749 
759  public static function pagesize( $parser, $page = '', $raw = null ) {
761 
762  if ( !is_object( $title ) ) {
763  return self::formatRaw( 0, $raw );
764  }
765 
766  // fetch revision from cache/database and return the value
767  $rev = self::getCachedRevisionObject( $parser, $title );
768  $length = $rev ? $rev->getSize() : 0;
769  return self::formatRaw( $length, $raw );
770  }
771 
784  public static function protectionlevel( $parser, $type = '', $title = '' ) {
785  $titleObject = Title::newFromText( $title );
786  if ( !( $titleObject instanceof Title ) ) {
787  $titleObject = $parser->mTitle;
788  }
789  if ( $titleObject->areRestrictionsLoaded() || $parser->incrementExpensiveFunctionCount() ) {
790  $restrictions = $titleObject->getRestrictions( strtolower( $type ) );
791  # Title::getRestrictions returns an array, its possible it may have
792  # multiple values in the future
793  return implode( $restrictions, ',' );
794  }
795  return '';
796  }
797 
810  public static function protectionexpiry( $parser, $type = '', $title = '' ) {
811  $titleObject = Title::newFromText( $title );
812  if ( !( $titleObject instanceof Title ) ) {
813  $titleObject = $parser->mTitle;
814  }
815  if ( $titleObject->areRestrictionsLoaded() || $parser->incrementExpensiveFunctionCount() ) {
816  $expiry = $titleObject->getRestrictionExpiry( strtolower( $type ) );
817  // getRestrictionExpiry() returns false on invalid type; trying to
818  // match protectionlevel() function that returns empty string instead
819  if ( $expiry === false ) {
820  $expiry = '';
821  }
822  return $expiry;
823  }
824  return '';
825  }
826 
834  public static function language( $parser, $code = '', $inLanguage = '' ) {
835  $code = strtolower( $code );
836  $inLanguage = strtolower( $inLanguage );
837  $lang = Language::fetchLanguageName( $code, $inLanguage );
838  return $lang !== '' ? $lang : wfBCP47( $code );
839  }
840 
850  public static function pad(
851  $parser, $string, $length, $padding = '0', $direction = STR_PAD_RIGHT
852  ) {
853  $padding = $parser->killMarkers( $padding );
854  $lengthOfPadding = mb_strlen( $padding );
855  if ( $lengthOfPadding == 0 ) {
856  return $string;
857  }
858 
859  # The remaining length to add counts down to 0 as padding is added
860  $length = min( $length, 500 ) - mb_strlen( $string );
861  # $finalPadding is just $padding repeated enough times so that
862  # mb_strlen( $string ) + mb_strlen( $finalPadding ) == $length
863  $finalPadding = '';
864  while ( $length > 0 ) {
865  # If $length < $lengthofPadding, truncate $padding so we get the
866  # exact length desired.
867  $finalPadding .= mb_substr( $padding, 0, $length );
868  $length -= $lengthOfPadding;
869  }
870 
871  if ( $direction == STR_PAD_LEFT ) {
872  return $finalPadding . $string;
873  } else {
874  return $string . $finalPadding;
875  }
876  }
877 
878  public static function padleft( $parser, $string = '', $length = 0, $padding = '0' ) {
879  return self::pad( $parser, $string, $length, $padding, STR_PAD_LEFT );
880  }
881 
882  public static function padright( $parser, $string = '', $length = 0, $padding = '0' ) {
883  return self::pad( $parser, $string, $length, $padding );
884  }
885 
891  public static function anchorencode( $parser, $text ) {
892  $text = $parser->killMarkers( $text );
893  return (string)substr( $parser->guessSectionNameFromWikiText( $text ), 1 );
894  }
895 
896  public static function special( $parser, $text ) {
897  list( $page, $subpage ) = SpecialPageFactory::resolveAlias( $text );
898  if ( $page ) {
899  $title = SpecialPage::getTitleFor( $page, $subpage );
900  return $title->getPrefixedText();
901  } else {
902  // unknown special page, just use the given text as its title, if at all possible
904  return $title ? $title->getPrefixedText() : self::special( $parser, 'Badtitle' );
905  }
906  }
907 
908  public static function speciale( $parser, $text ) {
909  return wfUrlencode( str_replace( ' ', '_', self::special( $parser, $text ) ) );
910  }
911 
920  public static function defaultsort( $parser, $text, $uarg = '' ) {
921  static $magicWords = null;
922  if ( is_null( $magicWords ) ) {
923  $magicWords = new MagicWordArray( [ 'defaultsort_noerror', 'defaultsort_noreplace' ] );
924  }
925  $arg = $magicWords->matchStartToEnd( $uarg );
926 
927  $text = trim( $text );
928  if ( strlen( $text ) == 0 ) {
929  return '';
930  }
931  $old = $parser->getCustomDefaultSort();
932  if ( $old === false || $arg !== 'defaultsort_noreplace' ) {
933  $parser->setDefaultSort( $text );
934  }
935 
936  if ( $old === false || $old == $text || $arg ) {
937  return '';
938  } else {
939  $converter = $parser->getConverterLanguage()->getConverter();
940  return '<span class="error">' .
941  wfMessage( 'duplicate-defaultsort',
942  // Message should be parsed, but these params should only be escaped.
943  $converter->markNoConversion( wfEscapeWikiText( $old ) ),
944  $converter->markNoConversion( wfEscapeWikiText( $text ) )
945  )->inContentLanguage()->text() .
946  '</span>';
947  }
948  }
949 
961  public static function filepath( $parser, $name = '', $argA = '', $argB = '' ) {
962  $file = wfFindFile( $name );
963 
964  if ( $argA == 'nowiki' ) {
965  // {{filepath: | option [| size] }}
966  $isNowiki = true;
967  $parsedWidthParam = $parser->parseWidthParam( $argB );
968  } else {
969  // {{filepath: [| size [|option]] }}
970  $parsedWidthParam = $parser->parseWidthParam( $argA );
971  $isNowiki = ( $argB == 'nowiki' );
972  }
973 
974  if ( $file ) {
975  $url = $file->getFullUrl();
976 
977  // If a size is requested...
978  if ( count( $parsedWidthParam ) ) {
979  $mto = $file->transform( $parsedWidthParam );
980  // ... and we can
981  if ( $mto && !$mto->isError() ) {
982  // ... change the URL to point to a thumbnail.
983  $url = wfExpandUrl( $mto->getUrl(), PROTO_RELATIVE );
984  }
985  }
986  if ( $isNowiki ) {
987  return [ $url, 'nowiki' => true ];
988  }
989  return $url;
990  } else {
991  return '';
992  }
993  }
994 
1002  public static function tagObj( $parser, $frame, $args ) {
1003  if ( !count( $args ) ) {
1004  return '';
1005  }
1006  $tagName = strtolower( trim( $frame->expand( array_shift( $args ) ) ) );
1007 
1008  if ( count( $args ) ) {
1009  $inner = $frame->expand( array_shift( $args ) );
1010  } else {
1011  $inner = null;
1012  }
1013 
1014  $attributes = [];
1015  foreach ( $args as $arg ) {
1016  $bits = $arg->splitArg();
1017  if ( strval( $bits['index'] ) === '' ) {
1018  $name = trim( $frame->expand( $bits['name'], PPFrame::STRIP_COMMENTS ) );
1019  $value = trim( $frame->expand( $bits['value'] ) );
1020  if ( preg_match( '/^(?:["\'](.+)["\']|""|\'\')$/s', $value, $m ) ) {
1021  $value = isset( $m[1] ) ? $m[1] : '';
1022  }
1023  $attributes[$name] = $value;
1024  }
1025  }
1026 
1027  $stripList = $parser->getStripList();
1028  if ( !in_array( $tagName, $stripList ) ) {
1029  // we can't handle this tag (at least not now), so just re-emit it as an ordinary tag
1030  $attrText = '';
1031  foreach ( $attributes as $name => $value ) {
1032  $attrText .= ' ' . htmlspecialchars( $name ) . '="' . htmlspecialchars( $value ) . '"';
1033  }
1034  if ( $inner === null ) {
1035  return "<$tagName$attrText/>";
1036  }
1037  return "<$tagName$attrText>$inner</$tagName>";
1038  }
1039 
1040  $params = [
1041  'name' => $tagName,
1042  'inner' => $inner,
1043  'attributes' => $attributes,
1044  'close' => "</$tagName>",
1045  ];
1046  return $parser->extensionSubstitution( $params, $frame );
1047  }
1048 
1061  private static function getCachedRevisionObject( $parser, $title = null ) {
1062  if ( is_null( $title ) ) {
1063  return null;
1064  }
1065 
1066  // Use the revision from the parser itself, when param is the current page
1067  // and the revision is the current one
1068  if ( $title->equals( $parser->getTitle() ) ) {
1069  $parserRev = $parser->getRevisionObject();
1070  if ( $parserRev && $parserRev->isCurrent() ) {
1071  // force reparse after edit with vary-revision flag
1072  $parser->getOutput()->setFlag( 'vary-revision' );
1073  wfDebug( __METHOD__ . ": use current revision from parser, setting vary-revision...\n" );
1074  return $parserRev;
1075  }
1076  }
1077 
1078  // Normalize name for cache
1079  $page = $title->getPrefixedDBkey();
1080 
1081  if ( !( $parser->currentRevisionCache && $parser->currentRevisionCache->has( $page ) )
1082  && !$parser->incrementExpensiveFunctionCount() ) {
1083  return null;
1084  }
1085  $rev = $parser->fetchCurrentRevisionOfTitle( $title );
1086  $pageID = $rev ? $rev->getPage() : 0;
1087  $revID = $rev ? $rev->getId() : 0;
1088 
1089  // Register dependency in templatelinks
1090  $parser->getOutput()->addTemplate( $title, $pageID, $revID );
1091 
1092  return $rev;
1093  }
1094 
1102  public static function pageid( $parser, $title = null ) {
1104  if ( is_null( $t ) ) {
1105  return '';
1106  }
1107  // Use title from parser to have correct pageid after edit
1108  if ( $t->equals( $parser->getTitle() ) ) {
1109  $t = $parser->getTitle();
1110  return $t->getArticleID();
1111  }
1112 
1113  // These can't have ids
1114  if ( !$t->canExist() || $t->isExternal() ) {
1115  return 0;
1116  }
1117 
1118  // Check the link cache, maybe something already looked it up.
1119  $linkCache = LinkCache::singleton();
1120  $pdbk = $t->getPrefixedDBkey();
1121  $id = $linkCache->getGoodLinkID( $pdbk );
1122  if ( $id != 0 ) {
1123  $parser->mOutput->addLink( $t, $id );
1124  return $id;
1125  }
1126  if ( $linkCache->isBadLink( $pdbk ) ) {
1127  $parser->mOutput->addLink( $t, 0 );
1128  return $id;
1129  }
1130 
1131  // We need to load it from the DB, so mark expensive
1132  if ( $parser->incrementExpensiveFunctionCount() ) {
1133  $id = $t->getArticleID();
1134  $parser->mOutput->addLink( $t, $id );
1135  return $id;
1136  }
1137  return null;
1138  }
1139 
1147  public static function revisionid( $parser, $title = null ) {
1149  if ( is_null( $t ) ) {
1150  return '';
1151  }
1152  // fetch revision from cache/database and return the value
1153  $rev = self::getCachedRevisionObject( $parser, $t );
1154  return $rev ? $rev->getId() : '';
1155  }
1156 
1164  public static function revisionday( $parser, $title = null ) {
1166  if ( is_null( $t ) ) {
1167  return '';
1168  }
1169  // fetch revision from cache/database and return the value
1170  $rev = self::getCachedRevisionObject( $parser, $t );
1171  return $rev ? MWTimestamp::getLocalInstance( $rev->getTimestamp() )->format( 'j' ) : '';
1172  }
1173 
1181  public static function revisionday2( $parser, $title = null ) {
1183  if ( is_null( $t ) ) {
1184  return '';
1185  }
1186  // fetch revision from cache/database and return the value
1187  $rev = self::getCachedRevisionObject( $parser, $t );
1188  return $rev ? MWTimestamp::getLocalInstance( $rev->getTimestamp() )->format( 'd' ) : '';
1189  }
1190 
1198  public static function revisionmonth( $parser, $title = null ) {
1200  if ( is_null( $t ) ) {
1201  return '';
1202  }
1203  // fetch revision from cache/database and return the value
1204  $rev = self::getCachedRevisionObject( $parser, $t );
1205  return $rev ? MWTimestamp::getLocalInstance( $rev->getTimestamp() )->format( 'm' ) : '';
1206  }
1207 
1215  public static function revisionmonth1( $parser, $title = null ) {
1217  if ( is_null( $t ) ) {
1218  return '';
1219  }
1220  // fetch revision from cache/database and return the value
1221  $rev = self::getCachedRevisionObject( $parser, $t );
1222  return $rev ? MWTimestamp::getLocalInstance( $rev->getTimestamp() )->format( 'n' ) : '';
1223  }
1224 
1232  public static function revisionyear( $parser, $title = null ) {
1234  if ( is_null( $t ) ) {
1235  return '';
1236  }
1237  // fetch revision from cache/database and return the value
1238  $rev = self::getCachedRevisionObject( $parser, $t );
1239  return $rev ? MWTimestamp::getLocalInstance( $rev->getTimestamp() )->format( 'Y' ) : '';
1240  }
1241 
1249  public static function revisiontimestamp( $parser, $title = null ) {
1251  if ( is_null( $t ) ) {
1252  return '';
1253  }
1254  // fetch revision from cache/database and return the value
1255  $rev = self::getCachedRevisionObject( $parser, $t );
1256  return $rev ? MWTimestamp::getLocalInstance( $rev->getTimestamp() )->format( 'YmdHis' ) : '';
1257  }
1258 
1266  public static function revisionuser( $parser, $title = null ) {
1268  if ( is_null( $t ) ) {
1269  return '';
1270  }
1271  // fetch revision from cache/database and return the value
1272  $rev = self::getCachedRevisionObject( $parser, $t );
1273  return $rev ? $rev->getUserText() : '';
1274  }
1275 
1288  public static function cascadingsources( $parser, $title = '' ) {
1289  $titleObject = Title::newFromText( $title );
1290  if ( !( $titleObject instanceof Title ) ) {
1291  $titleObject = $parser->mTitle;
1292  }
1293  if ( $titleObject->areCascadeProtectionSourcesLoaded()
1294  || $parser->incrementExpensiveFunctionCount()
1295  ) {
1296  $names = [];
1297  $sources = $titleObject->getCascadeProtectionSources();
1298  foreach ( $sources[0] as $sourceTitle ) {
1299  $names[] = $sourceTitle->getPrefixedText();
1300  }
1301  return implode( $names, '|' );
1302  }
1303  return '';
1304  }
1305 
1306 }
static newFromName($name, $validate= 'valid')
Static factory method for creation from username.
Definition: User.php:568
static numberofedits($parser, $raw=null)
static namespacenumber($parser, $title=null)
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
static decodeTagAttributes($text)
Return an associative array of attribute names and values from a partial tag string.
Definition: Sanitizer.php:1248
static formatRaw($num, $raw)
static numberofactiveusers($parser, $raw=null)
static subjectspacee($parser, $title=null)
static padleft($parser, $string= '', $length=0, $padding= '0')
static safeEncodeTagAttributes($assoc_array)
Build a partial tag string from an associative array of attribute names and values as returned by dec...
Definition: Sanitizer.php:1284
static urlFunction($func, $s= '', $arg=null)
static language($parser, $code= '', $inLanguage= '')
Gives language names.
static basepagename($parser, $title=null)
static getTitleFor($name, $subpage=false, $fragment= '')
Get a localised Title object for a specified special page name.
Definition: SpecialPage.php:75
static pagesize($parser, $page= '', $raw=null)
Return the size of the given page, or 0 if it's nonexistent.
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:1798
static singleton()
Definition: GenderCache.php:39
if(!isset($args[0])) $lang
processing should stop and the error should be shown to the user * false
Definition: hooks.txt:189
static rootpagenamee($parser, $title=null)
static formatnum($parser, $num= '', $arg=null)
static canonicalurle($parser, $s= '', $arg=null)
static fullpagenamee($parser, $title=null)
$value
static fullurle($parser, $s= '', $arg=null)
const NS_SPECIAL
Definition: Defines.php:58
static defaultsort($parser, $text, $uarg= '')
static lcfirst($parser, $s= '')
static activeUsers()
Definition: SiteStats.php:161
static protectionexpiry($parser, $type= '', $title= '')
Returns the requested protection expiry for the current page.
wfUrlencode($s)
We want some things to be included as literal characters in our title URLs for prettiness, which urlencode encodes by default.
static newFromText($text, $defaultNamespace=NS_MAIN)
Create a new Title from text, such as what one would find in a link.
Definition: Title.php:277
static getInstance($lang=null)
Get a DateFormatter object.
Represents a title within MediaWiki.
Definition: Title.php:34
static stripAllTags($text)
Take a fragment of (potentially invalid) HTML and return a version with any tags removed, encoded as plain text.
Definition: Sanitizer.php:1784
when a variable name is used in a it is silently declared as a new local masking the global
Definition: design.txt:93
wfExpandUrl($url, $defaultProto=PROTO_CURRENT)
Expand a potentially local URL to a fully-qualified URL.
static numberofusers($parser, $raw=null)
magic word & $parser
Definition: hooks.txt:2321
const SFH_NO_HASH
Definition: Parser.php:82
static revisionmonth($parser, $title=null)
Get the month with leading zeros from the last revision of a specified page.
static revisiontimestamp($parser, $title=null)
Get the timestamp from the last revision of a specified page.
wfDebug($text, $dest= 'all', array $context=[])
Sends a line to the debug log if enabled or, optionally, to a comment in output.
if($line===false) $args
Definition: cdb.php:64
static getLocalInstance($ts=false)
Get a timestamp instance in the server local timezone ($wgLocaltimezone)
static talkpagename($parser, $title=null)
static tagObj($parser, $frame, $args)
Parser function to extension tag adaptor.
static lc($parser, $s= '')
static filepath($parser, $name= '', $argA= '', $argB= '')
Usage {{filepath|300}}, {{filepath|nowiki}}, {{filepath|nowiki|300}} or {{filepath|300|nowiki}} or {{...
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:1798
static revisionuser($parser, $title=null)
Get the user from the last revision of a specified page.
static edits()
Definition: SiteStats.php:129
static grammar($parser, $case= '', $word= '')
static subpagenamee($parser, $title=null)
static anchorencode($parser, $text)
static localurl($parser, $s= '', $arg=null)
static talkspace($parser, $title=null)
static canonicalurl($parser, $s= '', $arg=null)
static subjectpagenamee($parser, $title=null)
wfEscapeWikiText($text)
Escapes the given text so that it may be output using addWikiText() without any linking, formatting, etc.
static revisionmonth1($parser, $title=null)
Get the month from the last revision of a specified page.
static revisionday2($parser, $title=null)
Get the day with leading zeros from the last revision of a specified page.
static talkpagenamee($parser, $title=null)
static singleton()
Get an instance of this class.
Definition: LinkCache.php:61
static formatDate($parser, $date, $defaultPref=null)
static intFunction($parser, $part1= '')
static subjectspace($parser, $title=null)
static basepagenamee($parser, $title=null)
const NS_MEDIA
Definition: Defines.php:57
static subjectpagename($parser, $title=null)
static urlencode($parser, $s= '', $arg=null)
urlencodes a string according to one of three patterns: (bug 22474)
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.
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 an< a > element with HTML attributes $attribs and contents $html will be returned If you return $ret will be returned and may include noclasses after processing after in associative array form externallinks including delete and has completed for all link tables whether this was an auto creation 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 unsetoffset-wrap String Wrap the message in html(usually something like"&lt
static newFromTitle($title)
Factory function.
Definition: Category.php:131
$cache
Definition: mcc.php:33
$params
const NS_CATEGORY
Definition: Defines.php:83
static makeTitleSafe($ns, $title, $fragment= '', $interwiki= '')
Create a new Title from a namespace index and a DB key.
Definition: Title.php:548
title
Various core parser functions, registered in Parser::firstCallInit()
wfBCP47($code)
Get the normalised IETF language tag See unit test for examples.
namespace and then decline to actually register it file or subcat img or subcat $title
Definition: hooks.txt:912
const PROTO_RELATIVE
Definition: Defines.php:263
static numberingroup($parser, $name= '', $raw=null)
const NS_FILE
Definition: Defines.php:75
static revisionday($parser, $title=null)
Get the day from the last revision of a specified page.
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:1584
static rootpagename($parser, $title=null)
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
Class for handling an array of magic words.
this hook is for auditing only or null if authentication failed before getting that far or null if we can t even determine that probably a stub 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:762
static fetchLanguageName($code, $inLanguage=null, $include= 'all')
Definition: Language.php:886
static & get($id)
Factory: creates an object representing an ID.
Definition: MagicWord.php:257
please add to it if you re going to add events to the MediaWiki code where normally authentication against an external auth plugin would be creating a local account $user
Definition: hooks.txt:242
static pagenamee($parser, $title=null)
static getCachedRevisionObject($parser, $title=null)
Fetched the current revision of the given title and return this.
static fullpagename($parser, $title=null)
static localurle($parser, $s= '', $arg=null)
static fullurl($parser, $s= '', $arg=null)
static images()
Definition: SiteStats.php:169
static subpagename($parser, $title=null)
static plural($parser, $text= '')
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
static mwnamespace($parser, $title=null)
Given a title, return the namespace name that would be given by the corresponding magic word Note: fu...
this hook is for auditing only or null if authentication failed before getting that far $username
Definition: hooks.txt:762
static numberofadmins($parser, $raw=null)
static matchAgainstMagicword($magicword, $value)
Matches the given value against the value of given magic word.
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.
static namespacee($parser, $title=null)
static resolveAlias($alias)
Given a special page name with a possible subpage, return an array where the first element is the spe...
static nse($parser, $part1= '')
static normalizeCharReferences($text)
Ensure that any entities and character references are legal for XML and XHTML specifically.
Definition: Sanitizer.php:1361
static articles()
Definition: SiteStats.php:137
static revisionid($parser, $title=null)
Get the id from the last revision of a specified page.
static bidi($parser, $text= '')
static pages()
Definition: SiteStats.php:145
static pagesInNs($ns)
Definition: SiteStats.php:226
static newFromURL($url)
THIS IS NOT THE FUNCTION YOU WANT.
Definition: Title.php:354
const SFH_OBJECT_ARGS
Definition: Parser.php:83
static gender($parser, $username)
this class mediates it Skin Encapsulates a look and feel for the wiki All of the functions that render HTML and make choices about how to render it are here and are called from various other places when and is meant to be subclassed with other skins that may override some of its functions The User object contains a reference to a and so rather than having a global skin object we just rely on the global User and get the skin with $wgUser and also has some character encoding functions and other locale stuff The current user interface language is instantiated as and the local content language as $wgContLang
Definition: design.txt:56
$wgAllowSlowParserFunctions
Enable slow parser functions.
static numberofpages($parser, $raw=null)
$count
static special($parser, $text)
static revisionyear($parser, $title=null)
Get the year from the last revision of a specified page.
static removeHTMLtags($text, $processCallback=null, $args=[], $extratags=[], $removetags=[])
Cleans up HTML, removes dangerous tags and attributes, and removes HTML comments. ...
Definition: Sanitizer.php:455
static checkCss($value)
Pick apart some CSS and check it for forbidden or unsafe structures.
Definition: Sanitizer.php:969
static numberingroup($group)
Find the number of users in a given user group.
Definition: SiteStats.php:179
static pagesinnamespace($parser, $namespace=0, $raw=null)
const STRIP_COMMENTS
static getDefaultOption($opt)
Get a given default option value.
Definition: User.php:1547
static ns($parser, $part1= '')
static uc($parser, $s= '')
static protectionlevel($parser, $type= '', $title= '')
Returns the requested protection level for the current page.
static ucfirst($parser, $s= '')
static cascadingsources($parser, $title= '')
Returns the sources of any cascading protection acting on a specified page.
static pageid($parser, $title=null)
Get the pageid of a specified page.
static displaytitle($parser, $text= '', $uarg= '')
Override the title of the page when viewed, provided we've been given a title which will normalise to...
wfFindFile($title, $options=[])
Find a file.
static users()
Definition: SiteStats.php:153
do that in ParserLimitReportFormat instead use this to modify the parameters of the image and a DIV can begin in one section and end in another Make sure your code can handle that case gracefully See the EditSectionClearerLink extension for an example zero but section is usually empty its values are the globals values before the output is cached one of or reset my talk my contributions etc etc otherwise the built in rate limiting checks are if enabled allows for interception of redirect as a string mapping parameter names to values & $type
Definition: hooks.txt:2338
static numberoffiles($parser, $raw=null)
static padright($parser, $string= '', $length=0, $padding= '0')
static talkspacee($parser, $title=null)
static speciale($parser, $text)
static & makeTitle($ns, $title, $fragment= '', $interwiki= '')
Create a new Title from a namespace index and a DB key.
Definition: Title.php:524
static pagename($parser, $title=null)
Functions to get and normalize pagenames, corresponding to the magic words of the same names...
if the prop value should be in the metadata multi language array format
Definition: hooks.txt:1473
do that in ParserLimitReportFormat instead use this to modify the parameters of the image and a DIV can begin in one section and end in another Make sure your code can handle that case gracefully See the EditSectionClearerLink extension for an example zero but section is usually empty its values are the globals values before the output is cached $page
Definition: hooks.txt:2338
static numberofarticles($parser, $raw=null)
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
Allows to change the fields on the form that will be generated $name
Definition: hooks.txt:310