diff --git a/modules/core/functions.php b/modules/core/functions.php index 11c37f56f..c2b5291cc 100644 --- a/modules/core/functions.php +++ b/modules/core/functions.php @@ -728,8 +728,8 @@ function schedule_dropdown($output, $send_now = false) { /** * @subpackage imap/functions */ -if (!hm_exists('parse_nexter_header')) { - function parse_nexter_header($header, $name) +if (!hm_exists('parse_delayed_header')) { + function parse_delayed_header($header, $name) { $header = str_replace("$name: ", '', $header); $result = []; diff --git a/modules/core/site.js b/modules/core/site.js index 652fe26d5..79cb98317 100644 --- a/modules/core/site.js +++ b/modules/core/site.js @@ -2412,15 +2412,17 @@ const observeMessageTextMutationAndHandleExternalResources = (inline) => { }; function setupActionSchedule(callback) { - $(document).on('click', '.nexter_date_picker', function (e) { + $('.nexter_date_picker').off('click').on('click', function (e) { document.querySelector('.nexter_input_date').showPicker(); }); - $(document).on('click', '.nexter_date_helper', function (e) { + + $('.nexter_date_helper').off('click').on('click', function (e) { e.preventDefault(); $('.nexter_input').val($(this).attr('data-value')).trigger('change'); }); - $(document).on('input', '.nexter_input_date', function (e) { - var now = new Date(); + + $('.nexter_input_date').off('input').on('input', function (e) { + let now = new Date(); now.setMinutes(now.getMinutes() + 1); $(this).attr('min', now.toJSON().slice(0, 16)); if (new Date($(this).val()).getTime() <= now.getTime()) { @@ -2429,36 +2431,53 @@ function setupActionSchedule(callback) { $('.nexter_date_picker').css({ 'border': 'unset', 'border-top': '1px solid #ddd' }); } }); - $(document).on('change', '.nexter_input_date', function (e) { + + $('.nexter_input_date').off('change').on('change', function (e) { if ($(this).val() && new Date().getTime() < new Date($(this).val()).getTime()) { $('.nexter_input').val($(this).val()).trigger('change'); } }); - $(document).on('change', '.nexter_input', callback); + + $('.nexter_input').off('change').on('change', callback); } function setupActionSnooze(callback) { - $(document).on('click', '.nexter_date_picker_snooze', function (e) { - document.querySelector('.nexter_input_date_snooze').showPicker(); - }); - $(document).on('click', '.nexter_date_helper_snooze', function (e) { - e.preventDefault(); - $('.nexter_input_snooze').val($(this).attr('data-value')).trigger('change'); - }); - $(document).on('input', '.nexter_input_date_snooze', function (e) { - var now = new Date(); - now.setMinutes(now.getMinutes() + 1); - $(this).attr('min', now.toJSON().slice(0, 16)); - if (new Date($(this).val()).getTime() <= now.getTime()) { - $('.nexter_date_picker_snooze').css('border', '1px solid red'); - } else { - $('.nexter_date_picker_snooze').css({ 'border': 'unset', 'border-top': '1px solid #ddd' }); - } - }); - $(document).on('change', '.nexter_input_date_snooze', function (e) { - if ($(this).val() && new Date().getTime() < new Date($(this).val()).getTime()) { - $('.nexter_input_snooze').val($(this).val()).trigger('change'); - } - }); - $(document).on('change', '.nexter_input_snooze', callback); + $(document) + .off('click', '.nexter_date_picker_snooze') + .on('click', '.nexter_date_picker_snooze', function () { + document.querySelector('.nexter_input_date_snooze').showPicker(); + }); + + $(document) + .off('click', '.nexter_date_helper_snooze') + .on('click', '.nexter_date_helper_snooze', function (e) { + e.preventDefault(); + $('.nexter_input_snooze').val($(this).attr('data-value')).trigger('change'); + }); + + $(document) + .off('input', '.nexter_input_date_snooze') + .on('input', '.nexter_input_date_snooze', function () { + var now = new Date(); + now.setMinutes(now.getMinutes() + 1); + $(this).attr('min', now.toJSON().slice(0, 16)); + + if (new Date($(this).val()).getTime() <= now.getTime()) { + $('.nexter_date_picker_snooze').css('border', '1px solid red'); + } else { + $('.nexter_date_picker_snooze').css({ 'border': 'unset', 'border-top': '1px solid #ddd' }); + } + }); + + $(document) + .off('change', '.nexter_input_date_snooze') + .on('change', '.nexter_input_date_snooze', function () { + if ($(this).val() && new Date().getTime() < new Date($(this).val()).getTime()) { + $('.nexter_input_snooze').val($(this).val()).trigger('change'); + } + }); + + $(document) + .off('change', '.nexter_input_snooze') + .on('change', '.nexter_input_snooze', callback); } diff --git a/modules/imap/functions.php b/modules/imap/functions.php index b81b12ce7..b7f0f8b2b 100644 --- a/modules/imap/functions.php +++ b/modules/imap/functions.php @@ -253,7 +253,7 @@ function format_imap_message_list($msg_list, $output_module, $parent_list=false, $is_snoozed = !empty($msg['x_snoozed']) && hex2bin($msg['folder']) == 'Snoozed'; $is_scheduled = !empty($msg['x_schedule']) && hex2bin($msg['folder']) == 'Scheduled'; if ($is_snoozed) { - $snooze_header = parse_nexter_header('X-Snoozed: '.$msg['x_snoozed'], 'X-Snoozed'); + $snooze_header = parse_delayed_header('X-Snoozed: '.$msg['x_snoozed'], 'X-Snoozed'); $date = $snooze_header['until']; $timestamp = strtotime($date); } elseif ($is_scheduled) { @@ -1332,7 +1332,7 @@ function snooze_message($mailbox, $msg_id, $folder, $snooze_tag) { preg_match("/^X-Snoozed:.*(\r?\n[ \t]+.*)*\r?\n?/im", $msg, $matches); if (count($matches)) { $msg = str_replace($matches[0], '', $msg); - $old_folder = parse_nexter_header($matches[0], 'X-Snoozed')['from']; + $old_folder = parse_delayed_header($matches[0], 'X-Snoozed')['from']; } if ($snooze_tag) { $from = $old_folder ?? $folder; @@ -1359,7 +1359,7 @@ function snooze_message($mailbox, $msg_id, $folder, $snooze_tag) { } } } else { - $snooze_headers = parse_nexter_header($matches[0], 'X-Snoozed'); + $snooze_headers = parse_delayed_header($matches[0], 'X-Snoozed'); $original_folder = $snooze_headers['from']; if ($mailbox->store_message($original_folder, $msg)) { $deleteResult = $mailbox->message_action($snooze_folder, 'DELETE', array($msg_id)); @@ -1692,7 +1692,7 @@ function save_sent_msg($handler, $imap_id, $mailbox, $imap_details, $msg, $msg_i Hm_Msgs::add('ERRAn error occurred saving the sent message'); } - $mailbox_page = $imap->get_messages($sent_folder, 'ARRIVAL', true, 'ALL', 0, 10); + $mailbox_page = $mailbox->get_messages($sent_folder, 'ARRIVAL', true, 'ALL', 0, 10); foreach ($mailbox_page[1] as $mail) { $msg_header = $mailbox->get_message_headers($sent_folder, $mail['uid']); if ($msg_header['Message-Id'] === $msg_id) { diff --git a/modules/imap/handler_modules.php b/modules/imap/handler_modules.php index 662d04a98..9e32e391f 100644 --- a/modules/imap/handler_modules.php +++ b/modules/imap/handler_modules.php @@ -1059,7 +1059,7 @@ public function process() { $msg_headers = $mailbox->get_message_headers($folder, $msg['uid']); if (isset($msg_headers['X-Snoozed'])) { try { - $snooze_headers = parse_nexter_header($msg_headers['X-Snoozed'], 'X-Snoozed'); + $snooze_headers = parse_delayed_header($msg_headers['X-Snoozed'], 'X-Snoozed'); if (new DateTime($snooze_headers['until']) <= new DateTime()) { snooze_message($mailbox, $msg['uid'], $folder, null); } diff --git a/modules/imap/output_modules.php b/modules/imap/output_modules.php index 1a0ded651..fb58bae0e 100644 --- a/modules/imap/output_modules.php +++ b/modules/imap/output_modules.php @@ -206,7 +206,7 @@ protected function output() { $txt .= $this->html_safe($value).''; } elseif ($fld == 'x-snoozed') { - $snooze_header = parse_nexter_header($value, 'X-Snoozed'); + $snooze_header = parse_delayed_header($value, 'X-Snoozed'); $txt .= '