g and shipping addresses.', 'woocommerce-pdf-invoices-packing-slips' ),
'extensions' => array( 'pro', 'bundle' ),
),
array(
'label' => __( 'Order notification email', 'woocommerce-pdf-invoices-packing-slips' ),
'description' => sprintf(
'%s %s',
__( 'Send a notification email to user specified addresses.', 'woocommerce-pdf-invoices-packing-slips' ),
'https://docs.wpovernight.com/woocommerce-pdf-invoices-packing-slips/configuring-the-order-notification-email/',
__( 'Learn more', 'woocommerce-pdf-invoices-packing-slips' )
),
'extensions' => array( 'pro', 'bundle' ),
),
array(
'label' => __( 'PDF Customizer', 'woocommerce-pdf-invoices-packing-slips' ),
'description' => sprintf(
'%s %s',
__( 'Fully customize the product table and totals table on your documents.', 'woocommerce-pdf-invoices-packing-slips' ),
'https://docs.wpovernight.com/woocommerce-pdf-invoices-packing-slips/using-the-customizer/',
__( 'Learn more', 'woocommerce-pdf-invoices-packing-slips' )
),
'extensions' => array( 'templates', 'bundle' ),
),
array(
'label' => __( 'Add custom data to your documents', 'woocommerce-pdf-invoices-packing-slips' ),
'description' => sprintf(
'%s %s',
__( 'Display all sorts of data and apply conditional logic using Custom Blocks.', 'woocommerce-pdf-invoices-packing-slips' ),
'https://docs.wpovernight.com/woocommerce-pdf-invoices-packing-slips/using-custom-blocks/',
__( 'Learn more', 'woocommerce-pdf-invoices-packing-slips' )
),
'extensions' => array( 'templates', 'bundle' ),
),
array(
'label' => __( 'Additional PDF templates', 'woocommerce-pdf-invoices-packing-slips' ),
'description' => __( 'Make use of our Business or Modern template designs.', 'woocommerce-pdf-invoices-packing-slips' ),
'extensions' => array( 'templates', 'bundle' ),
),
array(
'label' => __( 'Add styling', 'woocommerce-pdf-invoices-packing-slips' ),
'description' => __( 'Easily change the look and feel of your documents by adding some custom CSS.', 'woocommerce-pdf-invoices-packing-slips' ),
'extensions' => array( 'templates', 'bundle' ),
),
);
$extension_license_infos = $this->get_extension_license_infos( true );
$plugin_recommendations = array(
array(
'plugin_path' => 'wc-reminder-emails/wc-reminder-emails.php',
'thumbnail' => WPO_WCPDF()->plugin_url().'/assets/images/wc-reminder-emails-thumbnail-400x400.jpg',
'title' => __( 'WooCommerce Smart Reminder Emails', 'woocommerce-pdf-invoices-packing-slips' ),
'description' => __( 'Automatically schedule and send Reminder Emails for WooCommerce orders.', 'woocommerce-pdf-invoices-packing-slips' ),
'url' => 'https://wpovernight.com/downloads/woocommerce-reminder-emails-payment-reminders?utm_medium=plugin&utm_source=ips&utm_campaign=upgrade-tab&content=reminder-emails-cross'
),
array(
'plugin_path' => 'woocommerce-address-labels/woocommerce-address-labels.php',
'thumbnail' => WPO_WCPDF()->plugin_url().'/assets/images/woocommerce-address-labels-thumbnail-400x400.jpg',
'title' => __( 'WooCommerce Print Address Labels', 'woocommerce-pdf-invoices-packing-slips' ),
'description' => __( 'Print out address labels for selected orders straight from WooCommerce.', 'woocommerce-pdf-invoices-packing-slips' ),
'url' => 'https://wpovernight.com/downloads/woocommerce-print-address-labels?utm_medium=plugin&utm_source=ips&utm_campaign=upgrade-tab&content=address-labels-cross'
),
array(
'plugin_path' => 'woocommerce-printnode/print-orders.php',
'thumbnail' => WPO_WCPDF()->plugin_url().'/assets/images/woocommerce-printnode-thumbnail-400x400.jpg',
'title' => __( 'WooCommerce Automatic Printing - PrintNode', 'woocommerce-pdf-invoices-packing-slips' ),
'description' => __( 'A plugin to automatically print completed orders via PrintNode.', 'woocommerce-pdf-invoices-packing-slips' ),
'url' => 'https://wpovernight.com/downloads/woocommerce-automatic-order-printing-printnode?utm_medium=plugin&utm_source=ips&utm_campaign=upgrade-tab&content=order-printing-cross'
),
array(
'plugin_path' => 'woocommerce-ultimate-barcodes/woocommerce-ultimate-barcodes.php',
'thumbnail' => WPO_WCPDF()->plugin_url().'/assets/images/woocommerce-ultimate-barcodes-thumbnail-400x400.jpg',
'title' => __( 'WooCommerce Ultimate Barcodes', 'woocommerce-pdf-invoices-packing-slips' ),
'description' => __( 'Generate barcodes (ZATCA, QR-codes, C128, EAN-13 and more) for your orders, products and even invoices & packing slips.', 'woocommerce-pdf-invoices-packing-slips' ),
'url' => 'https://wpovernight.com/downloads/woocommerce-ultimate-barcodes?utm_medium=plugin&utm_source=ips&utm_campaign=upgrade-tab&content=ultimate-barcodes-cross'
),
array(
'plugin_path' => 'woocommerce-order-list/woocommerce-order-list.php',
'thumbnail' => WPO_WCPDF()->plugin_url().'/assets/images/woocommerce-order-list-thumbnail-400x400.jpg',
'title' => __( 'WooCommerce Print Order List', 'woocommerce-pdf-invoices-packing-slips' ),
'description' => __( 'This plugin lets you quickly print a list of your WooCommerce orders. Great for order picking.', 'woocommerce-pdf-invoices-packing-slips' ),
'url' => 'https://wpovernight.com/downloads/woocommerce-print-order-list?utm_medium=plugin&utm_source=ips&utm_campaign=upgrade-tab&content=order-list-cross'
),
array(
'plugin_path' => 'wp-menu-cart-pro/wp-menu-cart-pro.php',
'thumbnail' => WPO_WCPDF()->plugin_url().'/assets/images/wp-menu-cart-pro-thumbnail-400x400.jpg',
'title' => __( 'Menu Cart Pro', 'woocommerce-pdf-invoices-packing-slips' ),
'description' => __( 'Integrates seamlessly with WooCommerce to add a shopping cart to your menu.', 'woocommerce-pdf-invoices-packing-slips' ),
'url' => 'https://wpovernight.com/downloads/menu-cart-pro?utm_medium=plugin&utm_source=ips&utm_campaign=upgrade-tab&content=menu-cart-pro-cross'
),
);
// Sort recommendations based on if the plugin is installed
$installed_plugins = get_plugins();
$sorted_plugin_recommendations = array();
foreach ( array_reverse( $plugin_recommendations ) as $plugin ) {
if ( isset( $installed_plugins[ $plugin['plugin_path'] ] ) ) {
$plugin['installed'] = true;
$sorted_plugin_recommendations[] = $plugin;
} else {
array_unshift( $sorted_plugin_recommendations, $plugin );
}
}
include( WPO_WCPDF()->plugin_path() . '/views/upgrade-table.php' );
}
}
/**
* Check if a PDF extension is enabled
*
* @param string $extension can be 'pro' or 'templates'
* @return boolean
*/
public function extension_is_enabled( $extension ) {
$is_enabled = false;
if ( ! empty( $extension ) || ! in_array( $extension, $this->extensions ) ) {
$extension_main_function = "WPO_WCPDF_".ucfirst( $extension );
if ( function_exists( $extension_main_function ) ) {
$is_enabled = true;
}
}
return $is_enabled;
}
/**
* Get PDF extensions license info
*
* @param bool $ignore_cache
* @return array
*/
public function get_extension_license_infos( $ignore_cache = false ) {
$extensions = $this->extensions;
$license_info = ! $ignore_cache ? $this->get_extensions_license_data( 'cached' ) : array();
if ( ! empty( $license_info ) ) {
return $license_info;
}
foreach ( $extensions as $extension ) {
$license_info[ $extension ] = array();
$args = array();
$request = null;
$license_key = '';
$updater = null;
if ( $this->extension_is_enabled( $extension ) ) {
$extension_main_function = "WPO_WCPDF_" . ucfirst( $extension );
$updater = $extension_main_function()->updater;
if ( 'templates' === $extension && version_compare( $extension_main_function()->version, '2.20.0', '<=' ) ) { // 'updater' property had 'private' visibility
continue;
}
if ( is_null( $updater ) ) {
continue;
}
// built-in updater
if ( is_callable( array( $updater, 'get_license_key' ) ) ) {
$license_key = $updater->get_license_key();
}
if ( ! empty( $license_key ) ) {
$args['edd_action'] = 'check_license';
$args['license_key'] = $license_info[ $extension ]['license_key'] = trim( $license_key );
} else {
continue;
}
if ( $updater && is_callable( array( $updater, 'remote_license_actions' ) ) && ! empty( $args ) ) {
$request = $updater->remote_license_actions( $args );
if ( is_wp_error( $request ) ) {
wcpdf_log_error( 'Unable to retrieve license data from the remote server for the extension ' . $extension . '. Error: ' . $response->get_error_message() );
continue;
}
$license_info[ $extension ]['status'] = isset( $request->license ) ? $request->license : 'inactive';
$license_info[ $extension ]['license_limit'] = isset( $request->license_limit ) ? $request->license_limit : 1;
$license_info[ $extension ]['license_id'] = isset( $request->license_id ) ? absint( $request->license_id ) : null;
$license_info[ $extension ]['bundle_license'] = isset( $request->bundle_license ) ? $request->bundle_license : false;
}
}
}
$extensions[] = 'bundle';
$default_utm_tags = 'utm_medium=plugin&utm_source=ips&utm_campaign=upgrade-tab';
$bundle_upgrade_url = '';
$upgrade_tiers = array(
// license limit => upgrade ID
'pro' => array(
1 => 3,
3 => 4,
25 => 5,
),
'templates' => array(
1 => 4,
3 => 5,
25 => 6,
),
);
foreach ( $extensions as $extension ) {
// set default URL
switch ( $extension ) {
case 'pro':
$pro_utm_tags = $default_utm_tags . '&utm_content=ips-pro-upgrade';
$license_info[ $extension ]['url'] = "https://wpovernight.com/downloads/woocommerce-pdf-invoices-packing-slips-professional/?{$pro_utm_tags}";
break;
case 'templates':
case 'bundle':
$bundle_utm_tags = $default_utm_tags . '&utm_content=ips-plus-bundle-upgrade';
$license_info[ $extension ]['url'] = "https://wpovernight.com/downloads/woocommerce-pdf-invoices-packing-slips-bundle/?{$bundle_utm_tags}";
break;
}
// if bundle, no upgrade needed
if ( isset( $license_info[ $extension ]['bundle_license'] ) && $license_info[ $extension ]['bundle_license'] ) {
continue;
}
// there's no license ID, can't be upgraded
if ( empty( $license_info[ $extension ]['license_id'] ) ) {
continue;
}
// check if the license is activated and valid
if ( empty( $license_info[ $extension ]['status'] ) || 'valid' !== $license_info[ $extension ]['status'] ) {
continue;
}
// if bundle upgrade URL is already set, skip
if ( ! empty( $bundle_upgrade_url ) ) {
continue;
}
// create upgrade URL
$license_id = $license_info[ $extension ]['license_id'];
$license_limit = $license_info[ $extension ]['license_limit'];
$upgrade_id = isset( $upgrade_tiers[ $extension ][ $license_limit ] ) ? $upgrade_tiers[ $extension ][ $license_limit ] : 0;
if ( 0 === $upgrade_id ) {
continue;
}
$upgrade_utm_tags = $default_utm_tags . '&utm_content=ips-plus-bundle-upgrade+upgrade-from-' . $extension;
$bundle_upgrade_url = "https://wpovernight.com/checkout/?edd_action=sl_license_upgrade&license_id={$license_id}&upgrade_id={$upgrade_id}&{$upgrade_utm_tags}";
}
// set bundle upgrade URL
if ( ! empty( $bundle_upgrade_url ) ) {
$license_info['bundle']['url'] = $bundle_upgrade_url;
}
update_option( 'wpo_wcpdf_extensions_license_cache', $license_info );
if ( as_next_scheduled_action( 'wpo_wcpdf_schedule_extensions_license_cache_clearing' ) ) {
as_unschedule_action( 'wpo_wcpdf_schedule_extensions_license_cache_clearing' );
}
as_schedule_single_action( strtotime( "+1 week" ), 'wpo_wcpdf_schedule_extensions_license_cache_clearing' );
return $license_info;
}
/**
* Clear extensions license cache
*
* @return void
*/
public function clear_extensions_license_cache() {
delete_option( 'wpo_wcpdf_extensions_license_cache' );
}
/**
* Get extensions license data
*
* @param string $type can be 'cached' or 'live'
* @return array
*/
public function get_extensions_license_data( string $type = 'cached' ): array {
$option_key = 'wpo_wcpdf_extensions_license_cache';
// default to fetching cached data
$data = get_option( $option_key, array() );
// if type is 'live' or cached data is empty, fetch live data
if ( 'live' === $type || empty( $data ) ) {
$data = $this->get_extension_license_infos( true );
if ( 'cached' === $type ) {
update_option( $option_key, $data );
}
}
return $data;
}
/**
* Check if are any extensions installed
*
* @return bool
*/
public function are_any_extensions_installed() {
$installed = false;
foreach ( $this->extensions as $extension ) {
if ( $this->extension_is_enabled( $extension ) ) {
$installed = true;
break;
}
}
return $installed;
}
}
endif; // class_exists
g and shipping addresses.', 'woocommerce-pdf-invoices-packing-slips' ),
'extensions' => array( 'pro', 'bundle' ),
),
array(
'label' => __( 'Order notification email', 'woocommerce-pdf-invoices-packing-slips' ),
'description' => sprintf(
'%s %s',
__( 'Send a notification email to user specified addresses.', 'woocommerce-pdf-invoices-packing-slips' ),
'https://docs.wpovernight.com/woocommerce-pdf-invoices-packing-slips/configuring-the-order-notification-email/',
__( 'Learn more', 'woocommerce-pdf-invoices-packing-slips' )
),
'extensions' => array( 'pro', 'bundle' ),
),
array(
'label' => __( 'PDF Customizer', 'woocommerce-pdf-invoices-packing-slips' ),
'description' => sprintf(
'%s %s',
__( 'Fully customize the product table and totals table on your documents.', 'woocommerce-pdf-invoices-packing-slips' ),
'https://docs.wpovernight.com/woocommerce-pdf-invoices-packing-slips/using-the-customizer/',
__( 'Learn more', 'woocommerce-pdf-invoices-packing-slips' )
),
'extensions' => array( 'templates', 'bundle' ),
),
array(
'label' => __( 'Add custom data to your documents', 'woocommerce-pdf-invoices-packing-slips' ),
'description' => sprintf(
'%s %s',
__( 'Display all sorts of data and apply conditional logic using Custom Blocks.', 'woocommerce-pdf-invoices-packing-slips' ),
'https://docs.wpovernight.com/woocommerce-pdf-invoices-packing-slips/using-custom-blocks/',
__( 'Learn more', 'woocommerce-pdf-invoices-packing-slips' )
),
'extensions' => array( 'templates', 'bundle' ),
),
array(
'label' => __( 'Additional PDF templates', 'woocommerce-pdf-invoices-packing-slips' ),
'description' => __( 'Make use of our Business or Modern template designs.', 'woocommerce-pdf-invoices-packing-slips' ),
'extensions' => array( 'templates', 'bundle' ),
),
array(
'label' => __( 'Add styling', 'woocommerce-pdf-invoices-packing-slips' ),
'description' => __( 'Easily change the look and feel of your documents by adding some custom CSS.', 'woocommerce-pdf-invoices-packing-slips' ),
'extensions' => array( 'templates', 'bundle' ),
),
);
$extension_license_infos = $this->get_extension_license_infos( true );
$plugin_recommendations = array(
array(
'plugin_path' => 'wc-reminder-emails/wc-reminder-emails.php',
'thumbnail' => WPO_WCPDF()->plugin_url().'/assets/images/wc-reminder-emails-thumbnail-400x400.jpg',
'title' => __( 'WooCommerce Smart Reminder Emails', 'woocommerce-pdf-invoices-packing-slips' ),
'description' => __( 'Automatically schedule and send Reminder Emails for WooCommerce orders.', 'woocommerce-pdf-invoices-packing-slips' ),
'url' => 'https://wpovernight.com/downloads/woocommerce-reminder-emails-payment-reminders?utm_medium=plugin&utm_source=ips&utm_campaign=upgrade-tab&content=reminder-emails-cross'
),
array(
'plugin_path' => 'woocommerce-address-labels/woocommerce-address-labels.php',
'thumbnail' => WPO_WCPDF()->plugin_url().'/assets/images/woocommerce-address-labels-thumbnail-400x400.jpg',
'title' => __( 'WooCommerce Print Address Labels', 'woocommerce-pdf-invoices-packing-slips' ),
'description' => __( 'Print out address labels for selected orders straight from WooCommerce.', 'woocommerce-pdf-invoices-packing-slips' ),
'url' => 'https://wpovernight.com/downloads/woocommerce-print-address-labels?utm_medium=plugin&utm_source=ips&utm_campaign=upgrade-tab&content=address-labels-cross'
),
array(
'plugin_path' => 'woocommerce-printnode/print-orders.php',
'thumbnail' => WPO_WCPDF()->plugin_url().'/assets/images/woocommerce-printnode-thumbnail-400x400.jpg',
'title' => __( 'WooCommerce Automatic Printing - PrintNode', 'woocommerce-pdf-invoices-packing-slips' ),
'description' => __( 'A plugin to automatically print completed orders via PrintNode.', 'woocommerce-pdf-invoices-packing-slips' ),
'url' => 'https://wpovernight.com/downloads/woocommerce-automatic-order-printing-printnode?utm_medium=plugin&utm_source=ips&utm_campaign=upgrade-tab&content=order-printing-cross'
),
array(
'plugin_path' => 'woocommerce-ultimate-barcodes/woocommerce-ultimate-barcodes.php',
'thumbnail' => WPO_WCPDF()->plugin_url().'/assets/images/woocommerce-ultimate-barcodes-thumbnail-400x400.jpg',
'title' => __( 'WooCommerce Ultimate Barcodes', 'woocommerce-pdf-invoices-packing-slips' ),
'description' => __( 'Generate barcodes (ZATCA, QR-codes, C128, EAN-13 and more) for your orders, products and even invoices & packing slips.', 'woocommerce-pdf-invoices-packing-slips' ),
'url' => 'https://wpovernight.com/downloads/woocommerce-ultimate-barcodes?utm_medium=plugin&utm_source=ips&utm_campaign=upgrade-tab&content=ultimate-barcodes-cross'
),
array(
'plugin_path' => 'woocommerce-order-list/woocommerce-order-list.php',
'thumbnail' => WPO_WCPDF()->plugin_url().'/assets/images/woocommerce-order-list-thumbnail-400x400.jpg',
'title' => __( 'WooCommerce Print Order List', 'woocommerce-pdf-invoices-packing-slips' ),
'description' => __( 'This plugin lets you quickly print a list of your WooCommerce orders. Great for order picking.', 'woocommerce-pdf-invoices-packing-slips' ),
'url' => 'https://wpovernight.com/downloads/woocommerce-print-order-list?utm_medium=plugin&utm_source=ips&utm_campaign=upgrade-tab&content=order-list-cross'
),
array(
'plugin_path' => 'wp-menu-cart-pro/wp-menu-cart-pro.php',
'thumbnail' => WPO_WCPDF()->plugin_url().'/assets/images/wp-menu-cart-pro-thumbnail-400x400.jpg',
'title' => __( 'Menu Cart Pro', 'woocommerce-pdf-invoices-packing-slips' ),
'description' => __( 'Integrates seamlessly with WooCommerce to add a shopping cart to your menu.', 'woocommerce-pdf-invoices-packing-slips' ),
'url' => 'https://wpovernight.com/downloads/menu-cart-pro?utm_medium=plugin&utm_source=ips&utm_campaign=upgrade-tab&content=menu-cart-pro-cross'
),
);
// Sort recommendations based on if the plugin is installed
$installed_plugins = get_plugins();
$sorted_plugin_recommendations = array();
foreach ( array_reverse( $plugin_recommendations ) as $plugin ) {
if ( isset( $installed_plugins[ $plugin['plugin_path'] ] ) ) {
$plugin['installed'] = true;
$sorted_plugin_recommendations[] = $plugin;
} else {
array_unshift( $sorted_plugin_recommendations, $plugin );
}
}
include( WPO_WCPDF()->plugin_path() . '/views/upgrade-table.php' );
}
}
/**
* Check if a PDF extension is enabled
*
* @param string $extension can be 'pro' or 'templates'
* @return boolean
*/
public function extension_is_enabled( $extension ) {
$is_enabled = false;
if ( ! empty( $extension ) || ! in_array( $extension, $this->extensions ) ) {
$extension_main_function = "WPO_WCPDF_".ucfirst( $extension );
if ( function_exists( $extension_main_function ) ) {
$is_enabled = true;
}
}
return $is_enabled;
}
/**
* Get PDF extensions license info
*
* @param bool $ignore_cache
* @return array
*/
public function get_extension_license_infos( $ignore_cache = false ) {
$extensions = $this->extensions;
$license_info = ! $ignore_cache ? $this->get_extensions_license_data( 'cached' ) : array();
if ( ! empty( $license_info ) ) {
return $license_info;
}
foreach ( $extensions as $extension ) {
$license_info[ $extension ] = array();
$args = array();
$request = null;
$license_key = '';
$updater = null;
if ( $this->extension_is_enabled( $extension ) ) {
$extension_main_function = "WPO_WCPDF_" . ucfirst( $extension );
$updater = $extension_main_function()->updater;
if ( 'templates' === $extension && version_compare( $extension_main_function()->version, '2.20.0', '<=' ) ) { // 'updater' property had 'private' visibility
continue;
}
if ( is_null( $updater ) ) {
continue;
}
// built-in updater
if ( is_callable( array( $updater, 'get_license_key' ) ) ) {
$license_key = $updater->get_license_key();
}
if ( ! empty( $license_key ) ) {
$args['edd_action'] = 'check_license';
$args['license_key'] = $license_info[ $extension ]['license_key'] = trim( $license_key );
} else {
continue;
}
if ( $updater && is_callable( array( $updater, 'remote_license_actions' ) ) && ! empty( $args ) ) {
$request = $updater->remote_license_actions( $args );
if ( is_wp_error( $request ) ) {
wcpdf_log_error( 'Unable to retrieve license data from the remote server for the extension ' . $extension . '. Error: ' . $response->get_error_message() );
continue;
}
$license_info[ $extension ]['status'] = isset( $request->license ) ? $request->license : 'inactive';
$license_info[ $extension ]['license_limit'] = isset( $request->license_limit ) ? $request->license_limit : 1;
$license_info[ $extension ]['license_id'] = isset( $request->license_id ) ? absint( $request->license_id ) : null;
$license_info[ $extension ]['bundle_license'] = isset( $request->bundle_license ) ? $request->bundle_license : false;
}
}
}
$extensions[] = 'bundle';
$default_utm_tags = 'utm_medium=plugin&utm_source=ips&utm_campaign=upgrade-tab';
$bundle_upgrade_url = '';
$upgrade_tiers = array(
// license limit => upgrade ID
'pro' => array(
1 => 3,
3 => 4,
25 => 5,
),
'templates' => array(
1 => 4,
3 => 5,
25 => 6,
),
);
foreach ( $extensions as $extension ) {
// set default URL
switch ( $extension ) {
case 'pro':
$pro_utm_tags = $default_utm_tags . '&utm_content=ips-pro-upgrade';
$license_info[ $extension ]['url'] = "https://wpovernight.com/downloads/woocommerce-pdf-invoices-packing-slips-professional/?{$pro_utm_tags}";
break;
case 'templates':
case 'bundle':
$bundle_utm_tags = $default_utm_tags . '&utm_content=ips-plus-bundle-upgrade';
$license_info[ $extension ]['url'] = "https://wpovernight.com/downloads/woocommerce-pdf-invoices-packing-slips-bundle/?{$bundle_utm_tags}";
break;
}
// if bundle, no upgrade needed
if ( isset( $license_info[ $extension ]['bundle_license'] ) && $license_info[ $extension ]['bundle_license'] ) {
continue;
}
// there's no license ID, can't be upgraded
if ( empty( $license_info[ $extension ]['license_id'] ) ) {
continue;
}
// check if the license is activated and valid
if ( empty( $license_info[ $extension ]['status'] ) || 'valid' !== $license_info[ $extension ]['status'] ) {
continue;
}
// if bundle upgrade URL is already set, skip
if ( ! empty( $bundle_upgrade_url ) ) {
continue;
}
// create upgrade URL
$license_id = $license_info[ $extension ]['license_id'];
$license_limit = $license_info[ $extension ]['license_limit'];
$upgrade_id = isset( $upgrade_tiers[ $extension ][ $license_limit ] ) ? $upgrade_tiers[ $extension ][ $license_limit ] : 0;
if ( 0 === $upgrade_id ) {
continue;
}
$upgrade_utm_tags = $default_utm_tags . '&utm_content=ips-plus-bundle-upgrade+upgrade-from-' . $extension;
$bundle_upgrade_url = "https://wpovernight.com/checkout/?edd_action=sl_license_upgrade&license_id={$license_id}&upgrade_id={$upgrade_id}&{$upgrade_utm_tags}";
}
// set bundle upgrade URL
if ( ! empty( $bundle_upgrade_url ) ) {
$license_info['bundle']['url'] = $bundle_upgrade_url;
}
update_option( 'wpo_wcpdf_extensions_license_cache', $license_info );
if ( as_next_scheduled_action( 'wpo_wcpdf_schedule_extensions_license_cache_clearing' ) ) {
as_unschedule_action( 'wpo_wcpdf_schedule_extensions_license_cache_clearing' );
}
as_schedule_single_action( strtotime( "+1 week" ), 'wpo_wcpdf_schedule_extensions_license_cache_clearing' );
return $license_info;
}
/**
* Clear extensions license cache
*
* @return void
*/
public function clear_extensions_license_cache() {
delete_option( 'wpo_wcpdf_extensions_license_cache' );
}
/**
* Get extensions license data
*
* @param string $type can be 'cached' or 'live'
* @return array
*/
public function get_extensions_license_data( string $type = 'cached' ): array {
$option_key = 'wpo_wcpdf_extensions_license_cache';
// default to fetching cached data
$data = get_option( $option_key, array() );
// if type is 'live' or cached data is empty, fetch live data
if ( 'live' === $type || empty( $data ) ) {
$data = $this->get_extension_license_infos( true );
if ( 'cached' === $type ) {
update_option( $option_key, $data );
}
}
return $data;
}
/**
* Check if are any extensions installed
*
* @return bool
*/
public function are_any_extensions_installed() {
$installed = false;
foreach ( $this->extensions as $extension ) {
if ( $this->extension_is_enabled( $extension ) ) {
$installed = true;
break;
}
}
return $installed;
}
}
endif; // class_exists