-
Notifications
You must be signed in to change notification settings - Fork 79
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[checkout] [redirect] Add functionality to complete the checkout thro…
…ugh a redirect instead of iFrame.
- Loading branch information
Showing
9 changed files
with
466 additions
and
124 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,13 @@ | ||
@import "../start"; | ||
@import "ajax-loader"; | ||
|
||
@media screen and (max-width: 782px) { | ||
#wpbody-content { | ||
padding-bottom: 0 !important; | ||
} | ||
} | ||
|
||
.fs-checkout-process-redirect { | ||
padding: 40px; | ||
text-align: center; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,242 @@ | ||
<?php | ||
/** | ||
* @package Freemius | ||
* @copyright Copyright (c) 2015, Freemius, Inc. | ||
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 | ||
* @since 1.0.6 | ||
*/ | ||
|
||
if ( ! defined( 'ABSPATH' ) ) { | ||
exit; | ||
} | ||
|
||
class FS_Checkout_Manager { | ||
|
||
# region Singleton | ||
|
||
/** | ||
* @var FS_Checkout_Manager | ||
*/ | ||
private static $_instance; | ||
|
||
/** | ||
* @return FS_Checkout_Manager | ||
*/ | ||
static function instance() { | ||
if ( ! isset( self::$_instance ) ) { | ||
self::$_instance = new FS_Checkout_Manager(); | ||
} | ||
|
||
return self::$_instance; | ||
} | ||
|
||
private function __construct() { | ||
} | ||
|
||
#endregion | ||
|
||
/** | ||
* Retrieves the query params needed to load the Freemius Checkout in the context of the plugin. | ||
* | ||
* @param Freemius $fs | ||
* @param number $plugin_id | ||
* @param number $plan_id | ||
* @param number $licenses | ||
* | ||
* @return array | ||
*/ | ||
public function get_query_params( Freemius $fs, $plugin_id, $plan_id, $licenses ) { | ||
$timestamp = time(); | ||
|
||
$context_params = array( | ||
'plugin_id' => $fs->get_id(), | ||
'public_key' => $fs->get_public_key(), | ||
'plugin_version' => $fs->get_plugin_version(), | ||
'mode' => 'dashboard', | ||
'trial' => fs_request_get_bool( 'trial' ), | ||
'is_ms' => ( fs_is_network_admin() && $fs->is_network_active() ), | ||
); | ||
|
||
if ( FS_Plugin_Plan::is_valid_id( $plan_id ) ) { | ||
$context_params['plan_id'] = $plan_id; | ||
} | ||
|
||
if ( $licenses === strval( intval( $licenses ) ) && $licenses > 0 ) { | ||
$context_params['licenses'] = $licenses; | ||
} | ||
|
||
if ( $plugin_id == $fs->get_id() ) { | ||
$is_premium = $fs->is_premium(); | ||
|
||
$bundle_id = $fs->get_bundle_id(); | ||
if ( ! is_null( $bundle_id ) ) { | ||
$context_params['bundle_id'] = $bundle_id; | ||
} | ||
} else { | ||
// Identify the module code version of the checkout context module. | ||
if ( $fs->is_addon_activated( $plugin_id ) ) { | ||
$fs_addon = Freemius::get_instance_by_id( $plugin_id ); | ||
$is_premium = $fs_addon->is_premium(); | ||
} else { | ||
// If add-on isn't activated assume the premium version isn't installed. | ||
$is_premium = false; | ||
} | ||
} | ||
|
||
// Get site context secure params. | ||
if ( $fs->is_registered() ) { | ||
$site = $fs->get_site(); | ||
|
||
if ( $plugin_id != $fs->get_id() ) { | ||
if ( $fs->is_addon_activated( $plugin_id ) ) { | ||
$fs_addon = Freemius::get_instance_by_id( $plugin_id ); | ||
$addon_site = $fs_addon->get_site(); | ||
if ( is_object( $addon_site ) ) { | ||
$site = $addon_site; | ||
} | ||
} | ||
} | ||
|
||
$context_params = array_merge( | ||
$context_params, | ||
FS_Security::instance()->get_context_params( | ||
$site, | ||
$timestamp, | ||
'checkout' | ||
) | ||
); | ||
} else { | ||
$current_user = Freemius::_get_current_wp_user(); | ||
|
||
// Add site and user info to the request, this information | ||
// is NOT being stored unless the user complete the purchase | ||
// and agrees to the TOS. | ||
$context_params = array_merge( $context_params, array( | ||
'user_firstname' => $current_user->user_firstname, | ||
'user_lastname' => $current_user->user_lastname, | ||
'user_email' => $current_user->user_email, | ||
'home_url' => home_url(), | ||
) ); | ||
|
||
$fs_user = Freemius::_get_user_by_email( $current_user->user_email ); | ||
|
||
if ( is_object( $fs_user ) && $fs_user->is_verified() ) { | ||
$context_params = array_merge( | ||
$context_params, | ||
FS_Security::instance()->get_context_params( | ||
$fs_user, | ||
$timestamp, | ||
'checkout' | ||
) | ||
); | ||
} | ||
} | ||
|
||
if ( $fs->is_payments_sandbox() ) { | ||
// Append plugin secure token for sandbox mode authentication. | ||
$context_params['sandbox'] = FS_Security::instance()->get_secure_token( | ||
$fs->get_plugin(), | ||
$timestamp, | ||
'checkout' | ||
); | ||
|
||
/** | ||
* @since 1.1.7.3 Add security timestamp for sandbox even for anonymous user. | ||
*/ | ||
if ( empty( $context_params['s_ctx_ts'] ) ) { | ||
$context_params['s_ctx_ts'] = $timestamp; | ||
} | ||
} | ||
|
||
$can_user_install = ( | ||
( $fs->is_plugin() && current_user_can( 'install_plugins' ) ) || | ||
( $fs->is_theme() && current_user_can( 'install_themes' ) ) | ||
); | ||
|
||
return array_merge( $context_params, $_GET, array( | ||
// Current plugin version. | ||
'plugin_version' => $fs->get_plugin_version(), | ||
'sdk_version' => WP_FS__SDK_VERSION, | ||
'is_premium' => $is_premium ? 'true' : 'false', | ||
'can_install' => $can_user_install ? 'true' : 'false', | ||
) ); | ||
} | ||
|
||
/** | ||
* The return URL to pass to the checkout when the checkout is loaded in "redirect" mode. | ||
* | ||
* @param Freemius $fs | ||
* | ||
* @return string | ||
*/ | ||
public function get_checkout_redirect_return_url( Freemius $fs ) { | ||
$request_url = remove_query_arg( '_wp_http_referer' ); | ||
|
||
return fs_nonce_url( | ||
$fs->checkout_url( | ||
fs_request_get( 'billing_cycle' ), | ||
fs_request_get_bool( 'trial' ), | ||
array( | ||
'process_redirect' => 'true', | ||
'_wp_http_referer' => $request_url, | ||
) | ||
), | ||
$this->get_checkout_redirect_nonce_action( $fs ) | ||
); | ||
} | ||
|
||
/** | ||
* @param array $query_params | ||
* @param string $base_url | ||
* | ||
* @return string | ||
*/ | ||
public function get_full_checkout_url( array $query_params, $base_url = FS_CHECKOUT__ADDRESS ) { | ||
return $base_url . '/?' . http_build_query( $query_params ); | ||
} | ||
|
||
/** | ||
* Verifies the redirect after a checkout with the nonce. | ||
* | ||
* @param Freemius $fs | ||
*/ | ||
public function verify_checkout_redirect_nonce( Freemius $fs ) { | ||
check_admin_referer( $this->get_checkout_redirect_nonce_action( $fs ) ); | ||
} | ||
|
||
/** | ||
* Get the URL to process a new install after the checkout. | ||
* | ||
* @param Freemius $fs | ||
* @param number $plugin_id | ||
* | ||
* @return string | ||
*/ | ||
public function get_install_url( Freemius $fs, $plugin_id ) { | ||
return fs_nonce_url( $fs->_get_admin_page_url( 'account', array( | ||
'fs_action' => $fs->get_unique_affix() . '_activate_new', | ||
'plugin_id' => $plugin_id, | ||
) ), $fs->get_unique_affix() . '_activate_new' ); | ||
} | ||
|
||
/** | ||
* Get the URL to process a pending activation after the checkout. | ||
* | ||
* @param Freemius $fs | ||
* @param number $plugin_id | ||
* | ||
* @return string | ||
*/ | ||
public function get_pending_activation_url( Freemius $fs, $plugin_id ) { | ||
return fs_nonce_url( $fs->_get_admin_page_url( 'account', array( | ||
'fs_action' => $fs->get_unique_affix() . '_activate_new', | ||
'plugin_id' => $plugin_id, | ||
'pending_activation' => true, | ||
'has_upgrade_context' => true, | ||
) ), $fs->get_unique_affix() . '_activate_new' ); | ||
} | ||
|
||
private function get_checkout_redirect_nonce_action( Freemius $fs ) { | ||
return $fs->get_unique_affix() . '_checkout_redirect'; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.