PluginProbe ʕ •ᴥ•ʔ
WP Chat App / trunk
WP Chat App vtrunk
3.8.1 3.8.2 trunk 2.6 3.4 3.4.1 3.4.2 3.4.4 3.4.5 3.4.6 3.5 3.6 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.6.8 3.6.9 3.7.0 3.7.1 3.7.2 3.7.3 3.7.4 3.8.0
wp-whatsapp / vendor-prefixed / src / Menu / PagesRouter.php
wp-whatsapp / vendor-prefixed / src / Menu Last commit date
ExternalPluginMenuAdapter.php 4 months ago MenuSuppressor.php 4 months ago PagesRouter.php 4 months ago PluginSubmenu.php 3 months ago TopLevelMenu.php 4 months ago
PagesRouter.php
53 lines
1 <?php
2
3 namespace WhatsappScoped\YayCommerce\AdminShell\Menu;
4
5 use WhatsappScoped\YayCommerce\AdminShell\Pages\LicensesPage;
6 use WhatsappScoped\YayCommerce\AdminShell\Pages\RecommendedPluginsPage;
7 use WhatsappScoped\YayCommerce\AdminShell\Pages\HelpPage;
8 use WhatsappScoped\YayCommerce\AdminShell\Registry\LicenseRegistry;
9 /**
10 * Registers Licenses, Other Plugins, and Help submenus under 'yaycommerce'.
11 * Ported from YayMail Pro RegisterMenu::add_submenus() — de-branded and
12 * adapter-driven (no hardcoded cross-plugin class_exists() probes).
13 * @internal
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 add_action('admin_menu', [$this, 'register_submenus'], 11);
25 // Instantiate RecommendedPluginsPage to register its wp_ajax_* handlers.
26 RecommendedPluginsPage::get_instance();
27 }
28 public function register_submenus() : void
29 {
30 $submenus = $this->get_submenus();
31 foreach ($submenus as $slug => $submenu) {
32 $page_id = add_submenu_page($submenu['parent'], $submenu['name'], $submenu['name'], $submenu['capability'], $slug, $submenu['render_callback'], $submenu['position'] ?? null);
33 if ($submenu['load_callback']) {
34 add_action('load-' . $page_id, $submenu['load_callback']);
35 }
36 }
37 }
38 private function get_submenus() : array
39 {
40 $submenus = [];
41 // Plugin submenus use position 0-99 (via adapter).
42 // Shell pages use 900+ so they always appear at the bottom.
43 $submenus['yaycommerce-help'] = ['parent' => 'yaycommerce', 'name' => \__('Help', 'yaycommerce'), 'capability' => 'manage_options', 'render_callback' => [HelpPage::class, 'render'], 'load_callback' => [HelpPage::class, 'load_data'], 'position' => 900];
44 // Licenses submenu — only shown if any plugins are registered.
45 $has_any = !empty($this->registry->all());
46 if ($has_any) {
47 $submenus['yaycommerce-licenses'] = ['parent' => 'yaycommerce', 'name' => \__('Licenses', 'yaycommerce'), 'capability' => 'manage_options', 'render_callback' => [LicensesPage::class, 'render'], 'load_callback' => [LicensesPage::class, 'load_data'], 'position' => 910];
48 }
49 $submenus['yaycommerce-other-plugins'] = ['parent' => 'yaycommerce', 'name' => \__('Recommended Plugins', 'yaycommerce'), 'capability' => 'manage_options', 'render_callback' => [RecommendedPluginsPage::class, 'render'], 'load_callback' => [RecommendedPluginsPage::class, 'load_data'], 'position' => 920];
50 return $submenus;
51 }
52 }
53