MenuFactory.php
1.78 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
<?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 {
/**
* @var string
*/
protected $url;
/**
* @var Location\Absolute
*/
protected $location;
public function __construct( $url, Location\Absolute $location ) {
$this->url = (string) $url;
$this->location = $location;
}
/**
* @param string $slug
*
* @return string
*/
protected function create_menu_link( $slug ) {
return add_query_arg(
[
RequestHandlerInterface::PARAM_PAGE => Admin::NAME,
RequestHandlerInterface::PARAM_TAB => $slug,
],
$this->url
);
}
public function create( $current ) {
$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;
}
}