• File: Urls.php
  • Full Path: /home/matthif/www/wp-content/plugins/optinmonster/OMAPI/Urls.php
  • Date Modified: 01/24/2025 1:58 PM
  • File size: 8.79 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?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::adminwp_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$argsadmin_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_paramsOPTINMONSTER_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      sprintfOPTINMONSTER_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();

        
// Add the partner id attribution query arg, if it exists.
        
$id OMAPI_Partners::get_id();
        if ( ! empty( 
$id ) ) {
            
$args['sscid'] = $id;
        }

        
// 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'/' ) && !== 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;
    }
}