MenuFactory.php
2.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<?php
namespace AC\Admin;
use AC\Admin\Menu\Item;
use AC\Asset\Location;
use AC\Deprecated\Hooks;
use AC\Type\Url\Site;
use AC\Type\Url\UtmTags;
class MenuFactory implements MenuFactoryInterface
{
protected $url;
protected $location;
public function __construct(string $url, Location\Absolute $location)
{
$this->url = $url;
$this->location = $location;
}
protected function create_menu_link(string $slug): string
{
return add_query_arg(
[
RequestHandlerInterface::PARAM_PAGE => Admin::NAME,
RequestHandlerInterface::PARAM_TAB => $slug,
],
$this->url
);
}
public function create(string $current): Menu
{
$menu = new Menu();
$items = [
Page\Columns::NAME => __('Columns', 'codepress-admin-columns'),
Page\Settings::NAME => __('Settings', 'codepress-admin-columns'),
Page\Addons::NAME => __('Add-ons', 'codepress-admin-columns'),
];
$hooks = new Hooks();
if ($hooks->get_count() > 0) {
$items[Page\Help::NAME] = sprintf(
'%s %s',
__('Help', 'codepress-admin-columns'),
'<span class="ac-badge">' . $hooks->get_count() . '</span>'
);
}
foreach ($items as $slug => $label) {
$menu->add_item(
new Item(
$slug,
$this->create_menu_link($slug),
$label,
sprintf('-%s %s', $slug, $current === $slug ? '-active' : '')
)
);
}
$url = (new UtmTags(new Site(Site::PAGE_ABOUT_PRO), 'upgrade'))->get_url();
$image = sprintf(
'<img alt="%s" src="%s">',
'Admin Columns Pro',
$this->location->with_suffix('/assets/images/external.svg')->get_url()
);
$menu->add_item(new Item('pro', $url, sprintf('%s %s', 'Admin Columns Pro', $image), '-pro', '_blank'));
do_action('ac/admin/page/menu', $menu);
return $menu;
}
}