site_oueb_2/wp-content/plugins/ocean-extra/includes/client-migration/edd.php

499 lines
18 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* @package Freemius Migration
* @copyright Copyright (c) 2016, Freemius, Inc.
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
* @since 1.0.3
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
if ( ! class_exists( 'FS_Client_License_Abstract_v2' ) ) {
require_once dirname( __FILE__ ) . '/class-fs-client-license-abstract.php';
}
if ( ! class_exists( 'FS_EDD_Client_Migration_v2' ) ) {
require_once dirname( __FILE__ ) . '/class-fs-edd-client-migration.php';
}
/**
* You should use your own unique CLASS name, and be sure to replace it
* throughout this file. For example, if your product's name is "Awesome Product"
* then you can rename it to "Awesome_Product_EDD_License_Key".
*/
class OceanWP_EDD_License_Key extends FS_Client_License_Abstract_v2 {
/**
* @var array<string,string>
*/
public static $paid_addons = array(
'Ocean_Cookie_Notice' => array(
'name' => 'Cookie Notice',
'fs_id' => '3765',
'fs_shortcode' => 'ocean_cookie_notice_fs',
),
'Ocean_Elementor_Widgets' => array(
'name' => 'Elementor Widgets',
'fs_id' => '3757',
'fs_shortcode' => 'ocean_elementor_widgets_fs',
),
'Ocean_Footer_Callout' => array(
'name' => 'Footer Callout',
'fs_id' => '3754',
'fs_shortcode' => 'ocean_footer_callout_fs',
),
'Ocean_Full_Screen' => array(
'name' => 'Full Screen',
'fs_id' => '3766',
'fs_shortcode' => 'ocean_full_screen_fs',
),
'Ocean_Hooks' => array(
'name' => 'Ocean Hooks',
'fs_id' => '3758',
'fs_shortcode' => 'oh_fs',
),
/*'Ocean_Instagram' => array(
'name' => 'Instagram',
'fs_id' => '3763',
'fs_shortcode' => 'ocean_instagram_fs',
),*/
'Ocean_Popup_Login' => array(
'name' => 'Popup Login',
'fs_id' => '3764',
'fs_shortcode' => 'ocean_popup_login_fs',
),
'Ocean_Portfolio' => array(
'name' => 'Portfolio',
'fs_id' => '3761',
'fs_shortcode' => 'ocean_portfolio_fs',
),
'Ocean_Pro_Demos' => array(
'name' => 'Pro Demos',
'fs_id' => '3797',
'fs_shortcode' => 'ocean_pro_demos_fs',
),
'Ocean_Side_Panel' => array(
'name' => 'Side Panel',
'fs_id' => '3756',
'fs_shortcode' => 'ocean_side_panel_fs',
),
'Ocean_Sticky_Footer' => array(
'name' => 'Sticky Footer',
'fs_id' => '3759',
'fs_shortcode' => 'ocean_sticky_footer_fs',
),
'Ocean_Sticky_Header' => array(
'name' => 'Sticky Header',
'fs_id' => '3755',
'fs_shortcode' => 'ocean_sticky_header_fs',
),
'Ocean_White_Label' => array(
'name' => 'White Label',
'fs_id' => '3762',
'fs_shortcode' => 'ocean_white_label_fs',
),
'Ocean_Woo_Popup' => array(
'name' => 'Woo Popup',
'fs_id' => '3760',
'fs_shortcode' => 'ocean_woo_popup_fs',
),
);
private $_is_valid;
private $_is_bundle;
private $_addon_class;
private $_addon_license_index;
private $_logger;
/**
* OceanWP_EDD_License_Key constructor.
*
* @param bool $is_bundle
* @param string $addon_class
* @param string $addon_name
*/
function __construct( $is_bundle, $addon_class = '', $addon_name = '' ) {
$this->_is_bundle = $is_bundle;
$this->_addon_class = $addon_class;
$this->_addon_license_index = sprintf(
'oceanwp_%s_license_key',
preg_replace( '/[^a-zA-Z0-9_\s]/', '', str_replace( ' ', '_', strtolower( $addon_name ) ) )
);
$this->_is_valid = true;
if ( ! $is_bundle ) {
$this->_is_valid = (
isset( self::$paid_addons[ $addon_class ] ) &&
$addon_name === self::$paid_addons[ $addon_class ]['name']
);
}
$this->_logger = FS_Logger::get_logger(
WP_FS__SLUG . '_oceanwp_migration_' . ($is_bundle ? 'bundle' : $addon_class),
WP_FS__DEBUG_SDK,
WP_FS__ECHO_DEBUG_SDK
);
}
/**
* @author Vova Feldman (@svovaf)
* @since 1.0.3
*
* @param int|null $blog_id
*
* @return string
*/
function get( $blog_id = null ) {
if ( ! $this->_is_valid ) {
return '';
}
if ( $this->_is_bundle ) {
return trim( get_option( 'oceanwp_bundle_key', '' ) );
}
$oceanwp_options = get_option( 'oceanwp_options', '' );
if ( ! is_array( $oceanwp_options ) || ! isset( $oceanwp_options['licenses'] ) ) {
return '';
}
return isset( $oceanwp_options['licenses'][ $this->_addon_license_index ] ) ?
trim( $oceanwp_options['licenses'][ $this->_addon_license_index ] ) :
'';
}
/**
* When migrating a bundle license and the sales platform creates a different
* license key for every product in the bundle which is the key that actually
* used for activation, this method should return the collection of all
* child license keys that were activated on the current website.
*
* @author Vova Feldman (@svovaf)
* @since 1.1.0
*
* @param int|null $blog_id
*
* @return string[]
*/
function get_children( $blog_id = null ) {
if ( ! $this->_is_valid ) {
return array();
}
$oceanwp_options = get_option( 'oceanwp_options', '' );
if ( ! is_array( $oceanwp_options ) || ! isset( $oceanwp_options['licenses'] ) ) {
return array();
}
$children_license_keys = array();
foreach ( self::$paid_addons as $class_name => $data ) {
$index = sprintf(
'oceanwp_%s_license_key',
preg_replace( '/[^a-zA-Z0-9_\s]/', '', str_replace( ' ', '_', strtolower( $data['name'] ) ) )
);;
if ( isset( $oceanwp_options['licenses'][ $index ] ) ) {
$children_license_keys[] = trim( $oceanwp_options['licenses'][ $index ] );
}
}
return $children_license_keys;
}
/**
* @author Vova Feldman (@svovaf)
* @since 1.0.3
*
* @param string $license_key
* @param int|null $blog_id
*
* @return bool True if successfully updated.
*/
function set( $license_key, $blog_id = null ) {
if ( ! $this->_is_valid ) {
return false;
}
if ( $this->_is_bundle ) {
$option_name = 'oceanwp_bundle_key';
$option_value = $license_key;
} else {
$option_name = 'oceanwp_options';
$oceanwp_options = get_option( $option_name, '' );
if ( ! is_array( $oceanwp_options ) ) {
$oceanwp_options = array( 'licenses' => array() );
} else if ( ! isset( $oceanwp_options['licenses'] ) ) {
$oceanwp_options['licenses'] = array();
}
$oceanwp_options['licenses'][ $this->_addon_license_index ] = $license_key;
$option_value = $oceanwp_options;
}
if ( ! is_multisite() ) {
return update_option( $option_name, $option_value );
}
$blog_ids = FS_Client_Migration_Abstract_v2::get_blog_ids();
$is_updated = false;
foreach ( $blog_ids as $blog_id ) {
switch_to_blog( $blog_id );
$is_updated = $is_updated || update_option( $option_name, $option_value );
restore_current_blog();
}
return $is_updated;
}
/**
* Override this only when the product supports a network level integration.
*
* @author Vova Feldman (@svovaf)
* @since 1.1.0
*
* @return bool
*/
public function is_network_migration() {
/**
* Comment the line below if you'd like to support network level licenses migration.
* This is only relevant if you have a special network level integration with your plugin
* and you're utilizing the Freemius SDK's multisite network integration mode.
*/
return false;
}
/**
* This method is only relevant when you're using the network level migration mode.
* The method should return true only if you restrict a network level license activation
* to apply the exact same license for the products network wide.
*
* For example, if a network with 5-sites can have license1 on sub-sites 1-3,
* and license2 on sub-sites 4-5, then the result of this method should be set to `false`.
* BUT, if you the only way to activate the license is that it will be the same license on
* all sub-sites 1-5, then this method should return `true`.
*
* @return bool
*/
public function are_licenses_network_identical() {
return false;
}
/**
* Activates a bundle license on the installed child products, after successfully migrating the license.
*
* @author Vova Feldman (@svovaf)
* @since 2.0.0
*
* @param \FS_User $user
* @param string|null $bundle_license_key
*/
public function activate_bundle_license_after_migration( FS_User $user, $bundle_license_key = null ) {
$this->_logger->entrance("bundle_license_key=" . var_export( $bundle_license_key, true ));
if ( $this->_is_bundle || empty( $bundle_license_key ) ) {
$bundle_license_key = $this->get();
}
// Iterate over the installed add-ons and try to activate the bundle's license for each add-on.
foreach ( self::$paid_addons as $class_name => $data ) {
if ( ! class_exists( $class_name ) ) {
$this->_logger->log( "Class {$class_name} does not exist." );
continue;
}
if ( ! function_exists( $data['fs_shortcode'] ) ) {
$this->_logger->log( "Function {$data['fs_shortcode']} does not exist." );
continue;
}
/**
* Initiate the Freemius instance before migrating.
*
* @var Freemius $addon_fs
*/
$addon_fs = call_user_func( $data['fs_shortcode'] );
$this->_logger->log( 'Starting activation of the migrated license for ' . str_replace( '_', ' ', $class_name) . '.' );
$addon_fs->activate_migrated_license( $bundle_license_key );
}
}
}
if ( ! class_exists( 'FS_Client_Addon_Migration_Abstract_v2' ) ) {
require_once dirname( __FILE__ ) . '/class-fs-client-addon-migration-abstract.php';
}
/**
* @todo For add-ons migration change the if condition from `false` to `true` an update the class according to the inline instructions.
*
* @author Vova Feldman (@svovaf)
* @since 2.0.0
*/
if ( true ) {
/**
* You should use your own unique CLASS name, and be sure to replace it
* throughout this file. For example, if your product's name is "Awesome Product"
* then you can rename it to "Awesome_Product_EDD_Addon_Migration".
*
* @author Vova Feldman (@svovaf)
* @since 2.0.0
*
* Class OceanWP_EDD_Addon_Migration
*/
class OceanWP_EDD_Addon_Migration extends FS_Client_Addon_Migration_Abstract_v2 {
#region Singleton
/**
* @var FS_Client_Addon_Migration_Abstract_v2[]
*/
protected static $_INSTANCES = array();
/**
* @param string $addon_shortcode
*
* @return FS_Client_Addon_Migration_Abstract_v2
*/
public static function instance( $addon_shortcode ) {
if ( ! isset( self::$_INSTANCES[ $addon_shortcode ] ) ) {
self::$_INSTANCES[ $addon_shortcode ] = new self( $addon_shortcode );
}
return self::$_INSTANCES[ $addon_shortcode ];
}
/**
* OceanWP_EDD_Addon_Migration constructor.
*
* @param string $addon_shortcode
*/
private function __construct( $addon_shortcode ) {
$this->_addon_shortcode = $addon_shortcode;
}
#endregion
/**
* The parent product's shortcode.
*
* @author Vova Feldman (@svovaf)
* @since 2.0.0
*
* @return string
*/
protected function get_parent_shortcode() {
return 'owp_fs';
}
/**
* @author Vova Feldman (@svovaf)
* @since 2.0.0
*
* @return bool
*/
protected function is_parent_included() {
return class_exists( 'OCEANWP_Theme_Class' );
}
/**
* @author Vova Feldman (@svovaf)
* @since 2.0.0
*
* @return array
*/
protected function get_addons_sdk_init_common_config() {
return array(
'type' => 'plugin',
'is_premium' => true,
'is_premium_only' => true,
'has_paid_plans' => true,
'parent' => array(
'id' => '3752',
'slug' => 'oceanwp',
'public_key' => 'pk_043077b34f20f5e11334af3c12493',
'name' => 'OceanWP',
),
'menu' => array(
'first-path' => 'plugins.php',
'support' => false,
),
);
}
/**
* @author Vova Feldman (@svovaf)
* @since 2.0.0
*
* @param bool $is_bundle
* @param string $addon_class
* @param string $addon_name
*
* @return FS_Client_License_Abstract_v2
*/
protected function get_new_license_key_manager( $is_bundle, $addon_class = '', $addon_name = '' ) {
return new OceanWP_EDD_License_Key( $is_bundle, $addon_class, $addon_name );
}
/**
* @todo This should point to your EDD store root URL.
*
* @author Vova Feldman (@svovaf)
* @since 2.0.0
*
* @return string
*/
protected function get_store_url() {
return 'https://oceanwp.org';
}
}
}
$is_migration_debug = FS_Client_Addon_Migration_Abstract_v2::is_migration_debug();
if ( FS_Client_Addon_Migration_Abstract_v2::is_migration_on() ) {
if ( ! $is_migration_debug ||
( ! FS_Client_Addon_Migration_Abstract_v2::is_wp_ajax() && ! FS_Client_Addon_Migration_Abstract_v2::is_wp_cron() )
) {
$bundle_license_manager = new OceanWP_EDD_License_Key( true );
// @todo We need to make sure that if there's both a bundle license and individual add-on license, it first migrates the bundles license, and only later migrate the individual license, but only if the bundles migration failed.
if ( empty( $bundle_license_manager->get() ) ) {
// Bundle license is not set, try to migrate per add-on.
do_action( 'owp_fs_client_migration_loaded' );
} else {
// Bundle license is set, try to migrate the bundle's license.
new FS_EDD_Client_Migration_v2(
// This should be replaced with your custom Freemius shortcode.
owp_fs(),
// This should point to your EDD store root URL.
'https://oceanwp.org',
// The bundle's download ID.
'37394',
$bundle_license_manager,
// Migration type.
FS_Client_Migration_Abstract_v2::TYPE_BUNDLE_TO_BUNDLE,
// Freemius was NOT included in the previous (last) version of the product.
true,
// For testing, you can change that argument to TRUE to trigger the migration in the same HTTP request.
$is_migration_debug
);
}
}
}