X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FGlobalFunctions.php;h=5b4d8bc869a29ae92b194a9ece0d38433b6cdb5a;hb=44d31b681fc83aecc819a78662a5d75a4a8655b7;hp=85202aaae3867531c53b69adc35f4d1ac20cdf43;hpb=7bbe971aec2d548de981a12ed08a7b56a536dcdb;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php index 85202aaae3..5b4d8bc869 100644 --- a/includes/GlobalFunctions.php +++ b/includes/GlobalFunctions.php @@ -111,6 +111,19 @@ if ( !function_exists( 'array_diff_key' ) ) { if ( ! function_exists( 'ctype_alnum' ) ) require_once 'compatability/ctype.php'; +/** + * Wrapper for clone() for PHP 4, for the moment. + * PHP 5 won't let you declare a 'clone' function, even conditionally, + * so it has to be a wrapper with a different name. + */ +function wfClone( $object ) { + // WARNING: clone() is not a function in PHP 5, so function_exists fails. + if( version_compare( PHP_VERSION, '5.0' ) < 0 ) { + return $object; + } else { + return clone( $object ); + } +} /** * Where as we got a random seed @@ -434,7 +447,7 @@ function wfMsgGetKey( $key, $useDB, $forContent = false, $transform = true ) { if ( is_object( $wgMessageCache ) ) $transstat = $wgMessageCache->getTransform(); - + if( is_object( $wgMessageCache ) ) { if ( ! $transform ) $wgMessageCache->disableTransform(); @@ -463,7 +476,7 @@ function wfMsgGetKey( $key, $useDB, $forContent = false, $transform = true ) { if ( is_object( $wgMessageCache ) && ! $transform ) $wgMessageCache->setTransform( $transstat ); - + return $message; } @@ -481,16 +494,19 @@ function wfMsgReplaceArgs( $message, $args ) { $message = str_replace( "\r", '', $message ); // Replace arguments - if ( count( $args ) ) - if ( is_array( $args[0] ) ) - foreach ( $args[0] as $key => $val ) + if ( count( $args ) ) { + if ( is_array( $args[0] ) ) { + foreach ( $args[0] as $key => $val ) { $message = str_replace( '$' . $key, $val, $message ); - else { - foreach( $args as $n => $param ) - $replacementKeys['$' . ($n + 1)] = $param; - $message = strtr( $message, $replacementKeys ); + } + } else { + foreach( $args as $n => $param ) { + $replacementKeys['$' . ($n + 1)] = $param; + } + $message = strtr( $message, $replacementKeys ); + } } - + return $message; } @@ -537,7 +553,7 @@ function wfAbruptExit( $error = false ){ global $wgLoadBalancer; static $called = false; if ( $called ){ - exit(); + exit( -1 ); } $called = true; @@ -558,7 +574,7 @@ function wfAbruptExit( $error = false ){ if ( !$error ) { $wgLoadBalancer->closeAll(); } - exit(); + exit( -1 ); } /** @@ -568,6 +584,16 @@ function wfErrorExit() { wfAbruptExit( true ); } +/** + * Print a simple message and die, returning nonzero to the shell if any. + * Plain die() fails to return nonzero to the shell if you pass a string. + * @param string $msg + */ +function wfDie( $msg='' ) { + echo $msg; + die( -1 ); +} + /** * Die with a backtrace * This is meant as a debugging aid to track down where bad data comes from. @@ -707,7 +733,6 @@ function wfViewPrevNext( $offset, $limit, $link, $query = '', $atend = false ) { } } - $sk = $wgUser->getSkin(); if ( 0 != $offset ) { $po = $offset - $limit; if ( $po < 0 ) { $po = 0; } @@ -1328,49 +1353,66 @@ function swap( &$x, &$y ) { $y = $z; } -function wfGetSiteNotice() { - global $wgSiteNotice, $wgTitle, $wgOut, $parserMemc, $wgDBname; - $fname = 'wfGetSiteNotice'; +function wfGetCachedNotice( $name ) { + global $wgOut, $parserMemc, $wgDBname; + $fname = 'wfGetCachedNotice'; wfProfileIn( $fname ); - - $shouldParse=false; - - $notice = wfMsgForContent( 'sitenotice' ); - if( $notice == '<sitenotice>' || $notice == '-' ) { - $notice = ''; - } - if( $notice == '' ) { - # We may also need to override a message with eg downtime info - # FIXME: make this work! - $notice = $wgSiteNotice; + + $needParse = false; + $notice = wfMsgForContent( $name ); + if( $notice == '<'. $name . ';>' || $notice == '-' ) { + wfProfileOut( $fname ); + return( false ); } - if($notice != '-' && $notice != '') { - $cachednotice=$parserMemc->get("{$wgDBname}:sitenotice"); - if (is_array($cachednotice)) { - if (md5($notice)==$cachednotice['hash']) { - $notice = $cachednotice['html']; - } else { - $shouldParse=true; - } + + $cachedNotice = $parserMemc->get( $wgDBname . ':' . $name ); + if( is_array( $cachedNotice ) ) { + if( md5( $notice ) == $cachedNotice['hash'] ) { + $notice = $cachedNotice['html']; } else { - $shouldParse=true; + $needParse = true; } - if ($shouldParse) { - if( is_object( $wgOut ) ) { - $parsed = $wgOut->parse( $notice ); - $parserMemc->set("{$wgDBname}:sitenotice", - array('html' => $parsed, 'hash' => md5($notice)), 600); - $notice = $parsed; - } else { - wfDebug( "wfGetSiteNotice called with no \$wgOut available" ); - $notice = ''; - } + } else { + $needParse = true; + } + + if( $needParse ) { + if( is_object( $wgOut ) ) { + $parsed = $wgOut->parse( $notice ); + $parserMemc->set( $wgDBname . ':' . $name, array( 'html' => $parsed, 'hash' => md5( $notice ) ), 600 ); + $notice = $parsed; + } else { + wfDebug( 'wfGetCachedNotice called for ' . $name . ' with no $wgOut available' ); + $notice = ''; } } + wfProfileOut( $fname ); return $notice; } +function wfGetSiteNotice() { + global $wgUser, $wgSiteNotice; + $fname = 'wfGetSiteNotice'; + wfProfileIn( $fname ); + + if( $wgUser->isLoggedIn() ) { + $siteNotice = wfGetCachedNotice( 'sitenotice' ); + $siteNotice = !$siteNotice ? $wgSiteNotice : $siteNotice; + } else { + $anonNotice = wfGetCachedNotice( 'anonnotice' ); + if( !$anonNotice ) { + $siteNotice = wfGetCachedNotice( 'sitenotice' ); + $siteNotice = !$siteNotice ? $wgSiteNotice : $siteNotice; + } else { + $siteNotice = $anonNotice; + } + } + + wfProfileOut( $fname ); + return( $siteNotice ); +} + /** * Format an XML element with given attributes and, optionally, text content. * Element and attribute names are assumed to be ready for literal inclusion. @@ -1523,7 +1565,7 @@ function wfTempDir() { function wfMkdirParents( $fullDir, $mode ) { $parts = explode( '/', $fullDir ); $path = ''; - + foreach ( $parts as $dir ) { $path .= $dir . '/'; if ( !is_dir( $path ) ) { @@ -1621,7 +1663,7 @@ function wfUrlProtocols() { $protocols = array(); foreach ($wgUrlProtocols as $protocol) $protocols[] = preg_quote( $protocol, '/' ); - + return implode( '|', $protocols ); } @@ -1636,10 +1678,10 @@ function wfUrlProtocols() { */ function wfIsWellFormedXml( $text ) { $parser = xml_parser_create( "UTF-8" ); - + # case folding violates XML standard, turn it off xml_parser_set_option( $parser, XML_OPTION_CASE_FOLDING, false ); - + if( !xml_parse( $parser, $text, true ) ) { $err = xml_error_string( xml_get_error_code( $parser ) ); $position = xml_get_current_byte_index( $parser ); @@ -1662,8 +1704,7 @@ function wfIsWellFormedXml( $text ) { */ function wfIsWellFormedXmlFragment( $text ) { $html = - '' . + Sanitizer::hackDocType() . '' . $text . ''; @@ -1677,7 +1718,7 @@ function wfIsWellFormedXmlFragment( $text ) { function wfShellExec( $cmd ) { global $IP; - + if ( php_uname( 's' ) == 'Linux' ) { $time = ini_get( 'max_execution_time' ); $mem = ini_get( 'memory_limit' ); @@ -1712,7 +1753,7 @@ function wfShellExec( $cmd ) */ function wfUsePHP( $req_ver ) { $php_ver = PHP_VERSION; - + if ( version_compare( $php_ver, (string)$req_ver, '<' ) ) wfDebugDieBacktrace( "PHP $req_ver required--this is only $php_ver" ); } @@ -1750,4 +1791,23 @@ function wfRegexReplacement( $string ) { return $string; } +/** + * Return the final portion of a pathname. + * Reimplemented because PHP5's basename() is buggy with multibyte text. + * http://bugs.php.net/bug.php?id=33898 + * + * PHP's basename() only considers '\' a pathchar on Windows and Netware. + * We'll consider it so always, as we don't want \s in our Unix paths either. + * + * @param string $path + * @return string + */ +function wfBaseName( $path ) { + if( preg_match( '#([^/\\\\]*)[/\\\\]*$#', $path, $matches ) ) { + return $matches[1]; + } else { + return ''; + } +} + ?>