PluginProbe
Theme Switcha – Easily Switch Themes for Development and Testing / 3.2
Theme Switcha – Easily Switch Themes for Development and Testing v3.2
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.2, at theme-switcha.php

253 lines 9.2 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.2
13 Stable tag: 3.2
14 Version: 3.2
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 add_action('admin_init', array(self::$instance, 'check_existing'));
55 add_action('admin_init', array(self::$instance, 'check_version'));
56 add_action('init', array(self::$instance, 'load_i18n'));
57 add_filter('plugin_action_links', array(self::$instance, 'action_links'), 10, 2);
58 add_filter('plugin_row_meta', array(self::$instance, 'plugin_links'), 10, 2);
59 add_filter('admin_footer_text', array(self::$instance, 'footer_text'), 10, 1);
60
61 add_action('admin_bar_menu', 'theme_switcha_toolbar_add_menu', 1000);
62 add_action('admin_enqueue_scripts', 'theme_switcha_enqueue_resources_admin');
63 add_action('admin_print_scripts', 'theme_switcha_print_js_vars_admin');
64 add_action('admin_notices', 'theme_switcha_admin_notice');
65 add_action('admin_init', 'theme_switcha_register_settings');
66 add_action('admin_init', 'theme_switcha_reset_options');
67 add_action('admin_menu', 'theme_switcha_menu_pages');
68 add_action('admin_menu', 'theme_switcha_disable_widget');
69
70 add_action('wp_dashboard_setup', 'theme_switcha_dashboard_widget');
71 add_action('plugins_loaded', 'theme_switcha_add_filters');
72 add_action('init', 'theme_switcha_check_cookie');
73 add_filter('widget_text', 'do_shortcode', 10);
74
75 }
76
77 return self::$instance;
78 }
79
80 public static function options() {
81
82 $options = array(
83 'enable_plugin' => false,
84 'enable_admin' => false,
85 'allowed_users' => 'admin',
86 'cookie_expire' => 3600,
87 'passkey' => uniqid(mt_rand()),
88 'disable_widget' => false,
89 );
90
91 return apply_filters('theme_switcha_options', $options);
92 }
93
94 private function constants() {
95
96 if (!defined('THEME_SWITCHA_REQUIRE')) define('THEME_SWITCHA_REQUIRE', '4.6');
97 if (!defined('THEME_SWITCHA_VERSION')) define('THEME_SWITCHA_VERSION', '3.2');
98 if (!defined('THEME_SWITCHA_NAME')) define('THEME_SWITCHA_NAME', 'Theme Switcha');
99 if (!defined('THEME_SWITCHA_AUTHOR')) define('THEME_SWITCHA_AUTHOR', 'Jeff Starr');
100 if (!defined('THEME_SWITCHA_HOME')) define('THEME_SWITCHA_HOME', 'https://perishablepress.com/theme-switcha/');
101 if (!defined('THEME_SWITCHA_URL')) define('THEME_SWITCHA_URL', plugin_dir_url(__FILE__));
102 if (!defined('THEME_SWITCHA_DIR')) define('THEME_SWITCHA_DIR', plugin_dir_path(__FILE__));
103 if (!defined('THEME_SWITCHA_FILE')) define('THEME_SWITCHA_FILE', plugin_basename(__FILE__));
104 if (!defined('THEME_SWITCHA_SLUG')) define('THEME_SWITCHA_SLUG', basename(dirname(__FILE__)));
105
106 }
107
108 private function includes() {
109
110 require_once THEME_SWITCHA_DIR .'inc/plugin-core.php';
111 require_once THEME_SWITCHA_DIR .'inc/resources-enqueue.php';
112 require_once THEME_SWITCHA_DIR .'inc/settings-display.php';
113 require_once THEME_SWITCHA_DIR .'inc/settings-register.php';
114 require_once THEME_SWITCHA_DIR .'inc/settings-reset.php';
115
116 }
117
118 public function action_links($links, $file) {
119
120 if ($file == THEME_SWITCHA_FILE && current_user_can('manage_options')) {
121
122 $add_links = '<a href="'. admin_url('options-general.php?page=theme_switcha_settings') .'">'. esc_html__('Settings', 'theme-switcha') .'</a>';
123 array_unshift($links, $add_links);
124
125 }
126
127 return $links;
128 }
129
130 public function plugin_links($links, $file) {
131
132 if ($file == plugin_basename(__FILE__)) {
133
134 $home_href = 'https://perishablepress.com/theme-switcha/';
135 $home_title = esc_attr__('Plugin Homepage', 'theme-switcha');
136 $home_text = esc_html__('Homepage', 'theme-switcha');
137
138 $links[] = '<a target="_blank" rel="noopener noreferrer" href="'. $home_href .'" title="'. $home_title .'">'. $home_text .'</a>';
139
140 $rate_href = 'https://wordpress.org/support/plugin/'. THEME_SWITCHA_SLUG .'/reviews/?rate=5#new-post';
141 $rate_title = esc_html__('Click here to rate and review this plugin on WordPress.org', 'theme-switcha');
142 $rate_text = esc_html__('Rate this plugin', 'theme-switcha') .'&nbsp;&raquo;';
143
144 $links[] = '<a target="_blank" rel="noopener noreferrer" href="'. $rate_href .'" title="'. $rate_title .'">'. $rate_text .'</a>';
145
146 $pro_href = 'https://plugin-planet.com/theme-switcha-pro/?plugin';
147 $pro_title = esc_html__('Get Theme Switcha Pro!', 'theme-switcha');
148 $pro_text = esc_html__('Go&nbsp;Pro', 'theme-switcha');
149 $pro_style = 'padding:1px 5px;color:#eee;background:#333;border-radius:1px;';
150
151 // $links[] = '<a target="_blank" rel="noopener noreferrer" href="'. $pro_href .'" title="'. $pro_title .'" style="'. $pro_style .'">'. $pro_text .'</a>';
152
153 }
154 return $links;
155 }
156
157 function footer_text($text) {
158
159 $screen_id = theme_switcha_get_current_screen_id();
160
161 $ids = array('settings_page_theme_switcha_settings');
162
163 if ($screen_id && apply_filters('theme_switcha_admin_footer_text', in_array($screen_id, $ids))) {
164
165 $text = __('Like this plugin? Give it a', 'theme-switcha');
166
167 $text .= ' <a target="_blank" rel="noopener noreferrer" href="https://wordpress.org/support/plugin/theme-switcha/reviews/?rate=5#new-post">';
168
169 $text .= __('�
170
171
172
173
174 rating&nbsp;&raquo;', 'theme-switcha') .'</a>';
175
176 }
177
178 return $text;
179
180 }
181
182 public function check_existing() {
183
184 if (class_exists('Theme_Switcha_Pro')) {
185 if (is_plugin_active(THEME_SWITCHA_FILE)) {
186 deactivate_plugins(THEME_SWITCHA_FILE);
187
188 $msg = '<strong>'. esc_html__('Warning:', 'theme-switcha') .'</strong> ';
189 $msg .= esc_html__('Pro version of ', 'theme-switcha') . THEME_SWITCHA_NAME;
190 $msg .= esc_html__(' currently active. Free and Pro versions cannot be activated at the same time. ', 'theme-switcha');
191 $msg .= esc_html__('Please return to the', 'theme-switcha');
192 $msg .= ' <a href="'. admin_url() .'">'. esc_html__('WP Admin Area', 'theme-switcha') .'</a> ';
193 $msg .= esc_html__('and try again.', 'theme-switcha');
194
195 wp_die($msg);
196 }
197 }
198 }
199
200 public function check_version() {
201
202 $wp_version = get_bloginfo('version');
203
204 if (isset($_GET['activate']) && $_GET['activate'] == 'true') {
205 if (version_compare($wp_version, THEME_SWITCHA_REQUIRE, '<')) {
206 if (is_plugin_active(THEME_SWITCHA_FILE)) {
207 deactivate_plugins(THEME_SWITCHA_FILE);
208
209 $msg = '<strong>'. THEME_SWITCHA_NAME .'</strong> ';
210 $msg .= esc_html__('requires WordPress ', 'theme-switcha') . THEME_SWITCHA_REQUIRE;
211 $msg .= esc_html__(' or higher, and has been deactivated! ', 'theme-switcha');
212 $msg .= esc_html__('Please return to the', 'theme-switcha');
213 $msg .= ' <a href="'. admin_url() .'">'. esc_html__('WP Admin Area', 'theme-switcha') .'</a> ';
214 $msg .= esc_html__('to upgrade WordPress and try again.', 'theme-switcha');
215
216 wp_die($msg);
217 }
218 }
219 }
220 }
221
222 public function load_i18n() {
223 load_plugin_textdomain('theme-switcha', false, dirname(plugin_basename(__FILE__)) .'/languages/');
224 }
225
226 public function __clone() {
227 _doing_it_wrong(__FUNCTION__, esc_html__('Cheatin&rsquo; huh?', 'theme-switcha'), THEME_SWITCHA_VERSION);
228 }
229
230 public function __wakeup() {
231 _doing_it_wrong(__FUNCTION__, esc_html__('Cheatin&rsquo; huh?', 'theme-switcha'), THEME_SWITCHA_VERSION);
232 }
233
234 }
235 }
236
237 if (class_exists('Theme_Switcha')) {
238
239 $theme_switcha_options = get_option('theme_switcha_options', Theme_Switcha::options());
240 $theme_switcha_options = apply_filters('theme_switcha_get_options', $theme_switcha_options);
241
242 if (!function_exists('theme_switcha')) {
243
244 function theme_switcha() {
245
246 return Theme_Switcha::instance();
247 }
248 }
249
250 theme_switcha();
251
252 }
253