File "plugin.php"

Full Path: /home/raylsmit/public_html/wp-content/plugins/cf7-styler-for-divi/plugin.php
File size: 6.47 KB
MIME-type: text/x-php
Charset: utf-8

<?php

/**
 * Main plugin class that handles initialization and core functionality
 *
 * @package Divi_Form_Styler
 */

namespace Divi_Form_Styler;

use Divi_Form_Styler\Admin_Notices;

/**
 * Main Plugin Class
 */
class Plugin
{

    /**
     * Singleton instance
     *
     * @var Plugin
     */
    private static $instance;

    /**
     * Plugin constants
     */
    const PLUGIN_PATH = TFS_PLUGIN_PATH;
    const BASENAME_DIR = TFS_BASENAME_DIR;
    const BASENAME = TFS_BASENAME;

    const DOCS_LINK = 'https://diviepic.com/docs/';
    const PRICING_LINK = 'https://diviepic.com/divi-torque-pro/';

    /**
     * Initialize the plugin
     */
    private function __construct()
    {
        $this->load_dependencies();
        $this->define_hooks();
    }

    /**
     * Get singleton instance
     *
     * @return Plugin
     */
    public static function get_instance()
    {
        if (null === self::$instance) {
            self::$instance = new self();
            self::$instance->init();
        }

        return self::$instance;
    }

    /**
     * Initialize admin notices
     */
    public function init_admin_notices()
    {
        // Upsell
        new Admin_Notices([
            'slug' => 'divi_form_styler_cyber_sale',
            'title' => __('Only 50 Spots!', 'form-styler-for-divi'),
            'message' => __('Hurry! Get Divi Torque Pro just $89!  Limited Time Offer!!', 'form-styler-for-divi'),
            'type' => 'success',
            'show_after' => 'hour',
            'screens' => ['plugins', 'dashboard'],
            'buttons' => [
                [
                    'text' => __('Claim Your Cyber Sale Offer Now', 'form-styler-for-divi'),
                    'url' => 'https://diviepic.com/divi-torque-pro/',
                    'class' => 'button-primary',
                    'target' => '_blank'
                ]
            ]
        ]);

        // new Admin_Notices([
        //     'slug' => 'divi_form_styler_ask_review',
        //     'title' => __('Please rate and review Contact Form Styler for Divi!', 'form-styler-for-divi'),
        //     'message' => __('We hope you\'re enjoying using Contact Form Styler for Divi. Please take a moment to rate and review the plugin. Your feedback helps us improve and serve you better!', 'form-styler-for-divi'),
        //     'type' => 'success',
        //     'show_after' => 'hour',
        //     'screens' => ['plugins', 'dashboard'],
        //     'buttons' => [
        //         [
        //             'text' => __('Rate and Review', 'form-styler-for-divi'),
        //             'url' => 'https://wordpress.org/support/plugin/cf7-styler-for-divi/reviews/?filter=5#new-post',
        //             'class' => 'button-primary',
        //             'target' => '_blank'
        //         ],
        //     ]
        // ]);
    }

    /**
     * Load required dependencies
     */
    private function load_dependencies()
    {
        // Common
        include_once self::PLUGIN_PATH . 'includes/functions.php';

        // Assets
        include_once self::PLUGIN_PATH . 'includes/assets-manager.php';

        // Modules
        include_once self::PLUGIN_PATH . 'includes/module-manager.php';

        // Required
        include_once self::PLUGIN_PATH . 'includes/admin.php';

        // CF7 Grid
        include_once self::PLUGIN_PATH . 'includes/cf7-grid-helper.php';

        // Upsell
        include_once self::PLUGIN_PATH . 'includes/upsell/notices.php';
    }

    /**
     * Define WordPress hooks
     */
    private function define_hooks()
    {
        add_action('plugins_loaded', [$this, 'load_textdomain'], 15);
        add_action('divi_extensions_init', [$this, 'init_extension']);
        add_filter('plugin_action_links_' . self::BASENAME, [$this, 'add_plugin_action_links']);
        register_activation_hook(self::BASENAME, [$this, 'on_activation']);
        add_action('admin_init', [$this, 'check_for_update']);
        add_action('admin_init', [$this, 'init_admin_notices']);
    }

    /**
     * Initialize plugin components
     */
    public function init()
    {
        Assets_Manager::get_instance();
        Admin::get_instance();
    }

    /**
     * Store current plugin version
     */
    public function store_current_version()
    {
        update_option('divi_form_styler_current_version', TFS_VERSION);

        // Install Date
        if (!get_option('divi_form_styler_install_date')) {
            update_option('divi_form_styler_install_date', time());
        }
    }

    /**
     * Check for plugin updates
     */
    public function check_for_update()
    {
        $stored_version = get_option('divi_form_styler_current_version');

        if (version_compare(TFS_VERSION, $stored_version, '>')) {
            $this->store_current_version();
        }
    }

    /**
     * Handle plugin activation
     */
    public function on_activation()
    {
        $this->store_current_version();
    }

    /**
     * Check if Divi Torque Pro is installed
     *
     * @return bool
     */
    public function is_divi_torque_pro_installed()
    {
        return defined('DTP_VERSION');
    }

    /**
     * Load plugin translations
     */
    public function load_textdomain()
    {
        load_plugin_textdomain('form-styler-for-divi', false, self::BASENAME_DIR . '/languages');
    }

    /**
     * Add plugin action links
     *
     * @param array $links Existing links
     * @return array Modified links
     */
    public function add_plugin_action_links($links)
    {
        $links[] = sprintf(
            '<a href="%s" target="_blank" style="color: #197efb;font-weight: 600;">%s</a>',
            self::DOCS_LINK,
            __('Docs', 'form-styler-for-divi')
        );
        $links[] = sprintf(
            '<a href="%s" target="_blank" style="color: #FF6900;font-weight: 600;">%s</a>',
            self::PRICING_LINK,
            __('Get Divi Torque Pro', 'form-styler-for-divi')
        );
        return $links;
    }

    /**
     * Initialize Divi extension
     */
    public function init_extension()
    {
        add_action('et_builder_ready', [$this, 'load_modules'], 9);
    }

    public function load_modules()
    {
        if (!class_exists('ET_Builder_Element')) {
            return;
        }

        require_once TFS_PLUGIN_PATH . 'includes/modules/Base/Base.php';
        require_once TFS_PLUGIN_PATH . 'includes/modules/CF7/CF7.php';
        require_once TFS_PLUGIN_PATH . 'includes/modules/FF/FF.php';
        require_once TFS_PLUGIN_PATH . 'includes/modules/GF/GF.php';
    }
}

Plugin::get_instance();