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

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