Changeset 3470141
- Timestamp:
- 02/26/2026 10:19:33 AM (4 weeks ago)
- Location:
- event-page-templates-addon-for-the-events-calendar
- Files:
-
- 2 deleted
- 10 edited
- 1 copied
-
tags/1.8.1 (copied) (copied from event-page-templates-addon-for-the-events-calendar/trunk)
-
tags/1.8.1/admin/events-addon-page/includes/dashboard-header.php (modified) (2 diffs)
-
tags/1.8.1/admin/feedback-notice/class-admin-notice.php (modified) (3 diffs)
-
tags/1.8.1/admin/marketing/epta-marketing.php (modified) (1 diff)
-
tags/1.8.1/assets/js/epta-admin-notice-filter.js (deleted)
-
tags/1.8.1/readme.txt (modified) (4 diffs)
-
tags/1.8.1/the-events-calendar-event-details-page-templates.php (modified) (7 diffs)
-
trunk/admin/events-addon-page/includes/dashboard-header.php (modified) (2 diffs)
-
trunk/admin/feedback-notice/class-admin-notice.php (modified) (3 diffs)
-
trunk/admin/marketing/epta-marketing.php (modified) (1 diff)
-
trunk/assets/js/epta-admin-notice-filter.js (deleted)
-
trunk/readme.txt (modified) (4 diffs)
-
trunk/the-events-calendar-event-details-page-templates.php (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
event-page-templates-addon-for-the-events-calendar/tags/1.8.1/admin/events-addon-page/includes/dashboard-header.php
r3466289 r3470141 28 28 $prefix = 'ect'; 29 29 } 30 wp_enqueue_style( 'cool-plugins-events-addon-latest-db', EPTA_PLUGIN_URL . 'admin/events-addon-page/assets/css/styles.min.css', array(), EPTA_PLUGIN_CURRENT_VERSION, 'all' ); 30 31 if (!isset($show_wrapper)) { 31 32 // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound … … 58 59 </header> 59 60 61 <div class="<?php echo esc_attr($prefix); ?>-notices-wrapper"> 62 <?php 63 // phpcs:disable WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound 64 do_action('ect_display_admin_notices'); 65 ?> 66 </div> 67 60 68 <?php if ($show_wrapper): ?> 61 69 <div class="<?php echo esc_attr($prefix); ?>-main-content-wrapper"> -
event-page-templates-addon-for-the-events-calendar/tags/1.8.1/admin/feedback-notice/class-admin-notice.php
r3466289 r3470141 63 63 } 64 64 $instance = new self; 65 // Hook into admin_enqueue_scripts for notice positioning with priority 20 to run after other styles66 add_action('admin_enqueue_scripts', array($instance, 'add_notice_positioning_inline'), 20);67 65 return self::$instance = $instance; 68 66 } … … 107 105 ); 108 106 109 add_action(' admin_notices', array($this, 'epta_show_notice'));107 add_action('ect_display_admin_notices', array($this, 'epta_show_notice')); 110 108 add_action('wp_ajax_epta_admin_review_notice_dismiss', array($this, 'epta_admin_review_notice_dismiss')); 111 109 } … … 284 282 echo wp_kses_post($er); 285 283 } 286 /**287 * Check if we're on the plugin admin pages288 *289 * @since 1.0.0290 *291 * @return bool292 */293 private function is_ect_plugin_page() {294 $screen = get_current_screen();295 if ( empty( $screen ) ) {296 return false;297 }298 299 // Check if we're on plugin pages that use the header300 $plugin_pages = array(301 'toplevel_page_cool-plugins-events-addon',302 'events-addons_page_tribe-events-shortcode-template-settings',303 'events-addons_page_cool-events-registration',304 );305 306 return in_array( $screen->id, $plugin_pages, true );307 }308 309 /**310 * Add inline CSS and JavaScript for notice positioning on plugin pages311 *312 * @since 1.0.0313 *314 * @return void315 */316 public function add_notice_positioning_inline() {317 if ( ! $this->is_ect_plugin_page() ) {318 return;319 }320 321 // Ensure jQuery is enqueued322 wp_enqueue_script( 'jquery' );323 324 // Add inline CSS325 $css = "326 /* Notice positioning for plugin pages */327 body.toplevel_page_cool-plugins-events-addon .notice,328 body.toplevel_page_cool-plugins-events-addon .error,329 body.toplevel_page_cool-plugins-events-addon .updated,330 body.toplevel_page_cool-plugins-events-addon .notice-error,331 body.toplevel_page_cool-plugins-events-addon .notice-warning,332 body.toplevel_page_cool-plugins-events-addon .notice-info,333 body.toplevel_page_cool-plugins-events-addon .notice-success,334 body.events-addons_page_tribe-events-shortcode-template-settings .notice,335 body.events-addons_page_tribe-events-shortcode-template-settings .error,336 body.events-addons_page_tribe-events-shortcode-template-settings .updated,337 body.events-addons_page_tribe-events-shortcode-template-settings .notice-error,338 body.events-addons_page_tribe-events-shortcode-template-settings .notice-warning,339 body.events-addons_page_tribe-events-shortcode-template-settings .notice-info,340 body.events-addons_page_tribe-events-shortcode-template-settings .notice-success,341 body.events-addons_page_cool-events-registration .notice,342 body.events-addons_page_cool-events-registration .error,343 body.events-addons_page_cool-events-registration .updated,344 body.events-addons_page_cool-events-registration .notice-error,345 body.events-addons_page_cool-events-registration .notice-warning,346 body.events-addons_page_cool-events-registration .notice-info,347 body.events-addons_page_cool-events-registration .notice-success {348 display: none !important;349 margin-left: 2rem;350 }351 352 /* Keep inline notices inside license box visible (do NOT move them) */353 body.toplevel_page_cool-plugins-events-addon [class*=\"license-box\"] .notice,354 body.toplevel_page_cool-plugins-events-addon [class*=\"license-box\"] .error,355 body.toplevel_page_cool-plugins-events-addon [class*=\"license-box\"] .updated,356 body.toplevel_page_cool-plugins-events-addon [class*=\"license-box\"] .notice-error,357 body.toplevel_page_cool-plugins-events-addon [class*=\"license-box\"] .notice-warning,358 body.toplevel_page_cool-plugins-events-addon [class*=\"license-box\"] .notice-info,359 body.toplevel_page_cool-plugins-events-addon [class*=\"license-box\"] .notice-success,360 body.events-addons_page_tribe-events-shortcode-template-settings [class*=\"license-box\"] .notice,361 body.events-addons_page_tribe-events-shortcode-template-settings [class*=\"license-box\"] .error,362 body.events-addons_page_tribe-events-shortcode-template-settings [class*=\"license-box\"] .updated,363 body.events-addons_page_tribe-events-shortcode-template-settings [class*=\"license-box\"] .notice-error,364 body.events-addons_page_tribe-events-shortcode-template-settings [class*=\"license-box\"] .notice-warning,365 body.events-addons_page_tribe-events-shortcode-template-settings [class*=\"license-box\"] .notice-info,366 body.events-addons_page_tribe-events-shortcode-template-settings [class*=\"license-box\"] .notice-success,367 body.events-addons_page_cool-events-registration [class*=\"license-box\"] .notice,368 body.events-addons_page_cool-events-registration [class*=\"license-box\"] .error,369 body.events-addons_page_cool-events-registration [class*=\"license-box\"] .updated,370 body.events-addons_page_cool-events-registration [class*=\"license-box\"] .notice-error,371 body.events-addons_page_cool-events-registration [class*=\"license-box\"] .notice-warning,372 body.events-addons_page_cool-events-registration [class*=\"license-box\"] .notice-info,373 body.events-addons_page_cool-events-registration [class*=\"license-box\"] .notice-success {374 display: block !important;375 margin-left: 0;376 margin-right: 0;377 width: auto;378 }379 380 /* Show notices after they are moved */381 body.toplevel_page_cool-plugins-events-addon .ect-moved-notice,382 body.events-addons_page_tribe-events-shortcode-template-settings .ect-moved-notice,383 body.events-addons_page_cool-events-registration .ect-moved-notice {384 display: block !important;385 margin-left: 2rem;386 margin-right: 2rem;387 width: auto;388 }389 ";390 391 // Register and enqueue a style handle for notice positioning if not already done392 if ( ! wp_style_is( 'ect-notice-positioning', 'registered' ) ) {393 wp_register_style( 'ect-notice-positioning', null, null, EPTA_PLUGIN_CURRENT_VERSION );394 }395 wp_enqueue_style( 'ect-notice-positioning' );396 wp_add_inline_style( 'ect-notice-positioning', $css );397 398 // Add inline JavaScript399 $js = "400 jQuery(document).ready(function($) {401 // Wait for the page to load402 setTimeout(function() {403 // Move ONLY top admin notices (page top) - do not touch inline/content notices404 // Also: jis notice me yeh text aaye, usko move mat karo (neeche hi rahe)405 var skipText = 'to continue receiving updates and priority support.';406 var topNotices = $('#wpbody-content').find(407 '> .notice, > .error, > .updated, > .notice-error, > .notice-warning, > .notice-info, > .notice-success,' +408 '> .wrap > .notice, > .wrap > .error, > .wrap > .updated, > .wrap > .notice-error, > .wrap > .notice-warning, > .wrap > .notice-info, > .wrap > .notice-success'409 );410 411 var noticesToMove = topNotices.filter(function() {412 var txt = $(this).text() || '';413 return txt.indexOf(skipText) === -1;414 });415 416 if (noticesToMove.length > 0) {417 var headerContainer = $('.ect-top-header');418 if (headerContainer.length > 0) {419 noticesToMove.detach().insertAfter(headerContainer);420 noticesToMove.addClass('ect-moved-notice');421 }422 }423 }, 100);424 });425 ";426 wp_add_inline_script( 'jquery', $js );427 }428 284 429 285 } // end of main class epta_admin_notices; -
event-page-templates-addon-for-the-events-calendar/tags/1.8.1/admin/marketing/epta-marketing.php
r3466289 r3470141 23 23 24 24 if (!array_key_exists('event-single-page-builder-pro/event-single-page-builder-pro.php', $all_plugins)) { 25 add_action(' admin_notices', [$this, 'show_elementor_epta_notice']);25 add_action('ect_display_admin_notices', [$this, 'show_elementor_epta_notice']); 26 26 } 27 27 add_action('wp_ajax_epta_dismiss_notice', [$this, 'epta_dismiss_notice']); -
event-page-templates-addon-for-the-events-calendar/tags/1.8.1/readme.txt
r3466291 r3470141 6 6 Tested up to: 6.9 7 7 Requires PHP: 7.2 8 Stable tag: 1.8. 08 Stable tag: 1.8.1 9 9 License: GPLv2 or later 10 10 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 102 102 103 103 104 ** Third-Party Services:** To improve the plugin experience this pluginoffers optional usage tracking and an optional feedback form during deactivation. Data is sent only after explicit user consent. No hidden tracking is performed, and no frontend visitor or personal site user data is collected. For complete details, please review our [Data Usage Policy](https://my.coolplugins.net/terms/usage-tracking/), [TOS](https://my.coolplugins.net/terms/), and [Privacy Policy](https://my.coolplugins.net/terms/privacy-policy/). It also uses [CMB2](https://github.com/CMB2/CMB2/tree/develop?tab=GPL-3.0-1-ov-file) for the settings panel (GPL licensed).104 **Use of Third-Party Services:** To improve the plugin experience, this plugin connects to the Cool Plugins API to display related plugins information inside its dashboard. It also offers optional usage tracking and an optional feedback form during deactivation. Data is sent only after explicit user consent. No hidden tracking is performed, and no frontend visitor or personal site user data is collected. For complete details, please review our [Data Usage Policy](https://my.coolplugins.net/terms/usage-tracking/), [TOS](https://my.coolplugins.net/terms/), and [Privacy Policy](https://my.coolplugins.net/terms/privacy-policy/). It also uses [CMB2](https://github.com/CMB2/CMB2/tree/develop?tab=GPL-3.0-1-ov-file) for the settings panel (GPL licensed). 105 105 106 106 **Disclaimer:** Event Single Page Builder For The Events Calendar is developed by Cool Plugins and is not affiliated with or endorsed by The Events Calendar team (a product of StellarWP, Liquid Web). Some links in this plugin or its readme may be affiliate links, meaning we may earn a commission at no extra cost to you. 107 107 108 108 109 == Installation == … … 171 172 172 173 == Screenshots == 173 174 174 1. Single Event Page Template 175 175 2. Event Single Page Template Settings … … 178 178 179 179 == Changelog == 180 181 = 1.8.1 | FEB 26, 2026 = 182 * Fixed: Minor styling issues for better UI consistency. 183 * Improved: Code structure and performance optimization. 180 184 181 185 = 1.8.0 | FEB 21, 2026 = -
event-page-templates-addon-for-the-events-calendar/tags/1.8.1/the-events-calendar-event-details-page-templates.php
r3466289 r3470141 4 4 Plugin URI: https://eventscalendaraddons.com/plugin/event-single-page-builder-pro/?utm_source=epta_plugin&utm_medium=inside&utm_campaign=get_pro&utm_content=plugin_uri 5 5 Description: <a href="http://wordpress.org/plugins/the-events-calendar/"><b>📅 The Events Calendar Addon</b></a> - Design The Event Calendar plugin event single page template with custom colors and fonts. 6 Version: 1.8. 06 Version: 1.8.1 7 7 Author: Cool Plugins 8 8 Author URI: https://coolplugins.net/?utm_source=epta_plugin&utm_medium=inside&utm_campaign=author_page&utm_content=plugins_list … … 19 19 } 20 20 if (!defined('EPTA_PLUGIN_CURRENT_VERSION')) { 21 define('EPTA_PLUGIN_CURRENT_VERSION', '1.8. 0');21 define('EPTA_PLUGIN_CURRENT_VERSION', '1.8.1'); 22 22 } 23 23 define('EPTA_PLUGIN_FILE', __FILE__); … … 59 59 add_action('cmb2_admin_init', array($this, 'cmb2_tecsbp_metaboxes')); 60 60 add_action('save_post_epta', array($this, 'save_event_meta_data'), 1, 2); 61 add_action( 'all_admin_notices', array( $this, 'epta_display_header' ), 1 ); 62 } 63 61 add_action( 'admin_notices', array( $this, 'epta_display_header' ), 1 ); 62 add_action('admin_print_scripts', [$this, 'ect_hide_unrelated_notices']); 63 } 64 65 public function ect_hide_unrelated_notices(){ 66 67 // phpcs:ignore Generic.Metrics.CyclomaticComplexity.MaxExceeded, Generic.Metrics.NestingLevel.MaxExceeded 68 $events_pages = false; 69 // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Checking page parameter to conditionally hide notices, no data processing 70 if (isset($_GET['page'])) { 71 72 // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Checking page parameter to conditionally hide notices, no data processing 73 $page_param = isset($_GET['page']) ? sanitize_key(wp_unslash($_GET['page'])) : ''; 74 75 $allowed_pages = array( 76 'cool-plugins-events-addon', 77 'cool-events-registration', 78 'tribe-events-shortcode-template-settings', 79 'tribe_events-events-template-settings', 80 'countdown_for_the_events_calendar', 81 'esas-speaker-sponsor-settings', 82 'esas_speaker', 83 'esas_sponsor', 84 'ewpe', 85 'epta' 86 ); 87 88 if (in_array($page_param, $allowed_pages, true)) { 89 $events_pages = true; 90 } 91 } 92 93 $is_post_type_page = false; 94 95 $current_screen = get_current_screen(); 96 97 if ( $current_screen && ! empty( $current_screen->post_type ) ) { 98 99 $allowed_post_types = array( 100 'esas_speaker', 101 'esas_sponsor', 102 'epta', 103 'ewpe' 104 ); 105 106 if ( in_array( $current_screen->post_type, $allowed_post_types, true ) ) { 107 $is_post_type_page = true; 108 } 109 } 110 if ($events_pages) { 111 global $wp_filter; 112 // Define rules to remove callbacks. 113 $rules = [ 114 'user_admin_notices' => [], // remove all callbacks. 115 'admin_notices' => [], 116 'all_admin_notices' => [], 117 'admin_footer' => [ 118 'render_delayed_admin_notices', // remove this particular callback. 119 ], 120 ]; 121 $notice_types = array_keys($rules); 122 foreach ($notice_types as $notice_type) { 123 if (empty($wp_filter[$notice_type]) || empty($wp_filter[$notice_type]->callbacks) || ! is_array($wp_filter[$notice_type]->callbacks)) { 124 continue; 125 } 126 $remove_all_filters = empty($rules[$notice_type]); 127 foreach ($wp_filter[$notice_type]->callbacks as $priority => $hooks) { 128 foreach ($hooks as $name => $arr) { 129 if (is_object($arr['function']) && is_callable($arr['function'])) { 130 if ($remove_all_filters) { 131 unset($wp_filter[$notice_type]->callbacks[$priority][$name]); 132 } 133 continue; 134 } 135 $class = ! empty($arr['function'][0]) && is_object($arr['function'][0]) ? strtolower(get_class($arr['function'][0])) : ''; 136 // Remove all callbacks except WPForms notices. 137 if ($remove_all_filters && strpos($class, 'wpforms') === false) { 138 unset($wp_filter[$notice_type]->callbacks[$priority][$name]); 139 continue; 140 } 141 $cb = is_array($arr['function']) ? $arr['function'][1] : $arr['function']; 142 // Remove a specific callback. 143 if (! $remove_all_filters) { 144 if (in_array($cb, $rules[$notice_type], true)) { 145 unset($wp_filter[$notice_type]->callbacks[$priority][$name]); 146 } 147 continue; 148 } 149 } 150 } 151 } 152 } 153 154 // phpcs:disable WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound, WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedConstantFound 155 if (!$events_pages && !$is_post_type_page) { 156 157 // ✅ GLOBAL LOCK SYSTEM 158 if (!defined('ECT_ADMIN_NOTICE_HOOKED')) { 159 160 define('ECT_ADMIN_NOTICE_HOOKED', true); 161 162 add_action( 163 'admin_notices', 164 array($this, 'ect_dash_admin_notices'), 165 PHP_INT_MAX 166 ); 167 } 168 } 169 } 170 171 public function ect_dash_admin_notices() { 172 173 // ✅ Double render protection 174 if (defined('ECT_ADMIN_NOTICE_RENDERED')) { 175 return; 176 } 177 178 define('ECT_ADMIN_NOTICE_RENDERED', true); 179 180 do_action('ect_display_admin_notices'); 181 } 64 182 65 183 /** … … 424 542 return; 425 543 } 426 global $ post, $typenow, $current_screen;544 global $current_screen; 427 545 428 546 // Check if we're on epta post type pages … … 431 549 if ( $current_screen && isset( $current_screen->post_type ) && $current_screen->post_type === 'epta' ) { 432 550 $is_epta_page = true; 433 } elseif ( $typenow && $typenow === 'epta' ) {434 $is_epta_page = true;435 } elseif ( isset( $_REQUEST['post_type'] ) && sanitize_key( $_REQUEST['post_type'] ) === 'epta' ) {436 $is_epta_page = true;437 } elseif ( $post && get_post_type( $post ) === 'epta' ) {438 $is_epta_page = true;439 551 } 440 552 441 $show_header = $this->epta_required_plugin_display_header(); 442 if ( $is_epta_page && $show_header ) { 553 if ( $is_epta_page ) { 443 554 // Add CSS to position header at top 444 555 ?> … … 638 749 } 639 750 } 640 public static function epta_required_plugin_display_header() {641 // Required plugins list (path + minimum version)642 $required_plugins = [643 'countdown-for-the-events-calendar/countdown-for-events-calendar.php' => '1.4.16',644 'cp-events-calendar-modules-for-divi-pro/cp-events-calendar-modules-for-divi-pro.php' => '2.0.2',645 'event-page-templates-addon-for-the-events-calendar/the-events-calendar-event-details-page-templates.php' => '1.7.15',646 'events-block-for-the-events-calendar/events-block-for-the-event-calender.php' => '1.3.12',647 'event-single-page-builder-pro/event-single-page-builder-pro.php' => '2.0.1',648 'events-search-addon-for-the-events-calendar/events-calendar-search-addon.php' => '1.2.18',649 'events-speakers-and-sponsors/events-speakers-and-sponsors.php' => '1.1.1',650 'events-widgets-for-elementor-and-the-events-calendar/events-widgets-for-elementor-and-the-events-calendar.php' => '1.6.28',651 'events-widgets-pro/events-widgets-pro.php' => '3.0.1',652 'template-events-calendar/events-calendar-templates.php' => '2.5.4',653 'the-events-calendar-templates-and-shortcode/the-events-calendar-templates-and-shortcode.php' => '4.0.1',654 ];655 656 $show_header = true;657 658 // Loop through all plugins659 foreach ($required_plugins as $plugin_path => $min_version) {660 661 // Plugin active hai?662 if (is_plugin_active($plugin_path)) {663 664 // Plugin data get karo665 $plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin_path);666 $current_version = $plugin_data['Version'];667 668 // Version check669 if (version_compare($current_version, $min_version, '<=')) {670 $show_header = false;671 break;672 }673 }674 }675 return $show_header;676 }677 678 679 751 /** 680 752 * Admin side css … … 684 756 wp_enqueue_style('tecset-sg-icon', plugins_url('/assets/css/epta-admin.css', __FILE__), array(), EPTA_PLUGIN_CURRENT_VERSION); 685 757 wp_enqueue_script('tecset-select-temp', plugins_url('/assets/js/epta-template-preview.js', __FILE__), array(), EPTA_PLUGIN_CURRENT_VERSION, true); 686 $show_header = $this->epta_required_plugin_display_header();687 $screen = get_current_screen();688 $screen_id = $screen ? $screen->id : '';689 $parent_file = ['events-addons_page_tribe-events-shortcode-template-settings',690 'events-addons_page_tribe_events-events-template-settings',691 'toplevel_page_cool-plugins-events-addon',692 'events-addons_page_cool-events-registration',693 'events-addons_page_countdown_for_the_events_calendar',694 'edit-epta',695 'edit-esas_speaker',696 'edit-esas_sponsor',697 'events-addons_page_esas-speaker-sponsor-settings',698 'edit-ewpe'];699 if (in_array($screen_id, $parent_file)){700 wp_enqueue_style( 'cool-plugins-events-addon', EPTA_PLUGIN_URL . 'admin/events-addon-page/assets/css/styles.min.css', array(), EPTA_PLUGIN_CURRENT_VERSION, 'all' );701 }702 if($show_header && in_array($screen_id, $parent_file)) {703 704 // Common admin notice filter script (runs only on our target pages)705 wp_enqueue_script(706 'epta-admin-notice-filter',707 EPTA_PLUGIN_URL . 'assets/js/epta-admin-notice-filter.js',708 array( 'jquery' ),709 EPTA_PLUGIN_CURRENT_VERSION,710 true711 );712 713 wp_localize_script(714 'epta-admin-notice-filter',715 'epta_notice_filter',716 array(717 'nonce' => wp_create_nonce( 'epta_notice_filter' ),718 'allowedBodyClasses' => array(719 'events-addons_page_tribe-events-shortcode-template-settings',720 'events-addons_page_tribe_events-events-template-settings',721 'toplevel_page_cool-plugins-events-addon',722 'events-addons_page_cool-events-registration',723 'events-addons_page_countdown_for_the_events_calendar',724 'post-type-epta',725 'post-type-esas_speaker',726 'post-type-esas_sponsor',727 'events-addons_page_esas-speaker-sponsor-settings',728 'post-type-ewpe',729 ),730 )731 );732 }733 758 } 734 759 /** -
event-page-templates-addon-for-the-events-calendar/trunk/admin/events-addon-page/includes/dashboard-header.php
r3466289 r3470141 28 28 $prefix = 'ect'; 29 29 } 30 wp_enqueue_style( 'cool-plugins-events-addon-latest-db', EPTA_PLUGIN_URL . 'admin/events-addon-page/assets/css/styles.min.css', array(), EPTA_PLUGIN_CURRENT_VERSION, 'all' ); 30 31 if (!isset($show_wrapper)) { 31 32 // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound … … 58 59 </header> 59 60 61 <div class="<?php echo esc_attr($prefix); ?>-notices-wrapper"> 62 <?php 63 // phpcs:disable WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound 64 do_action('ect_display_admin_notices'); 65 ?> 66 </div> 67 60 68 <?php if ($show_wrapper): ?> 61 69 <div class="<?php echo esc_attr($prefix); ?>-main-content-wrapper"> -
event-page-templates-addon-for-the-events-calendar/trunk/admin/feedback-notice/class-admin-notice.php
r3466289 r3470141 63 63 } 64 64 $instance = new self; 65 // Hook into admin_enqueue_scripts for notice positioning with priority 20 to run after other styles66 add_action('admin_enqueue_scripts', array($instance, 'add_notice_positioning_inline'), 20);67 65 return self::$instance = $instance; 68 66 } … … 107 105 ); 108 106 109 add_action(' admin_notices', array($this, 'epta_show_notice'));107 add_action('ect_display_admin_notices', array($this, 'epta_show_notice')); 110 108 add_action('wp_ajax_epta_admin_review_notice_dismiss', array($this, 'epta_admin_review_notice_dismiss')); 111 109 } … … 284 282 echo wp_kses_post($er); 285 283 } 286 /**287 * Check if we're on the plugin admin pages288 *289 * @since 1.0.0290 *291 * @return bool292 */293 private function is_ect_plugin_page() {294 $screen = get_current_screen();295 if ( empty( $screen ) ) {296 return false;297 }298 299 // Check if we're on plugin pages that use the header300 $plugin_pages = array(301 'toplevel_page_cool-plugins-events-addon',302 'events-addons_page_tribe-events-shortcode-template-settings',303 'events-addons_page_cool-events-registration',304 );305 306 return in_array( $screen->id, $plugin_pages, true );307 }308 309 /**310 * Add inline CSS and JavaScript for notice positioning on plugin pages311 *312 * @since 1.0.0313 *314 * @return void315 */316 public function add_notice_positioning_inline() {317 if ( ! $this->is_ect_plugin_page() ) {318 return;319 }320 321 // Ensure jQuery is enqueued322 wp_enqueue_script( 'jquery' );323 324 // Add inline CSS325 $css = "326 /* Notice positioning for plugin pages */327 body.toplevel_page_cool-plugins-events-addon .notice,328 body.toplevel_page_cool-plugins-events-addon .error,329 body.toplevel_page_cool-plugins-events-addon .updated,330 body.toplevel_page_cool-plugins-events-addon .notice-error,331 body.toplevel_page_cool-plugins-events-addon .notice-warning,332 body.toplevel_page_cool-plugins-events-addon .notice-info,333 body.toplevel_page_cool-plugins-events-addon .notice-success,334 body.events-addons_page_tribe-events-shortcode-template-settings .notice,335 body.events-addons_page_tribe-events-shortcode-template-settings .error,336 body.events-addons_page_tribe-events-shortcode-template-settings .updated,337 body.events-addons_page_tribe-events-shortcode-template-settings .notice-error,338 body.events-addons_page_tribe-events-shortcode-template-settings .notice-warning,339 body.events-addons_page_tribe-events-shortcode-template-settings .notice-info,340 body.events-addons_page_tribe-events-shortcode-template-settings .notice-success,341 body.events-addons_page_cool-events-registration .notice,342 body.events-addons_page_cool-events-registration .error,343 body.events-addons_page_cool-events-registration .updated,344 body.events-addons_page_cool-events-registration .notice-error,345 body.events-addons_page_cool-events-registration .notice-warning,346 body.events-addons_page_cool-events-registration .notice-info,347 body.events-addons_page_cool-events-registration .notice-success {348 display: none !important;349 margin-left: 2rem;350 }351 352 /* Keep inline notices inside license box visible (do NOT move them) */353 body.toplevel_page_cool-plugins-events-addon [class*=\"license-box\"] .notice,354 body.toplevel_page_cool-plugins-events-addon [class*=\"license-box\"] .error,355 body.toplevel_page_cool-plugins-events-addon [class*=\"license-box\"] .updated,356 body.toplevel_page_cool-plugins-events-addon [class*=\"license-box\"] .notice-error,357 body.toplevel_page_cool-plugins-events-addon [class*=\"license-box\"] .notice-warning,358 body.toplevel_page_cool-plugins-events-addon [class*=\"license-box\"] .notice-info,359 body.toplevel_page_cool-plugins-events-addon [class*=\"license-box\"] .notice-success,360 body.events-addons_page_tribe-events-shortcode-template-settings [class*=\"license-box\"] .notice,361 body.events-addons_page_tribe-events-shortcode-template-settings [class*=\"license-box\"] .error,362 body.events-addons_page_tribe-events-shortcode-template-settings [class*=\"license-box\"] .updated,363 body.events-addons_page_tribe-events-shortcode-template-settings [class*=\"license-box\"] .notice-error,364 body.events-addons_page_tribe-events-shortcode-template-settings [class*=\"license-box\"] .notice-warning,365 body.events-addons_page_tribe-events-shortcode-template-settings [class*=\"license-box\"] .notice-info,366 body.events-addons_page_tribe-events-shortcode-template-settings [class*=\"license-box\"] .notice-success,367 body.events-addons_page_cool-events-registration [class*=\"license-box\"] .notice,368 body.events-addons_page_cool-events-registration [class*=\"license-box\"] .error,369 body.events-addons_page_cool-events-registration [class*=\"license-box\"] .updated,370 body.events-addons_page_cool-events-registration [class*=\"license-box\"] .notice-error,371 body.events-addons_page_cool-events-registration [class*=\"license-box\"] .notice-warning,372 body.events-addons_page_cool-events-registration [class*=\"license-box\"] .notice-info,373 body.events-addons_page_cool-events-registration [class*=\"license-box\"] .notice-success {374 display: block !important;375 margin-left: 0;376 margin-right: 0;377 width: auto;378 }379 380 /* Show notices after they are moved */381 body.toplevel_page_cool-plugins-events-addon .ect-moved-notice,382 body.events-addons_page_tribe-events-shortcode-template-settings .ect-moved-notice,383 body.events-addons_page_cool-events-registration .ect-moved-notice {384 display: block !important;385 margin-left: 2rem;386 margin-right: 2rem;387 width: auto;388 }389 ";390 391 // Register and enqueue a style handle for notice positioning if not already done392 if ( ! wp_style_is( 'ect-notice-positioning', 'registered' ) ) {393 wp_register_style( 'ect-notice-positioning', null, null, EPTA_PLUGIN_CURRENT_VERSION );394 }395 wp_enqueue_style( 'ect-notice-positioning' );396 wp_add_inline_style( 'ect-notice-positioning', $css );397 398 // Add inline JavaScript399 $js = "400 jQuery(document).ready(function($) {401 // Wait for the page to load402 setTimeout(function() {403 // Move ONLY top admin notices (page top) - do not touch inline/content notices404 // Also: jis notice me yeh text aaye, usko move mat karo (neeche hi rahe)405 var skipText = 'to continue receiving updates and priority support.';406 var topNotices = $('#wpbody-content').find(407 '> .notice, > .error, > .updated, > .notice-error, > .notice-warning, > .notice-info, > .notice-success,' +408 '> .wrap > .notice, > .wrap > .error, > .wrap > .updated, > .wrap > .notice-error, > .wrap > .notice-warning, > .wrap > .notice-info, > .wrap > .notice-success'409 );410 411 var noticesToMove = topNotices.filter(function() {412 var txt = $(this).text() || '';413 return txt.indexOf(skipText) === -1;414 });415 416 if (noticesToMove.length > 0) {417 var headerContainer = $('.ect-top-header');418 if (headerContainer.length > 0) {419 noticesToMove.detach().insertAfter(headerContainer);420 noticesToMove.addClass('ect-moved-notice');421 }422 }423 }, 100);424 });425 ";426 wp_add_inline_script( 'jquery', $js );427 }428 284 429 285 } // end of main class epta_admin_notices; -
event-page-templates-addon-for-the-events-calendar/trunk/admin/marketing/epta-marketing.php
r3466289 r3470141 23 23 24 24 if (!array_key_exists('event-single-page-builder-pro/event-single-page-builder-pro.php', $all_plugins)) { 25 add_action(' admin_notices', [$this, 'show_elementor_epta_notice']);25 add_action('ect_display_admin_notices', [$this, 'show_elementor_epta_notice']); 26 26 } 27 27 add_action('wp_ajax_epta_dismiss_notice', [$this, 'epta_dismiss_notice']); -
event-page-templates-addon-for-the-events-calendar/trunk/readme.txt
r3466291 r3470141 6 6 Tested up to: 6.9 7 7 Requires PHP: 7.2 8 Stable tag: 1.8. 08 Stable tag: 1.8.1 9 9 License: GPLv2 or later 10 10 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 102 102 103 103 104 ** Third-Party Services:** To improve the plugin experience this pluginoffers optional usage tracking and an optional feedback form during deactivation. Data is sent only after explicit user consent. No hidden tracking is performed, and no frontend visitor or personal site user data is collected. For complete details, please review our [Data Usage Policy](https://my.coolplugins.net/terms/usage-tracking/), [TOS](https://my.coolplugins.net/terms/), and [Privacy Policy](https://my.coolplugins.net/terms/privacy-policy/). It also uses [CMB2](https://github.com/CMB2/CMB2/tree/develop?tab=GPL-3.0-1-ov-file) for the settings panel (GPL licensed).104 **Use of Third-Party Services:** To improve the plugin experience, this plugin connects to the Cool Plugins API to display related plugins information inside its dashboard. It also offers optional usage tracking and an optional feedback form during deactivation. Data is sent only after explicit user consent. No hidden tracking is performed, and no frontend visitor or personal site user data is collected. For complete details, please review our [Data Usage Policy](https://my.coolplugins.net/terms/usage-tracking/), [TOS](https://my.coolplugins.net/terms/), and [Privacy Policy](https://my.coolplugins.net/terms/privacy-policy/). It also uses [CMB2](https://github.com/CMB2/CMB2/tree/develop?tab=GPL-3.0-1-ov-file) for the settings panel (GPL licensed). 105 105 106 106 **Disclaimer:** Event Single Page Builder For The Events Calendar is developed by Cool Plugins and is not affiliated with or endorsed by The Events Calendar team (a product of StellarWP, Liquid Web). Some links in this plugin or its readme may be affiliate links, meaning we may earn a commission at no extra cost to you. 107 107 108 108 109 == Installation == … … 171 172 172 173 == Screenshots == 173 174 174 1. Single Event Page Template 175 175 2. Event Single Page Template Settings … … 178 178 179 179 == Changelog == 180 181 = 1.8.1 | FEB 26, 2026 = 182 * Fixed: Minor styling issues for better UI consistency. 183 * Improved: Code structure and performance optimization. 180 184 181 185 = 1.8.0 | FEB 21, 2026 = -
event-page-templates-addon-for-the-events-calendar/trunk/the-events-calendar-event-details-page-templates.php
r3466289 r3470141 4 4 Plugin URI: https://eventscalendaraddons.com/plugin/event-single-page-builder-pro/?utm_source=epta_plugin&utm_medium=inside&utm_campaign=get_pro&utm_content=plugin_uri 5 5 Description: <a href="http://wordpress.org/plugins/the-events-calendar/"><b>📅 The Events Calendar Addon</b></a> - Design The Event Calendar plugin event single page template with custom colors and fonts. 6 Version: 1.8. 06 Version: 1.8.1 7 7 Author: Cool Plugins 8 8 Author URI: https://coolplugins.net/?utm_source=epta_plugin&utm_medium=inside&utm_campaign=author_page&utm_content=plugins_list … … 19 19 } 20 20 if (!defined('EPTA_PLUGIN_CURRENT_VERSION')) { 21 define('EPTA_PLUGIN_CURRENT_VERSION', '1.8. 0');21 define('EPTA_PLUGIN_CURRENT_VERSION', '1.8.1'); 22 22 } 23 23 define('EPTA_PLUGIN_FILE', __FILE__); … … 59 59 add_action('cmb2_admin_init', array($this, 'cmb2_tecsbp_metaboxes')); 60 60 add_action('save_post_epta', array($this, 'save_event_meta_data'), 1, 2); 61 add_action( 'all_admin_notices', array( $this, 'epta_display_header' ), 1 ); 62 } 63 61 add_action( 'admin_notices', array( $this, 'epta_display_header' ), 1 ); 62 add_action('admin_print_scripts', [$this, 'ect_hide_unrelated_notices']); 63 } 64 65 public function ect_hide_unrelated_notices(){ 66 67 // phpcs:ignore Generic.Metrics.CyclomaticComplexity.MaxExceeded, Generic.Metrics.NestingLevel.MaxExceeded 68 $events_pages = false; 69 // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Checking page parameter to conditionally hide notices, no data processing 70 if (isset($_GET['page'])) { 71 72 // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Checking page parameter to conditionally hide notices, no data processing 73 $page_param = isset($_GET['page']) ? sanitize_key(wp_unslash($_GET['page'])) : ''; 74 75 $allowed_pages = array( 76 'cool-plugins-events-addon', 77 'cool-events-registration', 78 'tribe-events-shortcode-template-settings', 79 'tribe_events-events-template-settings', 80 'countdown_for_the_events_calendar', 81 'esas-speaker-sponsor-settings', 82 'esas_speaker', 83 'esas_sponsor', 84 'ewpe', 85 'epta' 86 ); 87 88 if (in_array($page_param, $allowed_pages, true)) { 89 $events_pages = true; 90 } 91 } 92 93 $is_post_type_page = false; 94 95 $current_screen = get_current_screen(); 96 97 if ( $current_screen && ! empty( $current_screen->post_type ) ) { 98 99 $allowed_post_types = array( 100 'esas_speaker', 101 'esas_sponsor', 102 'epta', 103 'ewpe' 104 ); 105 106 if ( in_array( $current_screen->post_type, $allowed_post_types, true ) ) { 107 $is_post_type_page = true; 108 } 109 } 110 if ($events_pages) { 111 global $wp_filter; 112 // Define rules to remove callbacks. 113 $rules = [ 114 'user_admin_notices' => [], // remove all callbacks. 115 'admin_notices' => [], 116 'all_admin_notices' => [], 117 'admin_footer' => [ 118 'render_delayed_admin_notices', // remove this particular callback. 119 ], 120 ]; 121 $notice_types = array_keys($rules); 122 foreach ($notice_types as $notice_type) { 123 if (empty($wp_filter[$notice_type]) || empty($wp_filter[$notice_type]->callbacks) || ! is_array($wp_filter[$notice_type]->callbacks)) { 124 continue; 125 } 126 $remove_all_filters = empty($rules[$notice_type]); 127 foreach ($wp_filter[$notice_type]->callbacks as $priority => $hooks) { 128 foreach ($hooks as $name => $arr) { 129 if (is_object($arr['function']) && is_callable($arr['function'])) { 130 if ($remove_all_filters) { 131 unset($wp_filter[$notice_type]->callbacks[$priority][$name]); 132 } 133 continue; 134 } 135 $class = ! empty($arr['function'][0]) && is_object($arr['function'][0]) ? strtolower(get_class($arr['function'][0])) : ''; 136 // Remove all callbacks except WPForms notices. 137 if ($remove_all_filters && strpos($class, 'wpforms') === false) { 138 unset($wp_filter[$notice_type]->callbacks[$priority][$name]); 139 continue; 140 } 141 $cb = is_array($arr['function']) ? $arr['function'][1] : $arr['function']; 142 // Remove a specific callback. 143 if (! $remove_all_filters) { 144 if (in_array($cb, $rules[$notice_type], true)) { 145 unset($wp_filter[$notice_type]->callbacks[$priority][$name]); 146 } 147 continue; 148 } 149 } 150 } 151 } 152 } 153 154 // phpcs:disable WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound, WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedConstantFound 155 if (!$events_pages && !$is_post_type_page) { 156 157 // ✅ GLOBAL LOCK SYSTEM 158 if (!defined('ECT_ADMIN_NOTICE_HOOKED')) { 159 160 define('ECT_ADMIN_NOTICE_HOOKED', true); 161 162 add_action( 163 'admin_notices', 164 array($this, 'ect_dash_admin_notices'), 165 PHP_INT_MAX 166 ); 167 } 168 } 169 } 170 171 public function ect_dash_admin_notices() { 172 173 // ✅ Double render protection 174 if (defined('ECT_ADMIN_NOTICE_RENDERED')) { 175 return; 176 } 177 178 define('ECT_ADMIN_NOTICE_RENDERED', true); 179 180 do_action('ect_display_admin_notices'); 181 } 64 182 65 183 /** … … 424 542 return; 425 543 } 426 global $ post, $typenow, $current_screen;544 global $current_screen; 427 545 428 546 // Check if we're on epta post type pages … … 431 549 if ( $current_screen && isset( $current_screen->post_type ) && $current_screen->post_type === 'epta' ) { 432 550 $is_epta_page = true; 433 } elseif ( $typenow && $typenow === 'epta' ) {434 $is_epta_page = true;435 } elseif ( isset( $_REQUEST['post_type'] ) && sanitize_key( $_REQUEST['post_type'] ) === 'epta' ) {436 $is_epta_page = true;437 } elseif ( $post && get_post_type( $post ) === 'epta' ) {438 $is_epta_page = true;439 551 } 440 552 441 $show_header = $this->epta_required_plugin_display_header(); 442 if ( $is_epta_page && $show_header ) { 553 if ( $is_epta_page ) { 443 554 // Add CSS to position header at top 444 555 ?> … … 638 749 } 639 750 } 640 public static function epta_required_plugin_display_header() {641 // Required plugins list (path + minimum version)642 $required_plugins = [643 'countdown-for-the-events-calendar/countdown-for-events-calendar.php' => '1.4.16',644 'cp-events-calendar-modules-for-divi-pro/cp-events-calendar-modules-for-divi-pro.php' => '2.0.2',645 'event-page-templates-addon-for-the-events-calendar/the-events-calendar-event-details-page-templates.php' => '1.7.15',646 'events-block-for-the-events-calendar/events-block-for-the-event-calender.php' => '1.3.12',647 'event-single-page-builder-pro/event-single-page-builder-pro.php' => '2.0.1',648 'events-search-addon-for-the-events-calendar/events-calendar-search-addon.php' => '1.2.18',649 'events-speakers-and-sponsors/events-speakers-and-sponsors.php' => '1.1.1',650 'events-widgets-for-elementor-and-the-events-calendar/events-widgets-for-elementor-and-the-events-calendar.php' => '1.6.28',651 'events-widgets-pro/events-widgets-pro.php' => '3.0.1',652 'template-events-calendar/events-calendar-templates.php' => '2.5.4',653 'the-events-calendar-templates-and-shortcode/the-events-calendar-templates-and-shortcode.php' => '4.0.1',654 ];655 656 $show_header = true;657 658 // Loop through all plugins659 foreach ($required_plugins as $plugin_path => $min_version) {660 661 // Plugin active hai?662 if (is_plugin_active($plugin_path)) {663 664 // Plugin data get karo665 $plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin_path);666 $current_version = $plugin_data['Version'];667 668 // Version check669 if (version_compare($current_version, $min_version, '<=')) {670 $show_header = false;671 break;672 }673 }674 }675 return $show_header;676 }677 678 679 751 /** 680 752 * Admin side css … … 684 756 wp_enqueue_style('tecset-sg-icon', plugins_url('/assets/css/epta-admin.css', __FILE__), array(), EPTA_PLUGIN_CURRENT_VERSION); 685 757 wp_enqueue_script('tecset-select-temp', plugins_url('/assets/js/epta-template-preview.js', __FILE__), array(), EPTA_PLUGIN_CURRENT_VERSION, true); 686 $show_header = $this->epta_required_plugin_display_header();687 $screen = get_current_screen();688 $screen_id = $screen ? $screen->id : '';689 $parent_file = ['events-addons_page_tribe-events-shortcode-template-settings',690 'events-addons_page_tribe_events-events-template-settings',691 'toplevel_page_cool-plugins-events-addon',692 'events-addons_page_cool-events-registration',693 'events-addons_page_countdown_for_the_events_calendar',694 'edit-epta',695 'edit-esas_speaker',696 'edit-esas_sponsor',697 'events-addons_page_esas-speaker-sponsor-settings',698 'edit-ewpe'];699 if (in_array($screen_id, $parent_file)){700 wp_enqueue_style( 'cool-plugins-events-addon', EPTA_PLUGIN_URL . 'admin/events-addon-page/assets/css/styles.min.css', array(), EPTA_PLUGIN_CURRENT_VERSION, 'all' );701 }702 if($show_header && in_array($screen_id, $parent_file)) {703 704 // Common admin notice filter script (runs only on our target pages)705 wp_enqueue_script(706 'epta-admin-notice-filter',707 EPTA_PLUGIN_URL . 'assets/js/epta-admin-notice-filter.js',708 array( 'jquery' ),709 EPTA_PLUGIN_CURRENT_VERSION,710 true711 );712 713 wp_localize_script(714 'epta-admin-notice-filter',715 'epta_notice_filter',716 array(717 'nonce' => wp_create_nonce( 'epta_notice_filter' ),718 'allowedBodyClasses' => array(719 'events-addons_page_tribe-events-shortcode-template-settings',720 'events-addons_page_tribe_events-events-template-settings',721 'toplevel_page_cool-plugins-events-addon',722 'events-addons_page_cool-events-registration',723 'events-addons_page_countdown_for_the_events_calendar',724 'post-type-epta',725 'post-type-esas_speaker',726 'post-type-esas_sponsor',727 'events-addons_page_esas-speaker-sponsor-settings',728 'post-type-ewpe',729 ),730 )731 );732 }733 758 } 734 759 /**
Note: See TracChangeset
for help on using the changeset viewer.