PluginProbe
Timetics – Appointment Booking Calendar & Scheduling / 1.0.63
Timetics – Appointment Booking Calendar & Scheduling v1.0.63
1.0.62 1.0.63 1.0.61 1.0.60 1.0.59 1.0.58 1.0.57 1.0.56 trunk 1.0.0 1.0.1 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.19 1.0.2 1.0.20 1.0.21 1.0.22 All 64 releases
timetics / core / admin / menu.php

menu.php in Timetics – Appointment Booking Calendar & Scheduling 1.0.63, at core/admin/menu.php

183 lines 9.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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' => 'ask-ai',
56 'title' => esc_html__('Ask AI', 'timetics'),
57 'link' => '/ask-ai',
58 // Staff cannot set Aisentic up, so they only get the page once the assistant is ready.
59 'capability' => apply_filters('timetics_menu_permission_ask_ai', class_exists('Aisentic\Init') && timetics_aisentic_is_registered() ? $capability : 'manage_options'),
60 'position' => apply_filters('timetics_menu_position_ask_ai', 1.2),
61 ],
62 [
63 'id' => 'meeting',
64 'title' => esc_html__('Meetings', 'timetics'),
65 'link' => '/meetings',
66 'capability' => apply_filters('timetics_menu_permission_meeting', 'read_booking'),
67 'position' => apply_filters('timetics_menu_position_meeting', 2),
68 ],
69 [
70 'id' => 'staff',
71 'title' => esc_html__('Team Members', 'timetics'),
72 'link' => '/staff',
73 'capability' => apply_filters('timetics_menu_permission_staff', 'edit_staff'),
74 'position' => apply_filters('timetics_menu_position_staff', 3),
75 ],
76
77 [
78 'id' => 'booking',
79 'title' => esc_html__('Calendar', 'timetics'),
80 'link' => '/bookings',
81 'capability' => apply_filters('timetics_menu_permission_booking', 'read_booking'),
82 'position' => apply_filters('timetics_menu_position_booking', 1.5),
83 ],
84 [
85 'id' => 'customer',
86 'title' => esc_html__('Customers', 'timetics'),
87 'link' => '/customers',
88 'capability' => apply_filters('timetics_menu_permission_customer', 'manage_options'),
89 'position' => apply_filters('timetics_menu_position_customer', 5),
90 ],
91 [
92 'id' => 'settings',
93 'title' => esc_html__('Settings', 'timetics'),
94 'link' => '/settings',
95 'capability' => apply_filters('timetics_menu_permission_settings', 'manage_options'),
96 'position' => apply_filters('timetics_menu_position_settings', 6),
97 ],
98 [
99 'id' => 'my-profile',
100 'title' => esc_html__('My Profile', 'timetics'),
101 'link' => '/my-profile',
102 'capability' => apply_filters('timetics_menu_permission_my_profile', 'edit_profile'),
103 'position' => apply_filters('timetics_menu_position_my_profile', 7),
104 ],
105 [
106 'id' => 'shortcode',
107 'title' => esc_html__('Shortcodes', 'timetics'),
108 'link' => '/shortcodes',
109 'capability' => apply_filters('timetics_menu_permission_shortcode', 'manage_options'),
110 'position' => apply_filters('timetics_menu_position_shortcode', 8),
111 ],
112 [
113 'id' => 'onboard',
114 'title' => esc_html__('Setup Wizard', 'timetics'),
115 'link' => '/onboard',
116 'capability' => apply_filters('timetics_menu_permission_onboard', 'manage_options'),
117 'position' => apply_filters('timetics_menu_position_onboard', 9),
118 ],
119 [
120 'id' => 'about-us',
121 'title' => esc_html__('About Us', 'timetics'),
122 'link' => '/about-us',
123 'capability' => apply_filters('timetics_menu_permission_about_us', 'manage_options'),
124 'position' => apply_filters('timetics_menu_position_about_us', 10),
125 ],
126 );
127
128 add_menu_page(
129 esc_html__('Timetics', 'timetics'),
130 esc_html__('Timetics', 'timetics'),
131 $capability,
132 $slug,
133 array($this, 'timetics_dashboard_view'),
134 "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzE0MjhfMTE1OSkiPgo8cGF0aCBkPSJNOC42NDc0NSAxMy40NTEyQzUuMTc5MjQgMTMuNDUxMiAyLjQwNDY3IDEwLjY2NjcgMi43OTc3NCA3LjM4OTY0QzMuMDk4MzIgNC44MTkzNiA1LjM2NDIxIDIuNzg0NTUgOC4xMzg3OCAyLjU3MDM2QzkuOTQyMjUgMi40NDE4NSAxMS42MDcgMy4wNjMgMTIuNzYzMSA0LjEzMzk1TDE0Ljc3NDYgMi4zNzc1OUMxMy4wODY4IDAuNzkyNTg1IDEwLjcwNTMgLTAuMTI4NDMyIDguMDkyNTQgMC4wMjE1MDA3QzMuODE1MDggMC4yNTcxMSAwLjMyMzc0OSAzLjQ2OTk2IDAuMDIzMTcwNiA3LjQzMjQ4Qy0wLjMyMzY1IDEyLjEwMTggMy42NzYzNSAxNi4wMDAxIDguNjQ3NDUgMTYuMDAwMUMxMC41MjAzIDE2LjAwMDEgMTIuMjMxMyAxNS40NDMyIDEzLjY0MTcgMTQuNTIyMkMxNC4zMzUzIDE0LjA3MjQgMTQuNDA0NyAxMy4xNTE0IDEzLjgwMzUgMTIuNTk0NUwxMy43ODA0IDEyLjU3M0MxMy4yOTQ4IDEyLjEyMzIgMTIuNTU1IDEyLjEwMTggMTIuMDAwMSAxMi40NDQ1QzExLjA1MjEgMTMuMDg3MSA5Ljg5NiAxMy40NTEyIDguNjQ3NDUgMTMuNDUxMloiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik04LjY0NzQ1IDEzLjQ1MTJDNS4xNzkyNCAxMy40NTEyIDIuNDA0NjcgMTAuNjY2NyAyLjc5Nzc0IDcuMzg5NjRDMy4wOTgzMiA0LjgxOTM2IDUuMzY0MjEgMi43ODQ1NSA4LjEzODc4IDIuNTcwMzZDOS45NDIyNSAyLjQ0MTg1IDExLjYwNyAzLjA2MyAxMi43NjMxIDQuMTMzOTVMMTQuNzc0NiAyLjM3NzU5QzEzLjA4NjggMC43OTI1ODUgMTAuNzA1MyAtMC4xMjg0MzIgOC4wOTI1NCAwLjAyMTUwMDdDMy44MTUwOCAwLjI1NzExIDAuMzIzNzQ5IDMuNDY5OTYgMC4wMjMxNzA2IDcuNDMyNDhDLTAuMzIzNjUgMTIuMTAxOCAzLjY3NjM1IDE2LjAwMDEgOC42NDc0NSAxNi4wMDAxQzEwLjUyMDMgMTYuMDAwMSAxMi4yMzEzIDE1LjQ0MzIgMTMuNjQxNyAxNC41MjIyQzE0LjMzNTMgMTQuMDcyNCAxNC40MDQ3IDEzLjE1MTQgMTMuODAzNSAxMi41OTQ1TDEzLjc4MDQgMTIuNTczQzEzLjI5NDggMTIuMTIzMiAxMi41NTUgMTIuMTAxOCAxMi4wMDAxIDEyLjQ0NDVDMTEuMDUyMSAxMy4wODcxIDkuODk2IDEzLjQ1MTIgOC42NDc0NSAxMy40NTEyWiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzE0MjhfMTE1OSkiLz4KPHBhdGggZD0iTTE0LjQyNzggMi4wNzc1M0MxNC4yMTk3IDEuOTA2MTggMTMuOTg4NSAxLjcxMzQxIDEzLjc1NzMgMS41NjM0OEMxMy45MTkxIDEuODIwNSAxNC4wMTE2IDIuMTIwMzcgMTQuMDExNiAyLjQyMDI0QzE0LjAxMTYgMi44MjcyIDEzLjgwMzUgMy4yMzQxNiAxMy40Nzk4IDMuNTEyNjFMMTIuNzg2MiA0LjExMjM0TDguNTc4MDggNy44MTc4M0w3LjA5ODMxIDYuNDQ3MDFDNi41ODk2NCA1Ljk3NTc5IDUuNzU3MjcgNS44OTAxMiA1LjIwMjM2IDYuMzE4NUM0LjU1NDk2IDYuODExMTMgNC41MzE4NCA3LjY4OTMxIDUuMTA5ODcgOC4yMDMzN0w3LjU4Mzg2IDEwLjQ5NTJDNy44NjEzMiAxMC43NTIyIDguMjA4MTQgMTAuODU5MyA4LjU1NDk2IDEwLjg1OTNDOC45MDE3OCAxMC44NTkzIDkuMjQ4NiAxMC43NTIyIDkuNTAyOTQgMTAuNTE2NkwxNC4yNDI4IDYuMzM5OTJMMTUuNTYwNyA1LjE4MzI5QzE2LjA2OTQgNC43MzM0OSAxNi4xNjE5IDQuMDA1MjQgMTUuNzY4OCAzLjQ0ODM1QzE1LjQ2ODMgMy4wODQyMyAxNC44NDQgMi4zOTg4MiAxNC40Mjc4IDIuMDc3NTNaIiBmaWxsPSIjRTlGMkZGIi8+CjwvZz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8xNDI4XzExNTkiIHgxPSIxMy45ODg4IiB5MT0iMC45NDY1NTYiIHgyPSI5LjI0NzY4IiB5Mj0iNS42NDI5OCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjMEMzOTc1IiBzdG9wLW9wYWNpdHk9IjAuMzgiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMzE2MUYxIiBzdG9wLW9wYWNpdHk9IjAiLz4KPC9saW5lYXJHcmFkaWVudD4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xNDI4XzExNTkiPgo8cmVjdCB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==",
135 10
136 );
137
138 $menu_items = apply_filters('timetics_menu', $menu_items);
139 $position = array_column($menu_items, 'position');
140
141 array_multisort($position, SORT_ASC, $menu_items);
142
143 foreach ($menu_items as $item) {
144 $external = !empty($item['external_link']) ? $item['external_link'] : false;
145
146 $link = !$external ? $url . $item['link'] : $item['link'];
147 $submenu[$slug][] = [$item['title'], $item['capability'], $link]; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
148 }
149 }
150
151 /**
152 * Admin dashboard view
153 *
154 * @return void
155 */
156 public function timetics_dashboard_view()
157 {
158 ?>
159 <div class="wrap" id="time_tics_dashboard">
160 </div>
161 <?php
162 }
163
164 // Add submenu page under "Settings"
165 public function add_pro_admin_menu($menu_items)
166 {
167 if (class_exists('TimeticsPro')) {
168 return $menu_items;
169 }
170
171 $menu_items[] = [
172 'id' => 'go-pro',
173 'title' => esc_html__('Go Pro', 'timetics'),
174 'link' => 'https://arraytics.com/timetics',
175 'external_link' => true,
176 'capability' => 'manage_options',
177 'position' => 9,
178 ];
179
180 return $menu_items;
181 }
182 }
183