PluginProbe
Extendify / 3.1.5
Extendify v3.1.5
3.2.0 3.1.6 3.1.5 3.1.4 3.1.3 3.1.2 3.1.1 3.1.0 3.0.6 3.0.5 3.0.4 trunk 0.1.0 0.10.0 0.10.1 0.10.2 0.11.0 0.11.1 0.2.0 0.3.0 0.3.1 0.4.0 0.5.0 0.6.0 0.7.0 All 126 releases
extendify / app / Shared / Services / AdminMenuList.php

AdminMenuList.php in Extendify 3.1.5, at app/Shared/Services/AdminMenuList.php

77 lines 2.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Extendify\Shared\Services;
4
5 class AdminMenuList
6 {
7 public static $transient = 'extendify_admin_pages_menu';
8
9 public static function init()
10 {
11 \add_action("admin_menu", [self::class, "populate"], 999);
12 \add_action('upgrader_process_complete', [self::class, 'remove']);
13
14 // Upgrader process completed does not fire on activating/deactivating a plugin,
15 // so we need to regenerate the menu after activate/deactivate the plugin
16 \add_action('activate_plugin', [self::class, 'remove']);
17 \add_action('deactivate_plugin', [self::class, 'remove']);
18 }
19
20 /**
21 * Retrieves all WordPress admin page slugs (menu and submenu items).
22 * Results are cached for performance.
23 *
24 * @return void
25 */
26 public static function populate()
27 {
28 global $menu, $submenu;
29
30 if (get_transient(self::$transient) !== false || !is_array($menu) || !is_array($submenu)) {
31 return;
32 }
33
34 $adminUrl = admin_url();
35 $allPages = [];
36
37 foreach ($menu as $menuItem) {
38 if (empty($menuItem[0]) || !isset($menuItem[2])) {
39 continue;
40 }
41 $allPages[] = $menuItem[2];
42 }
43
44 foreach ($submenu as $parent => $submenuItems) {
45 if (!isset($parent) || strpos($parent, '.php') === false) {
46 $parent = 'admin.php';
47 }
48
49 $subItems = array_map(function ($item) use ($parent) {
50 return strpos($item, '.php') === false ? sprintf('%s?page=%s', $parent, $item) : $item;
51 }, array_column($submenuItems, 2));
52
53 array_push($allPages, ...$subItems);
54 }
55
56 $allPages = array_values(array_filter($allPages, function ($page) {
57 return strpos($page, 'http') === false;
58 }));
59
60 foreach ($allPages as &$page) {
61 $page = str_replace($adminUrl, '', $page);
62
63 if (strpos($page, '.php') === false) {
64 $page = 'admin.php?page=' . $page;
65 }
66 }
67 unset($page);
68
69 set_transient(self::$transient, $allPages);
70 }
71
72 public static function remove($plugin)
73 {
74 \delete_transient(self::$transient);
75 }
76 }
77