global $wgOut, $wgDebugLogFile, $wgDebugComments, $wgProfileOnly, $wgDebugRawPage;
static $recursion = 0;
+ static $cache = array(); // Cache of unoutputted messages
+
# Check for raw action using $_GET not $wgRequest, since the latter might not be initialised yet
if ( isset( $_GET['action'] ) && $_GET['action'] == 'raw' && !$wgDebugRawPage ) {
return;
}
if ( $wgDebugComments && !$logonly ) {
+ $cache[] = $text;
+
if ( !isset( $wgOut ) ) {
return;
}
$wgOut->_unstub();
$recursion--;
}
- $wgOut->debug( $text );
+
+ // add the message and possible cached ones to the output
+ array_map( array( $wgOut, 'debug' ), $cache );
+ $cache = array();
}
if ( '' != $wgDebugLogFile && !$wgProfileOnly ) {
# Strip unprintables; they can switch terminal modes when binary data
$langCode = $options['language'];
$validCodes = array_keys( Language::getLanguageNames() );
if( !in_array($options['language'], $validCodes) ) {
- $langCode = false;
+ # Fallback to en, instead of whatever interface language we might have
+ $langCode = 'en';
}
} else {
$forContent = false;
if ( '' != $cgi ) {
$cgi .= '&';
}
- $cgi .= urlencode( $key ) . '=' . urlencode( $value );
+ if(is_array($value))
+ {
+ $firstTime = true;
+ foreach($value as $v)
+ {
+ $cgi .= ($firstTime ? '' : '&') .
+ urlencode( $key . '[]' ) . '=' .
+ urlencode( $v );
+ $firstTime = false;
+ }
+ }
+ else
+ $cgi .= urlencode( $key ) . '=' .
+ urlencode( $value );
}
}
return $cgi;
function wfAcceptToPrefs( $accept, $def = '*/*' ) {
# No arg means accept anything (per HTTP spec)
if( !$accept ) {
- return array( $def => 1 );
+ return array( $def => 1.0 );
}
$prefs = array();
foreach( $parts as $part ) {
# FIXME: doesn't deal with params like 'text/html; level=1'
- @list( $value, $qpart ) = explode( ';', $part );
+ @list( $value, $qpart ) = explode( ';', trim( $part ) );
$match = array();
if( !isset( $qpart ) ) {
- $prefs[$value] = 1;
+ $prefs[$value] = 1.0;
} elseif( preg_match( '/q\s*=\s*(\d*\.\d+)/', $qpart, $match ) ) {
- $prefs[$value] = $match[1];
+ $prefs[$value] = floatval($match[1]);
}
}
return true;
if( file_exists( $fullDir ) )
return true;
- return mkdir( str_replace( '/', DIRECTORY_SEPARATOR, $fullDir ), $mode, true );
+
+ # Go back through the paths to find the first directory that exists
+ $currentDir = $fullDir;
+ $createList = array();
+ while ( strval( $currentDir ) !== '' && !file_exists( $currentDir ) ) {
+ # Strip trailing slashes
+ $currentDir = rtrim( $currentDir, '/\\' );
+
+ # Add to create list
+ $createList[] = $currentDir;
+
+ # Find next delimiter searching from the end
+ $p = max( strrpos( $currentDir, '/' ), strrpos( $currentDir, '\\' ) );
+ if ( $p === false ) {
+ $currentDir = false;
+ } else {
+ $currentDir = substr( $currentDir, 0, $p );
+ }
+ }
+
+ if ( count( $createList ) == 0 ) {
+ # Directory specified already exists
+ return true;
+ } elseif ( $currentDir === false ) {
+ # Went all the way back to root and it apparently doesn't exist
+ wfDebugLog( 'mkdir', "Root doesn't exist?\n" );
+ return false;
+ }
+ # Now go forward creating directories
+ $createList = array_reverse( $createList );
+
+ # Is the parent directory writable?
+ if ( $currentDir === '' ) {
+ $currentDir = '/';
+ }
+ if ( !is_writable( $currentDir ) ) {
+ wfDebugLog( 'mkdir', "Not writable: $currentDir\n" );
+ return false;
+ }
+
+ foreach ( $createList as $dir ) {
+ # use chmod to override the umask, as suggested by the PHP manual
+ if ( !mkdir( $dir, $mode ) || !chmod( $dir, $mode ) ) {
+ wfDebugLog( 'mkdir', "Unable to create directory $dir\n" );
+ return false;
+ }
+ }
+ return true;
}
/**
* @param string $userid ID of the user
* @param string $password Password of the user
* @return string Hashed password
+ * @deprecated Use User::crypt() or User::oldCrypt() instead
*/
function wfEncryptPassword( $userid, $password ) {
- global $wgPasswordSalt;
- $p = md5( $password);
-
- if($wgPasswordSalt)
- return md5( "{$userid}-{$p}" );
- else
- return $p;
+ wfDeprecated(__FUNCTION__);
+ # Just wrap around User::oldCrypt()
+ return User::oldCrypt($password, $userid);
}
/**
$loaded[$extensionName] = array();
}
+ if ( !isset($wgExtensionMessagesFiles[$extensionName]) ) {
+ throw new MWException( "Messages file for extensions $extensionName is not defined" );
+ }
+
if( !$langcode && !array_key_exists( '*', $loaded[$extensionName] ) ) {
# Just do en, content language and user language.
$wgMessageCache->loadMessagesFile( $wgExtensionMessagesFiles[$extensionName], false );
$salt = serialize($salt);
return md5( mt_rand( 0, 0x7fffffff ) . $salt );
-}
+}
\ No newline at end of file