| 1 |
<?php |
| 2 |
|
| 3 |
/** |
| 4 |
* Admin meni class |
| 5 |
* |
| 6 |
* @package Timetics |
| 7 |
*/ |
| 8 |
|
| 9 |
namespace Timetics\Core\Admin; |
| 10 |
|
| 11 |
defined( 'ABSPATH' ) || exit; |
| 12 |
|
| 13 |
/** |
| 14 |
* Class Menu |
| 15 |
*/ |
| 16 |
class Menu |
| 17 |
{ |
| 18 |
|
| 19 |
use \Timetics\Utils\Singleton; |
| 20 |
|
| 21 |
/** |
| 22 |
* Initialize |
| 23 |
* |
| 24 |
* @return void |
| 25 |
*/ |
| 26 |
public function init() |
| 27 |
{ |
| 28 |
add_action('admin_menu', array($this, 'register_admin_menu')); |
| 29 |
|
| 30 |
add_action('timetics_menu', array($this, 'add_pro_admin_menu')); |
| 31 |
} |
| 32 |
|
| 33 |
|
| 34 |
/** |
| 35 |
* Register admin menu |
| 36 |
* |
| 37 |
* @return void |
| 38 |
*/ |
| 39 |
|
| 40 |
public function register_admin_menu() |
| 41 |
{ |
| 42 |
global $submenu; |
| 43 |
$capability = 'manage_timetics'; |
| 44 |
$slug = 'timetics'; |
| 45 |
$url = 'admin.php?page=' . $slug . '#'; |
| 46 |
$menu_items = array( |
| 47 |
[ |
| 48 |
'id' => 'overview', |
| 49 |
'title' => esc_html__('Overview', 'timetics'), |
| 50 |
'link' => '/', |
| 51 |
'capability' => apply_filters('timetics_menu_permission_overview', $capability), |
| 52 |
'position' => apply_filters('timetics_menu_position_overview', 1), |
| 53 |
], |
| 54 |
[ |
| 55 |
'id' => 'meeting', |
| 56 |
'title' => esc_html__('Meetings', 'timetics'), |
| 57 |
'link' => '/meetings', |
| 58 |
'capability' => apply_filters('timetics_menu_permission_meeting', 'read_booking'), |
| 59 |
'position' => apply_filters('timetics_menu_position_meeting', 2), |
| 60 |
], |
| 61 |
[ |
| 62 |
'id' => 'staff', |
| 63 |
'title' => esc_html__('Team Members', 'timetics'), |
| 64 |
'link' => '/staff', |
| 65 |
'capability' => apply_filters('timetics_menu_permission_staff', 'edit_staff'), |
| 66 |
'position' => apply_filters('timetics_menu_position_staff', 3), |
| 67 |
], |
| 68 |
|
| 69 |
[ |
| 70 |
'id' => 'booking', |
| 71 |
'title' => esc_html__('Calendar', 'timetics'), |
| 72 |
'link' => '/bookings', |
| 73 |
'capability' => apply_filters('timetics_menu_permission_booking', 'read_booking'), |
| 74 |
'position' => apply_filters('timetics_menu_position_booking', 1.5), |
| 75 |
], |
| 76 |
[ |
| 77 |
'id' => 'customer', |
| 78 |
'title' => esc_html__('Customers', 'timetics'), |
| 79 |
'link' => '/customers', |
| 80 |
'capability' => apply_filters('timetics_menu_permission_customer', 'manage_options'), |
| 81 |
'position' => apply_filters('timetics_menu_position_customer', 5), |
| 82 |
], |
| 83 |
[ |
| 84 |
'id' => 'settings', |
| 85 |
'title' => esc_html__('Settings', 'timetics'), |
| 86 |
'link' => '/settings', |
| 87 |
'capability' => apply_filters('timetics_menu_permission_settings', 'manage_options'), |
| 88 |
'position' => apply_filters('timetics_menu_position_settings', 6), |
| 89 |
], |
| 90 |
[ |
| 91 |
'id' => 'my-profile', |
| 92 |
'title' => esc_html__('My Profile', 'timetics'), |
| 93 |
'link' => '/my-profile', |
| 94 |
'capability' => apply_filters('timetics_menu_permission_my_profile', 'edit_profile'), |
| 95 |
'position' => apply_filters('timetics_menu_position_my_profile', 7), |
| 96 |
], |
| 97 |
[ |
| 98 |
'id' => 'shortcode', |
| 99 |
'title' => esc_html__('Shortcodes', 'timetics'), |
| 100 |
'link' => '/shortcodes', |
| 101 |
'capability' => apply_filters('timetics_menu_permission_shortcode', 'manage_options'), |
| 102 |
'position' => apply_filters('timetics_menu_position_shortcode', 8), |
| 103 |
], |
| 104 |
[ |
| 105 |
'id' => 'onboard', |
| 106 |
'title' => esc_html__('Setup Wizard', 'timetics'), |
| 107 |
'link' => '/onboard', |
| 108 |
'capability' => apply_filters('timetics_menu_permission_onboard', 'manage_options'), |
| 109 |
'position' => apply_filters('timetics_menu_position_onboard', 9), |
| 110 |
], |
| 111 |
[ |
| 112 |
'id' => 'about-us', |
| 113 |
'title' => esc_html__('About Us', 'timetics'), |
| 114 |
'link' => '/about-us', |
| 115 |
'capability' => apply_filters('timetics_menu_permission_about_us', 'manage_options'), |
| 116 |
'position' => apply_filters('timetics_menu_position_about_us', 10), |
| 117 |
], |
| 118 |
); |
| 119 |
|
| 120 |
add_menu_page( |
| 121 |
esc_html__('Timetics', 'timetics'), |
| 122 |
esc_html__('Timetics', 'timetics'), |
| 123 |
$capability, |
| 124 |
$slug, |
| 125 |
array($this, 'timetics_dashboard_view'), |
| 126 |
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzE0MjhfMTE1OSkiPgo8cGF0aCBkPSJNOC42NDc0NSAxMy40NTEyQzUuMTc5MjQgMTMuNDUxMiAyLjQwNDY3IDEwLjY2NjcgMi43OTc3NCA3LjM4OTY0QzMuMDk4MzIgNC44MTkzNiA1LjM2NDIxIDIuNzg0NTUgOC4xMzg3OCAyLjU3MDM2QzkuOTQyMjUgMi40NDE4NSAxMS42MDcgMy4wNjMgMTIuNzYzMSA0LjEzMzk1TDE0Ljc3NDYgMi4zNzc1OUMxMy4wODY4IDAuNzkyNTg1IDEwLjcwNTMgLTAuMTI4NDMyIDguMDkyNTQgMC4wMjE1MDA3QzMuODE1MDggMC4yNTcxMSAwLjMyMzc0OSAzLjQ2OTk2IDAuMDIzMTcwNiA3LjQzMjQ4Qy0wLjMyMzY1IDEyLjEwMTggMy42NzYzNSAxNi4wMDAxIDguNjQ3NDUgMTYuMDAwMUMxMC41MjAzIDE2LjAwMDEgMTIuMjMxMyAxNS40NDMyIDEzLjY0MTcgMTQuNTIyMkMxNC4zMzUzIDE0LjA3MjQgMTQuNDA0NyAxMy4xNTE0IDEzLjgwMzUgMTIuNTk0NUwxMy43ODA0IDEyLjU3M0MxMy4yOTQ4IDEyLjEyMzIgMTIuNTU1IDEyLjEwMTggMTIuMDAwMSAxMi40NDQ1QzExLjA1MjEgMTMuMDg3MSA5Ljg5NiAxMy40NTEyIDguNjQ3NDUgMTMuNDUxMloiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik04LjY0NzQ1IDEzLjQ1MTJDNS4xNzkyNCAxMy40NTEyIDIuNDA0NjcgMTAuNjY2NyAyLjc5Nzc0IDcuMzg5NjRDMy4wOTgzMiA0LjgxOTM2IDUuMzY0MjEgMi43ODQ1NSA4LjEzODc4IDIuNTcwMzZDOS45NDIyNSAyLjQ0MTg1IDExLjYwNyAzLjA2MyAxMi43NjMxIDQuMTMzOTVMMTQuNzc0NiAyLjM3NzU5QzEzLjA4NjggMC43OTI1ODUgMTAuNzA1MyAtMC4xMjg0MzIgOC4wOTI1NCAwLjAyMTUwMDdDMy44MTUwOCAwLjI1NzExIDAuMzIzNzQ5IDMuNDY5OTYgMC4wMjMxNzA2IDcuNDMyNDhDLTAuMzIzNjUgMTIuMTAxOCAzLjY3NjM1IDE2LjAwMDEgOC42NDc0NSAxNi4wMDAxQzEwLjUyMDMgMTYuMDAwMSAxMi4yMzEzIDE1LjQ0MzIgMTMuNjQxNyAxNC41MjIyQzE0LjMzNTMgMTQuMDcyNCAxNC40MDQ3IDEzLjE1MTQgMTMuODAzNSAxMi41OTQ1TDEzLjc4MDQgMTIuNTczQzEzLjI5NDggMTIuMTIzMiAxMi41NTUgMTIuMTAxOCAxMi4wMDAxIDEyLjQ0NDVDMTEuMDUyMSAxMy4wODcxIDkuODk2IDEzLjQ1MTIgOC42NDc0NSAxMy40NTEyWiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzE0MjhfMTE1OSkiLz4KPHBhdGggZD0iTTE0LjQyNzggMi4wNzc1M0MxNC4yMTk3IDEuOTA2MTggMTMuOTg4NSAxLjcxMzQxIDEzLjc1NzMgMS41NjM0OEMxMy45MTkxIDEuODIwNSAxNC4wMTE2IDIuMTIwMzcgMTQuMDExNiAyLjQyMDI0QzE0LjAxMTYgMi44MjcyIDEzLjgwMzUgMy4yMzQxNiAxMy40Nzk4IDMuNTEyNjFMMTIuNzg2MiA0LjExMjM0TDguNTc4MDggNy44MTc4M0w3LjA5ODMxIDYuNDQ3MDFDNi41ODk2NCA1Ljk3NTc5IDUuNzU3MjcgNS44OTAxMiA1LjIwMjM2IDYuMzE4NUM0LjU1NDk2IDYuODExMTMgNC41MzE4NCA3LjY4OTMxIDUuMTA5ODcgOC4yMDMzN0w3LjU4Mzg2IDEwLjQ5NTJDNy44NjEzMiAxMC43NTIyIDguMjA4MTQgMTAuODU5MyA4LjU1NDk2IDEwLjg1OTNDOC45MDE3OCAxMC44NTkzIDkuMjQ4NiAxMC43NTIyIDkuNTAyOTQgMTAuNTE2NkwxNC4yNDI4IDYuMzM5OTJMMTUuNTYwNyA1LjE4MzI5QzE2LjA2OTQgNC43MzM0OSAxNi4xNjE5IDQuMDA1MjQgMTUuNzY4OCAzLjQ0ODM1QzE1LjQ2ODMgMy4wODQyMyAxNC44NDQgMi4zOTg4MiAxNC40Mjc4IDIuMDc3NTNaIiBmaWxsPSIjRTlGMkZGIi8+CjwvZz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8xNDI4XzExNTkiIHgxPSIxMy45ODg4IiB5MT0iMC45NDY1NTYiIHgyPSI5LjI0NzY4IiB5Mj0iNS42NDI5OCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjMEMzOTc1IiBzdG9wLW9wYWNpdHk9IjAuMzgiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMzE2MUYxIiBzdG9wLW9wYWNpdHk9IjAiLz4KPC9saW5lYXJHcmFkaWVudD4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xNDI4XzExNTkiPgo8cmVjdCB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==", |
| 127 |
10 |
| 128 |
); |
| 129 |
|
| 130 |
$menu_items = apply_filters('timetics_menu', $menu_items); |
| 131 |
$position = array_column($menu_items, 'position'); |
| 132 |
|
| 133 |
array_multisort($position, SORT_ASC, $menu_items); |
| 134 |
|
| 135 |
foreach ($menu_items as $item) { |
| 136 |
$external = !empty($item['external_link']) ? $item['external_link'] : false; |
| 137 |
|
| 138 |
$link = !$external ? $url . $item['link'] : $item['link']; |
| 139 |
$submenu[$slug][] = [$item['title'], $item['capability'], $link]; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited |
| 140 |
} |
| 141 |
} |
| 142 |
|
| 143 |
/** |
| 144 |
* Admin dashboard view |
| 145 |
* |
| 146 |
* @return void |
| 147 |
*/ |
| 148 |
public function timetics_dashboard_view() |
| 149 |
{ |
| 150 |
?> |
| 151 |
<div class="wrap" id="time_tics_dashboard"> |
| 152 |
</div> |
| 153 |
<?php |
| 154 |
} |
| 155 |
|
| 156 |
// Add submenu page under "Settings" |
| 157 |
public function add_pro_admin_menu($menu_items) |
| 158 |
{ |
| 159 |
if (class_exists('TimeticsPro')) { |
| 160 |
return $menu_items; |
| 161 |
} |
| 162 |
|
| 163 |
$menu_items[] = [ |
| 164 |
'id' => 'go-pro', |
| 165 |
'title' => esc_html__('Go Pro', 'timetics'), |
| 166 |
'link' => 'https://arraytics.com/timetics', |
| 167 |
'external_link' => true, |
| 168 |
'capability' => 'manage_options', |
| 169 |
'position' => 9, |
| 170 |
]; |
| 171 |
|
| 172 |
return $menu_items; |
| 173 |
} |
| 174 |
} |
| 175 |
|