File "Freemius.php"

Full Path: /home/attunedd/public_html/wp-content/plugins/wpide/App/Classes/Freemius.php
File size: 8.62 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace WPIDE\App\Classes;

use  Freemius_Api ;
use  WPIDE\App\App ;
use const  WPIDE\Constants\ASSETS_DIR ;
use const  WPIDE\Constants\ASSETS_URL ;
use const  WPIDE\Constants\AUTHOR ;
use const  WPIDE\Constants\DIR ;
use const  WPIDE\Constants\FS_ID ;
use const  WPIDE\Constants\FS_KEY ;
use const  WPIDE\Constants\GTM_ID ;
use const  WPIDE\Constants\NAME ;
use const  WPIDE\Constants\SLUG ;
use const  WPIDE\Constants\VERSION ;
class Freemius
{
    public static  $fs ;
    public static  $api ;
    public static  $loaded = false ;
    /**
     * @throws \Freemius_Exception
     */
    public static function init()
    {
        
        if ( !isset( self::$fs ) ) {
            if ( !defined( 'WP_FS__PRODUCT_' . FS_ID . '_MULTISITE' ) ) {
                define( 'WP_FS__PRODUCT_' . FS_ID . '_MULTISITE', true );
            }
            // Init Freemius SDK.
            require_once DIR . 'freemius/start.php';
            self::$fs = fs_dynamic_init( array(
                'id'             => FS_ID,
                'slug'           => SLUG,
                'premium_slug'   => SLUG . '-pro',
                'type'           => 'plugin',
                'public_key'     => FS_KEY,
                'is_premium'     => false,
                'premium_suffix' => 'Pro',
                'has_addons'     => false,
                'has_paid_plans' => true,
                'trial'          => array(
                'days'               => 14,
                'is_require_payment' => true,
            ),
                'menu'           => array(
                'slug'        => SLUG,
                'support'     => false,
                'affiliation' => false,
                'network'     => true,
            ),
                'is_live'        => true,
            ) );
            $GLOBALS['wpide_fs'] = self::$fs;
            self::$fs->add_action( 'connect/before', [ __CLASS__, 'beforeConnectBox' ] );
            self::$fs->add_action( 'connect/after', [ __CLASS__, 'afterConnectBox' ] );
            self::$fs->add_filter( 'checkout/purchaseCompleted', [ __CLASS__, 'afterPurchaseJs' ] );
            self::$fs->add_filter( 'templates/checkout.php', [ __CLASS__, 'checkoutGtmScript' ] );
            self::$fs->add_filter( 'freemius_pricing_js_path', [ __CLASS__, 'pricingJsPath' ] );
            self::$fs->add_filter( 'plugin_icon', [ __CLASS__, 'pluginIcon' ] );
            self::$fs->add_filter( 'hide_account_tabs', '__return_true' );
            self::$fs->add_filter( 'hide_freemius_powered_by', '__return_true' );
            self::$fs->add_filter( 'hide_billing_and_payments_info', '__return_true' );
            self::$fs->override_i18n( array(
                'contact-us' => __( 'Support', 'wpide' ),
            ) );
            add_action( 'admin_enqueue_scripts', [ __CLASS__, 'admin_enqueue_scripts' ] );
            self::$loaded = true;
            // Signal that SDK was initiated.
            do_action( 'wpide_fs_loaded' );
        }
    
    }
    
    public static function admin_enqueue_scripts()
    {
        if ( App::instance()->isFreemiusScreen() ) {
            self::freemius_custom_styles();
        }
    }
    
    public static function freemius_custom_styles()
    {
        wp_enqueue_style(
            SLUG . '-fs-connect',
            ASSETS_URL . 'css/freemius/freemius.css',
            [],
            VERSION
        );
    }
    
    public static function beforeConnectBox()
    {
        wp_enqueue_style(
            SLUG . '-fs-connect',
            ASSETS_URL . 'css/freemius/freemius.css',
            [],
            VERSION
        );
        echo  '<div id="fs-connect-wrap">' ;
    }
    
    public static function afterConnectBox()
    {
        echo  '</div>' ;
    }
    
    public static function afterPurchaseJs() : string
    {
        return 'function ( data ) {
                    
             /**
             * Since the user just entered their personal & billing information, agreed to the TOS & privacy,
             * know they are running within a secure iframe from an external domain, they implicitly permit tracking
             * this purchase. So initializing GTM here (after the purchase), is legitimate.
             */
             
            var is_subscription = typeof(data.purchase.initial_amount) !== "undefined";
            var is_trial = typeof(data.purchase.trial_ends) !== "undefined" && data.purchase.trial_ends !== null;
            var total = is_subscription ? data.purchase.initial_amount : data.purchase.gross;
            total = is_trial ? 0 : total;
    
            var coupon = data && data.coupon ? data.coupon.code : "";
            var currency = data && data.currency ? data.currency.toUpperCase() : "USD";
    
            var item = {
                item_name: "' . NAME . '",
                item_id: ' . FS_ID . ',
                item_brand: "' . AUTHOR . '",
                affiliation: "' . AUTHOR . '",
                price: data.total,
                discount: 0,
                currency: currency,
                coupon: coupon,
                index: 1,
                quantity: 1
            };
    
            // Purchase Event
            dataLayer.push({ ecommerce: null });  // Clear the previous ecommerce object.
            dataLayer.push({
                event: "purchase",
                ecommerce: {
                    transaction_id: data.purchase.id,
                    affiliation: item.affiliation,
                    tax: 0,
                    shipping: 0,
                    items: [item],
                    currency: item.currency,
                    coupon: item.coupon,
                    value: total
                }
            });
        }';
    }
    
    public static function checkoutGtmScript( $html ) : string
    {
        return "\n        <script>window.dataLayer = window.dataLayer || [];</script>\n        <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\n        new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\n        j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\n        'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n        })(window,document,'script','dataLayer', '" . GTM_ID . "');</script>\n        " . $html;
    }
    
    public static function pricingJsPath() : string
    {
        return ASSETS_DIR . 'pricing/freemius-pricing.js';
    }
    
    public static function pluginIcon() : string
    {
        return ASSETS_DIR . 'img/icon.png';
    }
    
    /**
     * Add license dialog boxes
     *
     * @since     1.0.0
     */
    public static function addLicenseActivationDialogBox()
    {
        
        if ( !did_action( SLUG . '_license_activation_dialog_added' ) && !App::instance()->isFreemiusScreen( 'account' ) ) {
            self::sdk()->_add_license_activation_dialog_box();
            fs_enqueue_local_style( 'fs_dialog_boxes', '/admin/dialog-boxes.css' );
            do_action( SLUG . '_license_activation_dialog_added' );
        }
    
    }
    
    public static function showSubmenus() : bool
    {
        $is_activation_mode = self::sdk()->is_activation_mode();
        
        if ( $is_activation_mode ) {
            $show_submenus = false;
        } else {
            
            if ( fs_is_network_admin() ) {
                /**
                 * Add submenu items or action links to network level when plugin was network activated and the super
                 * admin did NOT delegate the connection of all sites to site admins.
                 */
                $show_submenus = App::instance()->isNetworkActive() && (WP_FS__SHOW_NETWORK_EVEN_WHEN_DELEGATED || !self::sdk()->is_network_delegated_connection());
            } else {
                $show_submenus = !App::instance()->isNetworkActive() || self::sdk()->is_delegated_connection();
            }
        
        }
        
        return $show_submenus;
    }
    
    public static function showUpgradeLink() : bool
    {
        $show_submenus = self::showSubmenus();
        $is_activation_mode = self::sdk()->is_activation_mode();
        $add_upgrade_link = ($show_submenus || $is_activation_mode && self::sdk()->is_only_premium()) && !self::sdk()->is_whitelabeled();
        return $add_upgrade_link && self::sdk()->is_pricing_page_visible() && self::sdk()->is_submenu_item_visible( 'pricing' );
    }
    
    public static function showTrialLink() : bool
    {
        return self::sdk()->apply_filters( 'show_trial', true ) && self::sdk()->has_trial_plan() && !self::sdk()->is_trial_utilized();
    }
    
    public static function sdk() : \Freemius
    {
        return self::$fs;
    }
    
    public static function loaded() : bool
    {
        return self::$loaded;
    }

}