Merging Vector's navigation_urls and SkinTemplate's content_actions code into content...
[lhc/web/wiklou.git] / includes / GlobalFunctions.php
index 2e8986e..d636b44 100644 (file)
@@ -595,6 +595,26 @@ function wfMessage( $key /*...*/) {
        return new Message( $key, $params );
 }
 
+/**
+ * This function accepts multiple message keys and returns a message instance
+ * for the first message which is non-empty. If all messages are empty then an
+ * instance of the first message key is returned.
+ * Varargs: message keys
+ * @return \type{Message}
+ * @since 1.18
+ */
+function wfMessageFallback( /*...*/ ) {
+       $keys = func_get_args();
+       $first = $keys[0];
+       foreach ( $keys as $key ) {
+               if ( wfEmptyMsg( $key ) ) {
+                       continue;
+               }
+               return wfMessage( $key );
+       }
+       return wfMessage( $first );
+}
+
 /**
  * Get a message from anywhere, for the current user language.
  *
@@ -1287,10 +1307,11 @@ function wfTime() {
 /**
  * Sets dest to source and returns the original value of dest
  * If source is NULL, it just returns the value, it doesn't set the variable
+ * If force is true, it will set the value even if source is NULL
  */
-function wfSetVar( &$dest, $source ) {
+function wfSetVar( &$dest, $source, $force = false ) {
        $temp = $dest;
-       if ( !is_null( $source ) ) {
+       if ( !is_null( $source ) || $force ) {
                $dest = $source;
        }
        return $temp;
@@ -1443,7 +1464,7 @@ function wfEscapeShellArg( ) {
 
                if ( wfIsWindows() ) {
                        // Escaping for an MSVC-style command line parser and CMD.EXE
-                       // Refs: 
+                       // Refs:
                        //  * http://web.archive.org/web/20020708081031/http://mailman.lyra.org/pipermail/scite-interest/2002-March/000436.html
                        //  * http://technet.microsoft.com/en-us/library/cc723564.aspx
                        //  * Bug #13518
@@ -1948,7 +1969,7 @@ function wfTimestamp( $outputtype = TS_UNIX, $ts = 0 ) {
        $da = array();
        $strtime = '';
 
-       if ( $ts === 0 ) {
+       if ( !$ts ) { // We want to catch 0, '', null... but not date strings starting with a letter.
                $uts = time();
                $strtime = "@$uts";
        } elseif ( preg_match( '/^(\d{4})\-(\d\d)\-(\d\d) (\d\d):(\d\d):(\d\d)$/D', $ts, $da ) ) {
@@ -1979,7 +2000,7 @@ function wfTimestamp( $outputtype = TS_UNIX, $ts = 0 ) {
                                                        '\d\d?[ \t\r\n]*[A-Z][a-z]{2}[ \t\r\n]*\d{2}(?:\d{2})?' .  # dd Mon yyyy
                                                        '[ \t\r\n]*\d\d[ \t\r\n]*:[ \t\r\n]*\d\d[ \t\r\n]*:[ \t\r\n]*\d\d/S', $ts ) ) { # hh:mm:ss
                # TS_RFC2822, accepting a trailing comment. See http://www.squid-cache.org/mail-archive/squid-users/200307/0122.html / r77171
-               # The regex is a superset of rfc2822 for readability 
+               # The regex is a superset of rfc2822 for readability
                $strtime = strtok( $ts, ';' );
        } elseif ( preg_match( '/^[A-Z][a-z]{5,8}, \d\d-[A-Z][a-z]{2}-\d{2} \d\d:\d\d:\d\d/', $ts ) ) {
                # TS_RFC850
@@ -1988,9 +2009,9 @@ function wfTimestamp( $outputtype = TS_UNIX, $ts = 0 ) {
                # asctime
                $strtime = $ts;
        } else {
-               # Bogus value; fall back to the epoch...
+               # Bogus value...
                wfDebug("wfTimestamp() fed bogus time value: TYPE=$outputtype; VALUE=$ts\n");
-               
+
                return false;
        }
 
@@ -2025,12 +2046,12 @@ function wfTimestamp( $outputtype = TS_UNIX, $ts = 0 ) {
                } else {
                        return false;
                }
-               
+
                if ( !$d ) {
                        wfDebug("wfTimestamp() fed bogus time value: $outputtype; $ts\n");
                        return false;
                }
-               
+
                $output = $d->format( $formats[$outputtype] );
        } else {
                if ( count( $da ) ) {
@@ -2511,7 +2532,7 @@ function wfShellExec( $cmd, &$retval = null, $environ = array() ) {
                         * Note however that the quote isn't listed there, but is needed, and the parentheses
                         * are listed there but doesn't appear to need it.
                         */
-                       $envcmd .= "set $k=" . preg_replace( '/([&|()<>^"])/', '^\\1', $v ) . ' && ';
+                       $envcmd .= "set $k=" . preg_replace( '/([&|()<>^"])/', '^\\1', $v ) . '&& ';
                } else {
                        /* Assume this is a POSIX shell, thus required to accept variable assignments before the command
                         * http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_09_01
@@ -3153,6 +3174,7 @@ function wfGetLB( $wiki = false ) {
 
 /**
  * Get the load balancer factory object
+ * @return LBFactory
  */
 function &wfGetLBFactory() {
        return LBFactory::singleton();