Merge "Show absolute block expiry in user timezone on block logs"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Sat, 9 Apr 2016 19:37:29 +0000 (19:37 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Sat, 9 Apr 2016 19:37:29 +0000 (19:37 +0000)
1  2 
languages/Language.php
languages/classes/LanguageFi.php

diff --combined languages/Language.php
@@@ -30,7 -30,9 +30,7 @@@ if ( !defined( 'MEDIAWIKI' ) ) 
        exit( 1 );
  }
  
 -if ( function_exists( 'mb_strtoupper' ) ) {
 -      mb_internal_encoding( 'UTF-8' );
 -}
 +mb_internal_encoding( 'UTF-8' );
  
  use CLDRPluralRuleParser\Evaluator;
  
@@@ -2590,7 -2592,7 +2590,7 @@@ class Language 
                return $text;
        }
  
 -      // callback functions for uc(), lc(), ucwords(), ucwordbreaks()
 +      // callback functions for ucwords(), ucwordbreaks()
  
        /**
         * @param array $matches
                return mb_strtoupper( $matches[0] );
        }
  
 -      /**
 -       * @param array $matches
 -       * @return string
 -       */
 -      function ucCallback( $matches ) {
 -              list( $wikiUpperChars ) = self::getCaseMaps();
 -              return strtr( $matches[1], $wikiUpperChars );
 -      }
 -
 -      /**
 -       * @param array $matches
 -       * @return string
 -       */
 -      function lcCallback( $matches ) {
 -              list( , $wikiLowerChars ) = self::getCaseMaps();
 -              return strtr( $matches[1], $wikiLowerChars );
 -      }
 -
        /**
         * @param array $matches
         * @return string
                return mb_strtoupper( $matches[0] );
        }
  
 -      /**
 -       * @param array $matches
 -       * @return string
 -       */
 -      function ucwordsCallbackWiki( $matches ) {
 -              list( $wikiUpperChars ) = self::getCaseMaps();
 -              return strtr( $matches[0], $wikiUpperChars );
 -      }
 -
        /**
         * Make a string's first character uppercase
         *
         * @return string
         */
        function uc( $str, $first = false ) {
 -              if ( function_exists( 'mb_strtoupper' ) ) {
 -                      if ( $first ) {
 -                              if ( $this->isMultibyte( $str ) ) {
 -                                      return mb_strtoupper( mb_substr( $str, 0, 1 ) ) . mb_substr( $str, 1 );
 -                              } else {
 -                                      return ucfirst( $str );
 -                              }
 -                      } else {
 -                              return $this->isMultibyte( $str ) ? mb_strtoupper( $str ) : strtoupper( $str );
 -                      }
 -              } else {
 +              if ( $first ) {
                        if ( $this->isMultibyte( $str ) ) {
 -                              $x = $first ? '^' : '';
 -                              return preg_replace_callback(
 -                                      "/$x([a-z]|[\\xc0-\\xff][\\x80-\\xbf]*)/",
 -                                      [ $this, 'ucCallback' ],
 -                                      $str
 -                              );
 +                              return mb_strtoupper( mb_substr( $str, 0, 1 ) ) . mb_substr( $str, 1 );
                        } else {
 -                              return $first ? ucfirst( $str ) : strtoupper( $str );
 +                              return ucfirst( $str );
                        }
 +              } else {
 +                      return $this->isMultibyte( $str ) ? mb_strtoupper( $str ) : strtoupper( $str );
                }
        }
  
         * @return mixed|string
         */
        function lc( $str, $first = false ) {
 -              if ( function_exists( 'mb_strtolower' ) ) {
 -                      if ( $first ) {
 -                              if ( $this->isMultibyte( $str ) ) {
 -                                      return mb_strtolower( mb_substr( $str, 0, 1 ) ) . mb_substr( $str, 1 );
 -                              } else {
 -                                      return strtolower( substr( $str, 0, 1 ) ) . substr( $str, 1 );
 -                              }
 -                      } else {
 -                              return $this->isMultibyte( $str ) ? mb_strtolower( $str ) : strtolower( $str );
 -                      }
 -              } else {
 +              if ( $first ) {
                        if ( $this->isMultibyte( $str ) ) {
 -                              $x = $first ? '^' : '';
 -                              return preg_replace_callback(
 -                                      "/$x([A-Z]|[\\xc0-\\xff][\\x80-\\xbf]*)/",
 -                                      [ $this, 'lcCallback' ],
 -                                      $str
 -                              );
 +                              return mb_strtolower( mb_substr( $str, 0, 1 ) ) . mb_substr( $str, 1 );
                        } else {
 -                              return $first ? strtolower( substr( $str, 0, 1 ) ) . substr( $str, 1 ) : strtolower( $str );
 +                              return strtolower( substr( $str, 0, 1 ) ) . substr( $str, 1 );
                        }
 +              } else {
 +                      return $this->isMultibyte( $str ) ? mb_strtolower( $str ) : strtolower( $str );
                }
        }
  
                        $replaceRegexp = "/^([a-z]|[\\xc0-\\xff][\\x80-\\xbf]*)| ([a-z]|[\\xc0-\\xff][\\x80-\\xbf]*)/";
  
                        // function to use to capitalize a single char
 -                      if ( function_exists( 'mb_strtoupper' ) ) {
 -                              return preg_replace_callback(
 -                                      $replaceRegexp,
 -                                      [ $this, 'ucwordsCallbackMB' ],
 -                                      $str
 -                              );
 -                      } else {
 -                              return preg_replace_callback(
 -                                      $replaceRegexp,
 -                                      [ $this, 'ucwordsCallbackWiki' ],
 -                                      $str
 -                              );
 -                      }
 +                      return preg_replace_callback(
 +                              $replaceRegexp,
 +                              [ $this, 'ucwordsCallbackMB' ],
 +                              $str
 +                      );
                } else {
                        return ucwords( strtolower( $str ) );
                }
                        $replaceRegexp = "/^([a-z]|[\\xc0-\\xff][\\x80-\\xbf]*)|" .
                                "$breaks([a-z]|[\\xc0-\\xff][\\x80-\\xbf]*)/";
  
 -                      if ( function_exists( 'mb_strtoupper' ) ) {
 -                              return preg_replace_callback(
 -                                      $replaceRegexp,
 -                                      [ $this, 'ucwordbreaksCallbackMB' ],
 -                                      $str
 -                              );
 -                      } else {
 -                              return preg_replace_callback(
 -                                      $replaceRegexp,
 -                                      [ $this, 'ucwordsCallbackWiki' ],
 -                                      $str
 -                              );
 -                      }
 +                      return preg_replace_callback(
 +                              $replaceRegexp,
 +                              [ $this, 'ucwordbreaksCallbackMB' ],
 +                              $str
 +                      );
                } else {
                        return preg_replace_callback(
                                '/\b([\w\x80-\xff]+)\b/',
         * match up with it.
         *
         * @param string $str The validated block duration in English
+        * @param User $user User object to use timezone from or null for $wgUser
         * @return string Somehow translated block duration
         * @see LanguageFi.php for example implementation
         */
-       function translateBlockExpiry( $str ) {
+       function translateBlockExpiry( $str, User $user = null ) {
                $duration = SpecialBlock::getSuggestedDurations( $this );
                foreach ( $duration as $show => $value ) {
                        if ( strcmp( $str, $value ) == 0 ) {
                } else { // It's an absolute timestamp.
                        if ( $time === 0 ) {
                                // wfTimestamp() handles 0 as current time instead of epoch.
-                               return $this->timeanddate( '19700101000000' );
-                       } else {
-                               return $this->timeanddate( $time );
+                               $time = '19700101000000';
+                       }
+                       if ( $user ) {
+                               return $this->userTimeAndDate( $time, $user );
                        }
+                       return $this->timeanddate( $time );
                }
        }
  
                return $this->convertGrammar( trim( $m[2] ), trim( $m[1] ) );
        }
  
 -      /**
 -       * @throws MWException
 -       * @return array
 -       */
 -      static function getCaseMaps() {
 -              static $wikiUpperChars, $wikiLowerChars;
 -              if ( isset( $wikiUpperChars ) ) {
 -                      return [ $wikiUpperChars, $wikiLowerChars ];
 -              }
 -
 -              $arr = wfGetPrecompiledData( 'Utf8Case.ser' );
 -              if ( $arr === false ) {
 -                      throw new MWException(
 -                              "Utf8Case.ser is missing, please run \"make\" in the serialized directory\n" );
 -              }
 -              $wikiUpperChars = $arr['wikiUpperChars'];
 -              $wikiLowerChars = $arr['wikiLowerChars'];
 -              return [ $wikiUpperChars, $wikiLowerChars ];
 -      }
 -
        /**
         * Decode an expiry (block, protection, etc) which has come from the DB
         *
@@@ -73,6 -73,7 +73,6 @@@ class LanguageFi extends Language 
                                break;
                        case 'illative':
                                # Double the last letter and add 'n'
 -                              # mb_substr has a compatibility function in GlobalFunctions.php
                                $word = $word . mb_substr( $word, -1 ) . 'n';
                                break;
                        case 'inessive':
  
        /**
         * @param string $str
-        * @param bool $forContent
+        * @param User $user User object to use timezone from or null for $wgUser
         * @return string
         */
-       function translateBlockExpiry( $str, $forContent = false ) {
+       function translateBlockExpiry( $str, User $user = null ) {
                /*
                        'ago', 'now', 'today', 'this', 'next',
                        'first', 'third', 'fourth', 'fifth', 'sixth', 'seventh', 'eighth', 'ninth',