laipower/wp-content/plugins/jetpack-protect/jetpack_vendor/automattic/jetpack-redirect/src/class-redirect.php

80 lines
2.5 KiB
PHP

<?php
/**
* Jetpack Redirect package.
*
* @package automattic/jetpack-redirect
*/
namespace Automattic\Jetpack;
/**
* Class Redirect
*/
class Redirect {
/**
* Constructor.
*
* Static-only class, so nothing here.
*/
private function __construct() {}
/**
* Builds and returns an URL using the jetpack.com/redirect/ service
*
* If $source is a simple slug, it will be sent using the source query parameter. e.g. jetpack.com/redirect/?source=slug
*
* If $source is a full URL, starting with https://, it will be sent using the url query parameter. e.g. jetpack.com/redirect/?url=https://wordpress.com
*
* Note: if using full URL, query parameters and anchor must be passed in $args. Any querystring of url fragment in the URL will be discarded.
*
* @param string $source The URL handler registered in the server or the full destination URL (starting with https://).
* @param array|string $args {
* Optional. Additional arguments to build the url. This is not a complete list as any argument passed here will be sent to as a query parameter to the Redirect server. These parameters will not necessarily be passed over to the final destination URL. If you want to add a parameter to the final destination URL, use the `query` argument.
*
* @type string $site URL of the site; Default is current site.
* @type string $path Additional path to be appended to the URL.
* @type string $query Query parameters to be added to the final destination URL. should be in query string format (e.g. 'key=value&foo=bar').
* @type string $anchor Anchor to be added to the URL.
* @type integer $u The user ID.
* }
*
* @return string The built URL
*/
public static function get_url( $source, $args = array() ) {
$url = 'https://jetpack.com/redirect/';
$site_suffix = ( new Status() )->get_site_suffix();
$args = wp_parse_args( $args, array( 'site' => $site_suffix ) );
$source_key = 'source';
if ( 0 === strpos( $source, 'https://' ) ) {
$source_key = 'url';
$source_url = \wp_parse_url( $source );
// discard any query and fragments.
$source = 'https://' . $source_url['host'] . ( isset( $source_url['path'] ) ? $source_url['path'] : '' );
}
$to_be_added = array(
$source_key => rawurlencode( $source ),
);
foreach ( $args as $arg_name => $arg_value ) {
if ( empty( $arg_value ) ) {
continue;
}
$to_be_added[ $arg_name ] = rawurlencode( $arg_value );
}
if ( ! empty( $to_be_added ) ) {
$url = add_query_arg( $to_be_added, $url );
}
return $url;
}
}