b0y-101 Mini Shell


Current Path : E:/www3/chiangrai/wp-content/plugins/download-monitor/includes/admin/
File Upload :
Current File : E:/www3/chiangrai/wp-content/plugins/download-monitor/includes/admin/class-dlm-upsells.php

<?php

if ( ! defined( 'ABSPATH' ) ) {
	exit;
} // Exit if accessed directly
use WPChill\DownloadMonitor\Util;

/**
 * Class DLM_Upsells
 *
 * @since 4.4.5
 */
class DLM_Upsells {

	/**
	 * Holds the class object.
	 *
	 * @since 4.4.5
	 *
	 * @var object
	 */
	public static $instance;

	public $extensions = array();

	private $upsell_tabs = array();

	private $offer = array();

	/**
	 * Holds the active license status.
	 *
	 * @since 4.9.4
	 *
	 * @var bool
	 */
	private $active_license = false;

	/**
	 * DLM_Upsells constructor.
	 *
	 * @since 4.4.5
	 */
	public function __construct() {
		if ( $this->check_license_validity() ) {
			return;
		}

		$this->set_offer();

		$this->set_hooks();

		$this->set_tabs();

		$this->set_upsell_actions();

		// Add Lite VS Pro page
		add_filter( 'dlm_admin_menu_links', array( $this, 'add_lite_vs_pro_page' ), 120 );

		// Upgrade to PRO plugin action link
		add_filter( 'plugin_action_links_' . DLM_FILE, array( $this, 'filter_action_links' ), 60 );
	}

	/**
	 * Returns the singleton instance of the class.
	 *
	 * @return object The DLM_Upsells object.
	 *
	 * @since 4.4.5
	 */
	public static function get_instance() {

		if ( ! isset( self::$instance ) && ! ( self::$instance instanceof DLM_Upsells ) ) {
			self::$instance = new DLM_Upsells();
		}

		return self::$instance;

	}

	private function set_offer() {
		$month       = date( 'm' );
		$this->offer = array( 'class' => '', 'column' => '', 'label' => __( 'Get Premium', 'download-monitor' ) );
		if ( 11 == $month ) {
			$this->offer = array(
				'class'       => 'wpchill-bf-upsell',
				'column'      => 'bf-upsell-columns',
				'label'       => __( '40% OFF for Black Friday', 'download-monitor' ),
				'description' => '40% OFF on new purchases, early renewals or upgrades.'
			);
		}
		if ( 12 == $month ) {
			$this->offer = array(
				'class'  => 'wpchill-xmas-upsell',
				'column' => 'xmas-upsell-columns',
				'label'  => __( '25% OFF for Christmas', 'download-monitor' )
			);
		}
	}

	/**
	 * Set our hooks
	 *
	 * @since 4.4.5
	 */
	public function set_hooks() {

		add_action( 'dlm_tab_upsell_content_general', array( $this, 'general_tab_upsell' ), 15 );

		add_action( 'dlm_tab_upsell_content_access', array( $this, 'access_tab_upsell' ), 15 );

		add_action( 'dlm_tab_upsell_content_logging', array( $this, 'logging_tab_upsell' ), 15 );

		//add_action( 'dlm_tab_content_terns_and_conditions', array( $this, 'terms_and_conditions_tab_upsell' ), 15 );

		add_action( 'dlm_tab_upsell_content_email_notification', array( $this, 'emails_tab_upsell' ), 15 );

		add_action( 'dlm_tab_upsell_content_pages', array( $this, 'pages_tab_upsell' ), 15 );

		add_action( 'dlm_tab_upsell_content_misc', array( $this, 'misc_tab_upsell' ), 15 );

		add_action( 'dlm_tab_upsell_content_endpoints', array( $this, 'endpoint_tab_upsell' ), 15 );

		add_filter( 'dlm_download_metaboxes', array( $this, 'add_meta_boxes' ), 30 );

		add_filter( 'dlm_settings', array( $this, 'pro_tab_upsells' ), 99, 1 );

		add_action( 'dlm_insights_header', array( $this, 'export_insights_header_upsell' ) );

		add_action( 'dlm_reports_general_info', array( $this, 'insights_upsell' ), 99, 2 );

		add_action( 'dlm_reports_user_reports', array( $this, 'insights_upsell' ), 99, 2 );

		add_action( 'dlm_insights_header', array( $this, 'insights_datepicker_upsell' ) );

	}


	/**
	 * Generate the all-purpose upsell box
	 *
	 * @param        $title
	 * @param        $description
	 * @param        $tab
	 * @param        $extension
	 * @param null   $utm_source
	 * @param array  $features
	 * @param string $utm_source
	 * @param string $icon
	 *
	 * @return string
	 *
	 * @since 4.4.5
	 */
	public function generate_upsell_box( $title, $description, $tab, $extension, $features = array(), $utm_source = null, $icon = false ) {

		echo '<div class="wpchill-upsell ' . esc_attr( $this->offer['class'] ) . '">';
		if ( $icon ) {
			echo '<img src="' . esc_url( DLM_URL . 'assets/images/upsells/' . $icon ) . '">';
		}

		if ( ! empty( $title ) ) {
			echo '<h2>' . esc_html( $title ) . '</h2>';
		}

		if ( ! empty( $features ) ) {

			echo '<ul class="wpchill-upsell-features">';

			foreach ( $features as $feature ) {

				echo '<li>';
				if ( isset( $feature['tooltip'] ) && '' != $feature['tooltip'] ) {
					echo '<div class="wpchill-tooltip"><span>[?]</span>';
					echo '<div class="wpchill-tooltip-content">' . esc_html( $feature['tooltip'] ) . '</div>';
					echo '</div>';
					echo '<p>' . esc_html( $feature['feature'] ) . '</p>';
				} else {
					echo esc_html( $feature['feature'] );
				}

				echo '</li>';

			}
			echo '</ul>';
		}
		if ( ! empty( $description ) ) {
			echo '<p class="wpchill-upsell-description">' . esc_html( $description ) . '</p>';
		}

		echo '<a target="_blank" href="https://www.download-monitor.com/pricing/?utm_source=' . ( ! empty( $extension ) ? esc_html( $extension ) . '_metabox' : '' ) . '&utm_medium=lite-vs-pro&utm_campaign=' . ( ! empty( $extension ) ? esc_html( str_replace( ' ', '_', $extension ) ) : '' ) . '"><div class="dlm-available-with-pro"><span class="dashicons dashicons-lock"></span><span>' . esc_html__( 'AVAILABLE WITH PREMIUM', 'download-monitor' ) . '</span></div></a>';
		echo '<div class="wpchill-upsell-buttons-wrap">';
		echo '<a target="_blank" href="' . esc_url( admin_url( 'edit.php?post_type=dlm_download&page=dlm-lite-vs-pro' ) ) . '" class="button">' . esc_html__( 'Free vs Premium', 'download-monitor' ) . '</a> ';
		echo '<a target="_blank" href="https://www.download-monitor.com/pricing/?utm_source=' . ( ! empty( $extension ) ? esc_html( $extension ) . '_metabox' : '' ) . '&utm_medium=lite-vs-pro&utm_campaign=' . ( ! empty( $extension ) ? esc_html( str_replace( ' ', '_', $extension ) ) : '' ) . '" class="button-primary button">' . esc_html( $this->offer['label'] ) . '</a>';
		echo '</div>';
		echo '</div>';
	}

	/**
	 * Add upsell metaboxes
	 *
	 * @since 4.4.5
	 */
	public function add_meta_boxes( $meta_boxes ) {

		if ( ! $this->check_extension( 'dlm-downloading-page' ) ) {

			$meta_boxes[] = array(
				'id'       => 'dlm-download-page-upsell',
				'title'    => esc_html__( 'Downloading page', 'download-monitor' ),
				'callback' => array( $this, 'output_download_page_upsell' ),
				'screen'   => 'dlm_download',
				'context'  => 'side',
				'priority' => 30
			);
		}

		if ( ! $this->check_extension( 'dlm-buttons' ) ) {

			$meta_boxes[] = array(
				'id'       => 'dlm-buttons-upsell',
				'title'    => esc_html__( 'Buttons', 'download-monitor' ),
				'callback' => array( $this, 'output_buttons_upsell' ),
				'screen'   => 'dlm_download',
				'context'  => 'side',
				'priority' => 40
			);
		}

		if ( ! $this->check_extension( 'dlm-amazons-s3' ) || ! $this->check_extension( 'dlm-google-drive' ) ) {
			$meta_boxes[] = array(
				'id'       => 'dlm-external-hosting',
				'title'    => esc_html__( 'External Hosting', 'download-monitor' ),
				'callback' => array( $this, 'output_external_hosting_upsell' ),
				'screen'   => 'dlm_download',
				'context'  => 'normal',
				'priority' => 10,
			);
		}

		return $meta_boxes;
	}

	/**
	 * Set the existing extensions
	 *
	 * @since 4.4.5
	 */
	private function set_extensions() {

		$dlm_Extensions = DLM_Admin_Extensions::get_instance();

		$extensions = $dlm_Extensions->get_extensions();

		foreach ( $extensions as $extension ) {
			$this->extensions[] = $extension->product_id;
		}
	}

	/**
	 * Get existing extensions
	 *
	 * @since 4.9.9
	 */
	private function get_extensions() {
		if ( empty( $this->extensions ) ) {
			$this->set_extensions();
		}

		return $this->extensions;
	}

	/**
	 * Check if extension exists
	 *
	 * @param $extension
	 *
	 * @return bool
	 *
	 * @since 4.4.5
	 */
	public function check_extension( $extension ) {
		$extensions = $this->get_extensions();

		if ( empty( $extensions ) || ! in_array( $extension, $extensions ) ) {
			return false;
		}

		return true;
	}

	/**
	 * Set DLM's upsell tabs
	 *
	 * @since 4.4.5
	 */
	public function set_tabs() {
		// Define our upsell tabs
		// First is the tab and then are the sections
		$this->upsell_tabs = apply_filters(
			'dlm_upsell_tabs',
			array(
				'lead_generation'  => array(
					'title'    => esc_html__( 'Content Locking', 'download-monitor' ),
					'upsell'   => true,
					'sections' => array(
						'ninja_forms'   => array(
							'title'    => __( 'Ninja Forms', 'download-monitor' ),
							'sections' => array(),
							// Need to put sections here for backwards compatibility
						),
						'gravity_forms' => array(
							'title'    => __( 'Gravity Forms', 'download-monitor' ),
							'sections' => array(),
							// Need to put sections here for backwards compatibility
							'upsell'   => true,
							'badge'    => true,
						),
						'email_lock'    => array(
							'title'    => __( 'Email lock', 'download-monitor' ),
							'sections' => array(),
							// Need to put sections here for backwards compatibility
						),
						'twitter_lock'  => array(
							'title'    => __( 'Twitter lock', 'download-monitor' ),
							'sections' => array(),
							// Need to put sections here for backwards compatibility
						),
						'terns_and_conditions'  => array(
							'title'    => __( 'Terms and Conditions', 'download-monitor' ),
							'sections' => array(),
							// Need to put sections here for backwards compatibility
						),
					),
				),
				'external_hosting' => array(
					'title'    => esc_html__( 'External hosting', 'download-monitor' ),
					'sections' => array(
						'amazon_s3'    => array(
							'title'    => __( 'Amazon S3', 'download-monitor' ),
							'sections' => array(),
							// Need to put sections here for backwards compatibility
						),
						'google_drive' => array(
							'title'    => __( 'Google Drive', 'download-monitor' ),
							'sections' => array(),
							// Need to put sections here for backwards compatibility
						),
					),
				),
				'advanced'         => array(
					'title'    => esc_html__( 'Advanced', 'download-monitor' ),
					'sections' => array(
						'page_addon'       => array(
							'title'    => __( 'Page Addon', 'download-monitor' ),
							'sections' => array(),
							// Need to put sections here for backwards compatibility
						),
						'downloading_page' => array(
							'title'    => __( 'Downloading Page', 'download-monitor' ),
							'sections' => array(),
							// Need to put sections here for backwards compatibility
						),
						'captcha'          => array(
							'title'    => __( 'Captcha', 'download-monitor' ),
							'sections' => array(),
							// Need to put sections here for backwards compatibility
						)
					),
				),
				'integration'      => array(
					'title'    => esc_html__( 'Integration', 'download-monitor' ),
					'sections' => array(
						'captcha' => array(
							'title'    => __( 'Captcha', 'download-monitor' ),
							'sections' => array(),
							// Need to put sections here for backwards compatibility
						)
					),
				),
			)
		);
	}

	/**
	 * Add PRO Tabs upsells
	 *
	 * @param $settings
	 *
	 * @return mixed
	 *
	 * @since 4.4.5
	 */
	public function pro_tab_upsells( $settings ) {

		foreach ( $this->upsell_tabs as $key => $tab ) {

			if ( ! isset( $settings[ $key ] ) ) {

				if ( ! isset( $settings[ $key ]['title'] ) ) {

					$settings[ $key ]['title'] = $tab['title'];
				}

				foreach ( $tab['sections'] as $section_key => $section ) {

					if ( ! isset( $settings[ $key ]['sections'][ $section_key ] ) ) {

						$settings[ $key ]['sections'][ $section_key ]           = $section;
						$settings[ $key ]['sections'][ $section_key ]['upsell'] = true;
					}
				}
			}
		}

		return $settings;

	}

	/**
	 * Add Upsell tabs content
	 *
	 * @since 4.4.5
	 */
	public function set_upsell_actions() {

		foreach ( $this->upsell_tabs as $key => $tab ) {

			if ( method_exists( 'DLM_Upsells', 'upsell_tab_content_' . $key ) ) {
				add_action( 'dlm_tab_upsell_content_' . $key, array( $this, 'upsell_tab_content_' . $key ), 30, 1 );
			}

			foreach ( $tab['sections'] as $sub_key => $section ) {
				if ( method_exists( 'DLM_Upsells', 'upsell_tab_section_content_' . $sub_key ) ) {
					add_action( 'dlm_tab_upsell_section_content_' . $sub_key, array( $this, 'upsell_tab_section_content_' . $sub_key ), 30, 1 );
				}
			}
		}
	}

	/**
	 * Settings General tab upsell
	 *
	 *
	 * @since 4.4.5
	 */
	public function general_tab_upsell() {

		if ( ! $this->check_extension( 'dlm-email-notification' ) ) {

			$this->generate_upsell_box(
				__( 'Email notifications', 'download-monitor' ),
				__( 'Create an email alert to be notified each time one of your files has been downloaded.', 'download-monitor' ),
				'general',
				'email-notification',
				false,
				false,
				'email_notification.png'
			);
		}

	}

	/**
	 * Settings Access tab upsell
	 *
	 *
	 * @since 4.4.5
	 */
	public function access_tab_upsell() {

		if ( ! $this->check_extension( 'dlm-advanced-access-manager' ) ) {

			$this->generate_upsell_box(
				__( 'Advanced access manager', 'download-monitor' ),
				__( 'Limit access to your downloads by setting advanced access rules and restrictions with this extension.', 'download-monitor' ),
				'access',
				'advanced-access-manager'
			);
		}

		if ( ! $this->check_extension( 'dlm-twitter-lock' ) ) {

			$this->generate_upsell_box(
				__( 'Twitter lock', 'download-monitor' ),
				__( 'Allow your users to tweet a pre-defined text before accessing a download.', 'download-monitor' ),
				'access',
				'twitter-lock'
			);
		}

		if ( ! $this->check_extension( 'dlm-email-lock' ) ) {

			$this->generate_upsell_box(
				__( 'Email Lock', 'download-monitor' ),
				__( 'Require your users’ email addresses to send newsletters and create a list of your customers.', 'download-monitor' ),
				'access',
				'email-lock'
			);
		}

		if ( ! $this->check_extension( 'dlm-gravity-forms' ) ) {

			$this->generate_upsell_box(
				__( 'Gravity Forms Lock', 'download-monitor' ),
				__( 'Ask users to fill in a form created on Gravity Forms before they start downloading your files.', 'download-monitor' ),
				'access',
				'gravity-forms'
			);
		}

		if ( ! $this->check_extension( 'dlm-ninja-forms' ) ) {

			$this->generate_upsell_box(
				__( 'Ninja Forms Lock', 'download-monitor' ),
				__( 'Use the Ninja Forms - content locking extension to add forms easily to your download files.', 'download-monitor' ),
				'access',
				'ninja-forms'
			);
		}

		if ( ! $this->check_extension( 'dlm-mailchimp-lock' ) ) {

			$this->generate_upsell_box(
				__( 'Mailchimp extension', 'download-monitor' ),
				__( 'Create a MailChimp list and ask users to subscribe to it before accessing a downloadable file.', 'download-monitor' ),
				'access',
				'mailchimp-lock'
			);
		}

	}

	/**
	 * Settings Logging tab upsell
	 *
	 *
	 * @since 4.4.5
	 */
	public function logging_tab_upsell() {

		if ( ! $this->check_extension( 'dlm-captcha' ) ) {

			$this->generate_upsell_box(
				__( 'Captcha', 'download-monitor' ),
				__( 'Stop bots from spamming your downloads and ask users to complete Google reCAPTCHA.', 'download-monitor' ),
				'logging',
				'captcha'
			);
		}

	}

	/**
	 * Settings Terms and conditions tab upsell
	 *
	 *
	 * @since 4.4.5
	 */
	public function upsell_tab_section_content_terns_and_conditions() {

		if ( ! $this->check_extension( 'dlm-terms-and-conditions' ) ) {

			$this->generate_upsell_box(
				__( 'Terms and conditions', 'download-monitor' ),
				__( 'Require your users to accept your terms and conditions before they can download your files.', 'download-monitor' ),
				'terns_and_conditions',
				'terms-and-conditions'
			);
		}

	}

	/**
	 * Settings Emails tab upsell
	 *
	 *
	 * @since 4.4.5
	 */
	public function emails_tab_upsell() {

		if ( ! $this->check_extension( 'dlm-email-notification' ) ) {

			$this->generate_upsell_box(
				__( 'Email notifications', 'download-monitor' ),
				__( 'The Email Notification extension for Download Monitor sends you an email whenever one of your files is downloaded', 'download-monitor' ),
				'email_notifications',
				'email-notifications'
			);
		}

	}

	/**
	 * Settings Logging tab upsell
	 *
	 *
	 * @since 4.4.5
	 */
	public function pages_tab_upsell() {

		if ( ! $this->check_extension( 'dlm-terms-conditions' ) ) {

			$this->generate_upsell_box(
				__( 'Terms & Conditions', 'download-monitor' ),
				__( 'Easily require your visitors to agree to your terms and conditions before downloading files.', 'download-monitor' ),
				'pages',
				'terms-conditions'
			);
		}

		if ( ! $this->check_extension( 'dlm-page-addon' ) ) {

			$this->generate_upsell_box(
				__( 'Page Addon', 'download-monitor' ),
				__( 'List all downloads, categories, tags, and showcase info pages of each resource with a self-contained [download_page] shortcode!', 'download-monitor' ),
				'pages',
				'page-addon'
			);
		}

	}

	/**
	 * Settings Misc tab upsell
	 *
	 *
	 * @since 4.4.5
	 */
	public function output_buttons_upsell() {

		if ( ! $this->check_extension( 'dlm-buttons' ) ) {

			$this->generate_upsell_box(
				__( 'Buttons', 'download-monitor' ),
				__( 'The Buttons extension allows you to customize your download buttons as you please in order to improve the user experience. Create stunning buttons without needing any coding skills!', 'download-monitor' ),
				'cpt',
				'buttons'
			);
		}

	}

	/**
	 * Settings Misc tab upsell
	 *
	 *
	 * @since 4.4.5
	 */
	public function endpoint_tab_upsell() {

		if ( ! $this->check_extension( 'dlm-csv-impoter' ) ) {

			$this->generate_upsell_box(
				__( 'Importer', 'download-monitor' ),
				__( 'Easily import your downloads, including their categories, tags, and files.', 'download-monitor' ),
				'endpoint',
				'csv-impoter'
			);
		}

		if ( ! $this->check_extension( 'dlm-csv-exporter' ) ) {

			$this->generate_upsell_box(
				__( 'Exporter', 'download-monitor' ),
				__( 'With a single click, you can quickly export your downloads and their tags, categories, and file versions to a CSV file.', 'download-monitor' ),
				'endpoint',
				'csv-exporter'
			);
		}

	}

	/**
	 * Output the DLM Downloading Page extension upsell
	 *
	 * @since 4.4.5
	 */
	public function output_download_page_upsell() {

		if ( ! $this->check_extension( 'dlm-downloading-page' ) ) {

			$this->generate_upsell_box(
				'',
				__( 'Customize the downloading page by adding banners, ads, and anything you like.', 'download-monitor' ),
				'downloading_page',
				'downloading-page'
			);
		}

	}

	/**
	 * Upsell for Gravity Forms sub-tab
	 *
	 * @since 4.5.3
	 */
	public function upsell_tab_section_content_gravity_forms() {

		if ( ! $this->check_extension( 'dlm-gravity-forms' ) ) {

			$this->generate_upsell_box(
				__( 'Gravity Forms Lock', 'download-monitor' ),
				__( 'The Gravity Forms - content locking extension for Download Monitor allows you to require users to fill out a Gravity Forms form before they gain access to a download.', 'download-monitor' ),
				'gravity_forms',
				'gravity-forms'
			);
		}
	}

	/**
	 * Upsell for Ninja Forms sub-tab
	 *
	 * @since 4.5.3
	 */
	public function upsell_tab_section_content_ninja_forms() {

		if ( ! $this->check_extension( 'dlm-ninja-forms' ) ) {

			$this->generate_upsell_box(
				__( 'Ninja Forms Lock', 'download-monitor' ),
				__( 'The Ninja Forms - content locking extension for Download Monitor allows you to require users to fill in a Ninja Forms form before they gain access to a download.', 'download-monitor' ),
				'ninja_forms',
				'ninja-forms'
			);
		}
	}

	/**
	 * Upsell for Twitter Lock sub-tab
	 *
	 * @since 4.5.3
	 */
	public function upsell_tab_section_content_twitter_lock() {

		if ( ! $this->check_extension( 'dlm-twitter-lock' ) ) {

			$this->generate_upsell_box(
				__( 'Twitter Lock', 'download-monitor' ),
				__( 'The Twitter Lock extension for Download Monitor allows you to require users to tweet your pre-defined text before they gain access to a download.', 'download-monitor' ),
				'gravity_forms',
				'gravity-forms'
			);
		}
	}

	/**
	 * Upsell for Email Lock sub-tab
	 *
	 * @since 4.5.3
	 */
	public function upsell_tab_section_content_email_lock() {

		if ( ! $this->check_extension( 'dlm-email-lock' ) ) {

			$this->generate_upsell_box(
				__( 'Email Lock', 'download-monitor' ),
				__( 'The Email Lock extension for Download Monitor allows you to require users to fill in their email address before they gain access to a download.', 'download-monitor' ),
				'email_lock',
				'email-lock'
			);
		}
	}

	/**
	 * Upsell for Amazon S3 setting sub-tab
	 *
	 * @since 4.5.3
	 */
	public function upsell_tab_section_content_amazon_s3() {

		if ( ! $this->check_extension( 'dlm-amazon-s3' ) ) {

			$this->generate_upsell_box(
				__( 'Amazon S3', 'download-monitor' ),
				__( 'Link to files hosted on Amazon s3 so that you can serve secure, expiring download links.', 'download-monitor' ),
				'amazon_s3',
				'amazon-s3'
			);
		}

	}

	/**
	 * Upsell for Google Drive setting sub-tab
	 *
	 * @since 4.5.3
	 */
	public function upsell_tab_section_content_google_drive() {

		if ( ! $this->check_extension( 'dlm-google-drive' ) ) {

			$this->generate_upsell_box(
				__( 'Google Drive', 'download-monitor' ),
				__( 'With this extension, you can integrate your files from Google Drive into Download Monitor.', 'download-monitor' ),
				'google_drive',
				'google-drive'
			);
		}

	}


	/**
	 * Upsell for Page Addon setting tab
	 *
	 * @since 4.4.5
	 */
	public function upsell_tab_content_advanced() {
		if ( ! $this->check_extension( 'dlm-page-addon' ) ) {

			$this->generate_upsell_box(
				__( 'Page addon extension', 'download-monitor' ),
				__( 'Add a self contained [download_page] shortcode to your site to list downloads, categories, tags, and show info pages about each of your resources.', 'download-monitor' ),
				'page_addon',
				'page-addon'
			);
		}

		if ( ! $this->check_extension( 'dlm-downloading-page' ) ) {

			$this->generate_upsell_box(
				__( 'Downloading page extension', 'download-monitor' ),
				__( 'The Downloading Page extension for Download Monitor forces your downloads to be served from a separate page.', 'download-monitor' ),
				'downloading_page',
				'downloading-page'
			);
		}
	}

	/**
	 * Upsell for Captcha setting tab
	 *
	 * @since 4.4.5
	 */
	public function upsell_tab_content_captcha() {

		if ( ! $this->check_extension( 'dlm=captcha' ) ) {

			$this->generate_upsell_box(
				__( 'Captcha extension', 'download-monitor' ),
				__( 'The Captcha extension for Download Monitor allows you to require users to complete a Google reCAPTCHA before they gain access to a download.', 'download-monitor' ),
				'captcha',
				'captcha'
			);
		}
	}

	/**
	 * Output the Downloadable Files locations in the Downloadable files metabox
	 *
	 * @param $download
	 *
	 * @since 4.4.5
	 */
	public function output_external_hosting_upsell() {
		echo '<div class="upsells-columns ' . esc_attr( $this->offer['column'] ) . '">';

		if ( ! $this->check_extension( 'dlm-amazon-s3' ) ) {
			echo '<div class="upsells-column"><span class="dashicons dashicons-amazon"></span>';
			echo '<h3>' . esc_html__( 'Amazon S3', 'download-monitor' ) . '</h3>';
			$this->generate_upsell_box(
				'',
				__( 'Use Amazon S3 links for Download Monitor files to run secure, expiring download links.', 'download-monitor' ),
				'amazon_s3',
				'amazon-s3'
			);
			echo '</div>';
		}

		if ( ! $this->check_extension( 'dlm-google-drive' ) ) {
			echo '<div class="upsells-column"><span class="dashicons dashicons-google"></span>';
			echo '<h3>' . esc_html__( 'Google Drive', 'download-monitor' ) . '</h3>';
			$this->generate_upsell_box(
				'',
				__( 'With this extension, you can integrate your files from Google Drive into Download Monitor.', 'download-monitor' ),
				'google_drive',
				'google-drive'
			);
			echo '</div>';
		}

		echo '</div>';
	}

	/**
	 * Upsell for Integration tab
	 *
	 * @since 4.4.5
	 */
	public function upsell_tab_content_integration() {

		if ( ! $this->check_extension( 'dlm-captcha' ) ) {

			$this->generate_upsell_box(
				__( 'Captcha', 'download-monitor' ),
				__( 'Stop bots from spamming your downloads and ask users to complete Google reCAPTCHA.', 'download-monitor' ),
				'logging',
				'captcha'
			);
		}
	}

	/**
	 * Add lite vs pro page in menu
	 *
	 * @param [type] $links
	 *
	 * @return void
	 */
	public function add_lite_vs_pro_page( $links ) {

		// Settings page.
		$links[] = array(
			'page_title' => __( 'LITE vs Premium', 'download-monitor' ),
			'menu_title' => __( 'LITE vs Premium', 'download-monitor' ),
			'capability' => 'manage_options',
			'menu_slug'  => 'dlm-lite-vs-pro',
			'function'   => array( $this, 'lits_vs_pro_page' ),
			'priority'   => 160,
		);

		return $links;
	}

	/**
	 * The LITE vs PRO page
	 *
	 * @return void
	 */
	public function lits_vs_pro_page() {

		require_once __DIR__ . '/lite-vs-pro-page.php';
	}

	/**
	 * Add the Upgrade to PRO plugin action link
	 *
	 * @param array $links Plugin action links.
	 *
	 * @return array
	 *
	 * @since 4.5.7
	 */
	public function filter_action_links( $links ) {

		$dlm_extensions       = DLM_Admin_Extensions::get_instance();
		$extensions           = $dlm_extensions->get_available_extensions();
		$licensed_extensions  = $dlm_extensions->get_licensed_extensions();
		$installed_extensions = $dlm_extensions->get_installed_extensions();

		if ( 0 < count( $extensions ) ) {
			if ( 0 !== count( $licensed_extensions ) && 0 < count( $installed_extensions ) ) { // If there are any licensed extensions ( active ) we show the Upgrade button, not the upgrade to PRO button.
				$upgrade = array( '<a target="_blank" style="color: orange;font-weight: bold;" href="https://www.download-monitor.com/pricing/?utm_source=download-monitor&utm_medium=plugins-page&utm_campaign=upsell">' . esc_html__( 'Upgrade!', 'download-monitor' ) . '</a>' );
			} else { // Show the upgrade to PRO button if no extensions are licensed.
				$upgrade = array( '<a target="_blank" style="color: orange;font-weight: bold;" href="https://www.download-monitor.com/pricing/?utm_source=download-monitor&utm_medium=plugins-page&utm_campaign=upsell">' . esc_html__( 'Upgrade to Premium!', 'download-monitor' ) . '</a>' );
			}

			return array_merge( $upgrade, $links );
		}

		return $links;
	}

	/**
	 * Export upsell
	 *
	 * @return void
	 * @since 4.8.6
	 */
	public function export_insights_header_upsell() {
		if ( $this->check_extension( 'dlm-csv-exporter' ) ) {
			return;
		}

		$export_upsell_url = 'https://www.download-monitor.com/pricing/?utm_source=reports_page&utm_medium=lite-vs-pro&utm_campaign=dlm-csv-exporter';
		?>
		<div class="dlm-csv-export-wrapper">
			<div class="dlm-reports-header-export-button">
				<button class="button button-primary"
				        disabled="disabled"><?php echo esc_html__( 'Export', 'download-monitor' ); ?> <a
						href="<?php echo esc_url( $export_upsell_url ); ?>"
						target="_blank"
						class="dlm-upsell-badge">PAID</a></button>
			</div>
			<div class="dlm-csv-export-wrapper__export_settings">
				<div id="dlm-export-settings-upsell" class="button button-secondary" disabled="disabled"><span
						class="dashicons dashicons-admin-generic"></span></div>
			</div>
		</div>
		<?php
	}

	/**
	 * Reports upsells
	 *
	 * @param $tab
	 * @param $key
	 *
	 * @return void
	 * @since 4.8.6
	 */
	public function insights_upsell( $tab, $key ) {

		if ( $this->check_extension( 'dlm-enhanced-metrics' ) ) {
			return;
		}

		$list = array();
		if ( 'general_info' == $key ) {
			$list = array(
				array(
					'tooltip' => '',
					'feature' => __( 'Compare dates and view chart to see how you’ve done', 'download-monitor' )
				),
				array(
					'tooltip' => '',
					'feature' => __( 'Show number of completed downloads per download', 'download-monitor' )
				),
				array(
					'tooltip' => '',
					'feature' => __( 'Show number of redirected downloads per download', 'download-monitor' )
				),
				array(
					'tooltip' => '',
					'feature' => __( 'Show number of failed downloads per download', 'download-monitor' )
				),
				array(
					'tooltip' => '',
					'feature' => __( 'Show % of downloads from the total downloads number', 'download-monitor' )
				),
				array(
					'tooltip' => '',
					'feature' => __( 'Show number of completed downloads by logged in users', 'download-monitor' )
				),
				array(
					'tooltip' => '',
					'feature' => __( 'Show number of completed downloads by logged out users', 'download-monitor' )
				)
			);
		} elseif ( 'user_reports' == $key ) {
			$list = array(
				array(
					'tooltip' => '',
					'feature' => __( 'See active users and their download information', 'download-monitor' )
				),
				array(
					'tooltip' => '',
					'feature' => __( 'Show the location from where in the site the user downloaded', 'download-monitor' )
				),
				array( 'tooltip' => '', 'feature' => __( 'Show the download\'s category', 'download-monitor' ) )
			);
		}

		echo '<div class="wpchill-upsells-wrapper">';

		$this->generate_upsell_box(
			__( 'Enhanced Metrics', 'download-monitor' ),
			'',
			'enhanced-metrics',
			'enhanced-metrics',
			$list
		);

		echo '</div>';
	}

	/**
	 * Add the datepicker comparer
	 *
	 * @return void
	 * @since 4.8.6
	 */
	public function insights_datepicker_upsell() {

		if ( $this->check_extension( 'dlm-enhanced-metrics' ) ) {
			return;
		}

		$to_date = new DateTime( current_time( 'mysql' ) );
		$to_date->setTime( 0, 0, 0 );
		$to   = $to_date->format( 'Y-m-d' );
		$from = $to_date->modify( '-1 month' )->format( 'Y-m-d' );

		$end   = new DateTime( $to );
		$start = new DateTime( $from );

		$enhanced_m_upsell_url = 'https://www.download-monitor.com/pricing/?utm_source=reports_page&utm_medium=lite-vs-pro&utm_campaign=dlm-enhanced_metrics';
		?>
		<div class="dlm-reports-header-date-selector disabled">
			<label><?php echo esc_html__( 'Select date to compare', 'download-monitor' ); ?></label>
			<span class="dashicons dashicons-calendar-alt dlm-chart-icon"></span>
			<span
				class="date-range-info"><?php echo esc_html( $start->format( 'M d, Y' ) ) . ' - ' . esc_html( $end->format( 'M d, Y' ) ); ?></span>
			<span class="dlm-arrow"></span>
			<a href="<?php echo esc_url( $enhanced_m_upsell_url ); ?>" target="_blank" class="dlm-upsell-badge">PAID</a>
		</div>
		<?php
	}

	/**
	 * Check the license validity
	 *
	 * @return bool
	 * @since 4.9.4
	 */
	private function check_license_validity() {
		// Return if we're doing ajax
		if ( wp_doing_ajax() ) {
			return true;
		}

		$return = false;
		// First let's check the master license
		$master_license = get_option( 'dlm_master_license', false );
		if ( ! empty( $master_license ) ) {
			$data = json_decode( $master_license, true );
			// If the license is active, we return true
			if ( ! empty( $data ) && 'active' === $data['status'] ) {
				$return = true;
			}
		}
		// Let's check the extensions licenses
		// Retrieve all the extensions
		if ( class_exists( 'Util\ExtensionLoader' ) ) {
			require_once DLM_PATH . 'src/Util/ExtensionLoader.php';
		}
		$loader   = new Util\ExtensionLoader();
		$response = $loader->fetch();
		// If we have an error, we return false
		if ( is_array( $response ) && isset( $response['success'] ) && ! $response['success'] ) {
			// Remove other upsells also by returning true
			if ( $return ) {
				add_filter( 'dlm_remove_upsells', '__return_true' );
				// If the master license is active, and we have an error, we return true
				return true;
			}

			return false;
		}
		$response = json_decode( $response, true );
		// Cycle through the extensions
		if ( ! empty( $response ) && ! empty( $response['extensions'] ) ) {
			foreach ( $response['extensions'] as $extension ) {
				// Skip if we don't have a product id
				if ( ! isset( $extension['product_id'] ) ) {
					continue;
				}
				// Retrieve data from the DB.
				$ext_data = get_option( $extension['product_id'] . '-license', false );
				// If we have a license, we check if it's active and return true
				if ( ! empty( $ext_data ) && 'active' === $ext_data['status'] && is_plugin_active( $extension['product_id'] . '/' . $extension['product_id'] . '.php' ) ) {
					$return = true;
					break;
				}
			}
		}
		// Remove other upsells also by returning true
		if ( $return ) {
			add_filter( 'dlm_remove_upsells', '__return_true' );
		}
		// Set class variable. Can be used in other functions so that we don't have to check again.
		$this->active_license = $return;
		// Return the value
		return $return;
	}
}

Copyright © 2019 by b0y-101