Changeset 3488716
- Timestamp:
- 03/23/2026 08:55:09 AM (12 days ago)
- Location:
- cryptocurrency-price-ticker-widget
- Files:
-
- 8 edited
- 1 copied
-
tags/2.10.1 (copied) (copied from cryptocurrency-price-ticker-widget/trunk)
-
tags/2.10.1/admin/addon-dashboard-page/addon-dashboard-page.php (modified) (8 diffs)
-
tags/2.10.1/admin/addon-dashboard-page/assets/js/script.js (modified) (6 diffs)
-
tags/2.10.1/cryptocurrency-price-ticker-widget.php (modified) (2 diffs)
-
tags/2.10.1/readme.txt (modified) (2 diffs)
-
trunk/admin/addon-dashboard-page/addon-dashboard-page.php (modified) (8 diffs)
-
trunk/admin/addon-dashboard-page/assets/js/script.js (modified) (6 diffs)
-
trunk/cryptocurrency-price-ticker-widget.php (modified) (2 diffs)
-
trunk/readme.txt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
cryptocurrency-price-ticker-widget/tags/2.10.1/admin/addon-dashboard-page/addon-dashboard-page.php
r3488638 r3488716 239 239 240 240 /** 241 * Whether WooCommerce is active (for add-ons that require it to activate). 242 * 243 * @return bool 244 */ 245 private static function ccew_is_woocommerce_active() { 246 if ( ! function_exists( 'is_plugin_active' ) ) { 247 require_once ABSPATH . 'wp-admin/includes/plugin.php'; 248 } 249 return is_plugin_active( 'woocommerce/woocommerce.php' ); 250 } 251 252 /** 253 * Whether activation is allowed for this slug (WooCommerce gate for payment add-ons). 254 * 255 * @param string $slug Plugin slug. 256 * @return bool 257 */ 258 private static function ccew_is_activation_allowed_for_slug( $slug ) { 259 if ( ! in_array( $slug, self::$woocommerce_dependent_slugs, true ) ) { 260 return true; 261 } 262 return self::ccew_is_woocommerce_active(); 263 } 264 265 /** 241 266 * Handle AJAX: install plugin via WordPress core or activate if already installed (including Pro). 242 267 */ … … 272 297 ) 273 298 ); 274 }275 276 if ( in_array( $slug, self::$woocommerce_dependent_slugs, true ) ) {277 if ( ! function_exists( 'is_plugin_active' ) ) {278 require_once ABSPATH . 'wp-admin/includes/plugin.php';279 }280 if ( ! is_plugin_active( 'woocommerce/woocommerce.php' ) ) {281 wp_send_json_error(282 array(283 'slug' => $slug,284 'errorCode' => 'woocommerce_required',285 'errorMessage' => __( 'WooCommerce must be installed and active before you can install or activate this plugin.', 'cryptocurrency-widgets-for-elementor' ),286 )287 );288 }289 299 } 290 300 … … 352 362 ); 353 363 } 364 if ( ! self::ccew_is_activation_allowed_for_slug( $slug ) ) { 365 wp_send_json_error( 366 array( 367 'slug' => $slug, 368 'errorCode' => 'woocommerce_required', 369 'errorMessage' => __( 'WooCommerce must be installed and active before you can activate this plugin.', 'cryptocurrency-widgets-for-elementor' ), 370 ) 371 ); 372 } 354 373 // phpcs:ignore WordPress.Security.NonceVerification.Missing -- nonce checked above. 355 374 $pagenow = isset( $_POST['pagenow'] ) ? sanitize_key( wp_unslash( $_POST['pagenow'] ) ) : ''; … … 409 428 $pagenow = isset( $_POST['pagenow'] ) ? sanitize_key( wp_unslash( $_POST['pagenow'] ) ) : ''; 410 429 $network_wide = is_multisite() && 'import' !== $pagenow; 411 if ( current_user_can( 'activate_plugin', $install_status['file'] ) ) {430 if ( current_user_can( 'activate_plugin', $install_status['file'] ) && self::ccew_is_activation_allowed_for_slug( $slug ) ) { 412 431 $activation_result = activate_plugin( $install_status['file'], '', $network_wide ); 413 432 if ( is_wp_error( $activation_result ) ) { … … 417 436 } 418 437 $status['activated'] = true; 438 } elseif ( current_user_can( 'activate_plugin', $install_status['file'] ) && ! self::ccew_is_activation_allowed_for_slug( $slug ) ) { 439 $status['activated'] = false; 419 440 } 420 441 wp_send_json_success( $status ); … … 446 467 447 468 if ( current_user_can( 'activate_plugin', $install_status['file'] ) && is_plugin_inactive( $install_status['file'] ) ) { 448 $activation_result = activate_plugin( $install_status['file'], '', $network_wide ); 449 if ( is_wp_error( $activation_result ) ) { 450 $status['errorCode'] = $activation_result->get_error_code(); 451 $status['errorMessage'] = $activation_result->get_error_message(); 452 wp_send_json_error( $status ); 453 } 454 $status['activated'] = true; 469 if ( self::ccew_is_activation_allowed_for_slug( $slug ) ) { 470 $activation_result = activate_plugin( $install_status['file'], '', $network_wide ); 471 if ( is_wp_error( $activation_result ) ) { 472 $status['errorCode'] = $activation_result->get_error_code(); 473 $status['errorMessage'] = $activation_result->get_error_message(); 474 wp_send_json_error( $status ); 475 } 476 $status['activated'] = true; 477 } else { 478 $status['activated'] = false; 479 } 455 480 } 456 481 wp_send_json_success( $status ); … … 860 885 <div class="<?php echo esc_attr( $prefix ); ?>-card-footer"> 861 886 <?php 862 $needs_activation = ! empty( $plugin['needs_activation'] ) && ! empty( $plugin['plugin_basename'] );887 $needs_activation = ! empty( $plugin['needs_activation'] ); 863 888 $install_nonce = wp_create_nonce( 'ccew-plugins-download' ); 889 // Markup hint for JS: block Activate AJAX when WooCommerce is off (no disabled attr — early return only). 890 $ccew_block_wc_activate = $needs_activation 891 && in_array( $plugin_slug, self::$woocommerce_dependent_slugs, true ) 892 && ! self::ccew_is_woocommerce_active(); 864 893 ?> 865 894 <button type="button" 866 895 class="button <?php echo esc_attr( $prefix ); ?>-button-primary <?php echo esc_attr( $prefix ); ?>-install-plugin <?php echo $needs_activation ? esc_attr( $prefix ) . '-btn-activate' : esc_attr( $prefix ) . '-btn-install'; ?>" 867 896 data-slug="<?php echo esc_attr( $plugin_slug ); ?>" 868 data-nonce="<?php echo esc_attr( $install_nonce ); ?>"> 897 data-nonce="<?php echo esc_attr( $install_nonce ); ?>" 898 <?php echo $ccew_block_wc_activate ? ' data-ccew-block-wc-activate="1"' : ''; ?>> 869 899 <?php echo $needs_activation ? esc_html__( 'Activate Now', 'cryptocurrency-widgets-for-elementor' ) : esc_html__( 'Install Now', 'cryptocurrency-widgets-for-elementor' ); ?> 870 900 </button> … … 919 949 'woocommerce_active' => function_exists( 'is_plugin_active' ) && is_plugin_active( 'woocommerce/woocommerce.php' ), 920 950 'woocommerce_slugs' => array_values( self::$woocommerce_dependent_slugs ), 921 'woocommerce_required_msg' => __( 'WooCommerce must be installed and active before you can install or activate this plugin.', 'cryptocurrency-widgets-for-elementor' ), 951 'woocommerce_required_msg' => __( 'WooCommerce must be installed and active before you can activate this plugin.', 'cryptocurrency-widgets-for-elementor' ), 952 'installed_pending_wc_label' => __( 'Installed!', 'cryptocurrency-widgets-for-elementor' ), 922 953 ) 923 954 ); -
cryptocurrency-price-ticker-widget/tags/2.10.1/admin/addon-dashboard-page/assets/js/script.js
r3488638 r3488716 19 19 return; 20 20 } 21 var slug = $btn.data('slug') || $btn.attr('data-plugin-slug'); 22 var nonce = (typeof cp_events !== 'undefined' && cp_events.install_nonce) ? cp_events.install_nonce : $btn.data('nonce') || $btn.attr('data-action-nonce'); 21 // Use attr() so slug always matches the DOM (jQuery .data() can cache / coerce). 22 var slug = $btn.attr('data-slug') || $btn.attr('data-plugin-slug') || $btn.data('slug'); 23 var nonce = (typeof cp_events !== 'undefined' && cp_events.install_nonce) ? cp_events.install_nonce : $btn.attr('data-nonce') || $btn.data('nonce') || $btn.attr('data-action-nonce'); 23 24 var action = (typeof cp_events !== 'undefined' && cp_events.install_action) ? cp_events.install_action : 'ccew_dashboard_install_plugin'; 24 25 25 26 if (!slug || !nonce) { 27 return; 28 } 29 30 // Server-rendered: no AJAX, no "Activating…" / "Installed!" when WooCommerce is inactive (reliable vs cp_events/class checks). 31 if ($btn.attr('data-ccew-block-wc-activate') === '1') { 32 return; 33 } 34 35 // Same pattern as Timeline + Divi: allow "Install Now"; block "Activate Now" when WooCommerce is inactive. 36 var isActivateBtn = $btn.hasClass('ccew-btn-activate') || $btn.is('[class*="-btn-activate"]'); 37 if (isActivateBtn && typeof cp_events !== 'undefined' && cp_events.woocommerce_active !== true && Array.isArray(cp_events.woocommerce_slugs) && cp_events.woocommerce_slugs.indexOf(slug) !== -1) { 26 38 return; 27 39 } … … 78 90 } 79 91 if (response && response.success) { 92 var d = response.data || {}; 93 // Installed but not auto-activated (e.g. WooCommerce-dependent add-on without Woo active). 94 if (d.activated === false) { 95 $btn.prop('disabled', false).removeClass('ccew-btn-processing'); 96 var installedLabel = (typeof cp_events !== 'undefined' && cp_events.installed_pending_wc_label) ? cp_events.installed_pending_wc_label : 'Installed!'; 97 $btn.text(installedLabel); 98 requestAnimationFrame(function () { 99 setTimeout(function () { window.location.reload(); }, 1200); 100 }); 101 return; 102 } 80 103 $btn.prop('disabled', false).removeClass('ccew-btn-processing'); 81 104 $btn.text('Activated Successfully!'); … … 95 118 enableAllBtns(); 96 119 $btn.text($btn.hasClass('ccew-btn-activate') ? 'Activate Now' : 'Install Now'); 97 // WooCommerce dependency: no alert — keep this button disabled / unclickable.98 120 if (errCode === 'woocommerce_required') { 99 $btn.prop('disabled', true).addClass('ccew-btn-dependency-disabled');100 if (typeof cp_events !== 'undefined' && cp_events.woocommerce_required_msg) {101 $btn.attr('title', cp_events.woocommerce_required_msg);102 }103 121 return; 104 122 } … … 125 143 } 126 144 if (failErrCode === 'woocommerce_required') { 127 $btn.prop('disabled', true).addClass('ccew-btn-dependency-disabled');128 if (typeof cp_events !== 'undefined' && cp_events.woocommerce_required_msg) {129 $btn.attr('title', cp_events.woocommerce_required_msg);130 }131 145 return; 132 146 } … … 147 161 var ajaxUrl = (typeof cp_events !== 'undefined' && cp_events.ajax_url) ? cp_events.ajax_url : ''; 148 162 if (!pluginSlug || !nonce || !ajaxUrl) { 163 return; 164 } 165 if (typeof cp_events !== 'undefined' && !cp_events.woocommerce_active && cp_events.woocommerce_slugs && cp_events.woocommerce_slugs.indexOf(pluginSlug) !== -1) { 149 166 return; 150 167 } … … 183 200 } 184 201 }); 185 186 // Keep Install/Activate disabled when WooCommerce is not active (dependency plugins).187 if (typeof cp_events !== 'undefined' && !cp_events.woocommerce_active && cp_events.woocommerce_slugs && cp_events.woocommerce_slugs.length) {188 cp_events.woocommerce_slugs.forEach(function (depSlug) {189 $('button[data-slug="' + depSlug + '"]').each(function () {190 var $b = $(this);191 if ($b.is('.ccew-install-plugin, [class*="-install-plugin"]')) {192 $b.prop('disabled', true).addClass('ccew-btn-dependency-disabled').attr('title', cp_events.woocommerce_required_msg || '');193 }194 });195 });196 }197 202 }); -
cryptocurrency-price-ticker-widget/tags/2.10.1/cryptocurrency-price-ticker-widget.php
r3488638 r3488716 6 6 * Author: Cool Plugins 7 7 * Author URI: https://coolplugins.net/?utm_source=ccw_plugin&utm_medium=inside&utm_campaign=author_page&utm_content=plugins_list 8 * Version: 2.10. 08 * Version: 2.10.1 9 9 * License: GPL3 10 10 * Text Domain: cryptocurrency-price-ticker-widget … … 22 22 23 23 // Define constants for later use 24 define('CCPWF_VERSION', '2.10. 0');24 define('CCPWF_VERSION', '2.10.1'); 25 25 define('CCPWF_FILE', __FILE__); 26 26 define('CCPWF_DIR', plugin_dir_path(CCPWF_FILE)); -
cryptocurrency-price-ticker-widget/tags/2.10.1/readme.txt
r3488638 r3488716 5 5 Tested up to: 6.9 6 6 Requires PHP:7.2 7 Stable tag: 2.10. 07 Stable tag: 2.10.1 8 8 License: GPL3 9 9 License URI: http://www.gnu.org/licenses/gpl-3.0.html … … 184 184 == Changelog == 185 185 186 = Version 2.10.1| 23 March 2026 = 187 * Fixed: Wrong plugin slug. 188 186 189 = Version 2.10.0| 23 March 2026 = 187 190 * Improved: Improved dashboard design and usability. -
cryptocurrency-price-ticker-widget/trunk/admin/addon-dashboard-page/addon-dashboard-page.php
r3488638 r3488716 239 239 240 240 /** 241 * Whether WooCommerce is active (for add-ons that require it to activate). 242 * 243 * @return bool 244 */ 245 private static function ccew_is_woocommerce_active() { 246 if ( ! function_exists( 'is_plugin_active' ) ) { 247 require_once ABSPATH . 'wp-admin/includes/plugin.php'; 248 } 249 return is_plugin_active( 'woocommerce/woocommerce.php' ); 250 } 251 252 /** 253 * Whether activation is allowed for this slug (WooCommerce gate for payment add-ons). 254 * 255 * @param string $slug Plugin slug. 256 * @return bool 257 */ 258 private static function ccew_is_activation_allowed_for_slug( $slug ) { 259 if ( ! in_array( $slug, self::$woocommerce_dependent_slugs, true ) ) { 260 return true; 261 } 262 return self::ccew_is_woocommerce_active(); 263 } 264 265 /** 241 266 * Handle AJAX: install plugin via WordPress core or activate if already installed (including Pro). 242 267 */ … … 272 297 ) 273 298 ); 274 }275 276 if ( in_array( $slug, self::$woocommerce_dependent_slugs, true ) ) {277 if ( ! function_exists( 'is_plugin_active' ) ) {278 require_once ABSPATH . 'wp-admin/includes/plugin.php';279 }280 if ( ! is_plugin_active( 'woocommerce/woocommerce.php' ) ) {281 wp_send_json_error(282 array(283 'slug' => $slug,284 'errorCode' => 'woocommerce_required',285 'errorMessage' => __( 'WooCommerce must be installed and active before you can install or activate this plugin.', 'cryptocurrency-widgets-for-elementor' ),286 )287 );288 }289 299 } 290 300 … … 352 362 ); 353 363 } 364 if ( ! self::ccew_is_activation_allowed_for_slug( $slug ) ) { 365 wp_send_json_error( 366 array( 367 'slug' => $slug, 368 'errorCode' => 'woocommerce_required', 369 'errorMessage' => __( 'WooCommerce must be installed and active before you can activate this plugin.', 'cryptocurrency-widgets-for-elementor' ), 370 ) 371 ); 372 } 354 373 // phpcs:ignore WordPress.Security.NonceVerification.Missing -- nonce checked above. 355 374 $pagenow = isset( $_POST['pagenow'] ) ? sanitize_key( wp_unslash( $_POST['pagenow'] ) ) : ''; … … 409 428 $pagenow = isset( $_POST['pagenow'] ) ? sanitize_key( wp_unslash( $_POST['pagenow'] ) ) : ''; 410 429 $network_wide = is_multisite() && 'import' !== $pagenow; 411 if ( current_user_can( 'activate_plugin', $install_status['file'] ) ) {430 if ( current_user_can( 'activate_plugin', $install_status['file'] ) && self::ccew_is_activation_allowed_for_slug( $slug ) ) { 412 431 $activation_result = activate_plugin( $install_status['file'], '', $network_wide ); 413 432 if ( is_wp_error( $activation_result ) ) { … … 417 436 } 418 437 $status['activated'] = true; 438 } elseif ( current_user_can( 'activate_plugin', $install_status['file'] ) && ! self::ccew_is_activation_allowed_for_slug( $slug ) ) { 439 $status['activated'] = false; 419 440 } 420 441 wp_send_json_success( $status ); … … 446 467 447 468 if ( current_user_can( 'activate_plugin', $install_status['file'] ) && is_plugin_inactive( $install_status['file'] ) ) { 448 $activation_result = activate_plugin( $install_status['file'], '', $network_wide ); 449 if ( is_wp_error( $activation_result ) ) { 450 $status['errorCode'] = $activation_result->get_error_code(); 451 $status['errorMessage'] = $activation_result->get_error_message(); 452 wp_send_json_error( $status ); 453 } 454 $status['activated'] = true; 469 if ( self::ccew_is_activation_allowed_for_slug( $slug ) ) { 470 $activation_result = activate_plugin( $install_status['file'], '', $network_wide ); 471 if ( is_wp_error( $activation_result ) ) { 472 $status['errorCode'] = $activation_result->get_error_code(); 473 $status['errorMessage'] = $activation_result->get_error_message(); 474 wp_send_json_error( $status ); 475 } 476 $status['activated'] = true; 477 } else { 478 $status['activated'] = false; 479 } 455 480 } 456 481 wp_send_json_success( $status ); … … 860 885 <div class="<?php echo esc_attr( $prefix ); ?>-card-footer"> 861 886 <?php 862 $needs_activation = ! empty( $plugin['needs_activation'] ) && ! empty( $plugin['plugin_basename'] );887 $needs_activation = ! empty( $plugin['needs_activation'] ); 863 888 $install_nonce = wp_create_nonce( 'ccew-plugins-download' ); 889 // Markup hint for JS: block Activate AJAX when WooCommerce is off (no disabled attr — early return only). 890 $ccew_block_wc_activate = $needs_activation 891 && in_array( $plugin_slug, self::$woocommerce_dependent_slugs, true ) 892 && ! self::ccew_is_woocommerce_active(); 864 893 ?> 865 894 <button type="button" 866 895 class="button <?php echo esc_attr( $prefix ); ?>-button-primary <?php echo esc_attr( $prefix ); ?>-install-plugin <?php echo $needs_activation ? esc_attr( $prefix ) . '-btn-activate' : esc_attr( $prefix ) . '-btn-install'; ?>" 867 896 data-slug="<?php echo esc_attr( $plugin_slug ); ?>" 868 data-nonce="<?php echo esc_attr( $install_nonce ); ?>"> 897 data-nonce="<?php echo esc_attr( $install_nonce ); ?>" 898 <?php echo $ccew_block_wc_activate ? ' data-ccew-block-wc-activate="1"' : ''; ?>> 869 899 <?php echo $needs_activation ? esc_html__( 'Activate Now', 'cryptocurrency-widgets-for-elementor' ) : esc_html__( 'Install Now', 'cryptocurrency-widgets-for-elementor' ); ?> 870 900 </button> … … 919 949 'woocommerce_active' => function_exists( 'is_plugin_active' ) && is_plugin_active( 'woocommerce/woocommerce.php' ), 920 950 'woocommerce_slugs' => array_values( self::$woocommerce_dependent_slugs ), 921 'woocommerce_required_msg' => __( 'WooCommerce must be installed and active before you can install or activate this plugin.', 'cryptocurrency-widgets-for-elementor' ), 951 'woocommerce_required_msg' => __( 'WooCommerce must be installed and active before you can activate this plugin.', 'cryptocurrency-widgets-for-elementor' ), 952 'installed_pending_wc_label' => __( 'Installed!', 'cryptocurrency-widgets-for-elementor' ), 922 953 ) 923 954 ); -
cryptocurrency-price-ticker-widget/trunk/admin/addon-dashboard-page/assets/js/script.js
r3488638 r3488716 19 19 return; 20 20 } 21 var slug = $btn.data('slug') || $btn.attr('data-plugin-slug'); 22 var nonce = (typeof cp_events !== 'undefined' && cp_events.install_nonce) ? cp_events.install_nonce : $btn.data('nonce') || $btn.attr('data-action-nonce'); 21 // Use attr() so slug always matches the DOM (jQuery .data() can cache / coerce). 22 var slug = $btn.attr('data-slug') || $btn.attr('data-plugin-slug') || $btn.data('slug'); 23 var nonce = (typeof cp_events !== 'undefined' && cp_events.install_nonce) ? cp_events.install_nonce : $btn.attr('data-nonce') || $btn.data('nonce') || $btn.attr('data-action-nonce'); 23 24 var action = (typeof cp_events !== 'undefined' && cp_events.install_action) ? cp_events.install_action : 'ccew_dashboard_install_plugin'; 24 25 25 26 if (!slug || !nonce) { 27 return; 28 } 29 30 // Server-rendered: no AJAX, no "Activating…" / "Installed!" when WooCommerce is inactive (reliable vs cp_events/class checks). 31 if ($btn.attr('data-ccew-block-wc-activate') === '1') { 32 return; 33 } 34 35 // Same pattern as Timeline + Divi: allow "Install Now"; block "Activate Now" when WooCommerce is inactive. 36 var isActivateBtn = $btn.hasClass('ccew-btn-activate') || $btn.is('[class*="-btn-activate"]'); 37 if (isActivateBtn && typeof cp_events !== 'undefined' && cp_events.woocommerce_active !== true && Array.isArray(cp_events.woocommerce_slugs) && cp_events.woocommerce_slugs.indexOf(slug) !== -1) { 26 38 return; 27 39 } … … 78 90 } 79 91 if (response && response.success) { 92 var d = response.data || {}; 93 // Installed but not auto-activated (e.g. WooCommerce-dependent add-on without Woo active). 94 if (d.activated === false) { 95 $btn.prop('disabled', false).removeClass('ccew-btn-processing'); 96 var installedLabel = (typeof cp_events !== 'undefined' && cp_events.installed_pending_wc_label) ? cp_events.installed_pending_wc_label : 'Installed!'; 97 $btn.text(installedLabel); 98 requestAnimationFrame(function () { 99 setTimeout(function () { window.location.reload(); }, 1200); 100 }); 101 return; 102 } 80 103 $btn.prop('disabled', false).removeClass('ccew-btn-processing'); 81 104 $btn.text('Activated Successfully!'); … … 95 118 enableAllBtns(); 96 119 $btn.text($btn.hasClass('ccew-btn-activate') ? 'Activate Now' : 'Install Now'); 97 // WooCommerce dependency: no alert — keep this button disabled / unclickable.98 120 if (errCode === 'woocommerce_required') { 99 $btn.prop('disabled', true).addClass('ccew-btn-dependency-disabled');100 if (typeof cp_events !== 'undefined' && cp_events.woocommerce_required_msg) {101 $btn.attr('title', cp_events.woocommerce_required_msg);102 }103 121 return; 104 122 } … … 125 143 } 126 144 if (failErrCode === 'woocommerce_required') { 127 $btn.prop('disabled', true).addClass('ccew-btn-dependency-disabled');128 if (typeof cp_events !== 'undefined' && cp_events.woocommerce_required_msg) {129 $btn.attr('title', cp_events.woocommerce_required_msg);130 }131 145 return; 132 146 } … … 147 161 var ajaxUrl = (typeof cp_events !== 'undefined' && cp_events.ajax_url) ? cp_events.ajax_url : ''; 148 162 if (!pluginSlug || !nonce || !ajaxUrl) { 163 return; 164 } 165 if (typeof cp_events !== 'undefined' && !cp_events.woocommerce_active && cp_events.woocommerce_slugs && cp_events.woocommerce_slugs.indexOf(pluginSlug) !== -1) { 149 166 return; 150 167 } … … 183 200 } 184 201 }); 185 186 // Keep Install/Activate disabled when WooCommerce is not active (dependency plugins).187 if (typeof cp_events !== 'undefined' && !cp_events.woocommerce_active && cp_events.woocommerce_slugs && cp_events.woocommerce_slugs.length) {188 cp_events.woocommerce_slugs.forEach(function (depSlug) {189 $('button[data-slug="' + depSlug + '"]').each(function () {190 var $b = $(this);191 if ($b.is('.ccew-install-plugin, [class*="-install-plugin"]')) {192 $b.prop('disabled', true).addClass('ccew-btn-dependency-disabled').attr('title', cp_events.woocommerce_required_msg || '');193 }194 });195 });196 }197 202 }); -
cryptocurrency-price-ticker-widget/trunk/cryptocurrency-price-ticker-widget.php
r3488638 r3488716 6 6 * Author: Cool Plugins 7 7 * Author URI: https://coolplugins.net/?utm_source=ccw_plugin&utm_medium=inside&utm_campaign=author_page&utm_content=plugins_list 8 * Version: 2.10. 08 * Version: 2.10.1 9 9 * License: GPL3 10 10 * Text Domain: cryptocurrency-price-ticker-widget … … 22 22 23 23 // Define constants for later use 24 define('CCPWF_VERSION', '2.10. 0');24 define('CCPWF_VERSION', '2.10.1'); 25 25 define('CCPWF_FILE', __FILE__); 26 26 define('CCPWF_DIR', plugin_dir_path(CCPWF_FILE)); -
cryptocurrency-price-ticker-widget/trunk/readme.txt
r3488638 r3488716 5 5 Tested up to: 6.9 6 6 Requires PHP:7.2 7 Stable tag: 2.10. 07 Stable tag: 2.10.1 8 8 License: GPL3 9 9 License URI: http://www.gnu.org/licenses/gpl-3.0.html … … 184 184 == Changelog == 185 185 186 = Version 2.10.1| 23 March 2026 = 187 * Fixed: Wrong plugin slug. 188 186 189 = Version 2.10.0| 23 March 2026 = 187 190 * Improved: Improved dashboard design and usability.
Note: See TracChangeset
for help on using the changeset viewer.