* Wont work
[lhc/web/wiklou.git] / includes / GlobalFunctions.php
index ea23048..312d190 100644 (file)
@@ -8,20 +8,6 @@ if ( !defined( 'MEDIAWIKI' ) ) {
  * Global functions used everywhere
  */
 
-/**
- * Some globals and requires needed
- */
-
-/** Total number of articles */
-$wgNumberOfArticles = -1; # Unset
-
-/** Total number of views */
-$wgTotalViews = -1;
-
-/** Total number of edits */
-$wgTotalEdits = -1;
-
-
 require_once dirname(__FILE__) . '/LogPage.php';
 require_once dirname(__FILE__) . '/normal/UtfNormalUtil.php';
 require_once dirname(__FILE__) . '/XmlFunctions.php';
@@ -111,11 +97,6 @@ function wfClone( $object ) {
        return clone( $object );
 }
 
-/**
- * Where as we got a random seed
- */
-$wgRandomSeeded = false;
-
 /**
  * Seed Mersenne Twister
  * No-op for compatibility; only necessary in PHP < 4.2.0
@@ -416,11 +397,10 @@ function wfMsgNoDBForContent( $key ) {
  * @return String: the requested message.
  */
 function wfMsgReal( $key, $args, $useDB = true, $forContent=false, $transform = true ) {
-       $fname = 'wfMsgReal';
-       wfProfileIn( $fname );
+       wfProfileIn( __METHOD__ );
        $message = wfMsgGetKey( $key, $useDB, $forContent, $transform );
        $message = wfMsgReplaceArgs( $message, $args );
-       wfProfileOut( $fname );
+       wfProfileOut( __METHOD__ );
        return $message;
 }
 
@@ -569,6 +549,7 @@ function wfMsgWikiHtml( $key ) {
  *  <i>escape</i>: filters message trough htmlspecialchars
  *  <i>replaceafter</i>: parameters are substituted after parsing or escaping
  *  <i>parsemag</i>: transform the message using magic phrases
+ *  <i>content</i>: fetch message for content language instead of interface
  */
 function wfMsgExt( $key, $options ) {
        global $wgOut, $wgParser;
@@ -581,24 +562,29 @@ function wfMsgExt( $key, $options ) {
                $options = array($options);
        }
 
-       $string = wfMsgGetKey( $key, true, false, false );
+       $forContent = false;
+       if( in_array('content', $options) ) {
+               $forContent = true;
+       }
+
+       $string = wfMsgGetKey( $key, /*DB*/true, $forContent, /*Transform*/false );
 
        if( !in_array('replaceafter', $options) ) {
                $string = wfMsgReplaceArgs( $string, $args );
        }
 
        if( in_array('parse', $options) ) {
-               $string = $wgOut->parse( $string, true, true );
+               $string = $wgOut->parse( $string, true, !$forContent );
        } elseif ( in_array('parseinline', $options) ) {
-               $string = $wgOut->parse( $string, true, true );
+               $string = $wgOut->parse( $string, true, !$forContent );
                $m = array();
-               if( preg_match( '/^<p>(.*)\n?<\/p>$/sU', $string, $m ) ) {
+               if( preg_match( '/^<p>(.*)\n?<\/p>\n?$/sU', $string, $m ) ) {
                        $string = $m[1];
                }
        } elseif ( in_array('parsemag', $options) ) {
                global $wgMessageCache;
                if ( isset( $wgMessageCache ) ) {
-                       $string = $wgMessageCache->transform( $string );
+                       $string = $wgMessageCache->transform( $string, !$forContent );
                }
        }
 
@@ -1772,6 +1758,38 @@ function wfUrlProtocols() {
        }
 }
 
+/**
+ * Safety wrapper around ini_get() for boolean settings.
+ * The values returned from ini_get() are pre-normalized for settings
+ * set via php.ini or php_flag/php_admin_flag... but *not*
+ * for those set via php_value/php_admin_value.
+ *
+ * It's fairly common for people to use php_value instead of php_flag,
+ * which can leave you with an 'off' setting giving a false positive
+ * for code that just takes the ini_get() return value as a boolean.
+ *
+ * To make things extra interesting, setting via php_value accepts
+ * "true" and "yes" as true, but php.ini and php_flag consider them false. :)
+ * Unrecognized values go false... again opposite PHP's own coercion
+ * from string to bool.
+ *
+ * Luckily, 'properly' set settings will always come back as '0' or '1',
+ * so we only have to worry about them and the 'improper' settings.
+ *
+ * I frickin' hate PHP... :P
+ *
+ * @param string $setting
+ * @return bool
+ */
+function wfIniGetBool( $setting ) {
+       $val = ini_get( $setting );
+       // 'on' and 'true' can't have whitespace around them, but '1' can.
+       return strtolower( $val ) == 'on'
+               || strtolower( $val ) == 'true'
+               || strtolower( $val ) == 'yes'
+               || preg_match( "/^\s*[+-]?0*[1-9]/", $val ); // approx C atoi() function
+}
+
 /**
  * Execute a shell command, with time and memory limits mirrored from the PHP
  * configuration if supported.
@@ -1783,7 +1801,7 @@ function wfUrlProtocols() {
 function wfShellExec( $cmd, &$retval=null ) {
        global $IP, $wgMaxShellMemory, $wgMaxShellFileSize;
        
-       if( ini_get( 'safe_mode' ) ) {
+       if( wfIniGetBool( 'safe_mode' ) ) {
                wfDebug( "wfShellExec can't run in safe_mode, PHP's exec functions are too broken.\n" );
                $retval = 1;
                return "Unable to run external programs in safe mode.";
@@ -2310,4 +2328,14 @@ function wfLoadExtensionMessages( $extensionName ) {
        }
 }
 
-
+/**
+ * Get a platform-independent path to the null file, e.g.
+ * /dev/null
+ *
+ * @return string
+ */
+function wfGetNull() {
+       return wfIsWindows()
+               ? 'NUL'
+               : '/dev/null';
+}
\ No newline at end of file