| @@ -254,10 +254,10 @@ | ||
| 254 | 254 | |
| 255 | 255 | if (!defined('FLUENT_SUPPORT_PRO_DIR_FILE')) { |
| 256 | 256 | $secondaryItems[] = [ |
| 257 | 257 | 'key' => 'upgrade_to_pro', |
| 258 | - 'label' => 'Upgrade to Pro', | |
| 259 | - 'permalink' => 'https://fluentsupport.com' | |
| 258 | + 'label' => __('Upgrade to Pro', 'fluent-support'), | |
| 259 | + 'permalink' => Helper::getUpgradeUrl('sidebar_cta') | |
| 260 | 260 | ]; |
| 261 | 261 | } |
| 262 | 262 | |
| 263 | 263 | $baseUrl = apply_filters('fluent_support/base_url', admin_url('admin.php?page=fluent-support#/')); |
| @@ -324,9 +324,9 @@ | ||
| 324 | 324 | add_action('admin_head', function () { |
| 325 | 325 | Vite::injectViteClient(); |
| 326 | 326 | }, 1); |
| 327 | 327 | |
| 328 | - wp_enqueue_script('dompurify', $assets . 'libs/purify/purify.min.js', [], '2.4.3'); | |
| 328 | + wp_enqueue_script('dompurify', $assets . 'libs/purify/purify.min.js', [], '3.4.16'); | |
| 329 | 329 | |
| 330 | 330 | if (is_rtl()) { |
| 331 | 331 | wp_enqueue_style('fluent_support_admin_app_rtl', $assets . 'admin/css/alpha-admin-rtl.css', [], FLUENT_SUPPORT_VERSION); |
| 332 | 332 | } else { |
| @@ -424,8 +424,10 @@ | ||
| 424 | 424 | }, $tags); |
| 425 | 425 | |
| 426 | 426 | $i18ns = TranslationStrings::getAdminStrings(); |
| 427 | 427 | $i18ns['allowed_files_and_size'] = Helper::getFileUploadMessage(); |
| 428 | + $i18ns['open'] = __('Open', 'fluent-support'); | |
| 429 | + $i18ns['all'] = __('All', 'fluent-support'); | |
| 428 | 430 | |
| 429 | 431 | /* |
| 430 | 432 | * Filter agent portal localize javascript data |
| 431 | 433 | * |
| @@ -442,22 +444,30 @@ | ||
| 442 | 444 | 'lastEntry' => '', |
| 443 | 445 | 'asset_url' => $assets, |
| 444 | 446 | 'support_agents' => $agents, |
| 445 | 447 | 'agent_groups' => $agentGroups, |
| 446 | - 'support_products' => Product::select(['id', 'title'])->get(), | |
| 448 | + 'support_products' => Product::select(['id', 'title'])->orderedByTitle()->get(), | |
| 447 | 449 | 'client_priorities' => Helper::customerTicketPriorities(), |
| 448 | 450 | 'ticket_statuses' => Helper::ticketStatuses(), |
| 449 | 451 | 'ticket_statuses_group' => Helper::ticketStatusGroups(), |
| 450 | 452 | 'changeable_ticket_statuses' => Helper::changeableTicketStatuses(), |
| 451 | 453 | 'admin_priorities' => Helper::adminTicketPriorities(), |
| 452 | - 'mailboxes' => MailBox::select(['id', 'name', 'settings'])->get(), | |
| 454 | + 'mailboxes' => MailBox::getAccessibleBoxes(), | |
| 455 | + // Whether the site has any inbox at all, regardless of what this agent may see. | |
| 456 | + // `mailboxes` is restriction-filtered and can legitimately be empty, so it cannot | |
| 457 | + // double as the "is Fluent Support set up yet?" signal the setup wizard keys off. | |
| 458 | + 'has_mailboxes' => MailBox::count() > 0, | |
| 453 | 459 | 'me' => $me, |
| 460 | + // Deleting a customer needs fst_sensitive_data plus administrator rights unless | |
| 461 | + // the site turns the administrator part off. | |
| 462 | + 'customer_delete_requires_admin' => (bool) apply_filters('fluent_support/customer_delete_requires_admin', true), | |
| 454 | 463 | 'pref' => [ |
| 455 | 464 | 'go_back_after_reply' => 'yes' |
| 456 | 465 | ], |
| 457 | 466 | 'notification_integrations' => $integrationDrivers, |
| 458 | 467 | 'internal_notification_settings' => (new NotificationSettings())->get(false), |
| 459 | - 'server_time' => gmdate('Y-m-d\TH:i:sP'), | |
| 468 | + // Site time, like every date the API sends; relative times compare the two. | |
| 469 | + 'server_time' => current_time('mysql'), | |
| 460 | 470 | 'has_email_parser' => defined('FLUENTSUPPORTPRO_PLUGIN_VERSION'), |
| 461 | 471 | 'ticket_tags' => $tags, |
| 462 | 472 | 'i18n' => $i18ns, |
| 463 | 473 | 'custom_fields' => apply_filters('fluent_support/ticket_custom_fields', []), |
| @@ -482,8 +492,11 @@ | ||
| 482 | 492 | $appVars['fluent_boards'] = true; |
| 483 | 493 | } |
| 484 | 494 | |
| 485 | 495 | $appVars['has_pro'] = defined('FLUENTSUPPORTPRO_PLUGIN_VERSION'); |
| 496 | + $appVars['version'] = FLUENT_SUPPORT_VERSION; | |
| 497 | + // Single source of truth for upgrade CTAs; the SPA only re-points utm_content on this. | |
| 498 | + $appVars['upgrade_url'] = Helper::getUpgradeUrl(); | |
| 486 | 499 | if ($appVars['has_pro']) { |
| 487 | 500 | $appVars['agent_feedback_rating'] = Helper::getBusinessSettings('agent_feedback_rating', 'no'); |
| 488 | 501 | $appVars['open_ai_integration'] = Helper::openAIIntegrationStatus(); |
| 489 | 502 | } |