| @@ -754,14 +754,13 @@ | ||
| 754 | 754 | <th class="mxch-leads-col-lead"><?php esc_html_e('Lead', 'mxchat'); ?></th> |
| 755 | 755 | <th class="mxch-leads-col-count"><?php esc_html_e('Conversations', 'mxchat'); ?></th> |
| 756 | 756 | <th class="mxch-leads-col-last"><?php esc_html_e('Last seen', 'mxchat'); ?></th> |
| 757 | 757 | <th class="mxch-leads-col-page"><?php esc_html_e('Top page', 'mxchat'); ?></th> |
| 758 | - <th class="mxch-leads-col-consent"><?php esc_html_e('Consent', 'mxchat'); ?></th> | |
| 759 | 758 | <th class="mxch-leads-col-actions"></th> |
| 760 | 759 | </tr> |
| 761 | 760 | </thead> |
| 762 | 761 | <tbody id="mxch-leads-tbody"> |
| 763 | - <tr><td colspan="7" class="mxch-leads-loading"><span class="spinner is-active"></span></td></tr> | |
| 762 | + <tr><td colspan="6" class="mxch-leads-loading"><span class="spinner is-active"></span></td></tr> | |
| 764 | 763 | </tbody> |
| 765 | 764 | </table> |
| 766 | 765 | </div> |
| 767 | 766 | |
| @@ -833,15 +832,14 @@ | ||
| 833 | 832 | </div> |
| 834 | 833 | |
| 835 | 834 | <div class="mxch-field"> |
| 836 | 835 | <label class="mxch-field-label"><?php esc_html_e('Notification Email', 'mxchat'); ?></label> |
| 837 | - <?php /* type="text", not "email": the browser rejects a comma-separated list outright (plan 2f131a). Validation is server-side in MxChat_Utils. */ ?> | |
| 838 | - <input type="text" | |
| 836 | + <input type="email" | |
| 839 | 837 | name="mxchat_transcripts_options[mxchat_notification_email]" |
| 840 | 838 | class="mxch-input mxchat-autosave-field" |
| 841 | 839 | value="<?php echo esc_attr($email); ?>" |
| 842 | 840 | data-nonce="<?php echo wp_create_nonce('mxchat_autosave_nonce'); ?>"> |
| 843 | - <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> | |
| 841 | + <p class="mxch-field-description"><?php esc_html_e('Email address where notifications will be sent.', 'mxchat'); ?></p> | |
| 844 | 842 | </div> |
| 845 | 843 | </div> |
| 846 | 844 | </div> |
| 847 | 845 | |
| @@ -913,9 +911,8 @@ | ||
| 913 | 911 | </div> |
| 914 | 912 | <div class="mxch-card-body"> |
| 915 | 913 | <?php |
| 916 | 914 | $auto_delete = isset($options['mxchat_auto_delete_transcripts']) ? $options['mxchat_auto_delete_transcripts'] : 'never'; |
| 917 | - $mxch_custom_retention = isset($options['mxchat_retention_days']) ? (int) $options['mxchat_retention_days'] : 0; | |
| 918 | 915 | ?> |
| 919 | 916 | <div class="mxch-field"> |
| 920 | 917 | <label class="mxch-field-label"><?php esc_html_e('Auto-Delete Old Transcripts', 'mxchat'); ?></label> |
| 921 | 918 | <select name="mxchat_transcripts_options[mxchat_auto_delete_transcripts]" |
| @@ -926,76 +923,8 @@ | ||
| 926 | 923 | <option value="2weeks" <?php selected($auto_delete, '2weeks'); ?>><?php esc_html_e('After 2 Weeks', 'mxchat'); ?></option> |
| 927 | 924 | <option value="1month" <?php selected($auto_delete, '1month'); ?>><?php esc_html_e('After 1 Month', 'mxchat'); ?></option> |
| 928 | 925 | </select> |
| 929 | 926 | <p class="mxch-field-description"><?php esc_html_e('Automatically delete old chat transcripts to manage database size and privacy.', 'mxchat'); ?></p> |
| 930 | - <?php if ($mxch_custom_retention > 0) : ?> | |
| 931 | - <p class="mxch-field-description" id="mxchat-retention-override-note"> | |
| 932 | - <strong><?php | |
| 933 | - printf( | |
| 934 | - /* translators: %d: the custom retention value in days */ | |
| 935 | - esc_html__('Overridden by Custom Retention below: transcripts are deleted after %d days.', 'mxchat'), | |
| 936 | - $mxch_custom_retention | |
| 937 | - ); | |
| 938 | - ?></strong> | |
| 939 | - </p> | |
| 940 | - <?php endif; ?> | |
| 941 | - <?php | |
| 942 | - // Surface the cron's real state next to the setting that | |
| 943 | - // depends on it (plan-bc08a6): a configured retention whose | |
| 944 | - // cleanup event is missing was previously invisible. | |
| 945 | - $mxch_retention_days = isset($options['mxchat_retention_days']) ? (int) $options['mxchat_retention_days'] : 0; | |
| 946 | - if ($auto_delete !== 'never' || $mxch_retention_days > 0) : | |
| 947 | - $mxch_next_cleanup = wp_next_scheduled('mxchat_cleanup_old_transcripts'); | |
| 948 | - ?> | |
| 949 | - <p class="mxch-field-description" id="mxchat-next-cleanup-status"> | |
| 950 | - <?php | |
| 951 | - if ($mxch_next_cleanup) { | |
| 952 | - printf( | |
| 953 | - /* translators: %s: localized date and time of the next scheduled transcript cleanup */ | |
| 954 | - esc_html__('Next cleanup: %s', 'mxchat'), | |
| 955 | - esc_html(wp_date(get_option('date_format') . ' ' . get_option('time_format'), $mxch_next_cleanup)) | |
| 956 | - ); | |
| 957 | - } else { | |
| 958 | - esc_html_e('Next cleanup: not currently scheduled.', 'mxchat'); | |
| 959 | - } | |
| 960 | - ?> | |
| 961 | - </p> | |
| 962 | - <?php endif; ?> | |
| 963 | - </div> | |
| 964 | - | |
| 965 | - <div class="mxch-field"> | |
| 966 | - <label class="mxch-field-label" for="mxchat_retention_days"><?php esc_html_e('Custom Retention (Days)', 'mxchat'); ?></label> | |
| 967 | - <input type="number" | |
| 968 | - id="mxchat_retention_days" | |
| 969 | - name="mxchat_transcripts_options[mxchat_retention_days]" | |
| 970 | - class="mxch-input mxchat-autosave-field" | |
| 971 | - value="<?php echo esc_attr($mxch_custom_retention); ?>" | |
| 972 | - min="0" | |
| 973 | - max="3650" | |
| 974 | - step="1" | |
| 975 | - data-nonce="<?php echo wp_create_nonce('mxchat_autosave_nonce'); ?>"> | |
| 976 | - <p class="mxch-field-description"><?php esc_html_e('Delete transcripts older than this many days (1–3650). When greater than 0 this overrides the dropdown above; set 0 to use the dropdown. Developers can adjust the final value with the mxchat_transcript_retention_days filter.', 'mxchat'); ?></p> | |
| 977 | - </div> | |
| 978 | - </div> | |
| 979 | - </div> | |
| 980 | - | |
| 981 | - <!-- Privacy & Data Requests Card (plan b81e42) --> | |
| 982 | - <div class="mxch-card"> | |
| 983 | - <div class="mxch-card-header"> | |
| 984 | - <h3 class="mxch-card-title"> | |
| 985 | - <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> | |
| 986 | - <?php esc_html_e('Privacy & Data Requests', 'mxchat'); ?> | |
| 987 | - </h3> | |
| 988 | - </div> | |
| 989 | - <div class="mxch-card-body"> | |
| 990 | - <div class="mxch-field"> | |
| 991 | - <p class="mxch-field-description"> | |
| 992 | - <?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'); ?> | |
| 993 | - </p> | |
| 994 | - <p> | |
| 995 | - <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> | |
| 996 | - <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> | |
| 997 | - </p> | |
| 998 | 927 | </div> |
| 999 | 928 | </div> |
| 1000 | 929 | </div> |
| 1001 | 930 | </div> |