381 lines
8.6 KiB
PHP
381 lines
8.6 KiB
PHP
<?php
|
|
/**
|
|
* Urls class.
|
|
*
|
|
* @since 2.2.0
|
|
*
|
|
* @package OMAPI
|
|
* @author Justin Sternberg
|
|
*/
|
|
|
|
// Exit if accessed directly.
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit;
|
|
}
|
|
|
|
/**
|
|
* Urls class.
|
|
*
|
|
* @since 2.2.0
|
|
*/
|
|
class OMAPI_Urls {
|
|
|
|
/**
|
|
* Get the settings url.
|
|
*
|
|
* @since 2.2.0
|
|
*
|
|
* @param array $args Array of query args.
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function settings( $args = array() ) {
|
|
return self::om_admin( 'settings', $args );
|
|
}
|
|
|
|
/**
|
|
* Get the campaigns url.
|
|
*
|
|
* @since 2.2.0
|
|
*
|
|
* @param array $args Array of query args.
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function campaigns( $args = array() ) {
|
|
return self::om_admin( 'campaigns', $args );
|
|
}
|
|
|
|
/**
|
|
* Get the templates url.
|
|
*
|
|
* @since 2.2.0
|
|
*
|
|
* @param array $args Array of query args.
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function templates( $args = array() ) {
|
|
return self::om_admin( 'templates', $args );
|
|
}
|
|
|
|
/**
|
|
* Get the playbooks url.
|
|
*
|
|
* @since 2.12.0
|
|
*
|
|
* @param array $args Array of query args.
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function playbooks( $args = array() ) {
|
|
return self::om_admin( 'playbooks', $args );
|
|
}
|
|
|
|
/**
|
|
* Get the OM wizard url.
|
|
*
|
|
* @since 2.2.0
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function wizard() {
|
|
return self::dashboard( array( 'onboarding' => true ) );
|
|
}
|
|
|
|
/**
|
|
* Get the contextual OM dashboard url.
|
|
*
|
|
* @since 2.2.0
|
|
*
|
|
* @param array $args Array of query args.
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function dashboard( $args = array() ) {
|
|
return self::om_admin( 'dashboard', $args );
|
|
}
|
|
|
|
/**
|
|
* Get the contextual OM university url.
|
|
*
|
|
* @since 2.13.8
|
|
*
|
|
* @param array $args Array of query args.
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function university( $args = array() ) {
|
|
return self::om_admin( 'university', $args );
|
|
}
|
|
|
|
/**
|
|
* Get the campaign output settings edit url.
|
|
*
|
|
* @since 2.2.0
|
|
*
|
|
* @param string $campaign_slug The campaign slug to edit.
|
|
* @param array $args Array of query args.
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function campaign_output_settings( $campaign_slug, $args = array() ) {
|
|
$args = array_merge( $args, array( 'campaignId' => $campaign_slug ) );
|
|
|
|
return self::campaigns( $args );
|
|
}
|
|
|
|
/**
|
|
* Get the OM onboarding dashboard url.
|
|
*
|
|
* @since 2.2.0
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function onboarding() {
|
|
return self::wizard();
|
|
}
|
|
|
|
/**
|
|
* Get a link to an OM admin page.
|
|
*
|
|
* @since 2.2.0
|
|
*
|
|
* @param string $page Page shortened slug.
|
|
* @param array $args Array of query args.
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function om_admin( $page, $args ) {
|
|
$defaults = array(
|
|
'page' => 'optin-monster-' . $page,
|
|
);
|
|
|
|
return self::admin( wp_parse_args( $args, $defaults ) );
|
|
}
|
|
|
|
/**
|
|
* Get an admin page url.
|
|
*
|
|
* @since 2.2.0
|
|
*
|
|
* @param array $args Array of query args.
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function admin( $args = array() ) {
|
|
$url = add_query_arg( $args, admin_url( 'admin.php' ) );
|
|
|
|
return esc_url_raw( $url );
|
|
}
|
|
|
|
/**
|
|
* Get app url, with proper query args set to ensure going to correct account, and setting return
|
|
* query arg to come back (if relevant on the destination page).
|
|
*
|
|
* @since 2.2.0
|
|
*
|
|
* @param string $path The path on the app.
|
|
* @param string $return_url Url to return. Will default to wp_get_referer().
|
|
*
|
|
* @return string The app url.
|
|
*/
|
|
public static function om_app( $path, $return_url = '' ) {
|
|
$app_url = OPTINMONSTER_APP_URL . '/';
|
|
$final_destination = $app_url . $path;
|
|
|
|
if ( empty( $return_url ) ) {
|
|
|
|
$return_url = wp_get_referer();
|
|
if ( empty( $return_url ) ) {
|
|
$return_url = self::dashboard();
|
|
}
|
|
}
|
|
$return_url = rawurlencode( $return_url );
|
|
|
|
$final_destination = add_query_arg( 'return', $return_url, $final_destination );
|
|
|
|
$url = add_query_arg( 'redirect_to', rawurlencode( $final_destination ), $app_url );
|
|
|
|
$account_id = OMAPI::get_instance()->get_option( 'accountUserId' );
|
|
if ( ! empty( $account_id ) ) {
|
|
$url = add_query_arg( 'accountId', $account_id, $url );
|
|
}
|
|
|
|
return $url;
|
|
}
|
|
|
|
/**
|
|
* Get upgrade url, with utm_medium param and optional feature.
|
|
*
|
|
* @since 2.4.0
|
|
*
|
|
* @param string $utm_medium The utm_medium query param.
|
|
* @param string $feature The feature to pass to the upgrade page.
|
|
* @param string $return_url Url to return. Will default to wp_get_referer().
|
|
* @param array $args Additional query args.
|
|
*
|
|
* @return string The upgrade url.
|
|
*/
|
|
public static function upgrade( $utm_medium, $feature = 'none', $return_url = '', $args = array() ) {
|
|
$args = self::upgrade_params( $utm_medium, $feature, $args );
|
|
$path = add_query_arg( $args, 'account/wp-upgrade/' );
|
|
|
|
return self::om_app( $path, $return_url );
|
|
}
|
|
|
|
/**
|
|
* Get the query args for the upgrade url.
|
|
*
|
|
* @since 2.15.0
|
|
*
|
|
* @param string $utm_medium The utm_medium query param.
|
|
* @param string $feature The feature to pass to the upgrade page.
|
|
* @param array $args Additional query args.
|
|
*
|
|
* @return array The query args.
|
|
*/
|
|
public static function upgrade_params( $utm_medium, $feature = 'none', $args = array() ) {
|
|
$defaults = wp_parse_args(
|
|
self::get_partner_params( OPTINMONSTER_APP_URL . '/account/wp-upgrade/' ),
|
|
array(
|
|
'utm_source' => 'WordPress',
|
|
'utm_medium' => $utm_medium,
|
|
'utm_campaign' => 'Plugin',
|
|
'feature' => $feature,
|
|
)
|
|
);
|
|
|
|
foreach ( $defaults as $key => $value ) {
|
|
if ( null === $value ) {
|
|
unset( $defaults[ $key ] );
|
|
}
|
|
}
|
|
|
|
return wp_parse_args( $args, $defaults );
|
|
}
|
|
|
|
/**
|
|
* Get marketing url, with utm_medium params.
|
|
*
|
|
* @since 2.11.0
|
|
*
|
|
* @param string $path The path on the app.
|
|
* @param array $args Additional query args.
|
|
*
|
|
* @return string The marketing url.
|
|
*/
|
|
public static function marketing( $path = '', $args = array() ) {
|
|
$url = sprintf( OPTINMONSTER_URL . '/%1$s', $path );
|
|
$defaults = wp_parse_args(
|
|
self::get_partner_params( $url ),
|
|
array(
|
|
'utm_source' => 'WordPress',
|
|
'utm_medium' => '',
|
|
'utm_campaign' => 'Plugin',
|
|
)
|
|
);
|
|
$args = wp_parse_args( $args, $defaults );
|
|
|
|
return add_query_arg( $args, $url );
|
|
}
|
|
|
|
/**
|
|
* Returns the API credentials for OptinMonster.
|
|
*
|
|
* @since 2.2.0
|
|
*
|
|
* @return string The API url to use for embedding on the page.
|
|
*/
|
|
public static function om_api() {
|
|
$custom_api_url = OMAPI::get_instance()->get_option( 'customApiUrl' );
|
|
return ! empty( $custom_api_url ) ? $custom_api_url : OPTINMONSTER_APIJS_URL;
|
|
}
|
|
|
|
/**
|
|
* Sets the partner id param if found, and parses the partner url for additional args to set.
|
|
*
|
|
* @since 2.15.0
|
|
*
|
|
* @param string $destination_url The destination url to compare against.
|
|
*
|
|
* @return array The additional args.
|
|
*/
|
|
protected static function get_partner_params( $destination_url = '' ) {
|
|
$args = array();
|
|
|
|
// Next, let's parse the partner url for additional query args
|
|
// stuffed on the urllink query arg redirect url.
|
|
$partner_url = OMAPI_Partners::has_partner_url();
|
|
if (
|
|
! $partner_url
|
|
|| false === strpos( $partner_url, 'urllink' )
|
|
) {
|
|
return $args;
|
|
}
|
|
|
|
// No params, no problem.
|
|
$parsed = wp_parse_url( $partner_url );
|
|
if ( empty( $parsed['query'] ) ) {
|
|
return $args;
|
|
}
|
|
|
|
// No urllink param, do not pass go, do not collect $200.
|
|
$query = wp_parse_args( $parsed['query'] );
|
|
if ( empty( $query['urllink'] ) ) {
|
|
return $args;
|
|
}
|
|
|
|
// Normalize the url.
|
|
$url = urldecode( $query['urllink'] );
|
|
$url = false === strpos( $url, 'http' )
|
|
? 'https://' . $url
|
|
: str_replace( 'http://', 'https://', $url );
|
|
|
|
// Now let's make sure the url matches the destination url,
|
|
// before we go attaching its query args.
|
|
if (
|
|
$destination_url
|
|
&& rtrim( $destination_url, '/' ) && 0 !== stripos( $url, $destination_url )
|
|
) {
|
|
return $args;
|
|
}
|
|
|
|
// No args, do not pass go, do not collect $200.
|
|
$bits = wp_parse_url( $url );
|
|
if ( empty( $bits['query'] ) ) {
|
|
return $args;
|
|
}
|
|
|
|
$query = wp_parse_args( $bits['query'] );
|
|
if ( ! empty( $query ) ) {
|
|
// Ok, let's add the found query args to the args array.
|
|
$args = wp_parse_args( $query, $args );
|
|
}
|
|
|
|
return $args;
|
|
}
|
|
|
|
/**
|
|
* Filters the `allowed_redirect_hosts`.
|
|
*
|
|
* Adds the OptinMonster app and OptinMonster site to the allowed hosts.
|
|
*
|
|
* @since 2.16.3
|
|
*
|
|
* @param array $hosts Array of allowed hosts.
|
|
*
|
|
* @return array The allowed hosts.
|
|
*/
|
|
public static function allowed_redirect_hosts( $hosts = array() ) {
|
|
if ( ! is_array( $hosts ) ) {
|
|
$hosts = array();
|
|
}
|
|
|
|
$hosts[] = str_replace( 'https://', '', OPTINMONSTER_APP_URL );
|
|
$hosts[] = str_replace( 'https://', '', OPTINMONSTER_URL );
|
|
|
|
return $hosts;
|
|
}
|
|
}
|