# darkify/1.4.18/src/Admin/Admin.php

Darkify – Dark Mode &amp; Night Mode for Website &amp; Admin (Dark Theme Included), version 1.4.18. 533 lines.

- Page: https://pluginprobe.com/plugins/darkify/1.4.18/code/src/Admin/Admin.php
- Raw: https://pluginprobe.com/plugins/darkify/1.4.18/raw/src/Admin/Admin.php
- Modified: 2025-12-21T04:28:32+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/darkify/1.4.18/code/src/Admin/Admin.php#L10-L20`.

```php
<?php

/**
 * The admin-facing functionality of the plugin.
 *
 * @link       https://themeatelier.net
 * @since      1.0.0
 *
 * @package darkify
 * @subpackage darkify/Admin
 * @author     ThemeAtelier<themeatelierbd@gmail.com>
 */

namespace ThemeAtelier\Darkify\Admin;
use ThemeAtelier\Darkify\Admin\TADiscountPage\TADiscountPage;
use ThemeAtelier\Darkify\Admin\ReviewNotice\ReviewNotice;
use ThemeAtelier\Darkify\Admin\Views\DarkifyOptions;
use ThemeAtelier\Darkify\Includes\DarkifyExternalSupport;
use ThemeAtelier\Darkify\Includes\DarkifyUtils;
use ThemeAtelier\Darkify\Admin\DBUpdates;
use ThemeAtelier\Darkify\Admin\ReviewNotice\ThemeAtelier_Offer_Banner;

/**
 * The admin class
 */
class Admin
{

    /**
     * The slug of this plugin.
     *
     * @since    1.0.0
     * @access   private
     * @var      string    $plugin_slug   The slug of this plugin.
     */
    private $plugin_slug;

    /**
     * The min of this plugin.
     *
     * @since    1.0.0
     * @access   private
     * @var      string    $min   The slug of this plugin.
     */
    private $min;

    /**
     * The version of this plugin.
     *
     * @since    1.0.0
     * @access   private
     * @var      string    $version    The current version of this plugin.
     */
    private $version;
    public $utils;
    public $settings;
    public $external_support;
    public $unique_id;
    private $plugin_name;


    /**
     * The class constructor.
     *
     * @param string $plugin_slug The slug of the plugin.
     * @param string $version Current version of the plugin.
     */
    function __construct($plugin_slug, $version)
    {
        $this->utils = new DarkifyUtils($this);
        $this->external_support = new DarkifyExternalSupport($this);
        if (function_exists('wp_rand')) {
            $this->unique_id = wp_rand();
        }

        $options = get_option('darkify');

        $enable_admin_panel_dark_mode = isset($options['enable_admin_panel_dark_mode']) ? $options['enable_admin_panel_dark_mode'] : false;
        $this->plugin_name = $plugin_slug;
        $this->min = (apply_filters('darkify_dev_mode', false) || WP_DEBUG) ? '' : '.min';
        
        if ($enable_admin_panel_dark_mode) {
            add_action('admin_bar_menu',  array($this, 'darkify_admin_bar_switch'), 9999);
            add_action('admin_print_scripts', array($this, 'darkify_admin_header_script'), 1);
            add_action('admin_footer', array($this, 'darkify_admin_footer_script'));
        }

        add_action( 'admin_menu', array( $this, 'admin_menu' ), 10 );
        add_action('after_setup_theme', array($this, 'init_components'));
        add_filter('autoptimize_filter_js_exclude', array($this, 'darkify_exclude_js_from_cache_plugins'));
        add_action('admin_init', [$this, 'load_classic_editor_scripts']);
        add_action('plugin_loaded', [$this, 'init']);
        new ReviewNotice();
        new DBUpdates();
         if ( ! defined( 'THEMEATELIER_OFFER_BANNER_LOADED' ) ) {
            define( 'THEMEATELIER_OFFER_BANNER_LOADED', true );
             ThemeAtelier_Offer_Banner::instance();
         }

         $active_plugins = get_option('active_plugins');
        foreach ($active_plugins as $active_plugin) {
            $_temp = strpos($active_plugin, 'darkify.php');
            if (false != $_temp) {
                add_filter('plugin_action_links_' . DARKIFY_BASENAME, array($this, 'add_plugin_action_links'), 10, 2);
                add_filter( 'plugin_row_meta', array( $this, 'after_darkify_row_meta' ), 10, 4 );
            }
        }
         add_filter( 'admin_footer_text', array( $this, 'darkify_admin_footer' ), 1, 2 );
    }

    public function init_components() {
        DarkifyOptions::options('darkify');
    }

    public function darkify_exclude_js_from_cache_plugins($excludes)
    {
        $excludes .= ',client_main.js,client_main.min.js';
        return $excludes;
    }

    public function enqueue_styles($hook)
    {
        if($hook === 'toplevel_page_darkify') {
            wp_enqueue_style('darkify-help-page', DARKIFY_DIR_URL . 'src/Admin/HelpPage/assets/css/help-page' . $this->min . '.css', array(), DARKIFY_VERSION, 'all');
        }

        $options = get_option('darkify');
        $enable_admin_panel_dark_mode = isset($options["enable_admin_panel_dark_mode"]) ? $options["enable_admin_panel_dark_mode"] : false;
        if ($enable_admin_panel_dark_mode) {
            if (!wp_style_is('darkify-admin-switch', 'enqueued')) {
                wp_enqueue_style('darkify-admin-switch', DARKIFY_DIR_URL . 'src/assets/css/client_main' . $this->min . '.css', array(), DARKIFY_VERSION, 'all');
            }
        }
        // Review notice CSS
        wp_enqueue_style('darkify-review-notice', DARKIFY_DIR_URL . 'src/Admin/ReviewNotice/assets/css/review-notice' . $this->min . '.css', array(), DARKIFY_VERSION, 'all');
    }

    public function enqueue_scripts($hook)
    {
        $options = get_option('darkify');
        $enable_admin_panel_dark_mode = isset($options["enable_admin_panel_dark_mode"]) ? $options["enable_admin_panel_dark_mode"] : false;
        if ($enable_admin_panel_dark_mode) {
            wp_enqueue_script('darkify-admin-client-main', DARKIFY_DIR_URL . 'src/assets/js/client_main' . $this->min . '.js', array(), DARKIFY_VERSION);
        }

        if($hook === 'toplevel_page_darkify') {
            wp_enqueue_script('darkify-help-page', DARKIFY_DIR_URL . 'src/Admin/HelpPage/assets/js/help-page' . $this->min . '.js', array('darkify-plugins'), DARKIFY_VERSION, true);
        }
    }

     /*
    Dequeue Darkify scripts and styles on specific admin pages (e.g., MainWP pages)
    */
    
    public function admin_dequeue_for_specefic_pages()
    {
       $page = isset( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : '';
       $dequeue_pages = array(
        'mainwp_tab',
        'managesites',
        'ManageClients',
        'CostSummary',
        'InsightsOverview',
        'Extensions',
        'RESTAPI',
        'mainwp-setup',
        'ThemesManage',
        'PluginsManage',
        'InsightsManage',
        'ManageGroups',
        'UpdatesManage',
        'PluginsInstall',
        'PluginsAutoUpdate',
        'PluginsIgnore',
        'PluginsAbandoned',
        'PluginsIgnoredAbandoned',
        'ThemesInstall',
        'ThemesAutoUpdate',
        'ThemesIgnore',
        'ThemesAbandoned',
        'ThemesIgnoredAbandoned',
        'UserBulkManage',
        'UserBulkAdd',
        'BulkImportUsers',
        'UpdateAdminPasswords',
        'PostBulkManage',
        'Extensions-Mainwp-Backups',
        'Extensions-Mainwp-Security',
        'Extensions-Mainwp-Analytics',
        'Mainwp-Monitoring',
        'Extensions-Mainwp-Agency',
        'Extensions-Mainwp-Administrative',
        'Extensions-Mainwp-Development',
        'Extensions-Mainwp-Performance',
        'ClientAddNew',
        'ClientImport',
        'ManageCostTracker',
        'CostTrackerAdd',
        'AddApiKeys',
    );


    if ( in_array( $page, $dequeue_pages, true ) ) {
        wp_deregister_style( 'darkify-admin-switch' );
        wp_dequeue_script( 'darkify-admin-client-main' );
    }
       
    }

     /**
	 * Review Text.
	 *
	 * @param string $text text.
	 *
	 * @return string
	 */
	public function darkify_admin_footer( $text ) {

		$screen = get_current_screen();
    
		if ( 'toplevel_page_darkify' === $screen->id ) {
			$text = sprintf(
				/* translators: 1: start strong tag, 2: close strong tag. 3: start link 4: close link */
				__( '<i>Enjoying %1$sDarkify?%2$s Please rate us %3$sWordPress.org%4$s. Your positive feedback will help us grow more. Thank you! 😊</i>', 'darkify' ),
				'<strong>',
				'</strong>',
				'<span class="greet-footer-text-star">★★★★★</span> <a href="https://wordpress.org/support/plugin/darkify/reviews/#new-post" target="_blank">',
				'</a>'
			);
		}

		return $text;
	}

    // Plugin settings in plugin list
    public function add_plugin_action_links(array $links)
    {
        $new_links = array(
            sprintf('<a href="' . esc_url(admin_url('admin.php?page=darkify')) . '">' . esc_html__('Settings', 'darkify') . '</a>'),
            // sprintf('<a target="_blank" href="https://themeatelier.net/create-support-ticket/">' . esc_html__('Support', 'darkify') . '</a>'),
            // sprintf('<a style="font-weight: bold;color:#171717" target="_blank" href="https://darkifywp.com/pricing/?ref=1">' . esc_html__('Go Pro', 'darkify') . '</a>'),
        );

         $links[] = sprintf( '<a style="font-weight: bold;color:#ef476f" target="_blank" href="https://darkifywp.com/?utm_source=darkify_plugin&utm_medium=action_link&utm_campaign=new_year_2026">%s</a>', esc_html__( 'Holiday & New Year Sale 🎄 Up To 70% Off!', 'darkify' ));
        
        return array_merge($new_links, $links);
    }

    /**
	 * Add plugin row meta link.
	 *
	 * @since 2.0
	 *
	 * @param array  $plugin_meta .
	 * @param string $file .
	 *
	 * @return array
	 */
	public function after_darkify_row_meta( $plugin_meta, $file ) {

		if ( DARKIFY_BASENAME === $file ) {
			$plugin_meta[] = '<a href="'.DARKIFY_DEMO_URL.'" target="_blank">' . __( 'Live Demo', 'darkify' ) . '</a>';
		}

		return $plugin_meta;
	}


    public function darkify_admin_bar_switch($wp_admin_bar)
    {
        $args = array(
            'parent' => 'top-secondary',
            'id' => 'darkify_admin_bar_switch_container',
            'meta' => array(
                'class' => 'darkify_admin_bar_switch_container',
                'onclick' => 'darkify_switch_trigger()',
            )
        );
        $wp_admin_bar->add_node($args);
    }

    public function darkify_admin_header_script()
    {
        include_once DarkifyUtils::darkify_locate_template('header_script.php');
    }

    public function darkify_admin_footer_script()
    {
        include_once DarkifyUtils::darkify_locate_template('footer_script.php');
    }

    public function admin_menu()
    {
        // global $menu, $admin_page_hooks;
		$capability = apply_filters( 'darkify_ui_permission', 'manage_options' );
        $menu_icon = 'data:image/svg+xml;base64,' . base64_encode('<svg width="44" height="44" viewBox="0 0 44 44" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path d="M23.5 1.5C23.5 0.671573 22.8284 0 22 0C21.1716 0 20.5 0.671573 20.5 1.5V4.5C20.5 5.32843 21.1716 6 22 6C22.8284 6 23.5 5.32843 23.5 4.5V1.5Z" fill="white" />
                <path d="M34 22C34 28.6274 28.6274 34 22 34C15.3726 34 10 28.6274 10 22C10 15.3726 15.3726 10 22 10C28.6274 10 34 15.3726 34 22Z" fill="white" />
                <path d="M22 38C22.8284 38 23.5 38.6716 23.5 39.5V42.5C23.5 43.3284 22.8284 44 22 44C21.1716 44 20.5 43.3284 20.5 42.5V39.5C20.5 38.6716 21.1716 38 22 38Z" fill="white" />
                <path d="M10.6863 10.6863C10.1005 11.2721 9.15074 11.2721 8.56495 10.6863L6.44363 8.56498C5.85784 7.97919 5.85784 7.02945 6.44363 6.44366C7.02942 5.85787 7.97916 5.85787 8.56495 6.44366L10.6863 8.56498C11.2721 9.15077 11.2721 10.1005 10.6863 10.6863Z" fill="white" />
                <path d="M35.435 37.5564C36.0208 38.1421 36.9705 38.1421 37.5563 37.5564C38.1421 36.9706 38.1421 36.0208 37.5563 35.435L35.435 33.3137C34.8492 32.7279 33.8995 32.7279 33.3137 33.3137C32.7279 33.8995 32.7279 34.8493 33.3137 35.435L35.435 37.5564Z" fill="white" />
                <path d="M10.6863 33.3137C11.2721 33.8995 11.2721 34.8492 10.6863 35.435L8.56495 37.5563C7.97916 38.1421 7.02942 38.1421 6.44363 37.5563C5.85784 36.9706 5.85784 36.0208 6.44363 35.435L8.56495 33.3137C9.15074 32.7279 10.1005 32.7279 10.6863 33.3137Z" fill="white" />
                <path d="M37.5563 8.56496C38.1421 7.97918 38.1421 7.02943 37.5563 6.44364C36.9705 5.85786 36.0208 5.85786 35.435 6.44364L33.3137 8.56496C32.7279 9.15075 32.7279 10.1005 33.3137 10.6863C33.8995 11.2721 34.8492 11.2721 35.435 10.6863L37.5563 8.56496Z" fill="white" />
                <path d="M6 22C6 22.8284 5.32843 23.5 4.5 23.5H1.5C0.671573 23.5 0 22.8284 0 22C0 21.1716 0.671573 20.5 1.5 20.5H4.5C5.32843 20.5 6 21.1716 6 22Z" fill="white" />
                <path d="M42.5 23.5C43.3284 23.5 44 22.8284 44 22C44 21.1716 43.3284 20.5 42.5 20.5H39.5C38.6716 20.5 38 21.1716 38 22C38 22.8284 38.6716 23.5 39.5 23.5H42.5Z" fill="white" />
            </svg>');
        // This page will be under "Settings"
        add_menu_page(
            esc_html__('Darkify', 'darkify'),
            esc_html__('Darkify', 'darkify'),
            $capability,
            'darkify',
            [$this, 'darkify_settings'],
            $menu_icon,
            9
        );
        add_submenu_page(
            'darkify',
            __(
                'New Year Sale 🎄 Up To 70%% Off!',
                'darkify'
            ),
            sprintf('<span style="color: #35b747;font-weight:bold;" class="darkify-get-pro-text">%s</span>', __('New Year Sale 🎄 Up To 70% Off!', 'darkify')),
            'manage_options',
            'https://darkifywp.com/pricing/?utm_source=darkify_plugin&utm_medium=submenu_page&utm_campaign=new_year_2026'
        );

    }

    public function darkify_settings() {} 
    
    /**
     * Load classic editor scripts.
     *
     * @since 5.0.0
     */
    public function load_classic_editor_scripts()
    {
        $options = get_option('darkify');
        $classic_editor_dark_mode = isset($options['classic_editor_dark_mode']) ? $options['classic_editor_dark_mode'] : '';
        if (! current_user_can('edit_posts') && ! current_user_can('edit_pages')) {
            return;
        }
        if (get_user_option('rich_editing') !== 'true') {
            return;
        }

        // Bail if admin_classic_editor is not enabled.
        if (! wp_validate_boolean($classic_editor_dark_mode)) {
            return;
        }

        add_filter('mce_external_plugins', function ($plugins) {
            $plugins['darkify_button'] = plugins_url('src/assets/js/admin-classic-editor.js', DARKIFY_FILE);
            return $plugins;
        });

        add_filter('mce_buttons', function ($buttons) {
            $buttons[] = 'darkify_button';
            return $buttons;
        });
    }

    /**
     * Register WP Ajax actions.
     */
    public static function init()
    {
        $options = get_option('darkify');
        $block_editor_dark_mode = isset($options['block_editor_dark_mode']) ? $options['block_editor_dark_mode'] : '';
        if (is_admin() && function_exists('register_block_type') && $block_editor_dark_mode) {
            if (
                substr($_SERVER['PHP_SELF'], '-8') == 'post.php' ||
                substr($_SERVER['PHP_SELF'], '-12') == 'post-new.php'
            ) {

                if (self::isGutenbergActive()) {
                    /** @var static $class */
                    $class = get_called_class();
                    add_action('enqueue_block_editor_assets', function () use ($class) {
                        self::registerBlockType();
                    });
                }
            }
        }
    }

    /**
     * Check if Block Editor is active.
     *
     * @return bool
     */
    public static function isGutenbergActive()
    {
        // Gutenberg plugin is installed and activated.
        $gutenberg = !(false === has_filter('replace_editor', 'gutenberg_init'));

        // Block editor since 5.0.
        $block_editor = version_compare($GLOBALS['wp_version'], '5.0-beta', '>');

        if (!$gutenberg && !$block_editor) {
            return false;
        }

        if (self::isClassicEditorPluginActive()) {
            $editor_option = get_option('classic-editor-replace');
            $block_editor_active = array('no-replace', 'block');

            return in_array($editor_option, $block_editor_active, true);
        }

        // Fix for conflict with Avada - Fusion builder and gutenberg blocks
        // Fix for Gutenberg blocks when Avada's post/page types are disabled
        if (class_exists('FusionBuilder') && !(isset($_GET['gutenberg-editor']))) {
            $postTypes = \FusionBuilder::allowed_post_types();
            return count(array_intersect(['page', 'post'], $postTypes)) < 2;
        }

        // Fix for conflict with WooCommerce product page
        if (class_exists('WooCommerce') && (isset($_GET['post_type'])) && ($_GET['post_type']) == "product") {
            return false;
        }

        // Fix for conflict with Disable Gutenberg plugin
        if (class_exists('DisableGutenberg')) {
            return false;
        }

        return true;
    }

    /**
     * Check if Classic Editor plugin is active
     *
     * @return bool
     */
    public static function isClassicEditorPluginActive()
    {

        if (!function_exists('is_plugin_active')) {

            include_once ABSPATH . 'wp-admin/includes/plugin.php';
        }

        if (is_plugin_active('classic-editor/classic-editor.php')) {

            return true;
        }

        return false;
    }

    /**
     * Register block for gutenberg
     */
    public static function registerBlockType()
    {
        wp_enqueue_script(
            'darkify-gutenberg-block',
            plugins_url('src/assets/js/admin-gutenberg-block.js', DARKIFY_FILE),
            array('wp-blocks', 'wp-components', 'wp-element', 'wp-editor')
        );

        wp_localize_script(
            'darkify-gutenberg-block',
            'darkify',
            array(
                'title' => 'Darkify',
                'description' => 'Darkify dark mode plugin.',
                'data' => self::getAllTablesAndChartsForPageBuilders('gutenberg', 'charts')
            )
        );
    }

    /**
     * Helper function for getting all tables and charts from the database for page builders
     *
     * @param $builder
     * @param $type
     *
     * @return array
     */
    public static function getAllTablesAndChartsForPageBuilders($builder, $type)
    {
        $selectedType = substr($type, 0, -1);

        global $wpdb;
        $returnData = [];

        $table_name = $wpdb->prefix . 'wpdata' . $type;

        // Check whether the table exists to avoid DB errors when the related plugin/table is absent.
        $table_exists = $wpdb->get_var( $wpdb->prepare( "SHOW TABLES LIKE %s", $table_name ) );

        if ( ! $table_exists ) {
            return $returnData;
        }

        $query = "SELECT id, title FROM {$table_name} ORDER BY id";

        $allItems = $wpdb->get_results( $query, ARRAY_A );

        if ($builder === 'avada' || $builder === 'elementor' || $builder === 'divi') {
            $returnData[0] = esc_attr__('Select a ' . $selectedType, 'darkify');
        } else if ($builder === 'bakery') {
            $returnData[__('Select a ' . $selectedType, 'darkify')] = '';
        }

        if ($allItems != null) {
            foreach ($allItems as $item) {
                switch ($builder) {
                    case 'gutenberg':
                        $returnData[] = [
                            'name' => $item['title'],
                            'id' => $item['id'],
                        ];
                        break;
                    case 'avada':
                    case 'elementor':
                    case 'divi':
                        $returnData[$item['id']] = $item['title'] . ' (id: ' . $item['id'] . ')';
                        break;
                    case 'bakery':
                        $returnData[$item['title']] = $item['id'];
                        break;
                }
            }
        }

        return $returnData;
    }
}

```
