PluginProbe
Theme Switcha – Easily Switch Themes for Development and Testing / 3.3
Theme Switcha – Easily Switch Themes for Development and Testing v3.3
3.4.5 trunk 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 3.1 3.2 3.3 3.3.1 3.3.2 All 33 releases
theme-switcha / theme-switcha.php

theme-switcha.php in Theme Switcha – Easily Switch Themes for Development and Testing 3.3, at theme-switcha.php

257 lines 9.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /*
3 Plugin Name: Theme Switcha
4 Plugin URI: https://perishablepress.com/theme-switcha/
5 Description: Theme switching done right.
6 Tags: theme, switch, switcher, theme switcher, preview, demo, development, admin, themes, plugin, testing, template, maintenance
7 Author: Jeff Starr
8 Contributors: specialk
9 Author URI: https://plugin-planet.com/
10 Donate link: https://monzillamedia.com/donate.html
11 Requires at least: 4.6
12 Tested up to: 6.3
13 Stable tag: 3.3
14 Version: 3.3
15 Requires PHP: 5.6.20
16 Text Domain: theme-switcha
17 Domain Path: /languages
18 License: GPL v3 or later
19 */
20
21 /*
22 This program is free software; you can redistribute it and/or
23 modify it under the terms of the GNU General Public License
24 as published by the Free Software Foundation; either version
25 2 of the License, or (at your option) any later version.
26
27 This program is distributed in the hope that it will be useful,
28 but WITHOUT ANY WARRANTY; without even the implied warranty of
29 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30 GNU General Public License for more details.
31
32 You should have received a copy of the GNU General Public License
33 with this program. If not, visit: https://www.gnu.org/licenses/
34
35 Copyright 2023 Monzilla Media. All rights reserved.
36 */
37
38 if (!defined('ABSPATH')) die();
39
40 if (!class_exists('Theme_Switcha')) {
41
42 final class Theme_Switcha {
43
44 private static $instance;
45
46 public static function instance() {
47
48 if (!isset(self::$instance) && !(self::$instance instanceof Theme_Switcha)) {
49
50 self::$instance = new Theme_Switcha;
51 self::$instance->constants();
52 self::$instance->includes();
53
54 register_activation_hook(__FILE__, 'theme_switcha_dismiss_notice_activate');
55
56 add_action('admin_init', array(self::$instance, 'check_existing'));
57 add_action('admin_init', array(self::$instance, 'check_version'));
58 add_action('init', array(self::$instance, 'load_i18n'));
59 add_filter('plugin_action_links', array(self::$instance, 'action_links'), 10, 2);
60 add_filter('plugin_row_meta', array(self::$instance, 'plugin_links'), 10, 2);
61 add_filter('admin_footer_text', array(self::$instance, 'footer_text'), 10, 1);
62
63 add_action('admin_bar_menu', 'theme_switcha_toolbar_add_menu', 1000);
64 add_action('admin_enqueue_scripts', 'theme_switcha_enqueue_resources_admin');
65 add_action('admin_print_scripts', 'theme_switcha_print_js_vars_admin');
66 add_action('admin_notices', 'theme_switcha_admin_notice');
67 add_action('admin_init', 'theme_switcha_register_settings');
68 add_action('admin_init', 'theme_switcha_reset_options');
69 add_action('admin_menu', 'theme_switcha_menu_pages');
70 add_action('admin_menu', 'theme_switcha_disable_widget');
71 add_action('admin_init', 'theme_switcha_dismiss_notice_save');
72 add_action('admin_init', 'theme_switcha_dismiss_notice_version');
73
74 add_action('wp_dashboard_setup', 'theme_switcha_dashboard_widget');
75 add_action('plugins_loaded', 'theme_switcha_add_filters');
76 add_action('init', 'theme_switcha_check_cookie');
77 add_filter('widget_text', 'do_shortcode', 10);
78
79 }
80
81 return self::$instance;
82 }
83
84 public static function options() {
85
86 $options = array(
87 'enable_plugin' => false,
88 'enable_admin' => false,
89 'allowed_users' => 'admin',
90 'cookie_expire' => 3600,
91 'passkey' => uniqid(mt_rand()),
92 'disable_widget' => false,
93 );
94
95 return apply_filters('theme_switcha_options', $options);
96 }
97
98 private function constants() {
99
100 if (!defined('THEME_SWITCHA_REQUIRE')) define('THEME_SWITCHA_REQUIRE', '4.6');
101 if (!defined('THEME_SWITCHA_VERSION')) define('THEME_SWITCHA_VERSION', '3.3');
102 if (!defined('THEME_SWITCHA_NAME')) define('THEME_SWITCHA_NAME', 'Theme Switcha');
103 if (!defined('THEME_SWITCHA_AUTHOR')) define('THEME_SWITCHA_AUTHOR', 'Jeff Starr');
104 if (!defined('THEME_SWITCHA_HOME')) define('THEME_SWITCHA_HOME', 'https://perishablepress.com/theme-switcha/');
105 if (!defined('THEME_SWITCHA_URL')) define('THEME_SWITCHA_URL', plugin_dir_url(__FILE__));
106 if (!defined('THEME_SWITCHA_DIR')) define('THEME_SWITCHA_DIR', plugin_dir_path(__FILE__));
107 if (!defined('THEME_SWITCHA_FILE')) define('THEME_SWITCHA_FILE', plugin_basename(__FILE__));
108 if (!defined('THEME_SWITCHA_SLUG')) define('THEME_SWITCHA_SLUG', basename(dirname(__FILE__)));
109
110 }
111
112 private function includes() {
113
114 require_once THEME_SWITCHA_DIR .'inc/plugin-core.php';
115 require_once THEME_SWITCHA_DIR .'inc/resources-enqueue.php';
116 require_once THEME_SWITCHA_DIR .'inc/settings-display.php';
117 require_once THEME_SWITCHA_DIR .'inc/settings-register.php';
118 require_once THEME_SWITCHA_DIR .'inc/settings-reset.php';
119
120 }
121
122 public function action_links($links, $file) {
123
124 if ($file == THEME_SWITCHA_FILE && current_user_can('manage_options')) {
125
126 $add_links = '<a href="'. admin_url('options-general.php?page=theme_switcha_settings') .'">'. esc_html__('Settings', 'theme-switcha') .'</a>';
127 array_unshift($links, $add_links);
128
129 }
130
131 return $links;
132 }
133
134 public function plugin_links($links, $file) {
135
136 if ($file == THEME_SWITCHA_FILE) {
137
138 $home_href = 'https://perishablepress.com/theme-switcha/';
139 $home_title = esc_attr__('Plugin Homepage', 'theme-switcha');
140 $home_text = esc_html__('Homepage', 'theme-switcha');
141
142 $links[] = '<a target="_blank" rel="noopener noreferrer" href="'. $home_href .'" title="'. $home_title .'">'. $home_text .'</a>';
143
144 $rate_href = 'https://wordpress.org/support/plugin/'. THEME_SWITCHA_SLUG .'/reviews/?rate=5#new-post';
145 $rate_title = esc_html__('Click here to rate and review this plugin on WordPress.org', 'theme-switcha');
146 $rate_text = esc_html__('Rate this plugin', 'theme-switcha') .'&nbsp;&raquo;';
147
148 $links[] = '<a target="_blank" rel="noopener noreferrer" href="'. $rate_href .'" title="'. $rate_title .'">'. $rate_text .'</a>';
149
150 $pro_href = 'https://plugin-planet.com/theme-switcha-pro/';
151 $pro_title = esc_html__('Get Theme Switcha Pro!', 'theme-switcha');
152 $pro_text = esc_html__('Go&nbsp;Pro', 'theme-switcha');
153 $pro_style = 'padding:1px 5px;color:#eee;background:#333;border-radius:1px;';
154
155 // $links[] = '<a target="_blank" rel="noopener noreferrer" href="'. $pro_href .'" title="'. $pro_title .'" style="'. $pro_style .'">'. $pro_text .'</a>';
156
157 }
158 return $links;
159 }
160
161 function footer_text($text) {
162
163 $screen_id = theme_switcha_get_current_screen_id();
164
165 $ids = array('settings_page_theme_switcha_settings');
166
167 if ($screen_id && apply_filters('theme_switcha_admin_footer_text', in_array($screen_id, $ids))) {
168
169 $text = __('Like this plugin? Give it a', 'theme-switcha');
170
171 $text .= ' <a target="_blank" rel="noopener noreferrer" href="https://wordpress.org/support/plugin/theme-switcha/reviews/?rate=5#new-post">';
172
173 $text .= __('�
174
175
176
177
178 rating&nbsp;&raquo;', 'theme-switcha') .'</a>';
179
180 }
181
182 return $text;
183
184 }
185
186 public function check_existing() {
187
188 if (class_exists('Theme_Switcha_Pro')) {
189 if (is_plugin_active(THEME_SWITCHA_FILE)) {
190 deactivate_plugins(THEME_SWITCHA_FILE);
191
192 $msg = '<strong>'. esc_html__('Warning:', 'theme-switcha') .'</strong> ';
193 $msg .= esc_html__('Pro version of ', 'theme-switcha') . THEME_SWITCHA_NAME;
194 $msg .= esc_html__(' currently active. Free and Pro versions cannot be activated at the same time. ', 'theme-switcha');
195 $msg .= esc_html__('Please return to the', 'theme-switcha');
196 $msg .= ' <a href="'. admin_url() .'">'. esc_html__('WP Admin Area', 'theme-switcha') .'</a> ';
197 $msg .= esc_html__('and try again.', 'theme-switcha');
198
199 wp_die($msg);
200 }
201 }
202 }
203
204 public function check_version() {
205
206 $wp_version = get_bloginfo('version');
207
208 if (isset($_GET['activate']) && $_GET['activate'] == 'true') {
209 if (version_compare($wp_version, THEME_SWITCHA_REQUIRE, '<')) {
210 if (is_plugin_active(THEME_SWITCHA_FILE)) {
211 deactivate_plugins(THEME_SWITCHA_FILE);
212
213 $msg = '<strong>'. THEME_SWITCHA_NAME .'</strong> ';
214 $msg .= esc_html__('requires WordPress ', 'theme-switcha') . THEME_SWITCHA_REQUIRE;
215 $msg .= esc_html__(' or higher, and has been deactivated! ', 'theme-switcha');
216 $msg .= esc_html__('Please return to the', 'theme-switcha');
217 $msg .= ' <a href="'. admin_url() .'">'. esc_html__('WP Admin Area', 'theme-switcha') .'</a> ';
218 $msg .= esc_html__('to upgrade WordPress and try again.', 'theme-switcha');
219
220 wp_die($msg);
221 }
222 }
223 }
224 }
225
226 public function load_i18n() {
227 load_plugin_textdomain('theme-switcha', false, dirname(THEME_SWITCHA_FILE) .'/languages/');
228 }
229
230 public function __clone() {
231 _doing_it_wrong(__FUNCTION__, esc_html__('Cheatin&rsquo; huh?', 'theme-switcha'), THEME_SWITCHA_VERSION);
232 }
233
234 public function __wakeup() {
235 _doing_it_wrong(__FUNCTION__, esc_html__('Cheatin&rsquo; huh?', 'theme-switcha'), THEME_SWITCHA_VERSION);
236 }
237
238 }
239 }
240
241 if (class_exists('Theme_Switcha')) {
242
243 $theme_switcha_options = get_option('theme_switcha_options', Theme_Switcha::options());
244 $theme_switcha_options = apply_filters('theme_switcha_get_options', $theme_switcha_options);
245
246 if (!function_exists('theme_switcha')) {
247
248 function theme_switcha() {
249
250 return Theme_Switcha::instance();
251 }
252 }
253
254 theme_switcha();
255
256 }
257