index of
/
home
/
thefkyzp
/
easyloanly.com
/
wp-content
/
plugins
/
white-label-cms
/
includes
/
classes
/
File: /home/thefkyzp/easyloanly.com/wp-content/plugins/white-label-cms/includes/classes/Admin_Menus.php
<?php class WLCMS_Admin_Menus { private $admin_menus; private $admin_bar_menus = array(); private $is_wlcms_admin = false; private $admin_bar_menu_setting = false; private $submenu_placeholder = '_wlcms_'; private $wlcms_admin_bar_menus_option = 'wlcms_admin_bar_menus'; private $hide_woo_home = false; public function __construct() { add_action('init', array($this, 'set_wlcms_admin'), 10); add_action('admin_init', array($this, 'admin_init')); add_action('wlcms_save_addtional_settings', array($this, 'save'), 12, 1); add_action('admin_menu', array($this, 'rebuild_user_admin_menu'), 9999999); // rebuild sidebar menu add_action('wp_before_admin_bar_render', array($this, 'init_admin_bar_menu'), 9999999); // setup admin bar menu } public function admin_init() { $this->set_admin_bar_menu_setting(); $this->compile_menus(); } public function set_wlcms_admin() { //Remove actions from preview mode if (defined('DOING_AJAX') && DOING_AJAX) { remove_action('admin_init', array($this, 'admin_init')); remove_action('admin_init', array($this, 'rebuild_user_admin_menu'), 9999999); return; } if (!is_user_logged_in()) { return; } $wlcms_admin = wlcms_field_setting('wlcms_admin'); if (!$wlcms_admin) { return; } //Check if the current user is editor and with legacy menu if ($this->is_legacy_menu_role()) { return; } $current_user = wp_get_current_user(); $this->is_wlcms_admin = in_array($current_user->ID, $wlcms_admin); } public function is_legacy_menu_role() { if (!wlcms_field_setting('legacy_menu')) { return false; } $user = wp_get_current_user(); $role = (array)$user->roles; if (!in_array('editor', $role, true)) { return false; } return true; } /** * check current user is wlcms admin or super admin * * @return boolean */ public function has_visible_roles() { if (is_multisite() && is_super_admin()) { return true; } return $this->is_wlcms_admin(); } public function enable_admin_menu() { return wlcms_field_setting('enable_wlcms_admin'); } /** * check current user is wlcms admin * */ public function is_wlcms_admin() { return $this->is_wlcms_admin; } public function save($settings) { if (!isset($_POST['enable_wlcms_admin'])) { $settings->remove('admin_menus'); $settings->remove('admin_bar_menus'); return; } $this->save_sidemenu($settings); $this->save_admin_bar_menu($settings); if (!isset($_POST['remove_legacy_menu'])) { return; } $settings->remove('legacy_menu'); } private function save_sidemenu($settings) { $menus = $this->get_admin_menus(); $db_menu_main = array(); $db_menu = array(); // No menu selected if (!isset($_POST['admin_menus'])) { $settings->remove('admin_menus'); return $settings; } $post_main_menu = isset($_POST['admin_menus']['main']) ? $_POST['admin_menus']['main'] : array(); $post_sub_menu = isset($_POST['admin_menus']['sub']) ? $_POST['admin_menus']['sub'] : array(); $sidebar_url = wlcms()->Branding()->sidebar_menu_url(); if (is_array($menus) && $menus > 0) : foreach ($menus as $main_key => $main_menu) { if ($main_key == $sidebar_url) { continue; } if (!in_array($main_key, $post_main_menu)) { $db_menu['main'][] = $main_key; } if (isset($main_menu['submenus']) && is_array($main_menu['submenus']) && count($main_menu['submenus'])) { foreach ($main_menu['submenus'] as $sub_key => $submenu) { if ($sub_key == $sidebar_url) { continue; } $submenu_value = $submenu['slug']; if (!in_array($submenu_value, $post_sub_menu)) { $db_menu['sub'][] = $submenu_value; } } } } endif; if (count($db_menu)) { $settings->set('admin_menus', $db_menu); } else { $settings->remove('admin_menus'); } return $settings; } private function save_admin_bar_menu($settings) { $menus = get_option($this->wlcms_admin_bar_menus_option, array()); // No menu selected if (!isset($_POST['admin_bar_menus'])) { $settings->remove('admin_bar_menus'); return; } $post_menu = isset($_POST['admin_bar_menus']) ? $_POST['admin_bar_menus'] : array(); $db_menu = array(); if (is_array($menus) && $menus > 0) : foreach ($menus as $menu_key => $menu) { if (!in_array($menu_key, $post_menu)) { $db_menu[] = $menu_key; } } endif; if (count($db_menu)) { $settings->set('admin_bar_menus', $db_menu); } } /** * Re-organize sidebar menus * Combine menu and submenu in single array * * @return void */ public function compile_menus() { global $menu, $submenu; $output = array(); $sidebar_url = wlcms()->Branding()->sidebar_menu_url(); if (is_array($menu) && count($menu) > 0) { foreach ($menu as $menu_item) { // some menu items are seperators, skip them if ($menu_item[0] == '') { continue; } if ($menu_item[2] == $sidebar_url) { continue; } $menu_name = preg_replace('#(<span.*?>).*?(</span>)#', '', $menu_item[0]); $menu_key = $menu_item[2]; $output[$menu_key] = array( 'name' => $menu_name, 'slug' => $menu_item[2], 'submenus' => array() ); } } if (is_array($submenu) && count($submenu) > 0) : foreach ($submenu as $key => $submenu_item) { $mainmenu_key = $key; // If a submenu does not have a valid parent, skip if (!isset($output[$mainmenu_key])) { continue; } foreach ($submenu_item as $sm_info) { $submenu_item = remove_query_arg('return', $sm_info[2]); $submenu_key = sanitize_title($submenu_item); $menu_name = ''; if (isset($sm_info[0]) && $sm_info[0] != '' && !is_null($sm_info[0])) { $menu_name = preg_replace('#(<span.*?>).*?(</span>)#', '', $sm_info[0]); } $slug = $mainmenu_key . $this->get_submenu_placeholder() . $submenu_key; $output[$key]['submenus'][$submenu_key] = array( 'name' => $menu_name, 'slug' => $slug ); } } endif; $this->admin_menus = $output; } /** * Sibar Admin menu getter * * @return array */ public function get_admin_menus() { return $this->admin_menus; } /** * remove sidebar menus that enable by wlcms * * @return void */ public function rebuild_user_admin_menu() { global $submenu; if (!$this->enable_admin_menu() && !$this->is_legacy_menu_role()) { return; } if ($this->has_visible_roles()) { return; } $setting_admin_menus = wlcms_field_setting('admin_menus'); if (isset($setting_admin_menus['main']) && is_array($setting_admin_menus['main'])) { foreach ($setting_admin_menus['main'] as $menu_item) { $this->remove_menu_page($menu_item); } } if (isset($setting_admin_menus['sub']) && is_array($setting_admin_menus['sub'])) { foreach ($setting_admin_menus['sub'] as $submenu_item) { $submenu_list = explode($this->get_submenu_placeholder(), $submenu_item); $main_menu = $submenu_list[0]; $main_submenu = $submenu_list[1]; $this->remove_submenu_page($main_menu, $main_submenu); } $this->fix_woocommerce(); $this->fix_yoast($setting_admin_menus['sub']); } } /** * Get sidebar sub-menu * * @return array */ public function get_new_submenus($key) { return isset($this->admin_menus[$key]) ? $this->admin_menus[$key] : false; } /** * Remove a top-level admin menu. * * @global array $menu * * @param string $menu_slug The slug of the menu. * @return array|bool The removed menu on success, false if not found. */ public function remove_menu_page($menu_slug) { global $menu; if (!is_array($menu)) { return false; } foreach ($menu as $i => $item) { $menu_item = remove_query_arg('return', $item[2]); $menu_item = urldecode($menu_item); if ($menu_slug == $menu_item) { unset($menu[$i]); return $item; } } return false; } /** * Remove an admin submenu. * * @global array $submenu * * @param string $menu_slug The slug for the parent menu. * @param string $submenu_slug The slug of the submenu. * @return array|bool The removed submenu on success, false if not found. */ function remove_submenu_page($menu_slug, $submenu_slug) { global $submenu; if (!isset($submenu[$menu_slug]) || !is_array($submenu[$menu_slug])) return false; foreach ($submenu[$menu_slug] as $i => $item) { $submenu_item = remove_query_arg('return', $item[2]); $submenu_item = sanitize_title($submenu_item); //Patch whitelist if (in_array($submenu_slug, array('wc-admin'))) { $this->hide_woo_home = true; continue; } if ($submenu_slug == $submenu_item) { unset($submenu[$menu_slug][$i]); return $item; } } return false; } public function fix_woocommerce() { global $submenu; if (!isset($submenu) || !$this->hide_woo_home) { return false; } if (!isset($submenu['woocommerce'])) { return false; } $home = $submenu['woocommerce'][0]; $home[1] = 'manage_woocommerce'; unset($submenu['woocommerce'][0]); $count = count($submenu['woocommerce']); if ($count == 0) { wlcms_set_hidden_css('li.toplevel_page_woocommerce'); } $submenu['woocommerce'] = array_values($submenu['woocommerce']); $home[0] = ''; $home[3] = ''; $submenu['woocommerce'][$count] = $home; wlcms_set_hidden_css('li.toplevel_page_woocommerce li > a:empty'); } public function fix_yoast($sub) { global $menu; if (array_search('wpseo_dashboard_wlcms_wpseo_workouts', $sub) === false) { return; } foreach ($menu as $key => $item) { if ($item[2] == 'wpseo_workouts') { unset($menu[$key]); break; } } } public function init_admin_bar_menu() { $this->set_admin_bar_menu(); $this->buid_new_admin_bar_menu(); } /** * Prepare white label cms admin bar menu and build in multidimentional array * * @return void */ private function set_admin_bar_menu() { global $wp_admin_bar; $nodes = $wp_admin_bar->get_nodes(); if (!$nodes || !is_array($nodes)) { return; } // Admin menus is not set from action hoo admin_init // Use for saving menus if (is_admin()) { $screen = get_current_screen(); if ($screen && $screen->id == WLCMS_SCREEN_ID) { update_option($this->wlcms_admin_bar_menus_option, $nodes, false); } } $wlcms_admin_bar = $this->_createMenuTree($nodes); $this->admin_bar_menus = $wlcms_admin_bar; } /** * Add all main menu * * @param object $flat * @param integer $root * @return array */ private function _createMenuTree($flat, $root = 0) { $parents = array(); $sub_root = array(); if (is_array($flat) && $flat > 0) : foreach ($flat as $a) { if ($this->excluded_admin_menu($a->id)) continue; $menu_parent = ($a->parent == '') ? false : $a->parent; $parents[$menu_parent][] = $a; } $sub_root = isset($parents[$root]) ? $parents[$root] : array(); endif; return $this->_createMenuBranch($parents, $sub_root); } /** * Add all sub menu to each main menu * * @param array $parents main menus * @param object $children * @return array */ private function _createMenuBranch(&$parents, $children) { $tree = array(); if (is_array($children) && $children > 0) : foreach ($children as $child) { if (isset($parents[$child->id])) { $child->sub = $this->_createMenuBranch($parents, $parents[$child->id]); } $tree[] = $child; } endif; return $tree; } /** * check if the menu is listed from excluded items * * @param string $menu * @return boolean */ private function excluded_admin_menu($menu = '') { $exclude = array('menu-toggle', 'wlcms-admin-logo', 'wp-logo'); return in_array($menu, $exclude); } /** * Create admin bar menu base from the wlcms settings * * @return void */ private function buid_new_admin_bar_menu() { global $wp_admin_bar; if ($this->has_visible_roles()) { return; } $admin_bar_menu = wlcms_field_setting('admin_bar_menus'); if (!$admin_bar_menu || ($admin_bar_menu && !is_array($admin_bar_menu))) { return; } if (!count($admin_bar_menu)) { return; } $nodes = $wp_admin_bar->get_nodes(); if (is_array($nodes) && count($nodes) > 0) : foreach ($nodes as $menu) { if ($this->excluded_admin_menu($menu->id)) continue; if (in_array($menu->id, $admin_bar_menu)) { $wp_admin_bar->remove_menu($menu->id); } } endif; } /** * Getter of admin bar menus list * * @return void */ public function get_admin_bar_menus() { return $this->admin_bar_menus; } /** * Change menu Title for wlcms settings * * @param object $menu * @return string */ public function get_menu_title($menu) { if (!isset($menu->title)) { return ''; } $title = trim(wp_strip_all_tags($menu->title)); return ((!$title || empty($title)) ? '-' : $title) . ' <small>(' . $menu->id . ')</small>'; } public function set_admin_bar_menu_setting() { $this->admin_bar_menu_setting = wlcms_field_setting('admin_bar_menus'); } public function get_admin_bar_menu_setting() { return $this->admin_bar_menu_setting; } public function get_admin_bar_menu_html($menu, $depth = 0) { $out = ''; if (!is_array($menu) && $depth > 0) { return $out; } $ul_class_wrapper = ''; if ($depth > 0) { $out .= '<a href="javascript:void(0)" class="wlcms-toggle-arrow"></a>'; $ul_class_wrapper = ' class="sub_menu_wrapper"'; } $out .= '<ul' . $ul_class_wrapper . '>'; $out .= '<input type="hidden" value="top-secondary" name="admin_bar_menus[]"> <input type="hidden" value="my-account" name="admin_bar_menus[]"> <input type="hidden" value="user-actions" name="admin_bar_menus[]"> <input type="hidden" value="logout" name="admin_bar_menus[]"> '; foreach ($menu as $menu_props) { $menu_key = $menu_props->id; $checked_sub = ''; $admin_bar_menu_setting = $this->get_admin_bar_menu_setting(); $checked_sub = ' checked="checked"'; if ($admin_bar_menu_setting && in_array($menu_key, $admin_bar_menu_setting)) { $checked_sub = ''; } $disabled = ''; if (in_array($menu_key, array('top-secondary', 'my-account', 'user-actions', 'logout'))) { $disabled = ' disabled'; } $sub_html = (isset($menu_props->sub)) ? $this->get_admin_bar_menu_html($menu_props->sub, ($depth + 1)) : ''; $out .= sprintf( ' <li><input class="wlcms-toggle wlcms-toggle-light" id="admin_bar_menus_%1$s"%5$s name="admin_bar_menus[]" value="%1$s" type="checkbox" %2$s/> <label class="wlcms-toggle-btn%5$s" for="admin_bar_menus_%1$s"></label><label class="toggle-label" for="admin_bar_menus_%1$s">%3$s</label> %4$s </li> ', $menu_key, $checked_sub, $this->get_menu_title($menu_props), $sub_html, $disabled ); } $out .= '</ul>'; return $out; } public function get_submenu_placeholder() { return $this->submenu_placeholder; } }