PluginProbe
Timetics – Appointment Booking Calendar & Scheduling / 1.0.38
Timetics – Appointment Booking Calendar & Scheduling v1.0.38
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 1.0.23 1.0.24 All 62 releases
← All changes | core/admin/menu.php +48 -38 1.0.101.0.38 View file →
@@ -24,12 +24,9 @@
24 24 public function init()
25 25 {
26 26 add_action('admin_menu', array($this, 'register_admin_menu'));
27 27
28 - // go pro link
29 - if (!class_exists('TimeticsPro')) {
30 - add_action('admin_menu', array($this, 'add_pro_admin_menu'));
31 - }
28 + add_action('timetics_menu', array($this, 'add_pro_admin_menu'));
32 29 }
33 30
34 31
35 32 /**
@@ -43,70 +40,75 @@
43 40 global $submenu;
44 41 $capability = 'manage_timetics';
45 42 $slug = 'timetics';
46 43 $url = 'admin.php?page=' . $slug . '#';
44 + $timetics_menu_position = 'timetics_menu_position_';
45 + $timetics_menu_permission = 'timetics_menu_permission_';
46 +
47 47 $menu_items = array(
48 - [ 'id' => 'overview',
48 + [
49 + 'id' => 'overview',
49 50 'title' => esc_html__('Overview', 'timetics'),
50 51 'link' => '/',
51 - 'capability' => $capability,
52 - 'position' => 1,
52 + 'capability' => apply_filters($timetics_menu_permission . 'overview', $capability),
53 + 'position' => apply_filters($timetics_menu_position . 'overview', 1),
53 54 ],
54 55 [
55 56 'id' => 'meeting',
56 57 'title' => esc_html__('Meetings', 'timetics'),
57 58 'link' => '/meetings',
58 - 'capability' => 'read_booking',
59 - 'position' => 2,
59 + 'capability' => apply_filters($timetics_menu_permission . 'meeting', 'read_booking'),
60 + 'position' => apply_filters($timetics_menu_position . 'meeting', 2),
60 61 ],
61 62 [
62 63 'id' => 'staff',
63 - 'title' => esc_html__('Staff Members', 'timetics'),
64 + 'title' => esc_html__('Team Members', 'timetics'),
64 65 'link' => '/staff',
65 - 'capability' => 'edit_staff',
66 - 'position' => 3,
66 + 'capability' => apply_filters($timetics_menu_permission . 'staff', 'edit_staff'),
67 + 'position' => apply_filters($timetics_menu_position . 'staff', 3),
67 68 ],
68 69
69 70 [
70 71 'id' => 'booking',
71 - 'title' => esc_html__('Bookings', 'timetics'),
72 + 'title' => esc_html__('Calendar', 'timetics'),
72 73 'link' => '/bookings',
73 - 'capability' => 'read_booking',
74 - 'position' => 4,
74 + 'capability' => apply_filters($timetics_menu_permission . 'booking', 'read_booking'),
75 + 'position' => apply_filters($timetics_menu_position . 'booking', 1.5),
75 76 ],
76 77 [
77 78 'id' => 'customer',
78 79 'title' => esc_html__('Customers', 'timetics'),
79 80 'link' => '/customers',
80 - 'capability' => 'manage_options',
81 - 'position' => 5,
81 + 'capability' => apply_filters($timetics_menu_permission . 'customer', 'manage_options'),
82 + 'position' => apply_filters($timetics_menu_position . 'customer', 5),
82 83 ],
83 84 [
84 85 'id' => 'settings',
85 86 'title' => esc_html__('Settings', 'timetics'),
86 87 'link' => '/settings',
87 - 'capability' => 'manage_options',
88 - 'position' => 6,
88 + 'capability' => apply_filters($timetics_menu_permission . 'settings', 'manage_options'),
89 + 'position' => apply_filters($timetics_menu_position . 'settings', 6),
89 90 ],
90 - [ 'id' => 'my-profile',
91 + [
92 + 'id' => 'my-profile',
91 93 'title' => esc_html__('My Profile', 'timetics'),
92 94 'link' => '/my-profile',
93 - 'capability' => 'edit_profile',
94 - 'position' => 7,
95 + 'capability' => apply_filters($timetics_menu_permission . 'my-profile', 'edit_profile'),
96 + 'position' => apply_filters($timetics_menu_position . 'my-profile', 7),
95 97 ],
96 98 [
97 99 'id' => 'shortcode',
98 100 'title' => esc_html__('Shortcodes', 'timetics'),
99 101 'link' => '/shortcodes',
100 - 'capability' => 'edit_profile',
101 - 'position' => 8,
102 + 'capability' => apply_filters($timetics_menu_permission . 'shortcode', 'manage_options'),
103 + 'position' => apply_filters($timetics_menu_position . 'shortcode', 8),
102 104 ],
103 105 [
104 106 'id' => 'onboard',
105 107 'title' => esc_html__('Setup Wizard', 'timetics'),
106 108 'link' => '/onboard',
107 - 'capability' => 'edit_profile',
108 - 'position' => 9,
109 + 'capability' => apply_filters($timetics_menu_permission . 'onboard', 'manage_options'),
110 + 'position' => apply_filters($timetics_menu_position . 'onboard', 9),
109 111 ],
110 112 );
111 113
112 114 add_menu_page(
@@ -114,9 +116,9 @@
114 116 esc_html__('Timetics', 'timetics'),
115 117 $capability,
116 118 $slug,
117 119 array($this, 'timetics_dashboard_view'),
118 - "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTE0OCIgaGVpZ2h0PSIxMTQ4IiB2aWV3Qm94PSIwIDAgMTE0OCAxMTQ4IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNODQ2Ljc1MyA5NzAuNTQ1QzgxNS41MDMgOTk1LjAzOCA3NzEuMTE4IDk4Mi40NjggNzUxLjgzNCA5NDcuNzY1QzczMi44NTYgOTEzLjYxMyA3NDUuNjI5IDg3MS4wNDMgNzc1LjE4MiA4NDUuNDgxQzg0OC4yNjkgNzgyLjI2MyA4OTMuMjcgNjkwLjcyMSA4OTMuMjcgNTkwLjE4MUM4OTMuMjcgNDA1LjI1NiA3NDAuNjY2IDI1Mi42OTMgNTU1LjY5MyAyNTIuNjkzQzQ1My42ODYgMjUyLjY5MyAzNTcuODUzIDI5OC45OCAyOTMuNDEgMzc2LjQyNkMyNjkuMjIyIDQwNS40OTUgMjI4LjE1OCA0MTguNDg2IDE5NC44NTYgNDAwLjU1OUMxNjEuNjYzIDM4Mi42OTEgMTQ4LjczIDM0MS4wMTQgMTcwLjg4IDMxMC41MTVDMjYwLjEwOCAxODcuNjUxIDQwMi42MzggMTE0IDU1NS42OTMgMTE0QzgxOS4yOCAxMTQgMTAzMiAzMjYuNjYzIDEwMzIgNTkwLjE4MUMxMDMyIDc0MS41MzUgOTYzLjM1MSA4NzkuMTY0IDg0Ni43NTMgOTcwLjU0NVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xODUuOTYyIDUyNi41MzFINjI0LjYwNFY5NjUuMDU3QzYyNC42MDQgMTAwMy4xMyA1OTMuNzI5IDEwMzQgNTU1LjY0MiAxMDM0QzUxNy41NTYgMTAzNCA0ODYuNjgxIDEwMDMuMTMgNDg2LjY4MSA5NjUuMDU3VjY2NC40MThIMTg1Ljk2MkMxNDcuODc1IDY2NC40MTggMTE3IDYzMy41NTEgMTE3IDU5NS40NzRDMTE3IDU1Ny4zOTggMTQ3Ljg3NSA1MjYuNTMxIDE4NS45NjIgNTI2LjUzMVoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=",
120 + "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzE0MjhfMTE1OSkiPgo8cGF0aCBkPSJNOC42NDc0NSAxMy40NTEyQzUuMTc5MjQgMTMuNDUxMiAyLjQwNDY3IDEwLjY2NjcgMi43OTc3NCA3LjM4OTY0QzMuMDk4MzIgNC44MTkzNiA1LjM2NDIxIDIuNzg0NTUgOC4xMzg3OCAyLjU3MDM2QzkuOTQyMjUgMi40NDE4NSAxMS42MDcgMy4wNjMgMTIuNzYzMSA0LjEzMzk1TDE0Ljc3NDYgMi4zNzc1OUMxMy4wODY4IDAuNzkyNTg1IDEwLjcwNTMgLTAuMTI4NDMyIDguMDkyNTQgMC4wMjE1MDA3QzMuODE1MDggMC4yNTcxMSAwLjMyMzc0OSAzLjQ2OTk2IDAuMDIzMTcwNiA3LjQzMjQ4Qy0wLjMyMzY1IDEyLjEwMTggMy42NzYzNSAxNi4wMDAxIDguNjQ3NDUgMTYuMDAwMUMxMC41MjAzIDE2LjAwMDEgMTIuMjMxMyAxNS40NDMyIDEzLjY0MTcgMTQuNTIyMkMxNC4zMzUzIDE0LjA3MjQgMTQuNDA0NyAxMy4xNTE0IDEzLjgwMzUgMTIuNTk0NUwxMy43ODA0IDEyLjU3M0MxMy4yOTQ4IDEyLjEyMzIgMTIuNTU1IDEyLjEwMTggMTIuMDAwMSAxMi40NDQ1QzExLjA1MjEgMTMuMDg3MSA5Ljg5NiAxMy40NTEyIDguNjQ3NDUgMTMuNDUxMloiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik04LjY0NzQ1IDEzLjQ1MTJDNS4xNzkyNCAxMy40NTEyIDIuNDA0NjcgMTAuNjY2NyAyLjc5Nzc0IDcuMzg5NjRDMy4wOTgzMiA0LjgxOTM2IDUuMzY0MjEgMi43ODQ1NSA4LjEzODc4IDIuNTcwMzZDOS45NDIyNSAyLjQ0MTg1IDExLjYwNyAzLjA2MyAxMi43NjMxIDQuMTMzOTVMMTQuNzc0NiAyLjM3NzU5QzEzLjA4NjggMC43OTI1ODUgMTAuNzA1MyAtMC4xMjg0MzIgOC4wOTI1NCAwLjAyMTUwMDdDMy44MTUwOCAwLjI1NzExIDAuMzIzNzQ5IDMuNDY5OTYgMC4wMjMxNzA2IDcuNDMyNDhDLTAuMzIzNjUgMTIuMTAxOCAzLjY3NjM1IDE2LjAwMDEgOC42NDc0NSAxNi4wMDAxQzEwLjUyMDMgMTYuMDAwMSAxMi4yMzEzIDE1LjQ0MzIgMTMuNjQxNyAxNC41MjIyQzE0LjMzNTMgMTQuMDcyNCAxNC40MDQ3IDEzLjE1MTQgMTMuODAzNSAxMi41OTQ1TDEzLjc4MDQgMTIuNTczQzEzLjI5NDggMTIuMTIzMiAxMi41NTUgMTIuMTAxOCAxMi4wMDAxIDEyLjQ0NDVDMTEuMDUyMSAxMy4wODcxIDkuODk2IDEzLjQ1MTIgOC42NDc0NSAxMy40NTEyWiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzE0MjhfMTE1OSkiLz4KPHBhdGggZD0iTTE0LjQyNzggMi4wNzc1M0MxNC4yMTk3IDEuOTA2MTggMTMuOTg4NSAxLjcxMzQxIDEzLjc1NzMgMS41NjM0OEMxMy45MTkxIDEuODIwNSAxNC4wMTE2IDIuMTIwMzcgMTQuMDExNiAyLjQyMDI0QzE0LjAxMTYgMi44MjcyIDEzLjgwMzUgMy4yMzQxNiAxMy40Nzk4IDMuNTEyNjFMMTIuNzg2MiA0LjExMjM0TDguNTc4MDggNy44MTc4M0w3LjA5ODMxIDYuNDQ3MDFDNi41ODk2NCA1Ljk3NTc5IDUuNzU3MjcgNS44OTAxMiA1LjIwMjM2IDYuMzE4NUM0LjU1NDk2IDYuODExMTMgNC41MzE4NCA3LjY4OTMxIDUuMTA5ODcgOC4yMDMzN0w3LjU4Mzg2IDEwLjQ5NTJDNy44NjEzMiAxMC43NTIyIDguMjA4MTQgMTAuODU5MyA4LjU1NDk2IDEwLjg1OTNDOC45MDE3OCAxMC44NTkzIDkuMjQ4NiAxMC43NTIyIDkuNTAyOTQgMTAuNTE2NkwxNC4yNDI4IDYuMzM5OTJMMTUuNTYwNyA1LjE4MzI5QzE2LjA2OTQgNC43MzM0OSAxNi4xNjE5IDQuMDA1MjQgMTUuNzY4OCAzLjQ0ODM1QzE1LjQ2ODMgMy4wODQyMyAxNC44NDQgMi4zOTg4MiAxNC40Mjc4IDIuMDc3NTNaIiBmaWxsPSIjRTlGMkZGIi8+CjwvZz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8xNDI4XzExNTkiIHgxPSIxMy45ODg4IiB5MT0iMC45NDY1NTYiIHgyPSI5LjI0NzY4IiB5Mj0iNS42NDI5OCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjMEMzOTc1IiBzdG9wLW9wYWNpdHk9IjAuMzgiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMzE2MUYxIiBzdG9wLW9wYWNpdHk9IjAiLz4KPC9saW5lYXJHcmFkaWVudD4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xNDI4XzExNTkiPgo8cmVjdCB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==",
119 121 10
120 122 );
121 123
122 124 $menu_items = apply_filters('timetics_menu', $menu_items);
@@ -124,9 +126,12 @@
124 126
125 127 array_multisort($position, SORT_ASC, $menu_items);
126 128
127 129 foreach ($menu_items as $item) {
128 - $submenu[$slug][] = [$item['title'], $item['capability'], $url . $item['link']]; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
130 + $external = !empty($item['external_link']) ? $item['external_link'] : false;
131 +
132 + $link = !$external ? $url . $item['link'] : $item['link'];
133 + $submenu[$slug][] = [$item['title'], $item['capability'], $link]; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
129 134 }
130 135 }
131 136
132 137 /**
@@ -142,17 +147,22 @@
142 147 <?php
143 148 }
144 149
145 150 // Add submenu page under "Settings"
146 - public function add_pro_admin_menu()
151 + public function add_pro_admin_menu($menu_items)
147 152 {
148 - add_submenu_page(
149 - 'timetics',
150 - 'Go Pro',
151 - 'Go Pro',
152 - 'edit_meeting',
153 - 'https://arraytics.com/timetics',
154 - '',
155 - 9,
156 - );
153 + if (class_exists('TimeticsPro')) {
154 + return $menu_items;
155 + }
156 +
157 + $menu_items[] = [
158 + 'id' => 'go-pro',
159 + 'title' => esc_html__('Go Pro', 'timetics'),
160 + 'link' => 'https://arraytics.com/timetics',
161 + 'external_link' => true,
162 + 'capability' => 'manage_options',
163 + 'position' => 9,
164 + ];
165 +
166 + return $menu_items;
157 167 }
158 168 }