PluginProbe
MxChat – AI Chatbot & Content Generation for WordPress / 3.0.7
MxChat – AI Chatbot & Content Generation for WordPress v3.0.7
3.2.21 3.2.20 3.2.19 3.2.18 3.2.17 3.2.16 3.2.15 3.2.14 3.2.12 3.2.13 3.2.11 3.2.10 3.2.9 3.2.8 3.2.7 3.2.6 3.2.5 3.2.4 3.2.3 3.2.2 3.2.1 2.0.3 2.0.4 2.0.5 2.0.6 All 152 releases
← All changes | includes/admin-transcripts-page.php +2 -314 3.2.193.0.7 View file →
@@ -60,12 +60,8 @@
60 60 <button class="mxch-mobile-nav-link" data-target="all-chats">
61 61 <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>
62 62 <span><?php esc_html_e('All Chats', 'mxchat'); ?></span>
63 63 </button>
64 - <button class="mxch-mobile-nav-link" data-target="leads">
65 - <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><polyline points="17 11 19 13 23 9"/></svg>
66 - <span><?php esc_html_e('Leads', 'mxchat'); ?></span>
67 - </button>
68 64 </div>
69 65 <!-- Settings Section -->
70 66 <div class="mxch-mobile-nav-section">
71 67 <div class="mxch-mobile-nav-section-title"><?php esc_html_e('Settings', 'mxchat'); ?></div>
@@ -124,18 +120,8 @@
124 120 <span class="mxch-nav-link-text"><?php esc_html_e('All Chats', 'mxchat'); ?></span>
125 121 <span class="mxch-nav-link-badge"><?php echo esc_html($total_chats); ?></span>
126 122 </button>
127 123 </div>
128 -
129 - <div class="mxch-nav-item" data-section="leads">
130 - <button class="mxch-nav-link" data-target="leads">
131 - <span class="mxch-nav-link-icon">
132 - <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><polyline points="17 11 19 13 23 9"/></svg>
133 - </span>
134 - <span class="mxch-nav-link-text"><?php esc_html_e('Leads', 'mxchat'); ?></span>
135 - <span class="mxch-nav-link-badge" id="mxch-leads-nav-badge" style="display:none;">0</span>
136 - </button>
137 - </div>
138 124 </div>
139 125
140 126 <!-- Settings Section -->
141 127 <div class="mxch-nav-section">
@@ -321,65 +307,8 @@
321 307 </div>
322 308 </div>
323 309 </div>
324 310
325 - <!-- Satisfaction (last 30 days) — plan-a5b006 -->
326 - <div class="mxch-card mxch-satisfaction-card">
327 - <div class="mxch-card-header">
328 - <h3 class="mxch-card-title">
329 - <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M7 10v12"/><path d="M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H7"/><path d="M3 10h4"/></svg>
330 - <?php esc_html_e('Satisfaction (last 30 days)', 'mxchat'); ?>
331 - </h3>
332 - </div>
333 - <div class="mxch-card-body">
334 - <?php
335 - $satisfaction_stats = isset($satisfaction_stats) && is_array($satisfaction_stats) ? $satisfaction_stats : array();
336 - if (empty($satisfaction_stats)) :
337 - ?>
338 - <p class="mxch-satisfaction-empty">
339 - <?php esc_html_e('No ratings yet. The widget shows the prompt after a conversation has had at least two bot replies and the visitor goes idle for 60 seconds.', 'mxchat'); ?>
340 - </p>
341 - <?php
342 - else :
343 - ?>
344 - <ul class="mxch-satisfaction-list">
345 - <?php foreach ($satisfaction_stats as $row) :
346 - $bot_label = $row['bot_id'] === 'default'
347 - ? esc_html__('Default bot', 'mxchat')
348 - : esc_html($row['bot_id']);
349 - ?>
350 - <li class="mxch-satisfaction-row">
351 - <span class="mxch-satisfaction-bot"><?php echo $bot_label; ?></span>
352 - <span class="mxch-satisfaction-meta">
353 - <span class="mxch-satisfaction-total"><?php
354 - echo esc_html(sprintf(
355 - /* translators: %d: number of rated sessions */
356 - _n('%d rated session', '%d rated sessions', $row['total'], 'mxchat'),
357 - $row['total']
358 - ));
359 - ?></span>
360 - <span class="mxch-satisfaction-bar" aria-hidden="true">
361 - <span class="mxch-satisfaction-bar-up" style="width: <?php echo esc_attr($row['positive_pct']); ?>%;"></span>
362 - <span class="mxch-satisfaction-bar-down" style="width: <?php echo esc_attr($row['negative_pct']); ?>%;"></span>
363 - </span>
364 - <span class="mxch-satisfaction-pct mxch-satisfaction-pct-up" title="<?php esc_attr_e('Positive ratings', 'mxchat'); ?>">
365 - <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M7 10v12"/><path d="M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H7"/><path d="M3 10h4"/></svg>
366 - <?php echo esc_html($row['positive_pct']); ?>%
367 - </span>
368 - <span class="mxch-satisfaction-pct mxch-satisfaction-pct-down" title="<?php esc_attr_e('Negative ratings', 'mxchat'); ?>">
369 - <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 14V2"/><path d="M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H17"/><path d="M21 14h-4"/></svg>
370 - <?php echo esc_html($row['negative_pct']); ?>%
371 - </span>
372 - </span>
373 - </li>
374 - <?php endforeach; ?>
375 - </ul>
376 - <?php
377 - endif;
378 - ?>
379 - </div>
380 - </div>
381 -
382 311 <!-- Activity Chart -->
383 312 <div class="mxch-card mxch-activity-chart-card">
384 313 <div class="mxch-card-header">
385 314 <h3 class="mxch-card-title">
@@ -530,12 +459,8 @@
530 459 <div class="mxch-detail-row" id="mxch-detail-email-row" style="display: none;">
531 460 <span class="mxch-detail-label"><?php esc_html_e('Email', 'mxchat'); ?></span>
532 461 <span class="mxch-detail-value" id="mxch-detail-email">-</span>
533 462 </div>
534 - <div class="mxch-detail-row" id="mxch-detail-feedback-row" style="display: none;">
535 - <span class="mxch-detail-label"><?php esc_html_e('Feedback', 'mxchat'); ?></span>
536 - <span class="mxch-detail-value mxch-detail-feedback-value" id="mxch-detail-feedback">-</span>
537 - </div>
538 463 </div>
539 464 <div class="mxch-details-section" id="mxch-clicked-section" style="display: none;">
540 465 <h4><?php esc_html_e('Clicked Links', 'mxchat'); ?></h4>
541 466 <div class="mxch-clicked-links" id="mxch-clicked-links">
@@ -596,203 +521,10 @@
596 521 </div>
597 522 </div>
598 523
599 524 <?php wp_nonce_field('mxchat_delete_chat_history', 'mxchat_delete_chat_nonce'); ?>
600 -
601 - <!-- Transcript delete confirm modal (shared by bulk + individual delete) -->
602 - <div id="mxch-transcript-confirm" class="mxch-modal-overlay" style="display:none;">
603 - <div class="mxch-modal-content mxch-leads-confirm-box">
604 - <div class="mxch-modal-header">
605 - <h2 id="mxch-transcript-confirm-title"><?php esc_html_e('Delete conversation?', 'mxchat'); ?></h2>
606 - <button type="button" class="mxch-modal-close" data-mxch-transcript-close>&times;</button>
607 - </div>
608 - <div class="mxch-modal-body">
609 - <p id="mxch-transcript-confirm-body"></p>
610 - <label class="mxch-transcript-confirm-check">
611 - <input type="checkbox" id="mxch-transcript-also-delete-lead">
612 - <span>
613 - <strong><?php esc_html_e('Also remove the lead from the Leads tab', 'mxchat'); ?></strong>
614 - <em class="mxch-transcript-confirm-sublabel"><?php esc_html_e('By default, leads are kept and marked "Chat deleted" so your contact list is preserved.', 'mxchat'); ?></em>
615 - </span>
616 - </label>
617 - <p class="mxch-leads-confirm-warning"><?php esc_html_e('This cannot be undone.', 'mxchat'); ?></p>
618 - </div>
619 - <div class="mxch-leads-confirm-actions">
620 - <button type="button" class="mxch-btn mxch-btn-secondary" data-mxch-transcript-close><?php esc_html_e('Cancel', 'mxchat'); ?></button>
621 - <button type="button" class="mxch-btn mxch-btn-danger" id="mxch-transcript-confirm-go"><?php esc_html_e('Delete', 'mxchat'); ?></button>
622 - </div>
623 - </div>
624 - </div>
625 525 </div>
626 526
627 - <!-- Leads Section -->
628 - <div id="leads" class="mxch-section">
629 - <div class="mxch-content-header">
630 - <h1 class="mxch-content-title"><?php esc_html_e('Leads', 'mxchat'); ?></h1>
631 - <p class="mxch-content-subtitle"><?php esc_html_e('Captured visitor emails and names from the lead-capture form, grouped by unique lead.', 'mxchat'); ?></p>
632 - </div>
633 -
634 - <!-- Stats strip -->
635 - <div class="mxch-leads-stats">
636 - <div class="mxch-stat-card">
637 - <div class="mxch-stat-icon mxch-stat-icon-primary">
638 - <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg>
639 - </div>
640 - <div class="mxch-stat-content">
641 - <span class="mxch-stat-value" id="mxch-leads-stat-total">0</span>
642 - <span class="mxch-stat-label"><?php esc_html_e('Total Leads', 'mxchat'); ?></span>
643 - </div>
644 - </div>
645 - <div class="mxch-stat-card">
646 - <div class="mxch-stat-icon mxch-stat-icon-success">
647 - <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="23 6 13.5 15.5 8.5 10.5 1 18"/><polyline points="17 6 23 6 23 12"/></svg>
648 - </div>
649 - <div class="mxch-stat-content">
650 - <span class="mxch-stat-value" id="mxch-leads-stat-new">0</span>
651 - <span class="mxch-stat-label"><?php esc_html_e('New This Week', 'mxchat'); ?></span>
652 - </div>
653 - </div>
654 - <div class="mxch-stat-card">
655 - <div class="mxch-stat-icon mxch-stat-icon-info">
656 - <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>
657 - </div>
658 - <div class="mxch-stat-content">
659 - <span class="mxch-stat-value" id="mxch-leads-stat-avg">0</span>
660 - <span class="mxch-stat-label"><?php esc_html_e('Avg Convos / Lead', 'mxchat'); ?></span>
661 - </div>
662 - </div>
663 - <div class="mxch-stat-card">
664 - <div class="mxch-stat-icon mxch-stat-icon-warning">
665 - <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="12" y1="8" x2="12" y2="12"/><line x1="12" y1="16" x2="12.01" y2="16"/></svg>
666 - </div>
667 - <div class="mxch-stat-content">
668 - <span class="mxch-stat-value" id="mxch-leads-stat-orphan">0%</span>
669 - <span class="mxch-stat-label"><?php esc_html_e('Orphan Leads', 'mxchat'); ?></span>
670 - <span class="mxch-stat-sublabel" id="mxch-leads-stat-orphan-sub"><?php esc_html_e('Captured but never chatted', 'mxchat'); ?></span>
671 - </div>
672 - </div>
673 - </div>
674 -
675 - <!-- Top pages card -->
676 - <div class="mxch-card mxch-leads-toppages">
677 - <div class="mxch-card-header">
678 - <h3 class="mxch-card-title">
679 - <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 3h18v18H3z"/><path d="M3 9h18"/><path d="M9 21V9"/></svg>
680 - <?php esc_html_e('Top Pages Capturing Leads', 'mxchat'); ?>
681 - </h3>
682 - <span class="mxch-leads-toppages-hint"><?php esc_html_e('Click a page to filter the list below', 'mxchat'); ?></span>
683 - </div>
684 - <div class="mxch-card-body">
685 - <div class="mxch-leads-toppages-list" id="mxch-leads-toppages-list">
686 - <div class="mxch-leads-empty-mini"><?php esc_html_e('No page data yet.', 'mxchat'); ?></div>
687 - </div>
688 - </div>
689 - </div>
690 -
691 - <!-- Leads toolbar + table -->
692 - <div class="mxch-card mxch-leads-card">
693 - <div class="mxch-leads-toolbar">
694 - <div class="mxch-leads-toolbar-left">
695 - <label class="mxch-bulk-select-all">
696 - <input type="checkbox" id="mxch-leads-select-all">
697 - <span><?php esc_html_e('All', 'mxchat'); ?></span>
698 - </label>
699 - <span class="mxch-selected-count" id="mxch-leads-selected-count">0</span>
700 - <button type="button" class="mxch-bulk-btn mxch-bulk-delete" id="mxch-leads-delete-selected" disabled title="<?php esc_attr_e('Delete Selected', 'mxchat'); ?>">
701 - <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="3 6 5 6 21 6"/><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"/></svg>
702 - <span><?php esc_html_e('Delete', 'mxchat'); ?></span>
703 - </button>
704 - </div>
705 - <div class="mxch-leads-toolbar-right">
706 - <div class="mxch-leads-export" id="mxch-leads-export-wrap">
707 - <button type="button" class="mxch-btn mxch-btn-secondary mxch-btn-sm" id="mxch-leads-export-btn">
708 - <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>
709 - <?php esc_html_e('Export', 'mxchat'); ?>
710 - <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg>
711 - </button>
712 - <div class="mxch-leads-export-menu" id="mxch-leads-export-menu">
713 - <button type="button" data-fields="email_and_name" data-scope="all"><?php esc_html_e('All leads — email + name', 'mxchat'); ?></button>
714 - <button type="button" data-fields="email_only" data-scope="all"><?php esc_html_e('All leads — email only', 'mxchat'); ?></button>
715 - <button type="button" data-fields="email_and_name" data-scope="selected" disabled><?php esc_html_e('Selected — email + name', 'mxchat'); ?></button>
716 - <button type="button" data-fields="email_only" data-scope="selected" disabled><?php esc_html_e('Selected — email only', 'mxchat'); ?></button>
717 - </div>
718 - </div>
719 - </div>
720 - </div>
721 -
722 - <div class="mxch-leads-filters">
723 - <div class="mxch-search-wrapper">
724 - <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
725 - <input type="text" id="mxch-leads-search" class="mxch-search-input" placeholder="<?php esc_attr_e('Search by email or name...', 'mxchat'); ?>">
726 - </div>
727 - <select id="mxch-leads-date-range" class="mxch-select">
728 - <option value="all"><?php esc_html_e('All time', 'mxchat'); ?></option>
729 - <option value="today"><?php esc_html_e('Last 24 hours', 'mxchat'); ?></option>
730 - <option value="7d"><?php esc_html_e('Last 7 days', 'mxchat'); ?></option>
731 - <option value="30d"><?php esc_html_e('Last 30 days', 'mxchat'); ?></option>
732 - <option value="90d"><?php esc_html_e('Last 90 days', 'mxchat'); ?></option>
733 - </select>
734 - <select id="mxch-leads-status" class="mxch-select">
735 - <option value="all"><?php esc_html_e('All leads', 'mxchat'); ?></option>
736 - <option value="with"><?php esc_html_e('With conversation', 'mxchat'); ?></option>
737 - <option value="chat_deleted"><?php esc_html_e('Chat deleted', 'mxchat'); ?></option>
738 - <option value="orphan"><?php esc_html_e('Orphan (no chat)', 'mxchat'); ?></option>
739 - </select>
740 - <button type="button" class="mxch-btn mxch-btn-ghost mxch-btn-sm" id="mxch-leads-clear-filters" style="display:none;">
741 - <?php esc_html_e('Clear filters', 'mxchat'); ?>
742 - </button>
743 - <span class="mxch-leads-active-page-filter" id="mxch-leads-active-page-filter" style="display:none;">
744 - <span class="mxch-leads-page-chip-label"></span>
745 - <button type="button" class="mxch-leads-page-chip-remove" aria-label="<?php esc_attr_e('Remove page filter', 'mxchat'); ?>">&times;</button>
746 - </span>
747 - </div>
748 -
749 - <div class="mxch-leads-table-wrap">
750 - <table class="mxch-leads-table" id="mxch-leads-table">
751 - <thead>
752 - <tr>
753 - <th class="mxch-leads-col-check"></th>
754 - <th class="mxch-leads-col-lead"><?php esc_html_e('Lead', 'mxchat'); ?></th>
755 - <th class="mxch-leads-col-count"><?php esc_html_e('Conversations', 'mxchat'); ?></th>
756 - <th class="mxch-leads-col-last"><?php esc_html_e('Last seen', 'mxchat'); ?></th>
757 - <th class="mxch-leads-col-page"><?php esc_html_e('Top page', 'mxchat'); ?></th>
758 - <th class="mxch-leads-col-actions"></th>
759 - </tr>
760 - </thead>
761 - <tbody id="mxch-leads-tbody">
762 - <tr><td colspan="6" class="mxch-leads-loading"><span class="spinner is-active"></span></td></tr>
763 - </tbody>
764 - </table>
765 - </div>
766 -
767 - <div class="mxch-panel-footer">
768 - <span class="mxch-leads-count" id="mxch-leads-count">0 leads</span>
769 - <div class="mxch-pagination-simple" id="mxch-leads-pagination"></div>
770 - </div>
771 - </div>
772 -
773 - <!-- Delete confirm modal -->
774 - <div id="mxch-leads-confirm" class="mxch-modal-overlay" style="display:none;">
775 - <div class="mxch-modal-content mxch-leads-confirm-box">
776 - <div class="mxch-modal-header">
777 - <h2><?php esc_html_e('Delete leads', 'mxchat'); ?></h2>
778 - <button type="button" class="mxch-modal-close" data-mxch-leads-close>&times;</button>
779 - </div>
780 - <div class="mxch-modal-body">
781 - <p id="mxch-leads-confirm-body"></p>
782 - <p class="mxch-leads-confirm-warning"><?php esc_html_e('This cannot be undone.', 'mxchat'); ?></p>
783 - </div>
784 - <div class="mxch-leads-confirm-actions">
785 - <button type="button" class="mxch-btn mxch-btn-secondary" data-mxch-leads-close><?php esc_html_e('Cancel', 'mxchat'); ?></button>
786 - <button type="button" class="mxch-btn mxch-btn-danger" id="mxch-leads-confirm-go"><?php esc_html_e('Delete permanently', 'mxchat'); ?></button>
787 - </div>
788 - </div>
789 - </div>
790 -
791 - <?php wp_nonce_field('mxchat_delete_leads', 'mxchat_leads_delete_nonce'); ?>
792 - <?php wp_nonce_field('mxchat_export_leads', 'mxchat_leads_export_nonce'); ?>
793 - </div>
794 -
795 527 <!-- Notifications Section -->
796 528 <div id="notifications" class="mxch-section">
797 529 <div class="mxch-content-header">
798 530 <h1 class="mxch-content-title"><?php esc_html_e('Notification Settings', 'mxchat'); ?></h1>
@@ -832,15 +564,14 @@
832 564 </div>
833 565
834 566 <div class="mxch-field">
835 567 <label class="mxch-field-label"><?php esc_html_e('Notification Email', 'mxchat'); ?></label>
836 - <?php /* type="text", not "email": the browser rejects a comma-separated list outright (plan 2f131a). Validation is server-side in MxChat_Utils. */ ?>
837 - <input type="text"
568 + <input type="email"
838 569 name="mxchat_transcripts_options[mxchat_notification_email]"
839 570 class="mxch-input mxchat-autosave-field"
840 571 value="<?php echo esc_attr($email); ?>"
841 572 data-nonce="<?php echo wp_create_nonce('mxchat_autosave_nonce'); ?>">
842 - <p class="mxch-field-description"><?php printf(esc_html__('Email address where notifications will be sent. Separate up to %d addresses with commas. Defaults to the site admin email.', 'mxchat'), (int) MxChat_Utils::NOTIFICATION_EMAIL_MAX); ?></p>
573 + <p class="mxch-field-description"><?php esc_html_e('Email address where notifications will be sent.', 'mxchat'); ?></p>
843 574 </div>
844 575 </div>
845 576 </div>
846 577
@@ -924,51 +655,8 @@
924 655 <option value="2weeks" <?php selected($auto_delete, '2weeks'); ?>><?php esc_html_e('After 2 Weeks', 'mxchat'); ?></option>
925 656 <option value="1month" <?php selected($auto_delete, '1month'); ?>><?php esc_html_e('After 1 Month', 'mxchat'); ?></option>
926 657 </select>
927 658 <p class="mxch-field-description"><?php esc_html_e('Automatically delete old chat transcripts to manage database size and privacy.', 'mxchat'); ?></p>
928 - <?php
929 - // Surface the cron's real state next to the setting that
930 - // depends on it (plan-bc08a6): a configured retention whose
931 - // cleanup event is missing was previously invisible.
932 - $mxch_retention_days = isset($options['mxchat_retention_days']) ? (int) $options['mxchat_retention_days'] : 0;
933 - if ($auto_delete !== 'never' || $mxch_retention_days > 0) :
934 - $mxch_next_cleanup = wp_next_scheduled('mxchat_cleanup_old_transcripts');
935 - ?>
936 - <p class="mxch-field-description" id="mxchat-next-cleanup-status">
937 - <?php
938 - if ($mxch_next_cleanup) {
939 - printf(
940 - /* translators: %s: localized date and time of the next scheduled transcript cleanup */
941 - esc_html__('Next cleanup: %s', 'mxchat'),
942 - esc_html(wp_date(get_option('date_format') . ' ' . get_option('time_format'), $mxch_next_cleanup))
943 - );
944 - } else {
945 - esc_html_e('Next cleanup: not currently scheduled.', 'mxchat');
946 - }
947 - ?>
948 - </p>
949 - <?php endif; ?>
950 - </div>
951 - </div>
952 - </div>
953 -
954 - <!-- Privacy & Data Requests Card (plan b81e42) -->
955 - <div class="mxch-card">
956 - <div class="mxch-card-header">
957 - <h3 class="mxch-card-title">
958 - <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>
959 - <?php esc_html_e('Privacy & Data Requests', 'mxchat'); ?>
960 - </h3>
961 - </div>
962 - <div class="mxch-card-body">
963 - <div class="mxch-field">
964 - <p class="mxch-field-description">
965 - <?php esc_html_e('Chat conversations — including captured emails, names, and visitor identifiers — are registered with WordPress\'s built-in privacy tools. When you run a personal data export or erasure request from the Tools menu, MxChat data is included automatically, so honouring a GDPR or CCPA request covers the chatbot with no extra steps.', 'mxchat'); ?>
966 - </p>
967 - <p>
968 - <a href="<?php echo esc_url(admin_url('export-personal-data.php')); ?>" class="mxch-btn mxch-btn-secondary mxch-btn-sm"><?php esc_html_e('Export Personal Data', 'mxchat'); ?></a>
969 - <a href="<?php echo esc_url(admin_url('erase-personal-data.php')); ?>" class="mxch-btn mxch-btn-secondary mxch-btn-sm"><?php esc_html_e('Erase Personal Data', 'mxchat'); ?></a>
970 - </p>
971 659 </div>
972 660 </div>
973 661 </div>
974 662 </div>