Merge "Revert "Move wfEscapeWikiText() to Parser::escapeWikitext()""
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Fri, 23 Sep 2016 00:35:47 +0000 (00:35 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Fri, 23 Sep 2016 00:35:47 +0000 (00:35 +0000)
1  2 
includes/GlobalFunctions.php

@@@ -1656,8 -1656,6 +1656,6 @@@ function wfClientAcceptsGzip( $force = 
  }
  
  /**
-  * @deprecated since 1.28, use Parser::escapeWikitext() directly
-  *
   * Escapes the given text so that it may be output using addWikiText()
   * without any linking, formatting, etc. making its way through. This
   * is achieved by substituting certain characters with HTML entities.
   * @return string
   */
  function wfEscapeWikiText( $text ) {
-       global $wgParser;
-       return $wgParser->escapeWikitext( $text );
+       global $wgEnableMagicLinks;
+       static $repl = null, $repl2 = null;
+       if ( $repl === null ) {
+               $repl = [
+                       '"' => '&#34;', '&' => '&#38;', "'" => '&#39;', '<' => '&#60;',
+                       '=' => '&#61;', '>' => '&#62;', '[' => '&#91;', ']' => '&#93;',
+                       '{' => '&#123;', '|' => '&#124;', '}' => '&#125;', ';' => '&#59;',
+                       "\n#" => "\n&#35;", "\r#" => "\r&#35;",
+                       "\n*" => "\n&#42;", "\r*" => "\r&#42;",
+                       "\n:" => "\n&#58;", "\r:" => "\r&#58;",
+                       "\n " => "\n&#32;", "\r " => "\r&#32;",
+                       "\n\n" => "\n&#10;", "\r\n" => "&#13;\n",
+                       "\n\r" => "\n&#13;", "\r\r" => "\r&#13;",
+                       "\n\t" => "\n&#9;", "\r\t" => "\r&#9;", // "\n\t\n" is treated like "\n\n"
+                       "\n----" => "\n&#45;---", "\r----" => "\r&#45;---",
+                       '__' => '_&#95;', '://' => '&#58;//',
+               ];
+               $magicLinks = array_keys( array_filter( $wgEnableMagicLinks ) );
+               // We have to catch everything "\s" matches in PCRE
+               foreach ( $magicLinks as $magic ) {
+                       $repl["$magic "] = "$magic&#32;";
+                       $repl["$magic\t"] = "$magic&#9;";
+                       $repl["$magic\r"] = "$magic&#13;";
+                       $repl["$magic\n"] = "$magic&#10;";
+                       $repl["$magic\f"] = "$magic&#12;";
+               }
+               // And handle protocols that don't use "://"
+               global $wgUrlProtocols;
+               $repl2 = [];
+               foreach ( $wgUrlProtocols as $prot ) {
+                       if ( substr( $prot, -1 ) === ':' ) {
+                               $repl2[] = preg_quote( substr( $prot, 0, -1 ), '/' );
+                       }
+               }
+               $repl2 = $repl2 ? '/\b(' . implode( '|', $repl2 ) . '):/i' : '/^(?!)/';
+       }
+       $text = substr( strtr( "\n$text", $repl ), 1 );
+       $text = preg_replace( $repl2, '$1&#58;', $text );
+       return $text;
  }
  
  /**
@@@ -1955,7 -1992,56 +1992,7 @@@ function wfRestoreWarnings() 
  
  # Autodetect, convert and provide timestamps of various types
  
 -/**
 - * Unix time - the number of seconds since 1970-01-01 00:00:00 UTC
 - */
 -define( 'TS_UNIX', 0 );
 -
 -/**
 - * MediaWiki concatenated string timestamp (YYYYMMDDHHMMSS)
 - */
 -define( 'TS_MW', 1 );
 -
 -/**
 - * MySQL DATETIME (YYYY-MM-DD HH:MM:SS)
 - */
 -define( 'TS_DB', 2 );
 -
 -/**
 - * RFC 2822 format, for E-mail and HTTP headers
 - */
 -define( 'TS_RFC2822', 3 );
 -
 -/**
 - * ISO 8601 format with no timezone: 1986-02-09T20:00:00Z
 - *
 - * This is used by Special:Export
 - */
 -define( 'TS_ISO_8601', 4 );
 -
 -/**
 - * An Exif timestamp (YYYY:MM:DD HH:MM:SS)
 - *
 - * @see http://exif.org/Exif2-2.PDF The Exif 2.2 spec, see page 28 for the
 - *       DateTime tag and page 36 for the DateTimeOriginal and
 - *       DateTimeDigitized tags.
 - */
 -define( 'TS_EXIF', 5 );
 -
 -/**
 - * Oracle format time.
 - */
 -define( 'TS_ORACLE', 6 );
 -
 -/**
 - * Postgres format time.
 - */
 -define( 'TS_POSTGRES', 7 );
 -
 -/**
 - * ISO 8601 basic format with no timezone: 19860209T200000Z.  This is used by ResourceLoader
 - */
 -define( 'TS_ISO_8601_BASIC', 9 );
 +require_once __DIR__ . '/libs/time/defines.php';
  
  /**
   * Get a timestamp string in one of various formats
   * @return string|bool String / false The same date in the format specified in $outputtype or false
   */
  function wfTimestamp( $outputtype = TS_UNIX, $ts = 0 ) {
 -      try {
 -              $timestamp = new MWTimestamp( $ts );
 -              return $timestamp->getTimestamp( $outputtype );
 -      } catch ( TimestampException $e ) {
 +      $ret = MWTimestamp::convert( $outputtype, $ts );
 +      if ( $ret === false ) {
                wfDebug( "wfTimestamp() fed bogus time value: TYPE=$outputtype; VALUE=$ts\n" );
 -              return false;
        }
 +      return $ret;
  }
  
  /**
@@@ -1996,7 -2084,7 +2033,7 @@@ function wfTimestampOrNull( $outputtyp
   */
  function wfTimestampNow() {
        # return NOW
 -      return wfTimestamp( TS_MW, time() );
 +      return MWTimestamp::now( TS_MW );
  }
  
  /**
@@@ -2039,7 -2127,35 +2076,7 @@@ function wfTempDir() 
                return $wgTmpDirectory;
        }
  
 -      $tmpDir = array_map( "getenv", [ 'TMPDIR', 'TMP', 'TEMP' ] );
 -      $tmpDir[] = sys_get_temp_dir();
 -      $tmpDir[] = ini_get( 'upload_tmp_dir' );
 -
 -      foreach ( $tmpDir as $tmp ) {
 -              if ( $tmp && file_exists( $tmp ) && is_dir( $tmp ) && is_writable( $tmp ) ) {
 -                      return $tmp;
 -              }
 -      }
 -
 -      /**
 -       * PHP on Windows will detect C:\Windows\Temp as not writable even though PHP can write to it
 -       * so create a directory within that called 'mwtmp' with a suffix of the user running the
 -       * current process.
 -       * The user is included as if various scripts are run by different users they will likely
 -       * not be able to access each others temporary files.
 -       */
 -      if ( wfIsWindows() ) {
 -              $tmp = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'mwtmp' . '-' . get_current_user();
 -              if ( !file_exists( $tmp ) ) {
 -                      mkdir( $tmp );
 -              }
 -              if ( file_exists( $tmp ) && is_dir( $tmp ) && is_writable( $tmp ) ) {
 -                      return $tmp;
 -              }
 -      }
 -
 -      throw new MWException( 'No writable temporary directory could be found. ' .
 -              'Please set $wgTmpDirectory to a writable directory.' );
 +      return TempFSFile::getUsableTempDirectory();
  }
  
  /**