X-Git-Url: https://git.cyclocoop.org/?a=blobdiff_plain;f=includes%2FGlobalFunctions.php;h=aa8aee5ea7c598706b87c8c24cbd2d5af5dbf389;hb=334ee2f00c56290a80b6d76272f28f4997b2be04;hp=543978b56ec36d775b751550968d2c2ad753b196;hpb=e0a3801da297d012fc67f2c128ab7e57e20f0571;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php index 543978b56e..aa8aee5ea7 100644 --- a/includes/GlobalFunctions.php +++ b/includes/GlobalFunctions.php @@ -141,7 +141,7 @@ function wfArrayDiff2_cmp( $a, $b ) { } /** - * Like array_filter with ARRAY_FILTER_USE_BOTH, but works pre-5.6. + * @deprecated since 1.32, use array_filter() with ARRAY_FILTER_USE_BOTH directly * * @param array $arr * @param callable $callback Will be called with the array value and key (in that order) and @@ -149,17 +149,11 @@ function wfArrayDiff2_cmp( $a, $b ) { * @return array */ function wfArrayFilter( array $arr, callable $callback ) { - if ( defined( 'ARRAY_FILTER_USE_BOTH' ) ) { - return array_filter( $arr, $callback, ARRAY_FILTER_USE_BOTH ); - } - $filteredKeys = array_filter( array_keys( $arr ), function ( $key ) use ( $arr, $callback ) { - return call_user_func( $callback, $arr[$key], $key ); - } ); - return array_intersect_key( $arr, array_fill_keys( $filteredKeys, true ) ); + return array_filter( $arr, $callback, ARRAY_FILTER_USE_BOTH ); } /** - * Like array_filter with ARRAY_FILTER_USE_KEY, but works pre-5.6. + * @deprecated since 1.32, use array_filter() with ARRAY_FILTER_USE_KEY directly * * @param array $arr * @param callable $callback Will be called with the array key and should return a bool which @@ -167,9 +161,7 @@ function wfArrayFilter( array $arr, callable $callback ) { * @return array */ function wfArrayFilterByKey( array $arr, callable $callback ) { - return wfArrayFilter( $arr, function ( $val, $key ) use ( $callback ) { - return call_user_func( $callback, $key ); - } ); + return array_filter( $arr, $callback, ARRAY_FILTER_USE_KEY ); } /** @@ -556,17 +548,24 @@ function wfExpandUrl( $url, $defaultProto = PROTO_CURRENT ) { } elseif ( substr( $url, 0, 1 ) == '/' ) { // If $serverUrl is protocol-relative, prepend $defaultProtoWithoutSlashes, // otherwise leave it alone. - $url = ( $serverHasProto ? '' : $defaultProtoWithoutSlashes ) . $serverUrl . $url; + if ( $serverHasProto ) { + $url = $serverUrl . $url; + } else { + // If an HTTPS URL is synthesized from a protocol-relative $wgServer, allow the + // user to override the port number (T67184) + if ( $defaultProto === PROTO_HTTPS && $wgHttpsPort != 443 ) { + if ( isset( $bits['port'] ) ) { + throw new Exception( 'A protocol-relative $wgServer may not contain a port number' ); + } + $url = $defaultProtoWithoutSlashes . $serverUrl . ':' . $wgHttpsPort . $url; + } else { + $url = $defaultProtoWithoutSlashes . $serverUrl . $url; + } + } } $bits = wfParseUrl( $url ); - // ensure proper port for HTTPS arrives in URL - // https://phabricator.wikimedia.org/T67184 - if ( $defaultProto === PROTO_HTTPS && $wgHttpsPort != 443 ) { - $bits['port'] = $wgHttpsPort; - } - if ( $bits && isset( $bits['path'] ) ) { $bits['path'] = wfRemoveDotSegments( $bits['path'] ); return wfAssembleUrl( $bits ); @@ -582,6 +581,19 @@ function wfExpandUrl( $url, $defaultProto = PROTO_CURRENT ) { return false; } +/** + * Get the wiki's "server", i.e. the protocol and host part of the URL, with a + * protocol specified using a PROTO_* constant as in wfExpandUrl() + * + * @since 1.32 + * @param string|int|null $proto One of the PROTO_* constants. + * @return string The URL + */ +function wfGetServerUrl( $proto ) { + $url = wfExpandUrl( '/', $proto ); + return substr( $url, 0, -1 ); +} + /** * This function will reassemble a URL parsed with wfParseURL. This is useful * if you need to edit part of a URL and put it back together. @@ -874,20 +886,13 @@ function wfParseUrl( $url ) { function wfExpandIRI( $url ) { return preg_replace_callback( '/((?:%[89A-F][0-9A-F])+)/i', - 'wfExpandIRI_callback', + function ( array $matches ) { + return urldecode( $matches[1] ); + }, wfExpandUrl( $url ) ); } -/** - * Private callback for wfExpandIRI - * @param array $matches - * @return string - */ -function wfExpandIRI_callback( $matches ) { - return urldecode( $matches[1] ); -} - /** * Make URL indexes, appropriate for the el_index field of externallinks. * @@ -1628,6 +1633,7 @@ function wfClientAcceptsGzip( $force = false ) { * As required by the callers, "" is not used. * * @param string $text Text to be escaped + * @param-taint $text escapes_html * @return string */ function wfEscapeWikiText( $text ) {