Backend.php
161 lines
| 1 | <?php |
| 2 | |
| 3 | namespace ProfilePress\Core\NavigationMenuLinks; |
| 4 | |
| 5 | |
| 6 | if ( ! defined('ABSPATH')) { |
| 7 | exit; // Exit if accessed directly |
| 8 | } |
| 9 | |
| 10 | class Backend |
| 11 | { |
| 12 | private static $instance = null; |
| 13 | |
| 14 | public function __construct() |
| 15 | { |
| 16 | /* Add a metabox in admin menu page */ |
| 17 | add_action('admin_head-nav-menus.php', array($this, 'add_nav_menu_metabox')); |
| 18 | |
| 19 | /* Modify the "type_label" */ |
| 20 | add_filter('wp_setup_nav_menu_item', array($this, 'nav_menu_type_label')); |
| 21 | |
| 22 | add_filter('customize_nav_menu_available_item_types', array($this, 'register_customize_nav_menu_item_types')); |
| 23 | add_filter('customize_nav_menu_available_items', array($this, 'register_customize_nav_menu_items'), 10, 4); |
| 24 | } |
| 25 | |
| 26 | public function link_elements() |
| 27 | { |
| 28 | return array( |
| 29 | '#pp-login#' => __('Log In', 'wp-navigation-menu-links'), |
| 30 | '#pp-logout#' => __('Log Out', 'wp-navigation-menu-links'), |
| 31 | '#pp-signup#' => __('Sign Up', 'wp-navigation-menu-links'), |
| 32 | '#pp-editprofile#' => __('Edit Profile', 'wp-navigation-menu-links'), |
| 33 | '#pp-myprofile#' => __('My Profile', 'wp-navigation-menu-links'), |
| 34 | '#pp-loginout#' => __('Login', 'wp-navigation-menu-links') . ' | ' . __('Log Out', 'wp-navigation-menu-links'), |
| 35 | ); |
| 36 | } |
| 37 | |
| 38 | /** |
| 39 | * @param array $item_types Menu item types. |
| 40 | * |
| 41 | * @return array |
| 42 | */ |
| 43 | public function register_customize_nav_menu_item_types($item_types) |
| 44 | { |
| 45 | $item_types[] = array( |
| 46 | 'title' => __('ProfilePress Links', 'woocommerce'), |
| 47 | 'type_label' => __('ProfilePress Link', 'woocommerce'), |
| 48 | 'type' => 'ppnavmenu', |
| 49 | 'object' => 'ppnavmenu_links', |
| 50 | ); |
| 51 | |
| 52 | return $item_types; |
| 53 | } |
| 54 | |
| 55 | /** |
| 56 | * @param array $items List of nav menu items. |
| 57 | * @param string $type Nav menu type. |
| 58 | * @param string $object Nav menu object. |
| 59 | * @param integer $page Page number. |
| 60 | * |
| 61 | * @return array |
| 62 | */ |
| 63 | public function register_customize_nav_menu_items($items = array(), $type = '', $object = '', $page = 0) |
| 64 | { |
| 65 | if ('ppnavmenu_links' !== $object) { |
| 66 | return $items; |
| 67 | } |
| 68 | |
| 69 | // Don't allow pagination since all items are loaded at once. |
| 70 | if (0 < $page) { |
| 71 | return $items; |
| 72 | } |
| 73 | |
| 74 | foreach ($this->link_elements() as $id => $title) { |
| 75 | $items[] = array( |
| 76 | 'id' => str_replace('#', '', $id), |
| 77 | 'title' => $title, |
| 78 | 'type_label' => __('ProfilePress Link', 'woocommerce'), |
| 79 | 'url' => $id, |
| 80 | ); |
| 81 | } |
| 82 | |
| 83 | return $items; |
| 84 | } |
| 85 | |
| 86 | |
| 87 | public function add_nav_menu_metabox() |
| 88 | { |
| 89 | add_meta_box('ppnavmenu', __('ProfilePress Links', 'wp-navigation-menu-links'), array($this, 'nav_menu_metabox'), 'nav-menus', 'side', 'default'); |
| 90 | } |
| 91 | |
| 92 | public function nav_menu_metabox($object) |
| 93 | { |
| 94 | global $nav_menu_selected_id; |
| 95 | |
| 96 | $elems = $this->link_elements(); |
| 97 | |
| 98 | $elems_obj = array(); |
| 99 | foreach ($elems as $value => $title) { |
| 100 | $elems_obj[$title] = new PP_Nav_Items(); |
| 101 | $elems_obj[$title]->object_id = esc_html($value); |
| 102 | $elems_obj[$title]->title = esc_html($title); |
| 103 | $elems_obj[$title]->url = esc_html($value); |
| 104 | } |
| 105 | |
| 106 | $walker = new \Walker_Nav_Menu_Checklist(array()); |
| 107 | ?> |
| 108 | <div id="pp-links" class="pplinksdiv"> |
| 109 | |
| 110 | <div id="tabs-panel-pp-links-all" class="tabs-panel tabs-panel-view-all tabs-panel-active"> |
| 111 | <ul id="pp-linkschecklist" class="list:pp-links categorychecklist form-no-clear"> |
| 112 | <?php echo walk_nav_menu_tree(array_map('wp_setup_nav_menu_item', $elems_obj), 0, |
| 113 | (object)array('walker' => $walker)); ?> |
| 114 | </ul> |
| 115 | </div> |
| 116 | |
| 117 | <div class="button-controls"> |
| 118 | <span class="add-to-menu"> |
| 119 | <input type="submit"<?php disabled($nav_menu_selected_id, 0); ?> class="button-secondary submit-add-to-menu right" value="<?php esc_attr_e('Add to Menu'); ?>" name="add-pp-links-menu-item" id="submit-pp-links"/> |
| 120 | <span class="spinner"></span> |
| 121 | </span> |
| 122 | |
| 123 | <div id="help-login-links"><br/><br/> |
| 124 | <p><strong>Do not change the value of the "URL" field.</strong></p> |
| 125 | </div> |
| 126 | </div> |
| 127 | |
| 128 | </div> |
| 129 | <?php |
| 130 | } |
| 131 | |
| 132 | public function nav_menu_type_label($menu_item) |
| 133 | { |
| 134 | $elems = array( |
| 135 | '#pp-login#', |
| 136 | '#pp-logout#', |
| 137 | '#pp-signup#', |
| 138 | '#pp-editprofile#', |
| 139 | '#pp-myprofile#', |
| 140 | '#pp-loginout#' |
| 141 | ); |
| 142 | if (isset($menu_item->object, $menu_item->url) && |
| 143 | 'custom' == $menu_item->object && |
| 144 | in_array($menu_item->url, $elems) |
| 145 | ) { |
| 146 | $menu_item->type_label = __('ProfilePress Link', 'wp-navigation-menu-links'); |
| 147 | } |
| 148 | |
| 149 | return $menu_item; |
| 150 | } |
| 151 | |
| 152 | public static function get_instance() |
| 153 | { |
| 154 | // If the single instance hasn't been set, set it now. |
| 155 | if (null == self::$instance) { |
| 156 | self::$instance = new self; |
| 157 | } |
| 158 | |
| 159 | return self::$instance; |
| 160 | } |
| 161 | } |