| @@ -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 <[email protected]> | |
| 7 | - * Version: 2.4.8 | |
| 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.9 | |
| 8 | + * WordPress Available: yes | |
| 9 | + * Requires License: no | |
| 8 | 10 | * Text Domain: insert-php |
| 9 | 11 | * Domain Path: /languages/ |
| 10 | - * Author URI: https://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: [email protected] | |
| 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: [email protected] | |
| 58 | - * Personal repo: https://github.com/temyk | |
| 59 | - * --------------------------------------------------------------------------------- | |
| 14 | + * @package Woody_Code_Snippets | |
| 60 | 15 | */ |
| 61 | 16 | |
| 62 | -// Exit if accessed directly | |
| 17 | +// Exit if accessed directly. | |
| 63 | 18 | if ( ! defined( 'ABSPATH' ) ) { |
| 64 | 19 | exit; |
| 65 | 20 | } |
| 66 | -// @formatter:off | |
| 67 | 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 | + ); | |
| 68 | 33 | |
| 69 | - | |
| 70 | -/** | |
| 71 | - * ----------------------------------------------------------------------------- | |
| 72 | - * CHECK REQUIREMENTS | |
| 73 | - * Check compatibility with php and wp version of the user's site. As well as checking | |
| 74 | - * compatibility with other plugins from Webcraftic. | |
| 75 | - * ----------------------------------------------------------------------------- | |
| 76 | - */ | |
| 77 | - | |
| 78 | -require_once dirname( __FILE__ ) . '/libs/factory/core/includes/class-factory-requirements.php'; | |
| 79 | - | |
| 80 | -$plugin_info = [ | |
| 81 | - 'prefix' => 'wbcr_inp_', | |
| 82 | - 'plugin_name' => 'wbcr_insert_php', | |
| 83 | - 'plugin_title' => __( 'Woody Code Snippets', 'insert-php' ), | |
| 84 | - 'plugin_text_domain' => 'insert-php', | |
| 85 | - | |
| 86 | - // PLUGIN SUPPORT | |
| 87 | - 'support_details' => [ | |
| 88 | - 'url' => 'https://r.freemius.com/3465/1916966/https://woodysnippet.com', | |
| 89 | - 'affiliate_url' => 'https://r.freemius.com/3465/1916966/', | |
| 90 | - 'pages_map' => [ | |
| 91 | - 'features' => 'premium-features', // {site}/premium-features | |
| 92 | - 'pricing' => 'pricing', // {site}/prices | |
| 93 | - 'support' => 'support', // {site}/support | |
| 94 | - 'docs' => 'getting-started-with-woody-ad-snippets', // {site}/docs | |
| 95 | - ], | |
| 96 | - ], | |
| 97 | - | |
| 98 | - // PLUGIN ADVERTS | |
| 99 | - 'render_adverts' => true, | |
| 100 | - 'adverts_settings' => [ | |
| 101 | - 'dashboard_widget' => true, // show dashboard widget (default: false) | |
| 102 | - 'right_sidebar' => true, // show adverts sidebar (default: false) | |
| 103 | - 'notice' => true, // show notice message (default: false) | |
| 104 | - ], | |
| 105 | - | |
| 106 | - // PLUGIN UPDATED SETTINGS | |
| 107 | - /* | |
| 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' => [ | |
| 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' => [ | |
| 128 | - 'maybe_rollback' => true, | |
| 129 | - 'rollback_settings' => [ | |
| 130 | - 'prev_stable_version' => '0.0.0', | |
| 131 | - ], | |
| 132 | - ], | |
| 133 | - ], | |
| 134 | - | |
| 135 | - // FRAMEWORK MODULES | |
| 136 | - 'load_factory_modules' => [ | |
| 137 | - [ 'libs/factory/bootstrap', 'factory_bootstrap_464', 'admin' ], | |
| 138 | - [ 'libs/factory/forms', 'factory_forms_460', 'admin' ], | |
| 139 | - [ 'libs/factory/pages', 'factory_pages_463', 'admin' ], | |
| 140 | - [ 'libs/factory/types', 'factory_types_413' ], | |
| 141 | - [ 'libs/factory/taxonomies', 'factory_taxonomies_333' ], | |
| 142 | - [ 'libs/factory/metaboxes', 'factory_metaboxes_413', 'admin' ], | |
| 143 | - [ 'libs/factory/viewtables', 'factory_viewtables_413', 'admin' ], | |
| 144 | - [ 'libs/factory/shortcodes', 'factory_shortcodes_333', 'all' ], | |
| 145 | - [ 'libs/factory/freemius', 'factory_freemius_150', 'all' ], | |
| 146 | - [ 'libs/factory/adverts', 'factory_adverts_140', 'admin' ], | |
| 147 | - [ 'libs/factory/feedback', 'factory_feedback_121', 'admin' ], | |
| 148 | - ], | |
| 149 | -]; | |
| 150 | - | |
| 151 | -/** | |
| 152 | - * Checks compatibility with WordPress, php and other plugins. | |
| 153 | - */ | |
| 154 | -$wbcr_compatibility = new Wbcr_Factory463_Requirements( __FILE__, array_merge( $plugin_info, [ | |
| 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.7.9' ); | |
| 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,275 @@ | ||
| 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'; | |
| 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 | +/** | |
| 93 | + * Deactivates Premium versions below 1.3.0, which are not compatible with this version. | |
| 94 | + */ | |
| 95 | +function winp_deactivate_incompatible_premium(): void { | |
| 96 | + $premium_plugin_file = 'woody-ad-snippets-premium/woody-ad-snippets-premium.php'; | |
| 97 | + $premium_plugin_path = WP_PLUGIN_DIR . '/' . $premium_plugin_file; | |
| 98 | + | |
| 99 | + if ( ! file_exists( $premium_plugin_path ) ) { | |
| 100 | + return; | |
| 101 | + } | |
| 102 | + | |
| 103 | + if ( ! function_exists( 'is_plugin_active' ) ) { | |
| 104 | + require_once ABSPATH . 'wp-admin/includes/plugin.php'; | |
| 105 | + } | |
| 106 | + | |
| 107 | + if ( ! is_plugin_active( $premium_plugin_file ) ) { | |
| 108 | + return; | |
| 109 | + } | |
| 110 | + | |
| 111 | + if ( ! function_exists( 'get_plugin_data' ) ) { | |
| 112 | + require_once ABSPATH . 'wp-admin/includes/plugin.php'; | |
| 113 | + } | |
| 114 | + $premium_data = get_plugin_data( $premium_plugin_path ); | |
| 115 | + | |
| 116 | + if ( version_compare( $premium_data['Version'], '1.3.0', '<' ) ) { | |
| 117 | + deactivate_plugins( $premium_plugin_file ); | |
| 118 | + // Still hooked this request; it calls WINP_Plugin::app() before init. | |
| 119 | + remove_action( 'plugins_loaded', 'wasp_premium_load', 20 ); | |
| 120 | + set_transient( 'winp_premium_version_incompatible', true, WEEK_IN_SECONDS ); | |
| 121 | + } | |
| 122 | +} | |
| 123 | +add_action( 'plugins_loaded', 'winp_deactivate_incompatible_premium', 5 ); | |
| 124 | + | |
| 125 | +add_action( | |
| 126 | + 'admin_init', | |
| 127 | + function () { | |
| 128 | + if ( isset( $_GET['winp_dismiss_premium_notice'] ) && check_admin_referer( 'winp_dismiss_premium_notice' ) ) { | |
| 129 | + delete_transient( 'winp_premium_version_incompatible' ); | |
| 130 | + wp_safe_redirect( remove_query_arg( 'winp_dismiss_premium_notice' ) ); | |
| 131 | + exit; | |
| 132 | + } | |
| 133 | + } | |
| 134 | +); | |
| 135 | + | |
| 136 | +add_action( | |
| 137 | + 'admin_notices', | |
| 138 | + function () { | |
| 139 | + if ( get_transient( 'winp_premium_version_incompatible' ) ) { | |
| 140 | + $dismiss_url = wp_nonce_url( | |
| 141 | + add_query_arg( 'winp_dismiss_premium_notice', '1' ), | |
| 142 | + 'winp_dismiss_premium_notice' | |
| 143 | + ); | |
| 144 | + ?> | |
| 145 | + <div class="notice notice-error"> | |
| 146 | + <p> | |
| 147 | + <strong><?php esc_html_e( 'Woody Code Snippets Premium has been deactivated.', 'insert-php' ); ?></strong> | |
| 148 | + </p> | |
| 149 | + <p> | |
| 150 | + <?php | |
| 151 | + printf( | |
| 152 | + // translators: %s Premium version number. | |
| 153 | + 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' ), | |
| 154 | + '<strong>1.3.0</strong>' | |
| 155 | + ); | |
| 156 | + ?> | |
| 157 | + </p> | |
| 158 | + <p> | |
| 159 | + <a href="<?php echo esc_url( $dismiss_url ); ?>" class="button button-secondary"> | |
| 160 | + <?php esc_html_e( 'Dismiss this notice', 'insert-php' ); ?> | |
| 161 | + </a> | |
| 162 | + </p> | |
| 163 | + </div> | |
| 164 | + <?php | |
| 165 | + } | |
| 166 | + } | |
| 167 | +); | |
| 168 | +// END: Related to premium version compatibility check for below 1.3. | |
| 169 | + | |
| 202 | 170 | require_once WINP_PLUGIN_DIR . '/includes/class.insertion.locations.php'; |
| 171 | +require_once WINP_PLUGIN_DIR . '/includes/class.http.php'; | |
| 203 | 172 | require_once WINP_PLUGIN_DIR . '/includes/class.helpers.php'; |
| 173 | +require_once WINP_PLUGIN_DIR . '/includes/class.code-validator.php'; | |
| 174 | +require_once WINP_PLUGIN_DIR . '/includes/class.error-handler.php'; | |
| 204 | 175 | require_once WINP_PLUGIN_DIR . '/includes/class.plugin.php'; |
| 205 | 176 | |
| 206 | -/* | |
| 207 | - * Woocommerce Insertion location | |
| 208 | - * @since 2.4 | |
| 209 | - * */ | |
| 177 | +if ( file_exists( WINP_PLUGIN_DIR . '/vendor/autoload.php' ) ) { | |
| 178 | + require_once WINP_PLUGIN_DIR . '/vendor/autoload.php'; | |
| 179 | +} | |
| 210 | 180 | |
| 211 | -global $winp_snippets_locations; | |
| 212 | -$winp_snippets_locations = new WINP_Insertion_Locations(); | |
| 181 | +/** | |
| 182 | + * Adds a hint and button to the fatal error message. | |
| 183 | + * | |
| 184 | + * Since WordPress 5.2, we have access to a special mode for catching PHP errors. | |
| 185 | + * If a user makes a syntax error while editing a snippet, instead of a white screen | |
| 186 | + * (if PHP errors are disabled on the server), they will see a message from WordPress | |
| 187 | + * generated by the WP_Fatal_Error_Handler class. | |
| 188 | + * | |
| 189 | + * We decided to add a button to this message to switch to safe mode. | |
| 190 | + */ | |
| 191 | +add_filter( | |
| 192 | + 'wp_php_error_message', | |
| 193 | + function ( $message ) { | |
| 194 | + $safe_mode_url = admin_url( 'edit.php?post_type=' . WINP_SNIPPETS_POST_TYPE . '&wbcr-php-snippets-safe-mode' ); | |
| 195 | + $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>'; | |
| 196 | + $safe_mode_button .= '<a href="' . $safe_mode_url . '" class="button">' . __( 'Enable Safe Mode', 'insert-php' ) . '</a>'; | |
| 213 | 197 | |
| 214 | -try { | |
| 215 | - new WINP_Plugin( __FILE__, array_merge( $plugin_info, [ | |
| 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 ); | |
| 198 | + return $message . $safe_mode_button; | |
| 199 | + } | |
| 200 | +); | |
| 222 | 201 | |
| 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 | - }; | |
| 202 | +/** | |
| 203 | + * Enables/Disable safe mode, in which the php code will not be executed. | |
| 204 | + */ | |
| 205 | +add_action( | |
| 206 | + 'plugins_loaded', | |
| 207 | + function () { | |
| 208 | + if ( isset( $_GET['wbcr-php-snippets-safe-mode'] ) ) { | |
| 209 | + WINP_Helper::enable_safe_mode(); | |
| 210 | + wp_safe_redirect( esc_url( remove_query_arg( [ 'wbcr-php-snippets-safe-mode' ] ) ) ); | |
| 211 | + die(); | |
| 212 | + } | |
| 227 | 213 | |
| 228 | - add_action( 'admin_notices', $wbcr_plugin_error_func ); | |
| 229 | - add_action( 'network_admin_notices', $wbcr_plugin_error_func ); | |
| 214 | + if ( isset( $_GET['wbcr-php-snippets-disable-safe-mode'] ) ) { | |
| 215 | + WINP_Helper::disable_safe_mode(); | |
| 216 | + wp_safe_redirect( esc_url( remove_query_arg( [ 'wbcr-php-snippets-disable-safe-mode' ] ) ) ); | |
| 217 | + die(); | |
| 218 | + } | |
| 219 | + }, | |
| 220 | + - 1 | |
| 221 | +); | |
| 222 | + | |
| 223 | +/** | |
| 224 | + * Register product to SDK | |
| 225 | + * | |
| 226 | + * @param array<string> $products Registered products. | |
| 227 | + * @return array<string> | |
| 228 | + */ | |
| 229 | +function winp_sdk_register_products( $products ) { | |
| 230 | + $products[] = WINP_PLUGIN_FILE; | |
| 231 | + | |
| 232 | + return $products; | |
| 230 | 233 | } |
| 231 | -// @formatter:on | |
| 234 | + | |
| 235 | +/** | |
| 236 | + * About page metadata | |
| 237 | + * | |
| 238 | + * @return array<string, mixed> | |
| 239 | + */ | |
| 240 | +function winp_sdk_about_page() { | |
| 241 | + return [ | |
| 242 | + 'location' => 'edit.php?post_type=wbcr-snippets', | |
| 243 | + 'logo' => WINP_PLUGIN_URL . '/admin/assets/img/icon-256x256.png', | |
| 244 | + 'review_link' => false, | |
| 245 | + 'has_upgrade_menu' => false, | |
| 246 | + ]; | |
| 247 | +} | |
| 248 | + | |
| 249 | +/** | |
| 250 | + * AI Connect metadata. | |
| 251 | + * | |
| 252 | + * Only the read abilities are listed: the abilities that save or activate | |
| 253 | + * snippets run code, so the site owner switches those on deliberately. | |
| 254 | + * | |
| 255 | + * @return array<string, mixed> | |
| 256 | + */ | |
| 257 | +function winp_sdk_ai_connect() { | |
| 258 | + return [ | |
| 259 | + 'name' => 'Woody Code Snippets', | |
| 260 | + 'notice_cases' => [ | |
| 261 | + __( 'find where a script is inserted', 'insert-php' ), | |
| 262 | + __( 'review the code of a snippet', 'insert-php' ), | |
| 263 | + __( 'audit your active snippets', 'insert-php' ), | |
| 264 | + ], | |
| 265 | + 'prompts' => [ | |
| 266 | + __( 'Find which Woody Code Snippets load gtag and where they are inserted.', 'insert-php' ), | |
| 267 | + __( 'Show me the code of my header scripts snippet and explain what it does.', 'insert-php' ), | |
| 268 | + __( 'Which of my snippets run PHP on every page?', 'insert-php' ), | |
| 269 | + ], | |
| 270 | + 'ability_prefix' => 'woody', | |
| 271 | + ]; | |
| 272 | +} | |
| 273 | + | |
| 274 | +/** | |
| 275 | + * Register compatibility using SDK. | |
| 276 | + * | |
| 277 | + * @param array<string, array<string, string>> $compatibilities All compatibilities. | |
| 278 | + * | |
| 279 | + * @return array<string, array<string, string>> Registered compatibility. | |
| 280 | + */ | |
| 281 | +function winp_sdk_register_compatibility( $compatibilities ) { | |
| 282 | + $compatibilities['WoodyPro'] = [ | |
| 283 | + 'basefile' => defined( 'WASP_PLUGIN_FILE' ) ? WASP_PLUGIN_FILE : '', | |
| 284 | + 'required' => '1.3.0', | |
| 285 | + ]; | |
| 286 | + | |
| 287 | + return $compatibilities; | |
| 288 | +} | |
| 289 | + | |
| 290 | +add_filter( 'themeisle_sdk_products', 'winp_sdk_register_products' ); | |
| 291 | +add_filter( WINP_PLUGIN_NAMESPACE . '_about_us_metadata', 'winp_sdk_about_page' ); | |
| 292 | +add_filter( WINP_PLUGIN_NAMESPACE . '_ai_connect_metadata', 'winp_sdk_ai_connect' ); | |
| 293 | +add_filter( 'themeisle_sdk_compatibilities/' . basename( WINP_PLUGIN_DIR ), 'winp_sdk_register_compatibility' ); | |
| 294 | + | |
| 295 | +// Register activation/deactivation hooks. | |
| 296 | +register_activation_hook( | |
| 297 | + WINP_PLUGIN_FILE, | |
| 298 | + function () { | |
| 299 | + global $winp_snippets_locations; | |
| 300 | + if ( ! isset( $winp_snippets_locations ) ) { | |
| 301 | + $winp_snippets_locations = new WINP_Insertion_Locations(); | |
| 302 | + } | |
| 303 | + | |
| 304 | + // Instantiate plugin for activation. | |
| 305 | + $plugin = new WINP_Plugin(); | |
| 306 | + $plugin->activation_hook(); | |
| 307 | + } | |
| 308 | +); | |
| 309 | + | |
| 310 | +register_deactivation_hook( | |
| 311 | + WINP_PLUGIN_FILE, | |
| 312 | + function () { | |
| 313 | + global $winp_snippets_locations; | |
| 314 | + if ( ! isset( $winp_snippets_locations ) ) { | |
| 315 | + $winp_snippets_locations = new WINP_Insertion_Locations(); | |
| 316 | + } | |
| 317 | + | |
| 318 | + // Instantiate plugin for deactivation. | |
| 319 | + $plugin = new WINP_Plugin(); | |
| 320 | + $plugin->deactivation_hook(); | |
| 321 | + } | |
| 322 | +); | |
| 323 | + | |
| 324 | +// Initialize on 'init' hook with priority 0 to avoid early translation loading (WP 6.7+) | |
| 325 | +add_action( | |
| 326 | + 'init', | |
| 327 | + function () { | |
| 328 | + global $winp_snippets_locations; | |
| 329 | + $winp_snippets_locations = new WINP_Insertion_Locations(); | |
| 330 | + | |
| 331 | + try { | |
| 332 | + new WINP_Plugin(); | |
| 333 | + } catch ( Exception $exception ) { | |
| 334 | + // Plugin wasn't initialized due to an error | |
| 335 | + define( 'WINP_PLUGIN_THROW_ERROR', true ); | |
| 336 | + | |
| 337 | + $wbcr_plugin_error_func = function () use ( $exception ) { | |
| 338 | + $error = sprintf( 'The %s plugin has stopped. <b>Error:</b> %s Code: %s', 'Woody Ad Snippets', $exception->getMessage(), $exception->getCode() ); | |
| 339 | + echo '<div class="notice notice-error"><p>' . $error . '</p></div>'; | |
| 340 | + }; | |
| 341 | + | |
| 342 | + add_action( 'admin_notices', $wbcr_plugin_error_func ); | |
| 343 | + add_action( 'network_admin_notices', $wbcr_plugin_error_func ); | |
| 344 | + } | |
| 345 | + }, | |
| 346 | + 0 | |
| 347 | +); | |