PluginProbe
YayMail – WooCommerce Email Customizer / trunk
YayMail – WooCommerce Email Customizer vtrunk
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 3.4.2 3.4.3 All 55 releases
yaymail / vendor-prefixed / src / Menu / PagesRouter.php

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

57 lines 3.0 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 use YayMailScoped\YayCommerce\AdminShell\Pages\LicensesPage;
6 use YayMailScoped\YayCommerce\AdminShell\Pages\RecommendedPluginsPage;
7 use YayMailScoped\YayCommerce\AdminShell\Pages\HelpPage;
8 use YayMailScoped\YayCommerce\AdminShell\Registry\LicenseRegistry;
9 use YayMailScoped\YayCommerce\AdminShell\Support\AdminContext;
10 /**
11 * Registers Licenses, Other Plugins, and Help submenus under 'yaycommerce'.
12 * Ported from YayMail Pro RegisterMenu::add_submenus() — de-branded and
13 * adapter-driven (no hardcoded cross-plugin class_exists() probes).
14 */
15 class PagesRouter
16 {
17 private LicenseRegistry $registry;
18 public function __construct(LicenseRegistry $registry)
19 {
20 $this->registry = $registry;
21 }
22 public function init(): void
23 {
24 // Bind on both admin_menu and network_admin_menu so the shell pages
25 // (Help, Licenses, Recommended) appear in the Multisite Network Admin too.
26 AdminContext::bind_menu([$this, 'register_submenus'], 11);
27 // Instantiate RecommendedPluginsPage to register its wp_ajax_* handlers.
28 RecommendedPluginsPage::get_instance();
29 }
30 public function register_submenus(): void
31 {
32 $submenus = $this->get_submenus();
33 foreach ($submenus as $slug => $submenu) {
34 $page_id = add_submenu_page($submenu['parent'], $submenu['name'], $submenu['name'], $submenu['capability'], $slug, $submenu['render_callback'], $submenu['position'] ?? null);
35 if ($submenu['load_callback']) {
36 add_action('load-' . $page_id, $submenu['load_callback']);
37 }
38 }
39 }
40 private function get_submenus(): array
41 {
42 $submenus = [];
43 // Plugin submenus use position 0-99 (via adapter).
44 // Shell pages use 900+ so they always appear at the bottom.
45 // In Network Admin the capability is elevated to manage_network.
46 $capability = AdminContext::capability('manage_options');
47 $submenus['yaycommerce-help'] = ['parent' => 'yaycommerce', 'name' => __('Help', 'yaycommerce'), 'capability' => $capability, 'render_callback' => [HelpPage::class, 'render'], 'load_callback' => [HelpPage::class, 'load_data'], 'position' => 900];
48 // Licenses submenu — only shown if any plugins are registered.
49 $has_any = !empty($this->registry->all());
50 if ($has_any) {
51 $submenus['yaycommerce-licenses'] = ['parent' => 'yaycommerce', 'name' => __('Licenses', 'yaycommerce'), 'capability' => $capability, 'render_callback' => [LicensesPage::class, 'render'], 'load_callback' => [LicensesPage::class, 'load_data'], 'position' => 910];
52 }
53 $submenus['yaycommerce-other-plugins'] = ['parent' => 'yaycommerce', 'name' => __('Recommended Plugins', 'yaycommerce'), 'capability' => $capability, 'render_callback' => [RecommendedPluginsPage::class, 'render'], 'load_callback' => [RecommendedPluginsPage::class, 'load_data'], 'position' => 920];
54 return $submenus;
55 }
56 }
57