X-Git-Url: https://git.cyclocoop.org/%27.WWW_URL.%27admin/?a=blobdiff_plain;f=includes%2Fparser%2FCoreParserFunctions.php;h=67abb10dfc7ccc151ed2179ebaff5bfd7648f0c1;hb=d761eab34985f57a3e304198db60a1d9b1fc51bc;hp=251f938e453eaec2f4cefa3d6bf8d9f46fd3e1c0;hpb=9e96f8db7726bddd4e4394b0d97a5779fe353abf;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/parser/CoreParserFunctions.php b/includes/parser/CoreParserFunctions.php index 251f938e45..67abb10dfc 100644 --- a/includes/parser/CoreParserFunctions.php +++ b/includes/parser/CoreParserFunctions.php @@ -1,10 +1,19 @@ mOptions->getUserLang(), false ); - $message = wfMsgReplaceArgs( $message, $args ); - $message = $parser->replaceVariables( $message ); // like $wgMessageCache->transform() + $message = wfMessage( $part1, $args )->inLanguage( $parser->getOptions()->getUserLang() )->plain(); + $message = $parser->replaceVariables( $message ); // like MessageCache::transform() return $message; } else { return array( 'found' => false ); } } + /** + * @param $parser Parser + * @param $date + * @param null $defaultPref + * @return mixed|string + */ static function formatDate( $parser, $date, $defaultPref = null ) { $df = DateFormatter::getInstance(); $date = trim( $date ); - $pref = $parser->mOptions->getDateFormat(); + $pref = $parser->getOptions()->getDateFormat(); // Specify a different default date format other than the the normal default // iff the user has 'default' for their setting @@ -167,6 +186,11 @@ class CoreParserFunctions { return $wgContLang->ucfirst( $s ); } + /** + * @param $parser Parser + * @param string $s + * @return + */ static function lc( $parser, $s = '' ) { global $wgContLang; if ( is_callable( array( $parser, 'markerSkipCallback' ) ) ) { @@ -176,6 +200,11 @@ class CoreParserFunctions { } } + /** + * @param $parser Parser + * @param string $s + * @return + */ static function uc( $parser, $s = '' ) { global $wgContLang; if ( is_callable( array( $parser, 'markerSkipCallback' ) ) ) { @@ -214,6 +243,12 @@ class CoreParserFunctions { } } + /** + * @param $parser Parser + * @param string $num + * @param null $raw + * @return + */ static function formatNum( $parser, $num = '', $raw = null) { if ( self::israw( $raw ) ) { return $parser->getFunctionLang()->parseFormattedNumber( $num ); @@ -222,35 +257,54 @@ class CoreParserFunctions { } } + /** + * @param $parser Parser + * @param string $case + * @param string $word + * @return + */ static function grammar( $parser, $case = '', $word = '' ) { return $parser->getFunctionLang()->convertGrammar( $word, $case ); } - static function gender( $parser, $user ) { + /** + * @param $parser Parser + * @param $username string + * @return + */ + static function gender( $parser, $username ) { wfProfileIn( __METHOD__ ); $forms = array_slice( func_get_args(), 2); + $username = trim( $username ); + // default $gender = User::getDefaultOption( 'gender' ); // allow prefix. - $title = Title::newFromText( $user ); + $title = Title::newFromText( $username ); - if ( is_object( $title ) && $title->getNamespace() == NS_USER ) - $user = $title->getText(); + if ( $title && $title->getNamespace() == NS_USER ) { + $username = $title->getText(); + } - // check parameter, or use $wgUser if in interface message - $user = User::newFromName( $user ); + // check parameter, or use the ParserOptions if in interface message + $user = User::newFromName( $username ); if ( $user ) { $gender = $user->getOption( 'gender' ); - } elseif ( $parser->mOptions->getInterfaceMessage() ) { - global $wgUser; - $gender = $wgUser->getOption( 'gender' ); + } elseif ( $username === '' && $parser->getOptions()->getInterfaceMessage() ) { + $gender = $parser->getOptions()->getUser()->getOption( 'gender' ); } $ret = $parser->getFunctionLang()->gender( $gender, $forms ); wfProfileOut( __METHOD__ ); return $ret; } + + /** + * @param $parser Parser + * @param string $text + * @return + */ static function plural( $parser, $text = '' ) { $forms = array_slice( func_get_args(), 2 ); $text = $parser->getFunctionLang()->parseFormattedNumber( $text ); @@ -391,10 +445,11 @@ class CoreParserFunctions { return ''; return wfUrlencode( $t->getSubjectNsText() ); } - /* + + /** * Functions to get and normalize pagenames, corresponding to the magic words * of the same names - */ + */ static function pagename( $parser, $title = null ) { $t = Title::newFromText( $title ); if ( is_null( $t ) ) @@ -405,7 +460,7 @@ class CoreParserFunctions { $t = Title::newFromText( $title ); if ( is_null( $t ) ) return ''; - return $t->getPartialURL(); + return wfEscapeWikiText( $t->getPartialURL() ); } static function fullpagename( $parser, $title = null ) { $t = Title::newFromText( $title ); @@ -417,31 +472,31 @@ class CoreParserFunctions { $t = Title::newFromText( $title ); if ( is_null( $t ) || !$t->canTalk() ) return ''; - return $t->getPrefixedURL(); + return wfEscapeWikiText( $t->getPrefixedURL() ); } static function subpagename( $parser, $title = null ) { $t = Title::newFromText( $title ); if ( is_null( $t ) ) return ''; - return $t->getSubpageText(); + return wfEscapeWikiText( $t->getSubpageText() ); } static function subpagenamee( $parser, $title = null ) { $t = Title::newFromText( $title ); if ( is_null( $t ) ) return ''; - return $t->getSubpageUrlForm(); + return wfEscapeWikiText( $t->getSubpageUrlForm() ); } static function basepagename( $parser, $title = null ) { $t = Title::newFromText( $title ); if ( is_null( $t ) ) return ''; - return $t->getBaseText(); + return wfEscapeWikiText( $t->getBaseText() ); } static function basepagenamee( $parser, $title = null ) { $t = Title::newFromText( $title ); if ( is_null( $t ) ) return ''; - return wfUrlEncode( str_replace( ' ', '_', $t->getBaseText() ) ); + return wfEscapeWikiText( wfUrlEncode( str_replace( ' ', '_', $t->getBaseText() ) ) ); } static function talkpagename( $parser, $title = null ) { $t = Title::newFromText( $title ); @@ -453,7 +508,7 @@ class CoreParserFunctions { $t = Title::newFromText( $title ); if ( is_null( $t ) || !$t->canTalk() ) return ''; - return $t->getTalkPage()->getPrefixedUrl(); + return wfEscapeWikiText( $t->getTalkPage()->getPrefixedUrl() ); } static function subjectpagename( $parser, $title = null ) { $t = Title::newFromText( $title ); @@ -465,7 +520,7 @@ class CoreParserFunctions { $t = Title::newFromText( $title ); if ( is_null( $t ) ) return ''; - return $t->getSubjectPage()->getPrefixedUrl(); + return wfEscapeWikiText( $t->getSubjectPage()->getPrefixedUrl() ); } /** @@ -498,12 +553,13 @@ class CoreParserFunctions { * Return the size of the given page, or 0 if it's nonexistent. This is an * expensive parser function and can't be called too many times per page. * - * @todo Fixme: This doesn't work correctly on preview for getting the size + * @todo FIXME: This doesn't work correctly on preview for getting the size * of the current page. - * @todo Fixme: Title::getLength() documentation claims that it adds things + * @todo FIXME: Title::getLength() documentation claims that it adds things * to the link cache, so the local cache here should be unnecessary, but * in fact calling getLength() repeatedly for the same $page does seem to * run one query for each call? + * @param $parser Parser */ static function pagesize( $parser, $page = '', $raw = null ) { static $cache = array(); @@ -581,12 +637,17 @@ class CoreParserFunctions { return self::pad( $string, $length, $padding ); } + /** + * @param $parser Parser + * @param $text + * @return string + */ static function anchorencode( $parser, $text ) { return substr( $parser->guessSectionNameFromWikiText( $text ), 1); } static function special( $parser, $text ) { - list( $page, $subpage ) = SpecialPage::resolveAliasWithSubpage( $text ); + list( $page, $subpage ) = SpecialPageFactory::resolveAlias( $text ); if ( $page ) { $title = SpecialPage::getTitleFor( $page, $subpage ); return $title; @@ -595,6 +656,11 @@ class CoreParserFunctions { } } + /** + * @param $parser Parser + * @param $text + * @return string + */ public static function defaultsort( $parser, $text ) { $text = trim( $text ); if( strlen( $text ) == 0 ) @@ -611,11 +677,41 @@ class CoreParserFunctions { '' ); } - public static function filepath( $parser, $name='', $option='' ) { + // Usage {{filepath|300}}, {{filepath|nowiki}}, {{filepath|nowiki|300}} or {{filepath|300|nowiki}} + public static function filepath( $parser, $name='', $argA='', $argB='' ) { $file = wfFindFile( $name ); - if( $file ) { + $size = ''; + $argA_int = intval( $argA ); + $argB_int = intval( $argB ); + + if ( $argB_int > 0 ) { + // {{filepath: | option | size }} + $size = $argB_int; + $option = $argA; + + } elseif ( $argA_int > 0 ) { + // {{filepath: | size [|option] }} + $size = $argA_int; + $option = $argB; + + } else { + // {{filepath: [|option] }} + $option = $argA; + } + + if ( $file ) { $url = $file->getFullUrl(); - if( $option == 'nowiki' ) { + + // If a size is requested... + if ( is_integer( $size ) ) { + $mto = $file->transform( array( 'width' => $size ) ); + // ... and we can + if ( $mto && !$mto->isError() ) { + // ... change the URL to point to a thumbnail. + $url = wfExpandUrl( $mto->getUrl() ); + } + } + if ( $option == 'nowiki' ) { return array( $url, 'nowiki' => true ); } return $url; @@ -628,7 +724,6 @@ class CoreParserFunctions { * Parser function to extension tag adaptor */ public static function tagObj( $parser, $frame, $args ) { - $xpath = false; if ( !count( $args ) ) { return ''; }