getDBkey(); // $hash = md5( $name ); // // $url = "{$wgUploadPath}/thumb/" . $hash{0} . "/" . // substr( $hash, 0, 2 ) . "/{$name}"; // return wfUrlencode( $url ); //} function wfImageArchiveUrl( $name ) { global $wgUploadPath; $hash = md5( substr( $name, 15) ); $url = "{$wgUploadPath}/archive/" . $hash{0} . "/" . substr( $hash, 0, 2 ) . "/{$name}"; return wfUrlencode($url); } function wfUrlencode ( $s ) { $s = urlencode( $s ); $s = preg_replace( '/%3[Aa]/', ':', $s ); $s = preg_replace( '/%2[Ff]/', '/', $s ); return $s; } function wfUtf8Sequence($codepoint) { if($codepoint < 0x80) return chr($codepoint); if($codepoint < 0x800) return chr($codepoint >> 6 & 0x3f | 0xc0) . chr($codepoint & 0x3f | 0x80); if($codepoint < 0x10000) return chr($codepoint >> 12 & 0x0f | 0xe0) . chr($codepoint >> 6 & 0x3f | 0x80) . chr($codepoint & 0x3f | 0x80); if($codepoint < 0x100000) return chr($codepoint >> 18 & 0x07 | 0xf0) . # Double-check this chr($codepoint >> 12 & 0x3f | 0x80) . chr($codepoint >> 6 & 0x3f | 0x80) . chr($codepoint & 0x3f | 0x80); # Doesn't yet handle outside the BMP return "&#$codepoint;"; } function wfMungeToUtf8($string) { global $wgInputEncoding; # This is debatable #$string = iconv($wgInputEncoding, "UTF-8", $string); $string = preg_replace ( '/&#([0-9]+);/e', 'wfUtf8Sequence($1)', $string ); $string = preg_replace ( '/&#x([0-9a-f]+);/ie', 'wfUtf8Sequence(0x$1)', $string ); # Should also do named entities here return $string; } # Converts a single UTF-8 character into the corresponding HTML character entity function wfUtf8Entity( $matches ) { $char = $matches[0]; # Find the length $z = ord( $char{0} ); if ( $z & 0x80 ) { $length = 0; while ( $z & 0x80 ) { $length++; $z <<= 1; } } else { $length = 1; } if ( $length != strlen( $char ) ) { return ''; } if ( $length == 1 ) { return $char; } # Mask off the length-determining bits and shift back to the original location $z &= 0xff; $z >>= $length; # Add in the free bits from subsequent bytes for ( $i=1; $i<$length; $i++ ) { $z <<= 6; $z |= ord( $char{$i} ) & 0x3f; } # Make entity return "&#$z;"; } # Converts all multi-byte characters in a UTF-8 string into the appropriate character entity function wfUtf8ToHTML($string) { return preg_replace_callback( '/[\\xc0-\\xfd][\\x80-\\xbf]*/', 'wfUtf8Entity', $string ); } function wfDebug( $text, $logonly = false ) { global $wgOut, $wgDebugLogFile, $wgDebugComments, $wgProfileOnly; if ( isset( $wgOut ) && $wgDebugComments && !$logonly ) { $wgOut->debug( $text ); } if ( "" != $wgDebugLogFile && !$wgProfileOnly ) { error_log( $text, 3, $wgDebugLogFile ); } } function logProfilingData() { global $wgRequestTime, $wgDebugLogFile; global $wgProfiling, $wgProfileStack, $wgProfileLimit, $wgUser; $now = wfTime(); list( $usec, $sec ) = explode( " ", $wgRequestTime ); $start = (float)$sec + (float)$usec; $elapsed = $now - $start; if ( $wgProfiling ) { $prof = wfGetProfilingOutput( $start, $elapsed ); $forward = ''; if( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) $forward = ' forwarded for ' . $_SERVER['HTTP_X_FORWARDED_FOR']; if( !empty( $_SERVER['HTTP_CLIENT_IP'] ) ) $forward .= ' client IP ' . $_SERVER['HTTP_CLIENT_IP']; if( !empty( $_SERVER['HTTP_FROM'] ) ) $forward .= ' from ' . $_SERVER['HTTP_FROM']; if( $forward ) $forward = "\t(proxied via {$_SERVER['REMOTE_ADDR']}{$forward})"; if($wgUser->getId() == 0) $forward .= ' anon'; $log = sprintf( "%s\t%04.3f\t%s\n", gmdate( 'YmdHis' ), $elapsed, urldecode( $_SERVER['REQUEST_URI'] . $forward ) ); if ( '' != $wgDebugLogFile ) { error_log( $log . $prof, 3, $wgDebugLogFile ); } } } function wfReadOnly() { global $wgReadOnlyFile; if ( "" == $wgReadOnlyFile ) { return false; } return is_file( $wgReadOnlyFile ); } $wgReplacementKeys = array( "$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8", "$9" ); # Get a message from anywhere function wfMsg( $key ) { $args = func_get_args(); if ( count( $args ) ) { array_shift( $args ); } return wfMsgReal( $key, $args, true ); } # Get a message from the language file function wfMsgNoDB( $key ) { $args = func_get_args(); if ( count( $args ) ) { array_shift( $args ); } return wfMsgReal( $key, $args, false ); } # Really get a message function wfMsgReal( $key, $args, $useDB ) { global $wgReplacementKeys, $wgMessageCache, $wgLang; $fname = 'wfMsg'; wfProfileIn( $fname ); if ( $wgMessageCache ) { $message = $wgMessageCache->get( $key, $useDB ); } elseif ( $wgLang ) { $message = $wgLang->getMessage( $key ); } else { wfDebug( "No language object when getting $key\n" ); $message = "<$key>"; } # Replace arguments if( count( $args ) ) { $message = str_replace( $wgReplacementKeys, $args, $message ); } wfProfileOut( $fname ); return $message; } function wfCleanFormFields( $fields ) { wfDebugDieBacktrace( 'Call to obsolete wfCleanFormFields(). Use wgRequest instead...' ); } function wfMungeQuotes( $in ) { $out = str_replace( '%', '%25', $in ); $out = str_replace( "'", '%27', $out ); $out = str_replace( '"', '%22', $out ); return $out; } function wfDemungeQuotes( $in ) { $out = str_replace( '%22', '"', $in ); $out = str_replace( '%27', "'", $out ); $out = str_replace( '%25', '%', $out ); return $out; } function wfCleanQueryVar( $var ) { wfDebugDieBacktrace( 'Call to obsolete function wfCleanQueryVar(); use wgRequest instead' ); } function wfSearch( $s ) { $se = new SearchEngine( $s ); $se->showResults(); } function wfGo( $s ) { # pick the nearest match $se = new SearchEngine( $s ); $se->goResult(); } # Just like exit() but makes a note of it. function wfAbruptExit(){ static $called = false; if ( $called ){ exit(); } $called = true; if( function_exists( 'debug_backtrace' ) ){ // PHP >= 4.3 $bt = debug_backtrace(); for($i = 0; $i < count($bt) ; $i++){ $file = $bt[$i]['file']; $line = $bt[$i]['line']; wfDebug("WARNING: Abrupt exit in $file at line $line\n"); } } else { wfDebug('WARNING: Abrupt exit\n'); } exit(); } function wfDebugDieBacktrace( $msg = '' ) { $msg .= "\n

Backtrace:

\n