PluginProbe
Woody Code Snippets – Insert PHP, CSS, JS, and Header/Footer Scripts / 2.3.10
Woody Code Snippets – Insert PHP, CSS, JS, and Header/Footer Scripts v2.3.10
2.7.6 2.7.5 2.7.4 trunk 1.3 2.0.4 2.0.6 2.1.91 2.2.4 2.2.7 2.2.9 2.3.1 2.3.10 2.4.10 2.4.2 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.6.0 2.6.1 2.7.0 2.7.1 All 27 releases
← All changes | includes/class.plugin.php +248 -408 trunk2.3.10 View file →
@@ -1,408 +1,248 @@
1 -<?php
2 -/**
3 - * PHP snippets plugin base
4 - *
5 - * @package Woody_Code_Snippets
6 - */
7 -
8 -// Exit if accessed directly
9 -if ( ! defined( 'ABSPATH' ) ) {
10 - exit;
11 -}
12 -
13 -if ( ! class_exists( 'WINP_Plugin' ) ) {
14 -
15 - class WINP_Plugin {
16 -
17 - /**
18 - * Custom license provider (overrides parent's premium property)
19 - *
20 - * @var WINP_License
21 - */
22 - public $premium;
23 -
24 - /**
25 - * @var WINP_Plugin
26 - */
27 - private static $app;
28 -
29 - /**
30 - * Snippets custom post type instance.
31 - *
32 - * @var WINP_SnippetsType
33 - */
34 - private $snippets_type;
35 -
36 - /**
37 - * @throws Exception
38 - */
39 - public function __construct() {
40 - self::$app = $this;
41 -
42 - // Initialize custom license provider.
43 - require_once WINP_PLUGIN_DIR . '/includes/class.license.php';
44 - $this->premium = new WINP_License();
45 -
46 - require_once WINP_PLUGIN_DIR . '/includes/class.rest.php';
47 - new WINP_Rest();
48 -
49 - require_once WINP_PLUGIN_DIR . '/admin/pages/class.settings.php';
50 - require_once WINP_PLUGIN_DIR . '/admin/pages/class.new-item.php';
51 - require_once WINP_PLUGIN_DIR . '/admin/pages/class.snippet-library.php';
52 -
53 - WINP_Settings::get_instance();
54 - WINP_NewItem::get_instance();
55 - WINP_SnippetLibrary::get_instance();
56 -
57 - $this->load_global();
58 -
59 - if ( is_admin() || WINP_Helper::doing_rest_api() ) {
60 -
61 - if ( WINP_Helper::doing_ajax() ) {
62 - require WINP_PLUGIN_DIR . '/admin/ajax/ajax.php';
63 - require WINP_PLUGIN_DIR . '/admin/ajax/snippet-library.php';
64 - }
65 -
66 - $this->load_backend();
67 - }
68 - add_action(
69 - 'init',
70 - function () {
71 - if ( WINP_Plugin::app()->premium->is_active() ) {
72 - update_option( WINP_PLUGIN_NAMESPACE . '_logger_flag', 'yes' );
73 - }
74 - }
75 - );
76 -
77 - add_filter( WINP_PLUGIN_NAMESPACE . '_logger_data', [ $this, 'get_logger_data' ] );
78 - add_filter( 'themeisle_sdk_blackfriday_data', [ $this, 'add_black_friday_data' ] );
79 - }
80 -
81 - /**
82 - * Get plugin instance
83 - *
84 - * @return WINP_Plugin
85 - */
86 - public static function app() {
87 - return self::$app;
88 - }
89 -
90 - /**
91 - * Survey data.
92 - *
93 - * @return array<string, mixed>
94 - */
95 - public function get_survey_data() {
96 - $install_time = get_option( WINP_PLUGIN_NAMESPACE . '_install', time() );
97 - $days_since_install = round( ( time() - $install_time ) / DAY_IN_SECONDS );
98 - $total_snippets = wp_count_posts( WINP_SNIPPETS_POST_TYPE );
99 - $total_snippets = isset( $total_snippets->publish ) ? $total_snippets->publish : 0;
100 -
101 - $data = [
102 - 'environmentId' => 'cmiooosih4vm0ad01eihjub64',
103 - 'attributes' => [
104 - 'free_version' => WINP_PLUGIN_VERSION,
105 - 'pro_version' => defined( 'WASP_PLUGIN_VERSION' ) ? WASP_PLUGIN_VERSION : '',
106 - 'install_days_number' => $days_since_install,
107 - 'license_status' => self::app()->premium->is_active(),
108 - 'total_snippets' => $total_snippets,
109 - ],
110 - ];
111 -
112 - if ( self::app()->premium->is_active() ) {
113 - $data['attributes']['license_key'] = apply_filters( 'themeisle_sdk_secret_masking', self::app()->premium->get_key() );
114 - }
115 -
116 - return $data;
117 - }
118 -
119 - /**
120 - * @return bool
121 - */
122 - public function current_user_car() {
123 - return current_user_can( 'manage_options' );
124 - }
125 -
126 - /**
127 - * Get Execute_Snippet object
128 - *
129 - * @return WINP_Execute_Snippet
130 - */
131 - public function get_execute_object() {
132 - require_once WINP_PLUGIN_DIR . '/includes/class.execute.snippet.php';
133 -
134 - return WINP_Execute_Snippet::app();
135 - }
136 -
137 - /**
138 - * Get WINP_Api object
139 - *
140 - * @return WINP_Api
141 - */
142 - public function get_api_object() {
143 - require_once WINP_PLUGIN_DIR . '/admin/includes/class.request.php';
144 - require_once WINP_PLUGIN_DIR . '/admin/includes/class.api.php';
145 -
146 - return new WINP_Api();
147 - }
148 -
149 - /**
150 - * Get WINP_Common_Snippet object
151 - *
152 - * @return WINP_Common_Snippet
153 - */
154 - public function get_common_object() {
155 - require_once WINP_PLUGIN_DIR . '/admin/includes/class.common.snippet.php';
156 -
157 - return new WINP_Common_Snippet();
158 - }
159 -
160 - /**
161 - * Plugin activation hook.
162 - * Creates demo snippets on first activation and sets up capabilities.
163 - *
164 - * @return void
165 - */
166 - public function activation_hook() {
167 - // Add custom capabilities to administrator role.
168 - $this->snippets_type->add_capabilities();
169 -
170 - // Create demo snippets with examples of use.
171 - if ( ! get_option( 'wbcr_inp_demo_snippets_created' ) ) {
172 - WINP_Helper::create_demo_snippets();
173 - }
174 -
175 - WINP_Helper::flush_page_cache();
176 - }
177 -
178 - /**
179 - * Plugin deactivation hook.
180 - * Removes custom capabilities.
181 - *
182 - * @return void
183 - */
184 - public function deactivation_hook() {
185 - // Remove custom capabilities from administrator role.
186 - $this->snippets_type->remove_capabilities();
187 - }
188 -
189 - /**
190 - * Register custom post types and taxonomies.
191 - *
192 - * @throws \Exception Exception.
193 - * @since 2.2.0
194 - */
195 - private function register_types() {
196 - require_once WINP_PLUGIN_DIR . '/admin/types/snippets-post-types.php';
197 - $this->snippets_type = new WINP_SnippetsType();
198 -
199 - require_once WINP_PLUGIN_DIR . '/admin/types/snippets-taxonomy.php';
200 - new WINP_SnippetsTaxonomy();
201 - }
202 -
203 - /**
204 - * Register shortcodes.
205 - *
206 - * @since 2.2.0
207 - */
208 - private function register_shortcodes() {
209 - $action = WINP_HTTP::get( 'action', '' );
210 - if ( ! ( 'edit' == $action && is_admin() ) ) {
211 - require_once WINP_PLUGIN_DIR . '/includes/shortcodes/shortcodes.php';
212 - require_once WINP_PLUGIN_DIR . '/includes/shortcodes/shortcode-php.php';
213 - require_once WINP_PLUGIN_DIR . '/includes/shortcodes/shortcode-text.php';
214 - require_once WINP_PLUGIN_DIR . '/includes/shortcodes/shortcode-universal.php';
215 - require_once WINP_PLUGIN_DIR . '/includes/shortcodes/shortcode-css.php';
216 - require_once WINP_PLUGIN_DIR . '/includes/shortcodes/shortcode-js.php';
217 - require_once WINP_PLUGIN_DIR . '/includes/shortcodes/shortcode-html.php';
218 - require_once WINP_PLUGIN_DIR . '/includes/shortcodes/shortcode-ad.php';
219 -
220 - WINP_Helper::register_shortcode( 'WINP_SnippetShortcodePhp', $this );
221 - WINP_Helper::register_shortcode( 'WINP_SnippetShortcodeText', $this );
222 - WINP_Helper::register_shortcode( 'WINP_SnippetShortcodeUniversal', $this );
223 - WINP_Helper::register_shortcode( 'WINP_SnippetShortcodeCss', $this );
224 - WINP_Helper::register_shortcode( 'WINP_SnippetShortcodeJs', $this );
225 - WINP_Helper::register_shortcode( 'WINP_SnippetShortcodeHtml', $this );
226 - WINP_Helper::register_shortcode( 'WINP_SnippetShortcodeAdvert', $this );
227 - }
228 - }
229 -
230 - /**
231 - * Initialization and require files for backend and frontend.
232 - *
233 - * @since 2.2.0
234 - */
235 - private function load_global() {
236 - require_once WINP_PLUGIN_DIR . '/admin/includes/class.gutenberg.snippet.php';
237 - require_once WINP_PLUGIN_DIR . '/includes/class.admin-bar.php';
238 -
239 - new WINP_Gutenberg_Snippet();
240 - WINP_Admin_Bar::instance();
241 -
242 - $this->get_execute_object()->register_hooks();
243 - $this->register_shortcodes();
244 - }
245 -
246 - /**
247 - * Initialization and require files for backend.
248 - *
249 - * @throws \Exception
250 - * @since 2.2.0
251 - */
252 - private function load_backend() {
253 - require_once WINP_PLUGIN_DIR . '/admin/includes/class.snippets.viewtable.php';
254 - require_once WINP_PLUGIN_DIR . '/admin/includes/class.filter.snippet.php';
255 - require_once WINP_PLUGIN_DIR . '/admin/includes/class.actions.snippet.php';
256 - require_once WINP_PLUGIN_DIR . '/admin/includes/class.notices.php';
257 - require_once WINP_PLUGIN_DIR . '/admin/includes/class.admin.notices.php';
258 - require_once WINP_PLUGIN_DIR . '/admin/includes/class.request.php';
259 - require_once WINP_PLUGIN_DIR . '/admin/boot.php';
260 -
261 - $this->get_common_object()->register_hooks();
262 - $this->register_types();
263 -
264 - new WINP_Filter_List();
265 - new WINP_Actions_Snippet();
266 - WINP_Notices::instance();
267 - new WINP_Admin_Notices();
268 -
269 - if ( ! defined( 'E2E_TESTING' ) ) {
270 - add_filter(
271 - 'themeisle-sdk/survey/' . WINP_PLUGIN_SLUG,
272 - function ( $data, $page_slug ) {
273 - if ( empty( $page_slug ) ) {
274 - return $data;
275 - }
276 -
277 - return $this->get_survey_data();
278 - },
279 - 10,
280 - 2
281 - );
282 - }
283 - }
284 -
285 - /**
286 - * Метод проверяет активацию премиум плагина и наличие действующего лицензионного ключа
287 - *
288 - * @return bool
289 - */
290 - public function is_premium() {
291 - return $this->premium->is_active();
292 - }
293 -
294 - /**
295 - * Logger data.
296 - *
297 - * @return array<string, mixed>
298 - */
299 - public function get_logger_data() {
300 - $settings = WINP_Settings::get_instance()->get_settings();
301 -
302 - // Each settings has a lot of keys, we only want name and value items. So map them.
303 - $settings = array_map(
304 - function ( $setting ) {
305 - return [
306 - 'name' => isset( $setting['name'] ) ? $setting['name'] : '',
307 - 'value' => isset( $setting['value'] ) ? $setting['value'] : '',
308 - ];
309 - },
310 - $settings
311 - );
312 -
313 - $total_snippets = wp_count_posts( WINP_SNIPPETS_POST_TYPE );
314 - $total_snippets = isset( $total_snippets->publish ) ? $total_snippets->publish : 0;
315 -
316 - // Count snippets by type.
317 - $snippet_types = [ 'php', 'css', 'js', 'text', 'html', 'advert', 'universal' ];
318 - $types_count = [];
319 -
320 - foreach ( $snippet_types as $type ) {
321 - $count = get_posts(
322 - [
323 - 'post_type' => WINP_SNIPPETS_POST_TYPE,
324 - 'post_status' => 'publish',
325 - 'meta_key' => 'wbcr_inp_snippet_type',
326 - 'meta_value' => $type,
327 - 'posts_per_page' => -1,
328 - 'fields' => 'ids',
329 - ]
330 - );
331 -
332 - if ( ! empty( $count ) ) {
333 - $types_count[ $type ] = count( $count );
334 - }
335 - }
336 -
337 - return [
338 - 'settings' => $settings,
339 - 'stats' => [
340 - 'total_snippets' => $total_snippets,
341 - 'types' => $types_count,
342 - ],
343 - ];
344 - }
345 -
346 - /**
347 - * Set the black friday data.
348 - *
349 - * @param array<string, mixed> $configs The configuration array for the loaded products.
350 - *
351 - * @return array<string, mixed> The configurations.
352 - */
353 - public function add_black_friday_data( $configs ) {
354 - $config = $configs['default'];
355 -
356 - $message = __( 'Conditional logic, revision history, import/export. Manage your custom code properly. Exclusively for existing Woody users.', 'insert-php' );
357 - $cta_label = __( 'Get Woody Pro', 'insert-php' );
358 -
359 - $plan = apply_filters( 'product_woody_license_plan', 0 );
360 - $status = apply_filters( 'product_woody_license_status', 'invalid' );
361 - $license = apply_filters( 'product_woody_license_key', false );
362 - $pro_product_slug = defined( 'WASP_PLUGIN_FILE' ) ? basename( dirname( WASP_PLUGIN_FILE ) ) : '';
363 -
364 - $is_pro = 'valid' === $status;
365 - $is_expired = 'expired' === $status || 'active-expired' === $status;
366 -
367 - if ( $is_pro ) {
368 - // translators: %s is the discount percentage.
369 - $config['plugin_meta_message'] = sprintf( __( 'Black Friday Sale - up to %s off', 'insert-php' ), '30%' );
370 - // translators: %1$s - discount, %2$s - discount.
371 - $message = sprintf( __( 'Upgrade your Woody Pro plan: %1$s off this week. Already on the plan you need? Renew early and save up to %2$s.', 'insert-php' ), '30%', '20%' );
372 - $cta_label = __( 'See your options', 'insert-php' );
373 - } elseif ( $is_expired ) {
374 - // translators: %s is the discount percentage.
375 - $config['plugin_meta_message'] = sprintf( __( 'Black Friday Sale - %s off', 'insert-php' ), '50%' );
376 - $message = __( 'Your Woody Pro features are still here, just locked. Renew at a reduced rate this week.', 'insert-php' );
377 - $cta_label = __( 'Reactivate now', 'insert-php' );
378 - } else {
379 - // translators: %s - discount.
380 - $config['title'] = sprintf( __( 'Woody Pro: %s off this week', 'insert-php' ), '60%' );
381 - // translators: %s is the discount percentage.
382 - $config['plugin_meta_message'] = sprintf( __( 'Black Friday Sale - %s off', 'insert-php' ), '60%' );
383 - }
384 -
385 - $url_params = [
386 - 'utm_term' => $is_pro ? 'plan-' . $plan : 'free',
387 - 'lkey' => ! empty( $license ) ? $license : false,
388 - 'expired' => $is_expired ? '1' : false,
389 - ];
390 -
391 - if ( ( $is_pro || $is_expired ) && ! empty( $pro_product_slug ) ) {
392 - $config['plugin_meta_targets'] = [ $pro_product_slug ];
393 - }
394 -
395 - $config['cta_label'] = $cta_label;
396 - $config['message'] = $message;
397 -
398 - $config['sale_url'] = add_query_arg(
399 - $url_params,
400 - tsdk_translate_link( tsdk_utmify( 'https://themeisle.link/woody-bf', 'bfcm', 'woody' ) )
401 - );
402 -
403 - $configs[ WINP_PLUGIN_SLUG ] = $config;
404 -
405 - return $configs;
406 - }
407 - }
408 -}
1 +<?php
2 +/**
3 + * PHP snippets plugin base
4 + *
5 + * @author Webcraftic <wordpress.webraftic@gmail.com>
6 + * @copyright (c) 19.02.2018, Webcraftic
7 + * @version 1.0
8 + */
9 +
10 +// Exit if accessed directly
11 +if ( ! defined( 'ABSPATH' ) ) {
12 + exit;
13 +}
14 +
15 +if ( ! class_exists( 'WINP_Plugin' ) ) {
16 +
17 + class WINP_Plugin extends Wbcr_Factory432_Plugin {
18 +
19 + /**
20 + * @var Wbcr_Factory432_Plugin
21 + */
22 + private static $app;
23 +
24 + /**
25 + * @param string $plugin_path
26 + * @param array $data
27 + *
28 + * @throws Exception
29 + */
30 + public function __construct( $plugin_path, $data ) {
31 + parent::__construct( $plugin_path, $data );
32 +
33 + self::$app = $this;
34 +
35 + $this->load_global();
36 +
37 + if ( is_admin() ) {
38 + $this->initActivation();
39 +
40 + if ( WINP_Helper::doing_ajax() ) {
41 + require( WINP_PLUGIN_DIR . '/admin/ajax/ajax.php' );
42 + require( WINP_PLUGIN_DIR . '/admin/ajax/check-license.php' );
43 + require( WINP_PLUGIN_DIR . '/admin/ajax/snippet-library.php' );
44 + }
45 +
46 + $this->load_backend();
47 + }
48 + }
49 +
50 + /**
51 + * @return WINP_Plugin
52 + */
53 + public static function app() {
54 + return self::$app;
55 + }
56 +
57 + /**
58 + * @return bool
59 + */
60 + public function currentUserCan() {
61 + return current_user_can( 'manage_options' );
62 + }
63 +
64 + /**
65 + * Get Execute_Snippet object
66 + *
67 + * @return WINP_Execute_Snippet
68 + */
69 + public function getExecuteObject() {
70 + require_once( WINP_PLUGIN_DIR . '/includes/class.execute.snippet.php' );
71 +
72 + return new WINP_Execute_Snippet();
73 + }
74 +
75 + /**
76 + * Get WINP_Api object
77 + *
78 + * @return WINP_Api
79 + */
80 + public function get_api_object() {
81 + require_once( WINP_PLUGIN_DIR . '/admin/includes/class.api.php' );
82 +
83 + return new WINP_Api();
84 + }
85 +
86 + /**
87 + * Get WINP_Common_Snippet object
88 + *
89 + * @return WINP_Common_Snippet
90 + */
91 + public function get_common_object() {
92 + require_once( WINP_PLUGIN_DIR . '/admin/includes/class.common.snippet.php' );
93 +
94 + return new WINP_Common_Snippet();
95 + }
96 +
97 + /**
98 + * @throws \Exception
99 + * @since 2.2.0
100 + * @author Alexander Kovalev <alex.kovalevv@gmail.com>
101 + */
102 + /*public function plugins_loaded() {
103 + $this->register_pages();
104 + }*/
105 +
106 + protected function initActivation() {
107 + include_once( WINP_PLUGIN_DIR . '/admin/activation.php' );
108 + $this->registerActivation( 'WINP_Activation' );
109 + }
110 +
111 + /**
112 + * @throws \Exception
113 + * @since 2.2.0
114 + * @author Alexander Kovalev <alex.kovalevv@gmail.com>
115 + */
116 + public function register_pages() {
117 + require_once( WINP_PLUGIN_DIR . '/admin/pages/page.php' );
118 +
119 + $this->registerPage( 'WINP_NewItemPage', WINP_PLUGIN_DIR . '/admin/pages/new-item.php' );
120 + $this->registerPage( 'WINP_SettingsPage', WINP_PLUGIN_DIR . '/admin/pages/settings.php' );
121 + $this->registerPage( 'WINP_SnippetLibraryPage', WINP_PLUGIN_DIR . '/admin/pages/snippet-library.php' );
122 + $this->registerPage( 'WINP_License_Page', WINP_PLUGIN_DIR . '/admin/pages/license.php' );
123 + $this->registerPage( 'WINP_AboutPage', WINP_PLUGIN_DIR . '/admin/pages/about.php' );
124 + }
125 +
126 + /**
127 + * @throws \Exception
128 + * @since 2.2.0
129 + * @author Alexander Kovalev <alex.kovalevv@gmail.com>
130 + */
131 + public function register_depence_pages() {
132 + require_once( WINP_PLUGIN_DIR . '/admin/pages/page.php' );
133 +
134 + if ( ! ( defined( 'WASP_PLUGIN_ACTIVE' ) && WASP_PLUGIN_ACTIVE ) ) {
135 + $this->registerPage( 'WINP_ImportPage', WINP_PLUGIN_DIR . '/admin/pages/import.php' );
136 + }
137 + }
138 +
139 + /**
140 + * @throws \Exception
141 + * @since 2.2.0
142 + * @author Alexander Kovalev <alex.kovalevv@gmail.com>
143 + */
144 + private function register_types() {
145 + require_once( WINP_PLUGIN_DIR . '/admin/types/snippets-post-types.php' );
146 + Wbcr_FactoryTypes410::register( 'WINP_SnippetsType', $this );
147 +
148 + require_once( WINP_PLUGIN_DIR . '/admin/types/snippets-taxonomy.php' );
149 + Wbcr_FactoryTaxonomies330::register( 'WINP_SnippetsTaxonomy', $this );
150 + }
151 +
152 + /**
153 + * @author Alexander Kovalev <alex.kovalevv@gmail.com>
154 + * @since 2.2.0
155 + */
156 + private function register_shortcodes() {
157 + $action = WINP_Plugin::app()->request->get( 'action', '' );
158 + if ( ! ( 'edit' == $action && is_admin() ) ) {
159 + if ( WINP_Plugin::app()->getOption( 'support_old_shortcodes' ) ) {
160 + // todo: Deprecated
161 + require_once( WINP_PLUGIN_DIR . '/includes/shortcodes/shortcode-insert-php.php' );
162 + }
163 +
164 + require_once( WINP_PLUGIN_DIR . '/includes/shortcodes/shortcodes.php' );
165 + require_once( WINP_PLUGIN_DIR . '/includes/shortcodes/shortcode-php.php' );
166 + require_once( WINP_PLUGIN_DIR . '/includes/shortcodes/shortcode-text.php' );
167 + require_once( WINP_PLUGIN_DIR . '/includes/shortcodes/shortcode-universal.php' );
168 + require_once( WINP_PLUGIN_DIR . '/includes/shortcodes/shortcode-css.php' );
169 + require_once( WINP_PLUGIN_DIR . '/includes/shortcodes/shortcode-js.php' );
170 + require_once( WINP_PLUGIN_DIR . '/includes/shortcodes/shortcode-html.php' );
171 + require_once( WINP_PLUGIN_DIR . '/includes/shortcodes/shortcode-ad.php' );
172 +
173 + WINP_Helper::register_shortcode( 'WINP_SnippetShortcodePhp', $this );
174 + WINP_Helper::register_shortcode( 'WINP_SnippetShortcodeText', $this );
175 + WINP_Helper::register_shortcode( 'WINP_SnippetShortcodeUniversal', $this );
176 + WINP_Helper::register_shortcode( 'WINP_SnippetShortcodeCss', $this );
177 + WINP_Helper::register_shortcode( 'WINP_SnippetShortcodeJs', $this );
178 + WINP_Helper::register_shortcode( 'WINP_SnippetShortcodeHtml', $this );
179 + WINP_Helper::register_shortcode( 'WINP_SnippetShortcodeAdvert', $this );
180 + }
181 + }
182 +
183 + /**
184 + * Initialization and require files for backend and frontend.
185 + *
186 + * @author Alexander Kovalev <alex.kovalevv@gmail.com>
187 + * @since 2.2.0
188 + */
189 + private function load_global() {
190 + require_once( WINP_PLUGIN_DIR . '/admin/includes/class.gutenberg.snippet.php' );
191 + new WINP_Gutenberg_Snippet();
192 +
193 + $this->getExecuteObject()->registerHooks();
194 + $this->register_shortcodes();
195 +
196 + /**
197 + * Enables/Disable safe mode, in which the php code will not be executed.
198 + */
199 + add_action( 'plugins_loaded', function () {
200 + if ( isset( $_GET['wbcr-php-snippets-safe-mode'] ) ) {
201 + WINP_Helper::enable_safe_mode();
202 + wp_safe_redirect( remove_query_arg( [ 'wbcr-php-snippets-safe-mode' ] ) );
203 + die();
204 + }
205 +
206 + if ( isset( $_GET['wbcr-php-snippets-disable-safe-mode'] ) ) {
207 + WINP_Helper::disable_safe_mode();
208 + wp_safe_redirect( remove_query_arg( [ 'wbcr-php-snippets-disable-safe-mode' ] ) );
209 + die();
210 + }
211 + }, - 1 );
212 + }
213 +
214 + /**
215 + * Initialization and require files for backend.
216 + *
217 + * @throws \Exception
218 + * @since 2.2.0
219 + * @author Alexander Kovalev <alex.kovalevv@gmail.com>
220 + */
221 + private function load_backend() {
222 + require_once( WINP_PLUGIN_DIR . '/admin/includes/class.snippets.viewtable.php' );
223 + require_once( WINP_PLUGIN_DIR . '/admin/includes/class.filter.snippet.php' );
224 + require_once( WINP_PLUGIN_DIR . '/admin/includes/class.actions.snippet.php' );
225 + require_once( WINP_PLUGIN_DIR . '/admin/includes/class.import.snippet.php' );
226 + require_once( WINP_PLUGIN_DIR . '/admin/includes/class.notices.php' );
227 + require_once( WINP_PLUGIN_DIR . '/admin/includes/class.request.php' );
228 + require_once( WINP_PLUGIN_DIR . '/admin/metaboxes/metabox.php' );
229 + require_once( WINP_PLUGIN_DIR . '/admin/boot.php' );
230 +
231 + $this->get_common_object()->registerHooks();
232 +
233 + $this->register_types();
234 +
235 + new WINP_Filter_List();
236 + new WINP_Export_Snippet();
237 + new WINP_Import_Snippet();
238 + new WINP_WarningNotices();
239 +
240 + # Required for i18n to be loaded properly
241 + add_action( 'plugins_loaded', [ $this, 'register_pages' ] );
242 +
243 + # Required for compatibility with the premium plugin.
244 + # We set the priority to 30 to wait for the premium plugin to load.
245 + add_action( 'plugins_loaded', [ $this, 'register_depence_pages' ], 30 );
246 + }
247 + }
248 +}