forked from ThemeFuse/Unyson-MegaMenu-Extension
/
class-fw-extension-megamenu.php
127 lines (110 loc) · 2.76 KB
/
class-fw-extension-megamenu.php
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<?php if (!defined('FW')) die('Forbidden');
class FW_Extension_Megamenu extends FW_Extension
{
public function render_str($rel, $param = array())
{
return $this->render_view($rel, $param);
}
public function render($rel, $param = array())
{
$this->render_view($rel, $param, false);
}
/**
* Check if menu icon is enabled (checked in Screen Options on admin Menus page)
* @return bool
*/
public function show_icon()
{
return !in_array('icon', (array) get_user_option('manage' . 'nav-menus' . 'columnshidden'));
}
/**
* @internal
*/
public function _init()
{
if (is_admin()) {
$this->add_admin_actions();
$this->add_admin_filters();
}
}
private function add_admin_actions()
{
add_action('admin_enqueue_scripts', array($this, '_admin_action_admin_enqueue_scripts'));
add_action('wp_update_nav_menu_item', array($this, '_admin_action_wp_update_nav_menu_item'), 10, 3);
}
private function add_admin_filters()
{
add_filter('wp_edit_nav_menu_walker', array($this, '_admin_filter_wp_edit_nav_menu_walker'));
add_filter('manage_nav-menus_columns', array($this, '_admin_filter_manage_nav_menus_columns'), 20);
}
/**
* @internal
*/
public function _admin_action_admin_enqueue_scripts($hook)
{
if ($hook == 'nav-menus.php') {
// Enqueue all the necessary files for Icon dialog
$options = array(
'icon' => apply_filters('fw:ext:megamenu:icon-option', array(
'type' => 'icon',
'label' => __('Select Icon', 'fw'),
)),
);
fw()->backend->enqueue_options_static($options);
wp_enqueue_media();
wp_enqueue_style(
"fw-ext-{$this->get_name()}-admin",
$this->get_uri('/static/css/admin.css'),
array(),
$this->manifest->get_version()
);
wp_enqueue_script(
"fw-ext-{$this->get_name()}-admin",
$this->get_uri('/static/js/admin.js'),
array('fw'),
$this->manifest->get_version()
);
wp_localize_script(
"fw-ext-{$this->get_name()}-admin",
'_fw_ext_megamenu',
array(
'icon_option' => $options['icon']
)
);
}
}
/**
* @internal
*/
public function _admin_action_wp_update_nav_menu_item($menu_id, $menu_item_db_id, $args)
{
$flags = array('enabled', 'title-off', 'new-row');
$meta = _fw_ext_mega_menu_admin_input_POST_values($menu_item_db_id);
foreach ($flags as $flag) {
$meta[$flag] = isset($meta[$flag]);
}
fw_ext_mega_menu_update_meta($menu_item_db_id, $meta);
}
/**
* @internal
*/
public function _admin_filter_wp_edit_nav_menu_walker()
{
return 'FW_Ext_Mega_Menu_Admin_Walker';
}
/**
* @internal
*/
public function _admin_filter_manage_nav_menus_columns($columns)
{
$columns['icon'] = __('Icon', 'fw');
return $columns;
}
/**
* {@inheritdoc}
*/
public function _get_link()
{
return self_admin_url('nav-menus.php');
}
}