Current File : /var/www/html/blog/wp-content/plugins/royal-elementor-addons/admin/notices/pro-features-notice.php
<?php 
namespace WprAddons\Admin\Notices;

use WprAddons\Classes\Utilities;

if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly
}

class WprProFeaturesNotice {
    public function __construct() {

        if ( function_exists('wpr_fs') && !wpr_fs()->is_plan( 'expert' ) ) {

            if ( current_user_can('administrator') ) {

                if ( !get_option('wpr_pro_features_dismiss_notice' ) ) {
                    add_action( 'admin_init', [$this, 'render_notice'] );
                }
            }

            if ( is_admin() && !get_option('wpr_pro_features_dismiss_notice' ) ) {
                add_action( 'admin_head', [$this, 'enqueue_scripts' ] );
            }

            add_action( 'wp_ajax_wpr_pro_features_dismiss_notice', [$this, 'wpr_pro_features_dismiss_notice'] );
        }
    }

    public function render_notice() {
        add_action( 'admin_notices', [$this, 'render_pro_features_notice' ]);
    }
    
    public function wpr_pro_features_dismiss_notice() {
		$nonce = $_POST['nonce'];

		if ( !wp_verify_nonce( $nonce, 'wpr-plugin-notice-js')  || !current_user_can( 'manage_options' ) ) {
		  exit; // Get out of here, the nonce is rotten!
		}

        add_option( 'wpr_pro_features_dismiss_notice', true );
        return 'responsetext';
    }

    public function render_pro_features_notice() {
        global $current_screen;

        if ( is_admin() && 'toplevel_page_wpr-addons' == $current_screen->id ) {
            echo '<div class="wpr-pro-features-notice-wrap">';
            echo '<div class="notice wpr-pro-features-notice is-dismissible">
                        <div class="wpr-pro-features-notice-logo">
                            <img src="'. esc_url(WPR_ADDONS_ASSETS_URL) .'/img/logo-128x128.png">
                        </div>
                        <div>
                            <h3><span>Big Update</span><br>Dynamic Content</h3>
                            <p>We are happy to announce that <strong>Royal Elementor Addons Expert</strong> version now supports <strong>Dynamic Content</strong> wich includes:</p>
                            <ul class="wpr-new-widgets-list">
                                <li><strong>Dynamic Tags (Elementor)</strong></li>
                                <li><strong>Advanced Custom Fields (Extended)</strong></li>
                                <li><strong>Custom Post Type Generator</strong></li>
                                <li><strong>Custom Taxonomy Generator</strong></li>
                                <li><a target="_blank" href="https://www.youtube.com/watch?v=wis1rQTn1tg">Product Wishlist (WooCommerce)</a></li>
                                <li><a target="_blank" href="https://www.youtube.com/watch?v=wis1rQTn1tg">Product Compare (WooCommerce)</a></li>
                            </ul>

                            <a class="wpr-pro-features-btn" href="https://royal-elementor-addons.com/#purchasepro?ref=rea-plugin-backend-expertnoticebanner-checkbtn-upgrade-expert#purchasepro" target="_blank">Upgrade to Expert</a>
                            <a class="wpr-pro-features-btn wpr-dynamic-tutorial" href="https://www.youtube.com/watch?v=kE1zmi3fxh8" target="_blank">Dynamic Tutorial</a>
                        </div>
                        <canvas id="wpr-notice-confetti"></canvas>';
            echo '</div>';
            echo '</div>';
        }
    }
    
    public static function enqueue_scripts() {
        global $current_screen;

        
        if ( !(is_admin() && 'toplevel_page_wpr-addons' == $current_screen->id) ) {
            return;
        }

        // Load Confetti
        wp_enqueue_script( 'wpr-confetti-js', WPR_ADDONS_URL .'assets/js/admin/lib/confetti/confetti.min.js', ['jquery'] );

        // Scripts & Styles
        echo "
        <script>
        jQuery( document ).ready( function($) {

            $('html, body').animate({
                scrollTop: 0
            }, 'slow');
            $('body').addClass('wpr-pro-features-body');
            $(document).find('.wpr-pro-features-notice-wrap').css('opacity', 1);

            if ( jQuery('#wpr-notice-confetti').length ) {
                const wprConfetti = confetti.create( document.getElementById('wpr-notice-confetti'), {
                    resize: true
                });

                setTimeout( function () {
                    wprConfetti( {
                        particleCount: 150,
                        origin: { x: 1, y: 2 },
                        gravity: 0.3,
                        spread: 50,
                        ticks: 150,
                        angle: 120,
                        startVelocity: 60,
                        colors: [
                            '#0e6ef1',
                            '#f5b800',
                            '#ff344c',
                            '#98e027',
                            '#9900f1',
                        ],
                    } );
                }, 500 );

                setTimeout( function () {
                    wprConfetti( {
                        particleCount: 150,
                        origin: { x: 0, y: 2 },
                        gravity: 0.3,
                        spread: 50,
                        ticks: 200,
                        angle: 60,
                        startVelocity: 60,
                        colors: [
                            '#0e6ef1',
                            '#f5b800',
                            '#ff344c',
                            '#98e027',
                            '#9900f1',
                        ],
                    } );
                }, 900 );
            }
        });
        </script>

        <style>
            .wpr-pro-features-body {
                overflow: hidden;
            }

            .wpr-pro-features-notice-wrap {
                position: absolute;
                display: block;
                top: 0;
                left: 0;
                height: 100%;
                width: 100%;
                z-index: 999;
                background-color: rgba(0, 0, 0, 0.2);
                opacity: 0;
            }

            .wpr-settings-page-header .wpr-pro-features-notice.notice {
                display: flex !important;
                position: absolute !important;
                top: 30%;
                left: 50%;
                transform: translateX(-50%);
                width: 410px;
                align-items: center;
                margin-top: 20px;
                margin-bottom: 20px;
                padding: 30px;
                border: 0 !important;
                box-shadow: 0 0 5px rgb(0 0 0 / 0.3);
                padding-left: 40px;
                z-index: 999;
                border-radius: 3px;
            }

            .wpr-pro-features-notice-logo {
                display: none;
                margin-right: 30px;
            }

            .wpr-pro-features-notice-logo img {
                max-width: 100%;
            }

            .wpr-pro-features-notice h3 {
                font-size: 32px;
                margin-top: 0;
                margin-bottom: 20px;
            }

            .wpr-pro-features-notice h3 span {
              display: inline-block;
              margin-bottom: 15px;
              font-size: 12px;
              color: #fff;
              background-color: #f51f3d;
              padding: 2px 12px 4px;
              border-radius: 3px;
            }

            .wpr-pro-features-notice p {
              margin-top: 10px;
              margin-bottom: 25px;
              font-size: 14px;
            }
            
            .wpr-pro-features-notice ul a {
                display: block;
                text-decoration: none;
            }
            
            .wpr-pro-features-notice ul li:last-child a:after {
                display: none;
            }

            .wpr-pro-features-btn,
            .wpr-new-widgets-list + a {
                display: inline-block;
                text-decoration: none;
                text-transform: uppercase;
                color: #fff;
                background: #6A4BFF;
                padding: 5px 18px 7px;
                border-radius: 3px;
                margin-top: 30px;
                font-weight: 500;
                letter-spacing: 0.3px;
            }

            .wpr-pro-features-btn.wpr-dynamic-tutorial {
                background: #e1ad01;
            }

            .wpr-pro-features-btn:hover {
                color: #FFF;
            }

            .wpr-pro-features-btn:focus {
                color: #FFF;
            }

            .wpr-get-started-button.button-primary {
            background-color: #6A4BFF;
            }

            .wpr-get-started-button.button-primary:hover {
            background-color: #583ed7;
            }

            .wpr-get-started-button.button-secondary {
            border: 1px solid #6A4BFF;
            color: #6A4BFF;
            }

            .wpr-get-started-button.button-secondary:hover {
            background-color: #6A4BFF;
            border: 2px solid #6A4BFF;
            color: #fff;
            }

            .wpr-get-started-button {
                padding: 5px 25px !important;
            }

            .wpr-get-started-button .dashicons {
              font-size: 12px;
              line-height: 28px;
            }
            
            .wpr-pro-features-notice .image-wrap {
              margin-left: auto;
            }

            .wpr-pro-features-notice .image-wrap img {
              zoom: 0.45;
            }

            @media screen and (max-width: 1366px) {
                .wpr-pro-features-notice h3 {
                    font-size: 32px;
                }

                .wpr-pro-features-notice .image-wrap img {
                  zoom: 0.4;
                }
            }

            @media screen and (max-width: 1280px) {
                .wpr-pro-features-notice .image-wrap img {
                  zoom: 0.35;
                }
            }

            #wpr-notice-confetti {
              position: absolute;
              top: 0;
              left: 0;
              width: 100%;
              height: 100%;
              pointer-events: none;
            }
        </style>";

        
    }
}

if ( 'Royal Addons' === Utilities::get_plugin_name() ) {
    new WprProFeaturesNotice();
}