PluginProbe
Woody Code Snippets – Insert PHP, CSS, JS, and Header/Footer Scripts / 2.7.1
Woody Code Snippets – Insert PHP, CSS, JS, and Header/Footer Scripts v2.7.1
2.7.7 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 All 28 releases
← All changes | insert_php.php +269 -186 2.4.42.7.1 View file →
@@ -1,167 +1,37 @@
1 1 <?php
2 2 /**
3 - * Plugin Name: Woody code snippets (PHP snippets | Insert PHP)
3 + * Plugin Name: Woody Code Snippets
4 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: Creative Motion, Will Bontrager Software, LLC <will@willmaster.com>
7 - * Version: 2.4.4
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.1
8 + * WordPress Available: yes
9 + * Requires License: no
8 10 * Text Domain: insert-php
9 11 * Domain Path: /languages/
10 - * Author URI: http://cm-wp.com
11 - */
12 -
13 -/**
14 - * Developers who contributions in the development plugin:
12 + * Author URI: https://themeisle.com
15 13 *
16 - * Will Bontrager
17 - * ---------------------------------------------------------------------------------
18 - * 1.0.0v - 1.3.0v Developed the first plugin version, which was named Insert php.
19 - * This was the founder of this plugin.
20 - *
21 - * If you are a long-term user, you may be confused about the new plugin update.
22 - * You’ve been using an old plugin – Insert php 1.3.0, and now got an extended
23 - * product – Woody Code Snippets. Insert php was the first plugin version to work
24 - * with PHP code. It was created by Will Bontrager Software, LLC. In 2018, the
25 - * Webcraftic studio started to actively develop the plugin. We’ve created a
26 - * roadmap and released several powerful updates that help you to use PHP code
27 - * more comfortable and secure. Now plugin supports not only PHP but other
28 - * snippet types as well. We’ve decided to rename the plugin as Woody ad
29 - * snippets. This name is more suitable for new and powerful plugin features.
30 - *
31 - * More information about the Insert PHP plugin can be found here:
32 - * http://www.willmaster.com/software/WPplugins/go/iphphome_iphplugin
33 - * ---------------------------------------------------------------------------------
34 - *
35 - * Alexander Kovalev
36 - * ---------------------------------------------------------------------------------
37 - * 1.3.0v - 2.0.6v. - Developed framework, plugin interface and plugin development.
38 - * 2.0.6v. - 2.2.5v - Fix bugs, improvement some code parts for the plugin.
39 - *
40 - * Email: alex.kovalevv@gmail.com
41 - * Personal card: https://alexkovalevv.github.io
42 - * Personal repo: https://github.com/alexkovalevv
43 - * ---------------------------------------------------------------------------------
44 - *
45 - * Alexander Vitkalov
46 - * ---------------------------------------------------------------------------------
47 - * 2.0.6v. - 2.2.5v - Development conditional logic for some snippets, added new snippets types,
48 - * development snippets library, development import/export.
49 - *
50 - * Personal repo: https://github.com/nechin
51 - * ---------------------------------------------------------------------------------
52 - *
53 - * Artem Prihodko
54 - * ---------------------------------------------------------------------------------
55 - * 2.3.2v - current
56 - *
57 - * Email: webtemyk@yandex.ru
58 - * Personal repo: https://github.com/temyk
59 - * ---------------------------------------------------------------------------------
60 - *
14 + * @package Woody_Code_Snippets
61 15 */
62 16
63 -// Exit if accessed directly
17 +// Exit if accessed directly.
64 18 if ( ! defined( 'ABSPATH' ) ) {
65 19 exit;
66 20 }
67 -// @formatter:off
68 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 + );
69 33
70 -
71 -/**
72 - * -----------------------------------------------------------------------------
73 - * CHECK REQUIREMENTS
74 - * Check compatibility with php and wp version of the user's site. As well as checking
75 - * compatibility with other plugins from Webcraftic.
76 - * -----------------------------------------------------------------------------
77 - */
78 -
79 -require_once( dirname( __FILE__ ) . '/libs/factory/core/includes/class-factory-requirements.php' );
80 -
81 -$plugin_info = array(
82 - 'prefix' => 'wbcr_inp_',
83 - 'plugin_name' => 'wbcr_insert_php',
84 - 'plugin_title' => __( 'Woody Code Snippets', 'insert-php' ),
85 - 'plugin_text_domain' => 'insert-php',
86 -
87 - // PLUGIN SUPPORT
88 - 'support_details' => array(
89 - 'url' => 'https://r.freemius.com/3465/1916966/http://woody-ad-snippets.webcraftic.com',
90 - 'affiliate_url' => 'https://r.freemius.com/3465/1916966/',
91 - 'pages_map' => array(
92 - 'features' => 'premium-features', // {site}/premium-features
93 - 'pricing' => 'pricing', // {site}/prices
94 - 'support' => 'support', // {site}/support
95 - 'docs' => 'getting-started-with-woody-ad-snippets', // {site}/docs
96 - ),
97 - ),
98 -
99 - // PLUGIN ADVERTS
100 - 'render_adverts' => true,
101 - 'adverts_settings' => array(
102 - 'dashboard_widget' => true, // show dashboard widget (default: false)
103 - 'right_sidebar' => true, // show adverts sidebar (default: false)
104 - 'notice' => true, // show notice message (default: false)
105 - ),
106 -
107 - // PLUGIN UPDATED SETTINGS
108 - /*'has_updates' => false,
109 - 'updates_settings' => array(
110 - 'repository' => 'wordpress',
111 - 'slug' => 'woody-ad-snippets',
112 - 'maybe_rollback' => true,
113 - 'rollback_settings' => array(
114 - 'prev_stable_version' => '0.0.0',
115 - ),
116 - ),*/
117 -
118 - // PLUGIN PREMIUM SETTINGS
119 - 'has_premium' => true,
120 - 'license_settings' => array(
121 - 'provider' => 'freemius',
122 - 'slug' => 'woody-ad-snippets-premium',
123 - 'plugin_id' => '3465',
124 - 'public_key' => 'pk_fc5703fe4f4fbc3e87f17fce5e0b8',
125 - 'price' => 19,
126 - 'has_updates' => true,
127 - 'updates_settings' => array(
128 - 'maybe_rollback' => true,
129 - 'rollback_settings' => array(
130 - 'prev_stable_version' => '0.0.0',
131 - ),
132 - ),
133 - ),
134 -
135 - // FRAMEWORK MODULES
136 - 'load_factory_modules' => array(
137 - array( 'libs/factory/bootstrap', 'factory_bootstrap_454', 'admin' ),
138 - array( 'libs/factory/forms', 'factory_forms_450', 'admin' ),
139 - array( 'libs/factory/pages', 'factory_pages_452', 'admin' ),
140 - array( 'libs/factory/types', 'factory_types_410' ),
141 - array( 'libs/factory/taxonomies', 'factory_taxonomies_330' ),
142 - array( 'libs/factory/metaboxes', 'factory_metaboxes_409', 'admin' ),
143 - array( 'libs/factory/viewtables', 'factory_viewtables_410', 'admin' ),
144 - array( 'libs/factory/shortcodes', 'factory_shortcodes_329', 'all' ),
145 - array( 'libs/factory/freemius', 'factory_freemius_140', 'all' ),
146 - array( 'libs/factory/adverts', 'factory_adverts_130', 'admin' ),
147 - array( 'libs/factory/feedback', 'factory_feedback_114', 'admin' )
148 - ),
149 -);
150 -
151 -/**
152 - * Checks compatibility with WordPress, php and other plugins.
153 - */
154 -$wbcr_compatibility = new Wbcr_Factory453_Requirements( __FILE__, array_merge( $plugin_info, array(
155 - 'plugin_already_activate' => defined( 'WINP_PLUGIN_ACTIVE' ),
156 - 'required_php_version' => '7.0',
157 - 'required_wp_version' => '4.8.0',
158 -) ) );
159 -
160 -/**
161 - * If the plugin is compatible, it will continue its work, otherwise it will be stopped and the user will receive a warning.
162 - */
163 -if ( ! $wbcr_compatibility->check() ) {
164 34 return;
165 35 }
166 36
167 37 global $wbcr_inp_safe_mode;
@@ -167,29 +37,36 @@
167 37 global $wbcr_inp_safe_mode;
168 38
169 39 $wbcr_inp_safe_mode = false;
170 40
171 -// Set the constant that the plugin is activated
41 +// Set the constant that the plugin is activated.
172 42 define( 'WINP_PLUGIN_ACTIVE', true );
173 43
174 -define( 'WINP_PLUGIN_VERSION', $wbcr_compatibility->get_plugin_version() );
44 +define( 'WINP_PLUGIN_VERSION', '2.6.1' );
175 45
176 -// Root directory of the plugin
177 -define( 'WINP_PLUGIN_DIR', dirname( __FILE__ ) );
46 +// Root directory of the plugin.
47 +define( 'WINP_PLUGIN_DIR', __DIR__ );
178 48
179 -// Absolute url of the root directory of the plugin
180 -define( 'WINP_PLUGIN_URL', plugins_url( null, __FILE__ ) );
49 +define( 'WINP_PLUGIN_FILE', __FILE__ );
181 50
182 -// Relative url of the plugin
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.
183 55 define( 'WINP_PLUGIN_BASE', plugin_basename( __FILE__ ) );
184 56
185 -// The type of posts used for snippets types
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.
186 63 define( 'WINP_SNIPPETS_POST_TYPE', 'wbcr-snippets' );
187 64
188 -// The taxonomy used for snippets types
65 +// The taxonomy used for snippets types.
189 66 define( 'WINP_SNIPPETS_TAXONOMY', 'wbcr-snippet-tags' );
190 67
191 -// The snippets types
68 +// The snippets types.
192 69 define( 'WINP_SNIPPET_TYPE_PHP', 'php' );
193 70 define( 'WINP_SNIPPET_TYPE_TEXT', 'text' );
194 71 define( 'WINP_SNIPPET_TYPE_UNIVERSAL', 'universal' );
195 72 define( 'WINP_SNIPPET_TYPE_CSS', 'css' );
@@ -196,36 +73,242 @@
196 73 define( 'WINP_SNIPPET_TYPE_JS', 'js' );
197 74 define( 'WINP_SNIPPET_TYPE_HTML', 'html' );
198 75 define( 'WINP_SNIPPET_TYPE_AD', 'advert' );
199 76
200 -require_once( WINP_PLUGIN_DIR . '/libs/factory/core/boot.php' );
201 -require_once( WINP_PLUGIN_DIR . '/includes/compat.php' );
202 -require_once( WINP_PLUGIN_DIR . '/includes/class.insertion.locations.php' );
203 -require_once( WINP_PLUGIN_DIR . '/includes/class.helpers.php' );
204 -require_once( WINP_PLUGIN_DIR . '/includes/class.plugin.php' );
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/' );
205 82
206 -/*
207 - * Woocommerce Insertion location
208 - * @since 2.4
209 - * */
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 +);
210 90
211 -global $winp_snippets_locations;
212 -$winp_snippets_locations = new WINP_Insertion_Locations();
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;
213 97
214 -try {
215 - new WINP_Plugin( __FILE__, array_merge( $plugin_info, array(
216 - 'plugin_version' => WINP_PLUGIN_VERSION,
217 - 'plugin_text_domain' => $wbcr_compatibility->get_text_domain(),
218 - ) ) );
219 -} catch ( Exception $exception ) {
220 - // Plugin wasn't initialized due to an error
221 - define( 'WINP_PLUGIN_THROW_ERROR', true );
98 + if ( ! file_exists( $premium_plugin_path ) ) {
99 + return;
100 + }
222 101
223 - $wbcr_plugin_error_func = function () use ( $exception ) {
224 - $error = sprintf( "The %s plugin has stopped. <b>Error:</b> %s Code: %s", 'Woody Ad Snippets', $exception->getMessage(), $exception->getCode() );
225 - echo '<div class="notice notice-error"><p>' . $error . '</p></div>';
226 - };
102 + if ( ! function_exists( 'is_plugin_active' ) ) {
103 + require_once ABSPATH . 'wp-admin/includes/plugin.php';
104 + }
227 105
228 - add_action( 'admin_notices', $wbcr_plugin_error_func );
229 - add_action( 'network_admin_notices', $wbcr_plugin_error_func );
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;
230 225 }
231 -// @formatter:on
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 +);