resourceloader: Warn on ResourceLoader::construct without Config
[lhc/web/wiklou.git] / includes / WebRequest.php
index e31d3f9..76d94b2 100644 (file)
@@ -162,11 +162,12 @@ class WebRequest {
                                        $router->add( $wgActionPaths, [ 'action' => '$key' ] );
                                }
 
-                               global $wgVariantArticlePath, $wgContLang;
+                               global $wgVariantArticlePath;
                                if ( $wgVariantArticlePath ) {
                                        $router->add( $wgVariantArticlePath,
                                                [ 'variant' => '$2' ],
-                                               [ '$2' => $wgContLang->getVariants() ]
+                                               [ '$2' => MediaWikiServices::getInstance()->getContentLanguage()->
+                                               getVariants() ]
                                        );
                                }
 
@@ -274,8 +275,18 @@ class WebRequest {
        public static function getRequestId() {
                // This method is called from various error handlers and should be kept simple.
 
-               if ( !self::$reqId ) {
-                       self::$reqId = $_SERVER['UNIQUE_ID'] ?? wfRandomString( 24 );
+               if ( self::$reqId ) {
+                       return self::$reqId;
+               }
+
+               global $wgAllowExternalReqID;
+
+               self::$reqId = $_SERVER['UNIQUE_ID'] ?? wfRandomString( 24 );
+               if ( $wgAllowExternalReqID ) {
+                       $id = RequestContext::getMain()->getRequest()->getHeader( 'X-Request-Id' );
+                       if ( $id ) {
+                               self::$reqId = $id;
+                       }
                }
 
                return self::$reqId;
@@ -306,7 +317,7 @@ class WebRequest {
        /**
         * Check for title, action, and/or variant data in the URL
         * and interpolate it into the GET variables.
-        * This should only be run after $wgContLang is available,
+        * This should only be run after the content language is available,
         * as we may need the list of language variants to determine
         * available variant URLs.
         */
@@ -364,9 +375,8 @@ class WebRequest {
                                $data[$key] = $this->normalizeUnicode( $val );
                        }
                } else {
-                       global $wgContLang;
-                       $data = isset( $wgContLang ) ?
-                               $wgContLang->normalize( $data ) :
+                       $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+                       $data = $contLang ? $contLang->normalize( $data ) :
                                UtfNormal\Validator::cleanUp( $data );
                }
                return $data;
@@ -382,17 +392,15 @@ class WebRequest {
         */
        private function getGPCVal( $arr, $name, $default ) {
                # PHP is so nice to not touch input data, except sometimes:
-               # https://secure.php.net/variables.external#language.variables.external.dot-in-names
+               # https://www.php.net/variables.external#language.variables.external.dot-in-names
                # Work around PHP *feature* to avoid *bugs* elsewhere.
                $name = strtr( $name, '.', '_' );
                if ( isset( $arr[$name] ) ) {
-                       global $wgContLang;
                        $data = $arr[$name];
-                       if ( isset( $_GET[$name] ) && !is_array( $data ) ) {
+                       if ( isset( $_GET[$name] ) && is_string( $data ) ) {
                                # Check for alternate/legacy character encoding.
-                               if ( isset( $wgContLang ) ) {
-                                       $data = $wgContLang->checkTitleEncoding( $data );
-                               }
+                               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+                               $data = $contLang->checkTitleEncoding( $data );
                        }
                        $data = $this->normalizeUnicode( $data );
                        return $data;
@@ -851,12 +859,19 @@ class WebRequest {
         * in HTML or other output.
         *
         * If $wgServer is protocol-relative, this will return a fully
-        * qualified URL with the protocol that was used for this request.
+        * qualified URL with the protocol of this request object.
         *
         * @return string
         */
        public function getFullRequestURL() {
-               return wfGetServerUrl( PROTO_CURRENT ) .  $this->getRequestURL();
+               // Pass an explicit PROTO constant instead of PROTO_CURRENT so that we
+               // do not rely on state from the global $wgRequest object (which it would,
+               // via wfGetServerUrl/wfExpandUrl/$wgRequest->protocol).
+               if ( $this->getProtocol() === 'http' ) {
+                       return wfGetServerUrl( PROTO_HTTP ) . $this->getRequestURL();
+               } else {
+                       return wfGetServerUrl( PROTO_HTTPS ) . $this->getRequestURL();
+               }
        }
 
        /**
@@ -1309,7 +1324,7 @@ HTML;
         *
         * This means that the client is not requesting any state changes and that database writes
         * are not inherently required. Ideally, no visible updates would happen at all. If they
-        * must, then they should not be publically attributed to the end user.
+        * must, then they should not be publicly attributed to the end user.
         *
         * In more detail:
         *   - Cache populations and refreshes MAY occur.