PluginProbe
Darkify – Dark Mode & Night Mode for Website & Admin (Dark Theme Included) / 1.5.2
Darkify – Dark Mode & Night Mode for Website & Admin (Dark Theme Included) v1.5.2
2.1.3 2.1.2 2.1.1 2.1.0 2.0.4 2.0.3 2.0.2 2.0.1 2.0.0 1.5.5 1.5.4 1.5.3 1.5.2 1.5.1 1.5.0 trunk 1.0.1 1.1.0 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 All 57 releases
darkify / src / Admin / Admin.php

Admin.php in Darkify – Dark Mode & Night Mode for Website & Admin (Dark Theme Included) 1.5.2, at src/Admin/Admin.php

368 lines 13.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * The admin-facing functionality of the plugin.
5 *
6 * @link https://themeatelier.net
7 * @since 1.0.0
8 *
9 * @package darkify
10 * @subpackage darkify/Admin
11 * @author ThemeAtelier<themeatelierbd@gmail.com>
12 */
13
14 namespace ThemeAtelier\Darkify\Admin;
15 use ThemeAtelier\Darkify\Admin\TADiscountPage\TADiscountPage;
16 use ThemeAtelier\Darkify\Admin\ReviewNotice\ReviewNotice;
17 use ThemeAtelier\Darkify\Admin\Views\DarkifyOptions;
18 use ThemeAtelier\Darkify\Includes\DarkifyExternalSupport;
19 use ThemeAtelier\Darkify\Includes\DarkifyUtils;
20 use ThemeAtelier\Darkify\Admin\DBUpdates;
21 use ThemeAtelier\Darkify\Admin\ReviewNotice\ThemeAtelier_Offer_Banner;
22
23 /**
24 * The admin class
25 */
26 class Admin
27 {
28
29 /**
30 * The slug of this plugin.
31 *
32 * @since 1.0.0
33 * @access private
34 * @var string $plugin_slug The slug of this plugin.
35 */
36 private $plugin_slug;
37
38 /**
39 * The min of this plugin.
40 *
41 * @since 1.0.0
42 * @access private
43 * @var string $min The slug of this plugin.
44 */
45 private $min;
46
47 /**
48 * The version of this plugin.
49 *
50 * @since 1.0.0
51 * @access private
52 * @var string $version The current version of this plugin.
53 */
54 private $version;
55 public $utils;
56 public $settings;
57 public $external_support;
58 public $unique_id;
59 private $plugin_name;
60
61
62 /**
63 * The class constructor.
64 *
65 * @param string $plugin_slug The slug of the plugin.
66 * @param string $version Current version of the plugin.
67 */
68 function __construct($plugin_slug, $version)
69 {
70 $this->utils = new DarkifyUtils($this);
71 $this->external_support = new DarkifyExternalSupport($this);
72 if (function_exists('wp_rand')) {
73 $this->unique_id = wp_rand();
74 }
75
76 $options = get_option('darkify');
77
78 $enable_admin_panel_dark_mode = isset($options['enable_admin_panel_dark_mode']) ? $options['enable_admin_panel_dark_mode'] : false;
79 $this->plugin_name = $plugin_slug;
80 $this->min = (apply_filters('darkify_dev_mode', false) || WP_DEBUG) ? '' : '.min';
81
82 if ($enable_admin_panel_dark_mode) {
83 add_action('admin_bar_menu', array($this, 'darkify_admin_bar_switch'), 9999);
84 add_action('admin_print_scripts', array($this, 'darkify_admin_header_script'), 1);
85 add_action('admin_footer', array($this, 'darkify_admin_footer_script'));
86 }
87
88 add_action( 'admin_menu', array( $this, 'admin_menu' ), 10 );
89 add_action('after_setup_theme', array($this, 'init_components'));
90 add_filter('autoptimize_filter_js_exclude', array($this, 'darkify_exclude_js_from_cache_plugins'));
91 add_action('admin_init', [$this, 'load_classic_editor_scripts']);
92 new ReviewNotice();
93 new DBUpdates();
94 if ( ! defined( 'THEMEATELIER_OFFER_BANNER_LOADED' ) ) {
95 define( 'THEMEATELIER_OFFER_BANNER_LOADED', true );
96 ThemeAtelier_Offer_Banner::instance();
97 }
98
99 $active_plugins = get_option('active_plugins');
100 foreach ($active_plugins as $active_plugin) {
101 $_temp = strpos($active_plugin, 'darkify.php');
102 if (false != $_temp) {
103 add_filter('plugin_action_links_' . DARKIFY_BASENAME, array($this, 'add_plugin_action_links'), 10, 2);
104 add_filter( 'plugin_row_meta', array( $this, 'after_darkify_row_meta' ), 10, 4 );
105 }
106 }
107 add_filter( 'admin_footer_text', array( $this, 'darkify_admin_footer' ), 1, 2 );
108 }
109
110 public function init_components() {
111 DarkifyOptions::options('darkify');
112 }
113
114 public function darkify_exclude_js_from_cache_plugins($excludes)
115 {
116 $excludes .= ',client_main.js,client_main.min.js';
117 return $excludes;
118 }
119
120 public function enqueue_styles($hook)
121 {
122 if($hook === 'toplevel_page_darkify') {
123 wp_enqueue_style('darkify-help-page', DARKIFY_DIR_URL . 'src/Admin/HelpPage/assets/css/help-page' . $this->min . '.css', array(), DARKIFY_VERSION, 'all');
124 }
125
126 $options = get_option('darkify');
127 $enable_admin_panel_dark_mode = isset($options["enable_admin_panel_dark_mode"]) ? $options["enable_admin_panel_dark_mode"] : false;
128 if ($enable_admin_panel_dark_mode) {
129 if (!wp_style_is('darkify-admin-switch', 'enqueued')) {
130 wp_enqueue_style('darkify-admin-switch', DARKIFY_DIR_URL . 'src/assets/css/client_main' . $this->min . '.css', array(), DARKIFY_VERSION, 'all');
131 }
132 }
133 // Review notice CSS
134 wp_enqueue_style('darkify-review-notice', DARKIFY_DIR_URL . 'src/Admin/ReviewNotice/assets/css/review-notice' . $this->min . '.css', array(), DARKIFY_VERSION, 'all');
135 }
136
137 public function enqueue_scripts($hook)
138 {
139 $options = get_option('darkify');
140 $enable_admin_panel_dark_mode = isset($options["enable_admin_panel_dark_mode"]) ? $options["enable_admin_panel_dark_mode"] : false;
141 if ($enable_admin_panel_dark_mode) {
142 wp_enqueue_script('darkify-admin-client-main', DARKIFY_DIR_URL . 'src/assets/js/client_main' . $this->min . '.js', array(), DARKIFY_VERSION);
143 }
144
145 if($hook === 'toplevel_page_darkify') {
146 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);
147 }
148 }
149
150 /*
151 Dequeue Darkify scripts and styles on specific admin pages (e.g., MainWP pages)
152 */
153
154 public function admin_dequeue_for_specefic_pages()
155 {
156 $page = isset( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : '';
157 $dequeue_pages = array(
158 'mainwp_tab',
159 'managesites',
160 'ManageClients',
161 'CostSummary',
162 'InsightsOverview',
163 'Extensions',
164 'RESTAPI',
165 'mainwp-setup',
166 'ThemesManage',
167 'PluginsManage',
168 'InsightsManage',
169 'ManageGroups',
170 'UpdatesManage',
171 'PluginsInstall',
172 'PluginsAutoUpdate',
173 'PluginsIgnore',
174 'PluginsAbandoned',
175 'PluginsIgnoredAbandoned',
176 'ThemesInstall',
177 'ThemesAutoUpdate',
178 'ThemesIgnore',
179 'ThemesAbandoned',
180 'ThemesIgnoredAbandoned',
181 'UserBulkManage',
182 'UserBulkAdd',
183 'BulkImportUsers',
184 'UpdateAdminPasswords',
185 'PostBulkManage',
186 'Extensions-Mainwp-Backups',
187 'Extensions-Mainwp-Security',
188 'Extensions-Mainwp-Analytics',
189 'Mainwp-Monitoring',
190 'Extensions-Mainwp-Agency',
191 'Extensions-Mainwp-Administrative',
192 'Extensions-Mainwp-Development',
193 'Extensions-Mainwp-Performance',
194 'ClientAddNew',
195 'ClientImport',
196 'ManageCostTracker',
197 'CostTrackerAdd',
198 'AddApiKeys',
199 );
200
201
202 if ( in_array( $page, $dequeue_pages, true ) ) {
203 wp_deregister_style( 'darkify-admin-switch' );
204 wp_dequeue_script( 'darkify-admin-client-main' );
205 }
206
207 }
208
209 /**
210 * Review Text.
211 *
212 * @param string $text text.
213 *
214 * @return string
215 */
216 public function darkify_admin_footer( $text ) {
217
218 $screen = get_current_screen();
219
220 if ( 'toplevel_page_darkify' === $screen->id ) {
221 $text = sprintf(
222 /* translators: 1: start strong tag, 2: close strong tag. 3: start link 4: close link */
223 __( '<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' ),
224 '<strong>',
225 '</strong>',
226 '<span class="greet-footer-text-star">�
227
228
229
230
231 </span> <a href="https://wordpress.org/support/plugin/darkify/reviews/#new-post" target="_blank">',
232 '</a>'
233 );
234 }
235
236 return $text;
237 }
238
239 // Plugin settings in plugin list
240 public function add_plugin_action_links(array $links)
241 {
242 $new_links = array(
243 sprintf('<a href="' . esc_url(admin_url('admin.php?page=darkify')) . '">' . esc_html__('Settings', 'darkify') . '</a>'),
244 sprintf('<a target="_blank" href="https://wordpress.org/support/plugin/darkify/">' . esc_html__('Support', 'darkify') . '</a>'),
245 // sprintf('<a style="font-weight: bold;color:#171717" target="_blank" href="https://darkifywp.com/pricing/?ref=1">' . esc_html__('Go Pro', 'darkify') . '</a>'),
246 );
247
248 $links[] = sprintf( '<a style="font-weight: bold;color:#35b747" target="_blank" href="https://darkifywp.com/pricing/?utm_source=darkify_plugin&utm_medium=action_link&utm_campaign=regular">%s</a>', esc_html__( 'Go Pro!', 'darkify' ));
249
250 return array_merge($new_links, $links);
251 }
252
253 /**
254 * Add plugin row meta link.
255 *
256 * @since 2.0
257 *
258 * @param array $plugin_meta .
259 * @param string $file .
260 *
261 * @return array
262 */
263 public function after_darkify_row_meta( $plugin_meta, $file ) {
264
265 if ( DARKIFY_BASENAME === $file ) {
266 $plugin_meta[] = '<a href="'.DARKIFY_DEMO_URL.'" target="_blank">' . __( 'Live Demo', 'darkify' ) . '</a>';
267 }
268
269 return $plugin_meta;
270 }
271
272
273 public function darkify_admin_bar_switch($wp_admin_bar)
274 {
275 $args = array(
276 'parent' => 'top-secondary',
277 'id' => 'darkify_admin_bar_switch_container',
278 'meta' => array(
279 'class' => 'darkify_admin_bar_switch_container',
280 'onclick' => 'darkify_switch_trigger()',
281 )
282 );
283 $wp_admin_bar->add_node($args);
284 }
285
286 public function darkify_admin_header_script()
287 {
288 include_once DarkifyUtils::darkify_locate_template('header_script.php');
289 }
290
291 public function darkify_admin_footer_script()
292 {
293 include_once DarkifyUtils::darkify_locate_template('footer_script.php');
294 }
295
296 public function admin_menu()
297 {
298 // global $menu, $admin_page_hooks;
299 $capability = apply_filters( 'darkify_ui_permission', 'manage_options' );
300 $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">
301 <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" />
302 <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" />
303 <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" />
304 <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" />
305 <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" />
306 <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" />
307 <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" />
308 <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" />
309 <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" />
310 </svg>');
311 // This page will be under "Settings"
312 add_menu_page(
313 esc_html__('Darkify', 'darkify'),
314 esc_html__('Darkify', 'darkify'),
315 $capability,
316 'darkify',
317 [$this, 'darkify_settings'],
318 $menu_icon,
319 60
320 );
321 add_submenu_page(
322 'darkify',
323 __(
324 'Upgrade To Pro! 👑',
325 'darkify'
326 ),
327 sprintf('<span style="color: #35b747;font-weight:600;" class="darkify-get-pro-text">%s</span>', __('Upgrade To Pro! 👑', 'darkify')),
328 'manage_options',
329 'https://darkifywp.com/pricing/?utm_source=darkify_plugin&utm_medium=submenu_page&utm_campaign=regular'
330 );
331
332 }
333
334 public function darkify_settings() {}
335
336 /**
337 * Load classic editor scripts.
338 *
339 * @since 5.0.0
340 */
341 public function load_classic_editor_scripts()
342 {
343 $options = get_option('darkify');
344 $classic_editor_dark_mode = isset($options['classic_editor_dark_mode']) ? $options['classic_editor_dark_mode'] : '';
345 if (! current_user_can('edit_posts') && ! current_user_can('edit_pages')) {
346 return;
347 }
348 if (get_user_option('rich_editing') !== 'true') {
349 return;
350 }
351
352 // Bail if admin_classic_editor is not enabled.
353 if (! wp_validate_boolean($classic_editor_dark_mode)) {
354 return;
355 }
356
357 add_filter('mce_external_plugins', function ($plugins) {
358 $plugins['darkify_button'] = plugins_url('src/assets/js/admin-classic-editor.js', DARKIFY_FILE);
359 return $plugins;
360 });
361
362 add_filter('mce_buttons', function ($buttons) {
363 $buttons[] = 'darkify_button';
364 return $buttons;
365 });
366 }
367 }
368