Asset
2 days ago
Banner
2 days ago
Colors
2 days ago
MenuGroupFactory
2 days ago
MenuPageFactory
2 days ago
Notice
2 days ago
Page
2 days ago
PageFactory
2 days ago
Preference
2 days ago
Type
2 days ago
View
2 days ago
Admin.php
2 days ago
AdminLoader.php
2 days ago
AdminNetwork.php
2 days ago
AdminScripts.php
2 days ago
HelpTab.php
2 days ago
Helpable.php
2 days ago
Menu.php
2 days ago
MenuFactory.php
2 days ago
MenuFactoryInterface.php
2 days ago
MenuGroupFactory.php
2 days ago
MenuListFactory.php
2 days ago
MenuListItems.php
2 days ago
MenuPageFactory.php
2 days ago
PageFactoryInterface.php
2 days ago
PageNetworkRequestHandler.php
2 days ago
PageNetworkRequestHandlers.php
2 days ago
PageRequestHandler.php
2 days ago
PageRequestHandlers.php
2 days ago
RenderableHead.php
2 days ago
RequestHandlerInterface.php
2 days ago
ScreenOption.php
2 days ago
ScreenOptions.php
2 days ago
Scripts.php
2 days ago
Tooltip.php
2 days ago
UninitializedScreens.php
2 days ago
MenuListFactory.php
58 lines
| 1 | <?php |
| 2 | |
| 3 | declare(strict_types=1); |
| 4 | |
| 5 | namespace AC\Admin; |
| 6 | |
| 7 | use AC\Admin\MenuGroupFactory\Aggregate; |
| 8 | use AC\Admin\Type\MenuListItem; |
| 9 | use AC\Table\TableScreenCollection; |
| 10 | |
| 11 | class MenuListFactory |
| 12 | { |
| 13 | private Aggregate $group_factory; |
| 14 | |
| 15 | public function __construct(Aggregate $group_factory) |
| 16 | { |
| 17 | $this->group_factory = $group_factory; |
| 18 | } |
| 19 | |
| 20 | public function create(TableScreenCollection $table_screens): MenuListItems |
| 21 | { |
| 22 | $items = []; |
| 23 | |
| 24 | foreach ($table_screens as $table_screen) { |
| 25 | $items[] = |
| 26 | new MenuListItem( |
| 27 | (string)$table_screen->get_id(), |
| 28 | (string)$table_screen->get_labels(), |
| 29 | $this->group_factory->create($table_screen) |
| 30 | ); |
| 31 | } |
| 32 | |
| 33 | usort($items, [$this, 'sort_menu_by_label']); |
| 34 | usort($items, [$this, 'sort_menu_by_group']); |
| 35 | |
| 36 | $menu = new MenuListItems($items); |
| 37 | |
| 38 | do_action('ac/admin/menu_list', $menu); |
| 39 | |
| 40 | return $menu; |
| 41 | } |
| 42 | |
| 43 | public function sort_menu_by_label(MenuListItem $a, MenuListItem $b): int |
| 44 | { |
| 45 | return strnatcmp($a->get_label(), $b->get_label()); |
| 46 | } |
| 47 | |
| 48 | public function sort_menu_by_group(MenuListItem $a, MenuListItem $b): int |
| 49 | { |
| 50 | if ($a->get_group()->get_priority() === $b->get_group()->get_priority()) { |
| 51 | return 0; |
| 52 | } |
| 53 | |
| 54 | return $a->get_group()->get_priority() > $b->get_group()->get_priority() ? 1 : -1; |
| 55 | } |
| 56 | |
| 57 | } |
| 58 |