PluginProbe
YayMail – WooCommerce Email Customizer / 4.4.1
YayMail – WooCommerce Email Customizer v4.4.1
4.4.6 4.4.5 4.4.4 4.4.3 4.4.2 4.4.1 trunk 1.9.6 2.1.4 2.1.5 3.2.2 3.2.6 3.2.7.1 3.2.8.1 3.2.9 3.3 3.3.1 3.3.4 3.3.5 3.3.6 3.3.7 3.3.8 3.3.9 3.4 3.4.1 All 57 releases
yaymail / vendor-prefixed / src / Menu / TopLevelMenu.php

TopLevelMenu.php in YayMail – WooCommerce Email Customizer 4.4.1, at vendor-prefixed/src/Menu/TopLevelMenu.php

64 lines 3.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace YayMailScoped\YayCommerce\AdminShell\Menu;
4
5 /**
6 * Registers the shared YayCommerce top-level admin menu.
7 *
8 * First-to-register-wins: uses $admin_page_hooks['yaycommerce'] guard so only
9 * ONE instance runs across all co-installed plugins. Ported from YayMail Pro
10 * RegisterMenu.php — cross-plugin class_exists() probes removed because
11 * LicenseRegistry now handles plugin discovery.
12 *
13 * Position 56 (after WooCommerce), capability manage_options, slug yaycommerce.
14 */
15 class TopLevelMenu
16 {
17 public static int $position = 56;
18 public static string $capability = 'manage_options';
19 public function init() : void
20 {
21 \add_action('admin_menu', [$this, 'register_menu'], 9);
22 }
23 /**
24 * Register top-level menu. Guard ensures only the first plugin wins.
25 */
26 public function register_menu() : void
27 {
28 global $admin_page_hooks;
29 // First-to-register-wins — if another plugin already registered the
30 // 'yaycommerce' top-level menu, skip. This replaces the old cross-plugin
31 // class_exists() probes that existed in RegisterMenu.php lines 88-105.
32 if (isset($admin_page_hooks['yaycommerce'])) {
33 return;
34 }
35 \add_menu_page(
36 'yaycommerce',
37 'YayCommerce',
38 self::$capability,
39 'yaycommerce',
40 null,
41 // no callback — submenus render content
42 self::get_logo_url(),
43 self::$position
44 );
45 // Remove the auto-created "YayCommerce" submenu AFTER all submenus are registered.
46 \add_action('admin_menu', [__CLASS__, 'remove_parent_submenu'], 999);
47 }
48 /**
49 * WP auto-creates a submenu matching the parent slug. Remove it late
50 * so it runs after all plugins have registered their submenus.
51 */
52 public static function remove_parent_submenu() : void
53 {
54 \remove_submenu_page('yaycommerce', 'yaycommerce');
55 }
56 /**
57 * Inline base64 SVG logo — copied as-is from YayMail Pro RegisterMenu.php.
58 */
59 public static function get_logo_url() : string
60 {
61 return 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZpZXdCb3g9IjAgMCA2NCA2NCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQ2LjI0NzYgNi40MDg5NkM0Ni4yNDc2IDkuOTQ4MTYgNDMuMzc3OCAxMi44MTc5IDM5LjgzODYgMTIuODE3OUMzNi4yOTk0IDEyLjgxNzkgMzMuNDI5NyA5Ljk0ODE2IDMzLjQyOTcgNi40MDg5NkMzMy40Mjk3IDIuODY5NzYgMzYuMjk4MSAwIDM5LjgzODYgMEM0My4zNzkxIDAgNDYuMjQ3NiAyLjg2OTc2IDQ2LjI0NzYgNi40MDg5NlpNMS4xNjQ3MSAyMi45OTI2Qy0wLjIxODk3MiAyMy4xMzIyIC0wLjQzNzg1MiAyNS4wNTg2IDAuODc5MjY4IDI1LjUwNEM5LjI1NDMxIDI4LjMzNjYgMjEuMzAwNCAzMC45OTUyIDI3LjI0OTggMzIuMjM0MkMyOS4yOTkxIDMyLjY2MDUgMzAuNjIzOSAzNC42NDgzIDMwLjI0MTIgMzYuNzA2NkMyOC41NDUyIDQ1LjgwNjEgMjUuMzc4NSA1NS41Mjc3IDIzLjM2ODkgNjIuMzM0N0MyMi45ODYyIDYzLjYzMTQgMjQuNTk5IDY0LjU3MjIgMjUuNTM4NSA2My42MDA2QzQ3LjIxMDIgNDEuMjAxOSA1OS4zODk0IDE4LjE5OSA2My44Njk0IDguNzIzMkM2NC40MjM2IDcuNTUwNzIgNjMuMTAwMSA2LjM4NzIgNjIuMDA0NCA3LjA4MDk2QzQ1LjM5MTMgMTcuNjA2NCAxMy44NTU5IDIxLjcxNzggMS4xNjQ3MSAyMi45OTI2WiIgZmlsbD0iI0E3QUFBRCIvPgo8L3N2Zz4=';
62 }
63 }
64