PluginProbe
Woody Code Snippets – Insert PHP, CSS, JS, and Header/Footer Scripts / 2.7.3
Woody Code Snippets – Insert PHP, CSS, JS, and Header/Footer Scripts v2.7.3
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
insert-php / insert_php.php

insert_php.php in Woody Code Snippets – Insert PHP, CSS, JS, and Header/Footer Scripts 2.7.3, at insert_php.php

315 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: Woody Code Snippets
4 * Plugin URI: https://woodysnippet.com/
5 * Description: Executes PHP code, uses conditional logic to insert ads, text, media content and external service's code. Ensures no content duplication.
6 * Author: Themeisle
7 * Version: 2.7.3
8 * WordPress Available: yes
9 * Requires License: no
10 * Text Domain: insert-php
11 * Domain Path: /languages/
12 * Author URI: https://themeisle.com
13 *
14 * @package Woody_Code_Snippets
15 */
16
17 // Exit if accessed directly.
18 if ( ! defined( 'ABSPATH' ) ) {
19 exit;
20 }
21
22 if ( version_compare( PHP_VERSION, '7.4', '<' ) ) {
23 add_action(
24 'admin_notices',
25 function () {
26 ?>
27 <div class="notice notice-error">
28 <p><?php esc_html_e( 'Woody Code Snippets requires PHP 7.4 or higher. Please upgrade your PHP version.', 'insert-php' ); ?></p>
29 </div>
30 <?php
31 }
32 );
33
34 return;
35 }
36
37 global $wbcr_inp_safe_mode;
38
39 $wbcr_inp_safe_mode = false;
40
41 // Set the constant that the plugin is activated.
42 define( 'WINP_PLUGIN_ACTIVE', true );
43
44 define( 'WINP_PLUGIN_VERSION', '2.7.3' );
45
46 // Root directory of the plugin.
47 define( 'WINP_PLUGIN_DIR', __DIR__ );
48
49 define( 'WINP_PLUGIN_FILE', __FILE__ );
50
51 // Absolute url of the root directory of the plugin.
52 define( 'WINP_PLUGIN_URL', plugins_url( '', __FILE__ ) );
53
54 // Relative url of the plugin.
55 define( 'WINP_PLUGIN_BASE', plugin_basename( __FILE__ ) );
56
57 // Plugin slug.
58 define( 'WINP_PLUGIN_SLUG', basename( dirname( WINP_PLUGIN_FILE ) ) );
59
60 define( 'WINP_PLUGIN_NAMESPACE', str_replace( '-', '_', strtolower( trim( WINP_PLUGIN_SLUG ) ) ) );
61
62 // The type of posts used for snippets types.
63 define( 'WINP_SNIPPETS_POST_TYPE', 'wbcr-snippets' );
64
65 // The taxonomy used for snippets types.
66 define( 'WINP_SNIPPETS_TAXONOMY', 'wbcr-snippet-tags' );
67
68 // The snippets types.
69 define( 'WINP_SNIPPET_TYPE_PHP', 'php' );
70 define( 'WINP_SNIPPET_TYPE_TEXT', 'text' );
71 define( 'WINP_SNIPPET_TYPE_UNIVERSAL', 'universal' );
72 define( 'WINP_SNIPPET_TYPE_CSS', 'css' );
73 define( 'WINP_SNIPPET_TYPE_JS', 'js' );
74 define( 'WINP_SNIPPET_TYPE_HTML', 'html' );
75 define( 'WINP_SNIPPET_TYPE_AD', 'advert' );
76
77 // We need to update these.
78 define( 'WINP_UPGRADE', 'https://woodysnippet.com/upgrade' );
79 define( 'WINP_DOCS', 'https://docs.themeisle.com/category/2429-woody-installation-and-setup' );
80 define( 'WINP_ORG_SUPPORT', 'https://wordpress.org/support/plugin/insert-php/' );
81 define( 'WINP_SUPPORT', 'https://themeisle.com/contact/' );
82
83 // Load text domain for translations.
84 add_action(
85 'plugins_loaded',
86 function () {
87 load_plugin_textdomain( 'insert-php', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
88 }
89 );
90
91 // START: Related to premium version compatibility check for below 1.3.
92 add_action(
93 'plugins_loaded',
94 function () {
95 $premium_plugin_file = 'woody-ad-snippets-premium/woody-ad-snippets-premium.php';
96 $premium_plugin_path = WP_PLUGIN_DIR . '/' . $premium_plugin_file;
97
98 if ( ! file_exists( $premium_plugin_path ) ) {
99 return;
100 }
101
102 if ( ! function_exists( 'is_plugin_active' ) ) {
103 require_once ABSPATH . 'wp-admin/includes/plugin.php';
104 }
105
106 if ( ! is_plugin_active( $premium_plugin_file ) ) {
107 return;
108 }
109
110 if ( ! function_exists( 'get_plugin_data' ) ) {
111 require_once ABSPATH . 'wp-admin/includes/plugin.php';
112 }
113 $premium_data = get_plugin_data( $premium_plugin_path );
114
115 if ( version_compare( $premium_data['Version'], '1.3.0', '<' ) ) {
116 deactivate_plugins( $premium_plugin_file );
117 set_transient( 'winp_premium_version_incompatible', true, WEEK_IN_SECONDS );
118 }
119 },
120 5
121 );
122
123 add_action(
124 'admin_init',
125 function () {
126 if ( isset( $_GET['winp_dismiss_premium_notice'] ) && check_admin_referer( 'winp_dismiss_premium_notice' ) ) {
127 delete_transient( 'winp_premium_version_incompatible' );
128 wp_safe_redirect( remove_query_arg( 'winp_dismiss_premium_notice' ) );
129 exit;
130 }
131 }
132 );
133
134 add_action(
135 'admin_notices',
136 function () {
137 if ( get_transient( 'winp_premium_version_incompatible' ) ) {
138 $dismiss_url = wp_nonce_url(
139 add_query_arg( 'winp_dismiss_premium_notice', '1' ),
140 'winp_dismiss_premium_notice'
141 );
142 ?>
143 <div class="notice notice-error">
144 <p>
145 <strong><?php esc_html_e( 'Woody Code Snippets Premium has been deactivated.', 'insert-php' ); ?></strong>
146 </p>
147 <p>
148 <?php
149 printf(
150 // translators: %s Premium version number.
151 esc_html__( 'The installed premium version is not compatible with the current version of Woody Code Snippets. Please update the premium plugin to version %s or higher.', 'insert-php' ),
152 '<strong>1.3.0</strong>'
153 );
154 ?>
155 </p>
156 <p>
157 <a href="<?php echo esc_url( $dismiss_url ); ?>" class="button button-secondary">
158 <?php esc_html_e( 'Dismiss this notice', 'insert-php' ); ?>
159 </a>
160 </p>
161 </div>
162 <?php
163 }
164 }
165 );
166 // END: Related to premium version compatibility check for below 1.3.
167
168 require_once WINP_PLUGIN_DIR . '/includes/class.insertion.locations.php';
169 require_once WINP_PLUGIN_DIR . '/includes/class.http.php';
170 require_once WINP_PLUGIN_DIR . '/includes/class.helpers.php';
171 require_once WINP_PLUGIN_DIR . '/includes/class.plugin.php';
172
173 /**
174 * Adds a hint and button to the fatal error message.
175 *
176 * Since WordPress 5.2, we have access to a special mode for catching PHP errors.
177 * If a user makes a syntax error while editing a snippet, instead of a white screen
178 * (if PHP errors are disabled on the server), they will see a message from WordPress
179 * generated by the WP_Fatal_Error_Handler class.
180 *
181 * We decided to add a button to this message to switch to safe mode.
182 */
183 add_filter(
184 'wp_php_error_message',
185 function ( $message ) {
186 $safe_mode_url = admin_url( 'edit.php?post_type=' . WINP_SNIPPETS_POST_TYPE . '&wbcr-php-snippets-safe-mode' );
187 $safe_mode_button = '<div style="margin:20px 0;padding:20px; background:#ffe8e8;">' . __( 'If you see this message after saving the snippet to the Woody Code Snippets plugin, please enable safe mode in the Woody plugin. Safe mode will allow you to continue working in the admin panel of your site and change the snippet in which you made a php error.', 'insert-php' ) . '</div>';
188 $safe_mode_button .= '<a href="' . $safe_mode_url . '" class="button">' . __( 'Enable Safe Mode', 'insert-php' ) . '</a>';
189
190 return $message . $safe_mode_button;
191 }
192 );
193
194 /**
195 * Enables/Disable safe mode, in which the php code will not be executed.
196 */
197 add_action(
198 'plugins_loaded',
199 function () {
200 if ( isset( $_GET['wbcr-php-snippets-safe-mode'] ) ) {
201 WINP_Helper::enable_safe_mode();
202 wp_safe_redirect( esc_url( 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( esc_url( remove_query_arg( [ 'wbcr-php-snippets-disable-safe-mode' ] ) ) );
209 die();
210 }
211 },
212 - 1
213 );
214
215 /**
216 * Register product to SDK
217 *
218 * @param array<string> $products Registered products.
219 * @return array<string>
220 */
221 function winp_sdk_register_products( $products ) {
222 $products[] = WINP_PLUGIN_FILE;
223
224 return $products;
225 }
226
227 /**
228 * About page metadata
229 *
230 * @return array<string, mixed>
231 */
232 function winp_sdk_about_page() {
233 return [
234 'location' => 'edit.php?post_type=wbcr-snippets',
235 'logo' => WINP_PLUGIN_URL . '/admin/assets/img/icon-256x256.png',
236 'review_link' => false,
237 'has_upgrade_menu' => false,
238 ];
239 }
240
241 /**
242 * Register compatibility using SDK.
243 *
244 * @param array<string, array<string, string>> $compatibilities All compatibilities.
245 *
246 * @return array<string, array<string, string>> Registered compatibility.
247 */
248 function winp_sdk_register_compatibility( $compatibilities ) {
249 $compatibilities['WoodyPro'] = [
250 'basefile' => defined( 'WASP_PLUGIN_FILE' ) ? WASP_PLUGIN_FILE : '',
251 'required' => '1.3.0',
252 ];
253
254 return $compatibilities;
255 }
256
257 add_filter( 'themeisle_sdk_products', 'winp_sdk_register_products' );
258 add_filter( WINP_PLUGIN_NAMESPACE . '_about_us_metadata', 'winp_sdk_about_page' );
259 add_filter( 'themeisle_sdk_compatibilities/' . basename( WINP_PLUGIN_DIR ), 'winp_sdk_register_compatibility' );
260
261 // Register activation/deactivation hooks.
262 register_activation_hook(
263 WINP_PLUGIN_FILE,
264 function () {
265 global $winp_snippets_locations;
266 if ( ! isset( $winp_snippets_locations ) ) {
267 $winp_snippets_locations = new WINP_Insertion_Locations();
268 }
269
270 // Instantiate plugin for activation.
271 $plugin = new WINP_Plugin();
272 $plugin->activation_hook();
273 }
274 );
275
276 register_deactivation_hook(
277 WINP_PLUGIN_FILE,
278 function () {
279 global $winp_snippets_locations;
280 if ( ! isset( $winp_snippets_locations ) ) {
281 $winp_snippets_locations = new WINP_Insertion_Locations();
282 }
283
284 // Instantiate plugin for deactivation.
285 $plugin = new WINP_Plugin();
286 $plugin->deactivation_hook();
287 }
288 );
289
290 // Initialize on 'init' hook with priority 0 to avoid early translation loading (WP 6.7+)
291 add_action(
292 'init',
293 function () {
294 global $winp_snippets_locations;
295 $winp_snippets_locations = new WINP_Insertion_Locations();
296
297 try {
298 require_once WINP_PLUGIN_DIR . '/vendor/autoload.php';
299 new WINP_Plugin();
300 } catch ( Exception $exception ) {
301 // Plugin wasn't initialized due to an error
302 define( 'WINP_PLUGIN_THROW_ERROR', true );
303
304 $wbcr_plugin_error_func = function () use ( $exception ) {
305 $error = sprintf( 'The %s plugin has stopped. <b>Error:</b> %s Code: %s', 'Woody Ad Snippets', $exception->getMessage(), $exception->getCode() );
306 echo '<div class="notice notice-error"><p>' . $error . '</p></div>';
307 };
308
309 add_action( 'admin_notices', $wbcr_plugin_error_func );
310 add_action( 'network_admin_notices', $wbcr_plugin_error_func );
311 }
312 },
313 0
314 );
315