Skip to content

Commit

Permalink
feat (backend): refactor event handling and variable declarations
Browse files Browse the repository at this point in the history
- Event handlers attached directly to target elements to avoid multiple bindings.
- Rename parse_nexter_header to parse_delayed_header to avoid confusion.
- Replacement of “var” by “let”.
  • Loading branch information
amaninyumu1 committed Jan 31, 2025
1 parent 59be84f commit 06a57a4
Show file tree
Hide file tree
Showing 9 changed files with 67 additions and 49 deletions.
4 changes: 2 additions & 2 deletions modules/core/functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 = [];
Expand Down
77 changes: 48 additions & 29 deletions modules/core/site.js
Original file line number Diff line number Diff line change
Expand Up @@ -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()) {
Expand All @@ -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);
}
8 changes: 4 additions & 4 deletions modules/imap/functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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;
Expand All @@ -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));
Expand Down Expand Up @@ -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) {
Expand Down
2 changes: 1 addition & 1 deletion modules/imap/handler_modules.php
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
2 changes: 1 addition & 1 deletion modules/imap/output_modules.php
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ protected function output() {
$txt .= $this->html_safe($value).'</th></tr>';
}
elseif ($fld == 'x-snoozed') {
$snooze_header = parse_nexter_header($value, 'X-Snoozed');
$snooze_header = parse_delayed_header($value, 'X-Snoozed');
$txt .= '<tr class="header_'.$fld.'"><th>';
$txt .= $this->trans('Snoozed').'</th><td>'.$this->trans('Until').' '.$this->html_safe($snooze_header['until']).' <a href="#" data-value="unsnooze" class="unsnooze nexter_date_helper">Unsnooze</a></td></tr>';
}
Expand Down
14 changes: 7 additions & 7 deletions modules/smtp/functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,6 @@ function get_reply_type($request) {
function send_scheduled_message($handler, $mailbox, $folder, $msg_id, $send_now = false) {
$msg_headers = $mailbox->get_message_headers($folder, $msg_id);
$mailbox_details = $mailbox->get_config();
$imap_profile = Hm_IMAP_List::fetch($mailbox_details['user'], $mailbox_details['server']);
try {
if (empty($msg_headers['X-Schedule'])) {
return false;
Expand All @@ -86,10 +85,13 @@ function send_scheduled_message($handler, $mailbox, $folder, $msg_id, $send_now
}
$profile = $profiles[0];
}

$smtp = new Hm_Mailbox($imap_profile['id'], $handler->user_config, $handler->session, $imap_profile);

if ($smtp && $smtp->connect()) {
$smtp = Hm_SMTP_List::connect($profile['smtp_id'], false);

if (! $smtp || ! $smtp->authed()) {
Hm_Msgs::add("ERRFailed to authenticate to the SMTP server");
return;
}

$delivery_receipt = isset($msg_headers['X-Delivery']);

$recipients = [];
Expand All @@ -103,13 +105,11 @@ function send_scheduled_message($handler, $mailbox, $folder, $msg_id, $send_now
$from = process_address_fld($msg_headers['From']);

$err_msg = $smtp->send_message($from[0]['email'], $recipients, $msg_content, $delivery_receipt);

if (!$err_msg) {
$mailbox->delete_message($folder, $msg_id, false);
save_sent_msg($handler, $mailbox->get_config()['id'], $mailbox, $mailbox_details, $msg_content, $msg_id, false);
return true;
}
}
}
} catch (Exception $e) {
Hm_Debug::add(sprintf('ERRCannot send message: %s', $msg_headers['subject']));
Expand Down
3 changes: 1 addition & 2 deletions modules/smtp/js_modules/route_handlers.js
Original file line number Diff line number Diff line change
Expand Up @@ -123,8 +123,7 @@ function applySmtpComposePageHandlers() {
save_compose_state(false, true, $('.nexter_input').val(), function(res) {
if (res.draft_id) {
reset_smtp_form(false);
Hm_Folders.reload_folders(true);
Hm_Utils.redirect();
Hm_Notices.show([hm_trans('Operation successful')]);
}
});
} else {
Expand Down
2 changes: 1 addition & 1 deletion modules/smtp/modules.php
Original file line number Diff line number Diff line change
Expand Up @@ -1621,7 +1621,7 @@ public function process() {
$imap_server = Hm_IMAP_List::getForMailbox($imap_server_id);

$mailbox = new Hm_Mailbox($imap_server_id, $this->user_config, $this->session, $imap_server);
if ($mailbox && $mailbox->connect()) {
if ($mailbox && $mailbox->connect()) {
$folder = hex2bin($folder);
if (reschedule_message_sending($this, $mailbox, $msg_id, $folder, $new_schedule_date)) {
$scheduled_msg_count++;
Expand Down
4 changes: 2 additions & 2 deletions modules/smtp/site.js
Original file line number Diff line number Diff line change
Expand Up @@ -392,8 +392,8 @@ function smtpSettingsPageHandler() {

$(function() {
if (hm_is_logged()) {
var scheduled_msg_count = 0;
var sendScheduledMessages = function() {
let scheduled_msg_count = 0;
let sendScheduledMessages = function() {
Hm_Ajax.request(
[{'name': 'hm_ajax_hook', 'value': 'ajax_send_scheduled_messages'}],
function(res) {
Expand Down

0 comments on commit 06a57a4

Please sign in to comment.