| @@ -106,9 +106,8 @@ | ||
| 106 | 106 | * |
| 107 | 107 | * @var FAQBuilder |
| 108 | 108 | */ |
| 109 | 109 | private $faq_builder; |
| 110 | - private $glossaries; | |
| 111 | 110 | |
| 112 | 111 | public function __construct( Container $container, PostType $type, Enqueue $assets, Settings $settings, KBMigration $kbmigration ) { |
| 113 | 112 | $this->container = $container; |
| 114 | 113 | $this->assets = $assets; |
| @@ -122,9 +121,8 @@ | ||
| 122 | 121 | $type->init(); |
| 123 | 122 | $type->admin_init(); |
| 124 | 123 | |
| 125 | 124 | $this->faq_builder = $this->container->get( FAQBuilder::class ); |
| 126 | - $this->glossaries = $this->container->get( Glossaries::class ); | |
| 127 | 125 | |
| 128 | 126 | /** |
| 129 | 127 | * Register usage tracking (including the daily `put_do_weekly_action` cron |
| 130 | 128 | * handler) on every request — WP-Cron runs with is_admin() === false, so |
| @@ -485,8 +483,26 @@ | ||
| 485 | 483 | ) |
| 486 | 484 | ); |
| 487 | 485 | } |
| 488 | 486 | |
| 487 | + // BetterDocs' own admin screens. Promotional notices are limited to these | |
| 488 | + // (WP.org guideline 11), never the whole of wp-admin. | |
| 489 | + $betterdocs_screens = array( | |
| 490 | + 'toplevel_page_betterdocs-dashboard', | |
| 491 | + 'admin_page_betterdocs-admin', | |
| 492 | + 'betterdocs_page_betterdocs-admin', | |
| 493 | + 'betterdocs_page_betterdocs-settings', | |
| 494 | + 'betterdocs_page_betterdocs-faq', | |
| 495 | + 'betterdocs_page_betterdocs-analytics', | |
| 496 | + 'betterdocs_page_betterdocs-glossaries', | |
| 497 | + 'betterdocs_page_betterdocs-ai-chatbot', | |
| 498 | + 'betterdocs_page_betterdocs-api-docs', | |
| 499 | + 'betterdocs_page_betterdocs-doc-categories', | |
| 500 | + 'betterdocs_page_betterdocs-doc-tags', | |
| 501 | + 'edit-doc_category', | |
| 502 | + 'edit-doc_tag', | |
| 503 | + ); | |
| 504 | + | |
| 489 | 505 | $summer_campaign_message = '<div class="betterdocs-summer-notice-body"><p style="margin-top: 0; margin-bottom: 0;">🏖️ <strong>Summer Savings:</strong> Build AI-powered Knowledge Bases & FAQs to cut support tickets and improve user experience – now <strong>up to $100 OFF!</strong></p></div>'; |
| 490 | 506 | $_summer_campaign_notice = array( |
| 491 | 507 | 'thumbnail' => $this->assets->icon( 'betterdocs-logo.svg', true ), |
| 492 | 508 | 'html' => $summer_campaign_message, |
| @@ -501,10 +517,11 @@ | ||
| 501 | 517 | ), |
| 502 | 518 | 'maybe_later' => array( |
| 503 | 519 | 'label' => __( 'I’ll Grab It Later', 'betterdocs' ), |
| 504 | 520 | 'attributes' => array( |
| 505 | - 'target' => '_blank', | |
| 506 | - 'data-later' => true, | |
| 521 | + 'target' => '_blank', | |
| 522 | + // A promo dismissal is permanent: no 15-day re-show. | |
| 523 | + 'data-dismiss' => true, | |
| 507 | 524 | 'class' => 'dismiss-btn', |
| 508 | 525 | ), |
| 509 | 526 | ), |
| 510 | 527 | ), |
| @@ -516,11 +533,11 @@ | ||
| 516 | 533 | array( |
| 517 | 534 | 'start' => $notices->time(), |
| 518 | 535 | 'recurrence' => false, |
| 519 | 536 | 'dismissible' => true, |
| 520 | - 'refresh' => BETTERDOCS_VERSION, | |
| 521 | 537 | 'expire' => strtotime( '11:59:59pm June 25, 2026' ), |
| 522 | 538 | 'display_if' => ! is_plugin_active( 'betterdocs-pro/betterdocs-pro.php' ), |
| 539 | + 'screens' => $betterdocs_screens, | |
| 523 | 540 | ) |
| 524 | 541 | ); |
| 525 | 542 | |
| 526 | 543 | self::$cache_bank->create_account( $notices ); |
| @@ -526,23 +543,9 @@ | ||
| 526 | 543 | self::$cache_bank->create_account( $notices ); |
| 527 | 544 | self::$cache_bank->calculate_deposits( $notices ); |
| 528 | 545 | if ( method_exists( self::$cache_bank, 'clear_notices_in_' ) ) { |
| 529 | 546 | self::$cache_bank->clear_notices_in_( |
| 530 | - array( | |
| 531 | - 'toplevel_page_betterdocs-dashboard', | |
| 532 | - 'admin_page_betterdocs-admin', | |
| 533 | - 'betterdocs_page_betterdocs-admin', | |
| 534 | - 'betterdocs_page_betterdocs-settings', | |
| 535 | - 'betterdocs_page_betterdocs-faq', | |
| 536 | - 'betterdocs_page_betterdocs-analytics', | |
| 537 | - 'betterdocs_page_betterdocs-glossaries', | |
| 538 | - 'betterdocs_page_betterdocs-ai-chatbot', | |
| 539 | - 'betterdocs_page_betterdocs-api-docs', | |
| 540 | - 'betterdocs_page_betterdocs-doc-categories', | |
| 541 | - 'betterdocs_page_betterdocs-doc-tags', | |
| 542 | - 'edit-doc_category', | |
| 543 | - 'edit-doc_tag', | |
| 544 | - ), | |
| 547 | + $betterdocs_screens, | |
| 545 | 548 | $notices, |
| 546 | 549 | true |
| 547 | 550 | ); |
| 548 | 551 | } |
| @@ -886,8 +889,11 @@ | ||
| 886 | 889 | 'analytics_older' => version_compare( betterdocs()->pro_version(), '3.3.4', '<=' ), |
| 887 | 890 | 'betterdocs_ChatBot_plugin' => is_plugin_active( 'betterdocs-ai-chatbot/betterdocs-ai-chatbot.php' ), |
| 888 | 891 | 'api_docs_teaser' => betterdocs()->show_api_docs_teaser(), |
| 889 | 892 | 'glossaries_teaser' => betterdocs()->show_glossary_teaser(), |
| 893 | + 'glossaries_needs_pro_update' => betterdocs()->glossaries_needs_pro_update(), | |
| 894 | + 'glossaries_min_pro_version' => betterdocs()->glossaries_min_pro_version(), | |
| 895 | + 'glossaries_pro_update_url' => self_admin_url( 'plugins.php' ), | |
| 890 | 896 | 'content_intelligence_teaser' => betterdocs()->show_content_intelligence_teaser(), |
| 891 | 897 | 'is_woocommerce_active' => class_exists( 'WooCommerce' ), |
| 892 | 898 | 'total_doc_category_terms' => wp_count_terms( 'doc_category' ), |
| 893 | 899 | 'current_admin_language' => Helper::get_current_admin_language(), |
| @@ -955,24 +961,10 @@ | ||
| 955 | 961 | 'betterdocs_settings' => $betterdocs_settings, |
| 956 | 962 | ) |
| 957 | 963 | ); |
| 958 | 964 | |
| 959 | - // Glossaries Related Localization | |
| 960 | - betterdocs()->assets->enqueue( 'betterdocs-admin-glossaries', 'admin/css/faq.css' ); | |
| 961 | - | |
| 962 | - betterdocs()->assets->enqueue( 'betterdocs-admin-glossaries', 'admin/js/glossaries.js' ); | |
| 963 | - | |
| 964 | - betterdocs()->assets->localize( | |
| 965 | - 'betterdocs-admin-glossaries', | |
| 966 | - 'betterdocsGlossary', | |
| 967 | - array( | |
| 968 | - 'dir_url' => BETTERDOCS_ABSURL, | |
| 969 | - 'rest_url' => esc_url_raw( rest_url() ), | |
| 970 | - 'free_version' => betterdocs()->version, | |
| 971 | - 'nonce' => wp_create_nonce( 'wp_rest' ), | |
| 972 | - 'betterdocs_settings' => $betterdocs_settings, | |
| 973 | - ) | |
| 974 | - ); | |
| 965 | + // Glossaries is Pro — Pro's Core\Glossaries::enqueue() owns that bundle | |
| 966 | + // and both of its localized objects (`betterdocs`, `betterdocsGlossary`). | |
| 975 | 967 | } |
| 976 | 968 | |
| 977 | 969 | /** |
| 978 | 970 | * All admin pages header |