PluginProbe
SupportCandy – AI Customer Support Ticket System & Live Chatbot Agent / 3.5.4
SupportCandy – AI Customer Support Ticket System & Live Chatbot Agent v3.5.4
3.5.4 3.5.3 3.5.2 3.5.1 3.4.9 3.5.0 3.4.8 3.4.7 trunk 2.3.1 3.3.6 3.3.7 3.3.8 3.3.9 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.4.5 3.4.6
← All changes | includes/admin/class-wpsc-admin.php +148 -96 3.3.7 → 3.5.4 View file →
@@ -126,119 +126,171 @@
126 126 'dashicons-sos',
127 127 25
128 128 );
129 129
130 - add_submenu_page(
131 - 'wpsc-tickets',
132 - esc_attr__( 'Ticket List', 'supportcandy' ),
133 - esc_attr__( 'Tickets', 'supportcandy' ),
134 - 'wpsc_agent',
135 - 'wpsc-tickets',
136 - array( 'WPSC_Tickets', 'layout' )
137 - );
130 + do_action( 'wpsc_before_setting_admin_menu' );
138 131
139 - add_submenu_page(
132 + $menu_slugs = array(
140 133 'wpsc-tickets',
141 - esc_attr__( 'Customers', 'supportcandy' ),
142 - esc_attr__( 'Customers', 'supportcandy' ),
143 - 'manage_options',
134 + 'wpsc-ai-chatbot',
135 + 'wpsc-archive-tickets',
136 + 'wpsc-ai-assistant',
144 137 'wpsc-customers',
145 - array( 'WPSC_Customers', 'layout' )
146 - );
147 -
148 - add_submenu_page(
149 - 'wpsc-tickets',
150 - esc_attr__( 'Support Agents', 'supportcandy' ),
151 - esc_attr__( 'Support Agents', 'supportcandy' ),
152 - 'manage_options',
153 138 'wpsc-support-agents',
154 - array( 'WPSC_Support_Agents', 'layout' )
155 - );
156 -
157 - add_submenu_page(
158 - 'wpsc-tickets',
159 - esc_attr__( 'Custom Fields', 'supportcandy' ),
160 - esc_attr__( 'Custom Fields', 'supportcandy' ),
161 - 'manage_options',
162 139 'wpsc-ticket-form',
163 - array( 'WPSC_CF_Settings', 'layout' )
164 - );
165 -
166 - add_submenu_page(
167 - 'wpsc-tickets',
168 - esc_attr__( 'Ticket List', 'supportcandy' ),
169 - esc_attr__( 'Ticket List', 'supportcandy' ),
170 - 'manage_options',
171 140 'wpsc-ticket-list',
172 - array( 'WPSC_Ticket_List_Settings', 'layout' )
141 + 'wpsc-email-notifications',
142 + 'wpsc-canned-reply',
143 + 'wpsc-reports',
144 + 'wpsc-customer-feedback',
145 + 'wpsc-settings',
146 + 'wpsc-license',
147 + 'wpsc-add-ons',
148 + 'wpsc-other-plugins',
149 + 'wpsc-task-manager',
150 + 'wpsc-recent-activities',
173 151 );
152 + $menu_slugs = apply_filters( 'wpsc_admin_menu_slugs', $menu_slugs );
174 153
175 - add_submenu_page(
176 - 'wpsc-tickets',
177 - esc_attr__( 'Email Notifications', 'supportcandy' ),
178 - esc_attr__( 'Email Notifications', 'supportcandy' ),
179 - 'manage_options',
180 - 'wpsc-email-notifications',
181 - array( 'WPSC_EN_Settings', 'layout' )
154 + $admin_submenus = array(
155 + array(
156 + 'parent_slug' => 'wpsc-tickets',
157 + 'page_title' => 'Ticket List',
158 + 'menu_title' => 'Tickets',
159 + 'capability' => 'wpsc_agent',
160 + 'menu_slug' => 'wpsc-tickets',
161 + 'callback' => array( 'WPSC_Tickets', 'layout' ),
162 + ),
163 + array(
164 + 'parent_slug' => 'wpsc-tickets',
165 + 'page_title' => 'Archived',
166 + 'menu_title' => 'Archived',
167 + 'capability' => 'wpsc_agent',
168 + 'menu_slug' => 'wpsc-archive-tickets',
169 + 'callback' => array( 'WPSC_Archive_Ticket_List', 'layout' ),
170 + ),
171 + array(
172 + 'parent_slug' => 'wpsc-tickets',
173 + 'page_title' => 'Customers',
174 + 'menu_title' => 'Customers',
175 + 'capability' => 'manage_options',
176 + 'menu_slug' => 'wpsc-customers',
177 + 'callback' => array( 'WPSC_Customers', 'layout' ),
178 + ),
179 + array(
180 + 'parent_slug' => 'wpsc-tickets',
181 + 'page_title' => 'Support Agents',
182 + 'menu_title' => 'Support Agents',
183 + 'capability' => 'manage_options',
184 + 'menu_slug' => 'wpsc-support-agents',
185 + 'callback' => array( 'WPSC_Support_Agents', 'layout' ),
186 + ),
187 + array(
188 + 'parent_slug' => 'wpsc-tickets',
189 + 'page_title' => 'Custom Fields',
190 + 'menu_title' => 'Custom Fields',
191 + 'capability' => 'manage_options',
192 + 'menu_slug' => 'wpsc-ticket-form',
193 + 'callback' => array( 'WPSC_CF_Settings', 'layout' ),
194 + ),
195 + array(
196 + 'parent_slug' => 'wpsc-tickets',
197 + 'page_title' => 'Ticket List',
198 + 'menu_title' => 'Ticket List',
199 + 'capability' => 'manage_options',
200 + 'menu_slug' => 'wpsc-ticket-list',
201 + 'callback' => array( 'WPSC_Ticket_List_Settings', 'layout' ),
202 + ),
203 + array(
204 + 'parent_slug' => 'wpsc-tickets',
205 + 'page_title' => 'Email Notifications',
206 + 'menu_title' => 'Email Notifications',
207 + 'capability' => 'manage_options',
208 + 'menu_slug' => 'wpsc-email-notifications',
209 + 'callback' => array( 'WPSC_EN_Settings', 'layout' ),
210 + ),
211 + array(
212 + 'parent_slug' => 'wpsc-tickets',
213 + 'page_title' => 'Settings',
214 + 'menu_title' => 'Settings',
215 + 'capability' => 'manage_options',
216 + 'menu_slug' => 'wpsc-settings',
217 + 'callback' => array( 'WPSC_Settings', 'layout' ),
218 + ),
219 + array(
220 + 'parent_slug' => 'wpsc-tickets',
221 + 'page_title' => 'Licenses',
222 + 'menu_title' => 'Licenses',
223 + 'capability' => 'manage_options',
224 + 'menu_slug' => 'wpsc-license',
225 + 'callback' => array( 'WPSC_License', 'layout' ),
226 + ),
227 + array(
228 + 'parent_slug' => 'wpsc-tickets',
229 + 'page_title' => 'Pro Features',
230 + 'menu_title' => '<strong style="color: #F1C40F;">Pro Features</strong>',
231 + 'capability' => 'manage_options',
232 + 'menu_slug' => 'wpsc-add-ons',
233 + 'callback' => array( 'WPSC_Addons', 'layout' ),
234 + ),
235 + array(
236 + 'parent_slug' => 'wpsc-tickets',
237 + 'page_title' => 'Other Plugins',
238 + 'menu_title' => '<strong style="color: #F1C40F;">Other Plugins</strong>',
239 + 'capability' => 'manage_options',
240 + 'menu_slug' => 'wpsc-other-plugins',
241 + 'callback' => array( 'WPSC_Other_Plugins', 'layout' ),
242 + ),
243 + array(
244 + 'parent_slug' => ' ',
245 + 'page_title' => 'Task Manager',
246 + 'menu_title' => '',
247 + 'capability' => 'manage_options',
248 + 'menu_slug' => 'wpsc-task-manager',
249 + 'callback' => array( 'WPSC_Task_Scheduler', 'perform_manual_scheduler' ),
250 + ),
251 + array(
252 + 'parent_slug' => ' ',
253 + 'page_title' => 'Recent Activites',
254 + 'menu_title' => '',
255 + 'capability' => 'manage_options',
256 + 'menu_slug' => 'wpsc-recent-activities',
257 + 'callback' => array( 'WPSC_RA_Logs', 'layout' ),
258 + ),
182 259 );
260 + $admin_submenus = apply_filters( 'wpsc_admin_submenus_data', $admin_submenus );
183 261
184 - do_action( 'wpsc_before_setting_admin_menu' );
262 + // Create a lookup array for submenus to improve performance.
263 + $submenu_lookup = array_column( $admin_submenus, null, 'menu_slug' );
264 + foreach ( $menu_slugs as $menu_slug ) {
185 265
186 - add_submenu_page(
187 - 'wpsc-tickets',
188 - esc_attr__( 'Settings', 'supportcandy' ),
189 - esc_attr__( 'Settings', 'supportcandy' ),
190 - 'manage_options',
191 - 'wpsc-settings',
192 - array( 'WPSC_Settings', 'layout' )
193 - );
266 + // Menu slug not registered.
267 + if ( ! isset( $submenu_lookup[ $menu_slug ] ) ) {
268 + continue;
269 + }
194 270
195 - add_submenu_page(
196 - 'wpsc-tickets',
197 - esc_attr__( 'Licenses', 'supportcandy' ),
198 - esc_attr__( 'Licenses', 'supportcandy' ),
199 - 'manage_options',
200 - 'wpsc-license',
201 - array( 'WPSC_License', 'layout' )
202 - );
271 + // Archive menu permission.
272 + if ( 'wpsc-archive-tickets' === $menu_slug &&
273 + ! ( $current_user->is_agent && ! empty( $current_user->agent ) && $current_user->agent->has_cap( 'at-access' ) ) ) {
274 + continue;
275 + }
203 276
204 - add_submenu_page(
205 - 'wpsc-tickets',
206 - esc_attr__( 'Pro Features', 'supportcandy' ),
207 - '<strong style="color: #F1C40F;">' . esc_attr__( 'Pro Features', 'supportcandy' ) . '</strong>',
208 - 'manage_options',
209 - 'wpsc-add-ons',
210 - array( 'WPSC_Addons', 'layout' )
211 - );
277 + $submenu = $submenu_lookup[ $menu_slug ];
212 278
213 - add_submenu_page(
214 - 'wpsc-tickets',
215 - esc_attr__( 'Other Plugins', 'supportcandy' ),
216 - '<strong style="color: #F1C40F;">' . esc_attr__( 'Other Plugins', 'supportcandy' ) . '</strong>',
217 - 'manage_options',
218 - 'wpsc-other-plugins',
219 - array( 'WPSC_Other_Plugins', 'layout' )
220 - );
279 + // Validate required keys.
280 + if ( empty( $submenu['parent_slug'] ) || empty( $submenu['page_title'] ) || empty( $submenu['menu_slug'] ) || empty( $submenu['callback'] ) ) {
281 + continue;
282 + }
221 283
222 - // hidden submenu page for manual scheduled tasks.
223 - add_submenu_page(
224 - ' ',
225 - esc_attr__( 'Task Manager', 'supportcandy' ),
226 - '',
227 - 'manage_options',
228 - 'wpsc-task-manager',
229 - array( 'WPSC_Task_Scheduler', 'perform_manual_scheduler' )
230 - );
231 -
232 - // hidden submenu page for recent activity.
233 - add_submenu_page(
234 - ' ',
235 - esc_attr__( 'Recent Activites', 'supportcandy' ),
236 - '',
237 - 'manage_options',
238 - 'wpsc-recent-activities',
239 - array( 'WPSC_RA_Logs', 'layout' )
240 - );
284 + add_submenu_page(
285 + (string) $submenu['parent_slug'],
286 + esc_attr( $submenu['page_title'] ),
287 + wp_kses_post( $submenu['menu_title'] ?? '' ),
288 + $submenu['capability'] ?? 'manage_options',
289 + (string) $submenu['menu_slug'],
290 + $submenu['callback']
291 + );
292 + }
241 293 }
242 294
243 295 /**
244 296 * Get localization data for the admin scripts