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

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