PluginProbe
SupportCandy – AI Customer Support Ticket System & Live Chatbot Agent / 3.5.1
SupportCandy – AI Customer Support Ticket System & Live Chatbot Agent v3.5.1
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
supportcandy / includes / admin / class-wpsc-admin.php

class-wpsc-admin.php in SupportCandy – AI Customer Support Ticket System & Live Chatbot Agent 3.5.1, at includes/admin/class-wpsc-admin.php

351 lines 12.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 if ( ! defined( 'ABSPATH' ) ) {
3 exit; // Exit if accessed directly!
4 }
5
6 if ( ! class_exists( 'WPSC_Admin' ) ) :
7
8 final class WPSC_Admin {
9
10 /**
11 * Initialize the class
12 *
13 * @return void
14 */
15 public static function init() {
16
17 add_action( 'admin_enqueue_scripts', array( __CLASS__, 'load_scripts' ) );
18 add_action( 'admin_menu', array( __CLASS__, 'load_admin_menus' ), 10 );
19 }
20
21 /**
22 * Load JS and CSS scripts
23 *
24 * @return void
25 */
26 public static function load_scripts() {
27
28 if ( ! WPSC_Functions::is_wpsc_page() ) {
29 return;
30 }
31
32 // jquery.
33 wp_enqueue_script( 'jquery' );
34 wp_enqueue_script( 'jquery-ui-core' );
35 wp_enqueue_style( 'wpsc-jquery-ui', WPSC_PLUGIN_URL . 'asset/css/jquery-ui.css', array(), WPSC_VERSION );
36
37 // TinyMCE.
38 wp_enqueue_editor();
39
40 // jQuery UI Effects.
41 wp_enqueue_script( 'jquery-effects-core' );
42 wp_enqueue_script( 'jquery-effects-slide' );
43
44 // color picker.
45 wp_enqueue_script( 'wp-color-picker' );
46 wp_enqueue_style( 'wp-color-picker' );
47
48 // Sortable.
49 wp_enqueue_script( 'jquery-ui-sortable' );
50
51 // Accordion.
52 wp_enqueue_script( 'jquery-ui-accordion' );
53
54 // Progrss bar.
55 wp_enqueue_script( 'jquery-ui-progressbar' );
56
57 // WPSC Scripts.
58 wp_enqueue_script( 'wpsc-admin', WPSC_PLUGIN_URL . 'asset/js/admin.js', array( 'jquery' ), WPSC_VERSION, true );
59 wp_localize_script( 'wpsc-admin', 'supportcandy', self::get_localization_data() );
60
61 // WPSC Framework.
62 wp_enqueue_script( 'wpsc-framework', WPSC_PLUGIN_URL . 'framework/scripts.js', array( 'jquery' ), WPSC_VERSION, true );
63
64 if ( is_rtl() ) {
65 wp_enqueue_style( 'wpsc-admin', WPSC_PLUGIN_URL . 'asset/css/admin-rtl.css', array(), WPSC_VERSION );
66 wp_enqueue_style( 'wpsc-framework', WPSC_PLUGIN_URL . 'framework/style-rtl.css', array(), WPSC_VERSION );
67 } else {
68 wp_enqueue_style( 'wpsc-admin', WPSC_PLUGIN_URL . 'asset/css/admin.css', array(), WPSC_VERSION );
69 wp_enqueue_style( 'wpsc-framework', WPSC_PLUGIN_URL . 'framework/style.css', array(), WPSC_VERSION );
70 }
71
72 // selectWoo.
73 wp_enqueue_script( 'selectWoo', WPSC_PLUGIN_URL . 'asset/js/selectWoo/selectWoo.full.min.js', array( 'jquery' ), WPSC_VERSION, true );
74 if ( file_exists( WPSC_ABSPATH . 'asset/js/selectWoo/i18n/' . get_locale() . '.js' ) ) {
75 wp_enqueue_script( 'selectWoo-lang', WPSC_PLUGIN_URL . 'asset/js/selectWoo/i18n/' . get_locale() . '.js', array( 'jquery' ), WPSC_VERSION, true );
76 }
77 wp_enqueue_style( 'select2', WPSC_PLUGIN_URL . 'asset/css/select2.css', array(), WPSC_VERSION );
78
79 // gpopover.
80 wp_enqueue_script( 'gpopover', WPSC_PLUGIN_URL . 'asset/libs/gpopover/jquery.gpopover.js', array( 'jquery' ), WPSC_VERSION, true );
81 wp_enqueue_style( 'gpopover', WPSC_PLUGIN_URL . 'asset/libs/gpopover/jquery.gpopover.css', array(), WPSC_VERSION );
82
83 // jquery circle progress.
84 wp_enqueue_script( 'jquery-circle-progress', WPSC_PLUGIN_URL . 'asset/libs/jquery-circle-progress/circle-progress.min.js', array( 'jquery' ), WPSC_VERSION, true );
85
86 // flatpickr.
87 wp_enqueue_script( 'flatpickr', WPSC_PLUGIN_URL . 'asset/libs/flatpickr/flatpickr.js', array( 'jquery' ), WPSC_VERSION, true );
88 wp_enqueue_style( 'flatpickr', WPSC_PLUGIN_URL . 'asset/libs/flatpickr/flatpickr.min.css', array(), WPSC_VERSION );
89
90 if ( file_exists( WPSC_ABSPATH . 'asset/libs/flatpickr/l10n/' . WPSC_Functions::get_locale_iso() . '.js' ) ) {
91 wp_enqueue_script( 'flatpickr-lang', WPSC_PLUGIN_URL . 'asset/libs/flatpickr/l10n/' . WPSC_Functions::get_locale_iso() . '.js', array( 'jquery' ), WPSC_VERSION, true );
92 }
93
94 // fullcalendar.
95 wp_enqueue_script( 'fullcalendar', WPSC_PLUGIN_URL . 'asset/libs/fullcalendar/lib/main.min.js', array( 'jquery' ), WPSC_VERSION, true );
96 wp_enqueue_script( 'fullcalendar-locales', WPSC_PLUGIN_URL . 'asset/libs/fullcalendar/lib/locales-all.min.js', array( 'jquery' ), WPSC_VERSION, true );
97 wp_enqueue_style( 'fullcalendar', WPSC_PLUGIN_URL . 'asset/libs/fullcalendar/lib/main.min.css', array(), WPSC_VERSION );
98
99 // DataTables.
100 wp_enqueue_script( 'wpsc-datatables', WPSC_PLUGIN_URL . 'asset/libs/DataTables/datatables.min.js', array( 'jquery' ), WPSC_VERSION, true );
101 wp_enqueue_style( 'wpsc-datatables', WPSC_PLUGIN_URL . 'asset/libs/DataTables/datatables.min.css', array(), WPSC_VERSION );
102
103 // ChartJs.
104 wp_enqueue_script( 'chartjs', WPSC_PLUGIN_URL . 'asset/libs/chartjs/dist/chart.min.js', array( 'jquery' ), WPSC_VERSION, true );
105 }
106
107 /**
108 * Load admin/dashboard menus
109 *
110 * @return void
111 */
112 public static function load_admin_menus() {
113
114 $current_user = WPSC_Current_User::$current_user;
115 $count_str = '';
116 if ( $current_user->is_agent && $current_user->agent->unresolved_count > 0 ) {
117 $count_str = ' <span class="update-plugins wpsc-uc"><span class="plugin-count">' . $current_user->agent->unresolved_count . '</span></span>';
118 }
119
120 add_menu_page(
121 esc_attr__( 'Support', 'supportcandy' ),
122 esc_attr__( 'Support', 'supportcandy' ) . $count_str,
123 'wpsc_agent',
124 'wpsc-tickets',
125 array( 'WPSC_Tickets', 'layout' ),
126 'dashicons-sos',
127 25
128 );
129
130 do_action( 'wpsc_before_setting_admin_menu' );
131
132 $menu_slugs = array(
133 'wpsc-tickets',
134 'wpsc-ai-chatbot',
135 'wpsc-archive-tickets',
136 'wpsc-ai-assistant',
137 'wpsc-customers',
138 'wpsc-support-agents',
139 'wpsc-ticket-form',
140 'wpsc-ticket-list',
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',
151 );
152 $menu_slugs = apply_filters( 'wpsc_admin_menu_slugs', $menu_slugs );
153
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 ),
259 );
260 $admin_submenus = apply_filters( 'wpsc_admin_submenus_data', $admin_submenus );
261
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 ) {
265
266 // Menu slug not registered.
267 if ( ! isset( $submenu_lookup[ $menu_slug ] ) ) {
268 continue;
269 }
270
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 }
276
277 $submenu = $submenu_lookup[ $menu_slug ];
278
279 // Validate required keys.
280 if ( empty( $submenu['parent_slug'] ) || empty( $submenu['page_title'] ) || empty( $submenu['menu_slug'] ) || empty( $submenu['callback'] ) ) {
281 continue;
282 }
283
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 }
293 }
294
295 /**
296 * Get localization data for the admin scripts
297 *
298 * @return string
299 */
300 private static function get_localization_data() {
301
302 $gs = get_option( 'wpsc-gs-general' );
303 $file_settings = get_option( 'wpsc-gs-file-attachments' );
304 $localizations = array(
305 'ajax_url' => admin_url( 'admin-ajax.php' ),
306 'plugin_url' => WPSC_PLUGIN_URL,
307 'version' => WPSC_VERSION,
308 'loader_html' => WPSC_Framework::loader_html(),
309 'inline_loader' => WPSC_Framework::inline_loader(),
310 'is_frontend' => 0,
311 'reply_form_position' => $gs['reply-form-position'],
312 'allowed_file_extensions' => array_map( 'trim', array_map( 'strtolower', explode( ',', $file_settings['allowed-file-extensions'] ) ) ),
313 'nonce' => wp_create_nonce( 'general' ),
314 'translations' => array(
315 'req_fields_error' => esc_attr__( 'Required fields can not be empty!', 'supportcandy' ),
316 'submit_option_error' => esc_attr__( 'Please submit the option!', 'supportcandy' ),
317 'datatables' => array(
318 'emptyTable' => esc_attr__( 'No Records', 'supportcandy' ),
319 'zeroRecords' => esc_attr__( 'No Records', 'supportcandy' ),
320 'info' => sprintf(
321 /* translators: e.g. Showing 1 to 20 of 300 records */
322 esc_attr__( 'Showing %1$s to %2$s of %3$s records', 'supportcandy' ),
323 '_START_',
324 '_END_',
325 '_TOTAL_'
326 ),
327 'infoEmpty' => '',
328 'loadingRecords' => '',
329 'processing' => '',
330 'infoFiltered' => '',
331 'search' => esc_attr__( 'Search:', 'supportcandy' ),
332 'paginate' => array(
333 'first' => esc_attr__( 'First', 'supportcandy' ),
334 'previous' => esc_attr__( 'Previous', 'supportcandy' ),
335 'next' => esc_attr__( 'Next', 'supportcandy' ),
336 'last' => esc_attr__( 'Last', 'supportcandy' ),
337 ),
338 ),
339 ),
340 'temp' => array(),
341 'home_url' => home_url(),
342 );
343
344 return apply_filters( 'wpsc_admin_localizations', $localizations );
345 }
346 }
347
348 endif;
349
350 WPSC_Admin::init();
351