From c31c7d65dde3e1a7cf84d31212bf5cc28f449602 Mon Sep 17 00:00:00 2001 From: christer kahasha <62720246+christer77@users.noreply.github.com> Date: Wed, 2 Oct 2024 17:09:35 +0200 Subject: [PATCH] [FIX]Screen email: fix Adding to Trust Contact while the email is blocked --- modules/imap/site.js | 61 +++++++++++++++++++++++++++++++- modules/sievefilters/modules.php | 45 ++--------------------- modules/sievefilters/setup.php | 8 +++++ 3 files changed, 70 insertions(+), 44 deletions(-) diff --git a/modules/imap/site.js b/modules/imap/site.js index 5381dbda7..2c5e1b9b9 100644 --- a/modules/imap/site.js +++ b/modules/imap/site.js @@ -1318,19 +1318,78 @@ var add_email_in_contact_trusted = function(list_email) { } }; +var list_blocked_senders = []; +get_liste_block_sieve(Hm_Utils.parse_folder_path(hm_list_path())); + +function get_liste_block_sieve(detail) { + var page = hm_page_name(); + if (page == 'message_list') { + Hm_Ajax.request( + [ + { name: 'hm_ajax_hook', value: 'ajax_liste_block_sieve' }, + { name: 'imap_server_id', 'value': detail.server_id}, + ], + function (res) { + if (res.ajax_liste_block_sieve) { + list_blocked_senders = res.ajax_liste_block_sieve; + } + } + ); + } +}; + $('.screen-email-unlike').on("click", function() { imap_screen_email(); return false; }); $('.screen-email-like').on("click", function() { var list_email = []; + var list_msg_uid = []; + var email_existing_in_blocked_senders = []; $('input[type=checkbox]').each(function() { if (this.checked && this.id.search('imap') != -1) { let email = $('.'+ this.id +' .from').attr("data-title") if (email = email.trim()) { list_email.push(email); + if (list_blocked_senders.lenght > 0) { + Object.keys(list_blocked_senders).forEach(key => { + if (list_blocked_senders[key] === email) { + email_existing_in_blocked_senders.push(email); + list_msg_uid.push($(this).parent().parent().attr("data-uid")); + delete list_blocked_senders[key]; + } + }); + } } } }); - add_email_in_contact_trusted(list_email); return false; + + if (email_existing_in_blocked_senders) { + var list_html = "
    "; + email_existing_in_blocked_senders.forEach(sender => { + sender = sender.trim(); + list_html += `
  1. ${sender}
  2. `; + }); + list_html += "
"; + const modal = new Hm_Modal({ + modalId: 'emptySubjectBodyModal', + title: 'Warning', + btnSize: 'sm' + }); + + var modalContentHeadline = "Adress mail exist in your Block list"; + modal.addFooterBtn(hm_trans('Add Emails to Trust contact'), 'btn-warning', handleAddEmail); + modal.setContent(modalContentHeadline + list_html + `

${hm_trans('If you add these, all will be unblocked.
Are you sure you want to add this in your Trust contact?')}

`); + modal.open(); + function handleAddEmail() { + list_msg_uid.forEach(function(msg_uid) { + block_unblock_sender(msg_uid, Hm_Utils.parse_folder_path(hm_list_path()), 'sender', 'unblocked'); + }); + modal.hide(); + add_email_in_contact_trusted(list_email); + }; + } else { + add_email_in_contact_trusted(list_email); + } + return false; }); $(document).on('click', '[data-bs-dismiss="modal"]', function() { diff --git a/modules/sievefilters/modules.php b/modules/sievefilters/modules.php index 5c0d281c5..f69524d3f 100644 --- a/modules/sievefilters/modules.php +++ b/modules/sievefilters/modules.php @@ -203,9 +203,11 @@ public function process() { */ class Hm_Handler_sieve_block_domain_script extends Hm_Handler_Module { public function process() { + $imap_account = null; foreach ($this->user_config->get('imap_servers') as $idx => $mailbox) { if ($idx == $this->request->post['imap_server_id']) { $imap_account = $mailbox; + break; } } @@ -1344,46 +1346,3 @@ public function process() { } } } - -/** - * @subpackage sievefilterstoggle/handler - */ -class Hm_Handler_sieve_toggle_script_state extends Hm_Handler_Module { - public function process() { - list($success, $form) = $this->process_form(array('imap_account', 'script_state', 'sieve_script_name')); - if (!$success) { - $this->out('success', false); - return; - } - $imap_account = Hm_IMAP_List::dump($form['imap_account']); - $factory = get_sieve_client_factory($this->config); - $success = false; - try { - $client = $factory->init($this->user_config, $imap_account); - $state = $form['script_state'] ? 'enabled': 'disabled'; - $scripts = $client->listScripts(); - foreach ($scripts as $key => $script) { - if ($script == 'main_script') { - $client->removeScripts('main_script'); - } - if ($script == $form['sieve_script_name']) { - if (! $form['script_state']) { - unset($scripts[$key]); - } - $client->renameScript($script, "s{$state}_"); - $success = true; - } - } - $scripts = $client->listScripts(); - $main_script = generate_main_script($scripts); - save_main_script($client, $main_script, $scripts); - $client->activateScript('main_script'); - $client->close(); - - Hm_Msgs::add("Script $state"); - } catch (Exception $e) { - Hm_Msgs::add("ERRSieve: {$e->getMessage()}"); - } - $this->out('success', $success); - } -} diff --git a/modules/sievefilters/setup.php b/modules/sievefilters/setup.php index 121811301..c1a2555f6 100644 --- a/modules/sievefilters/setup.php +++ b/modules/sievefilters/setup.php @@ -76,6 +76,11 @@ add_handler('ajax_sieve_unblock_sender', 'sieve_unblock_sender', true); add_output('ajax_sieve_unblock_sender', 'sieve_block_unblock_output', true); +/* liste of sieve blocked */ +setup_base_ajax_page('ajax_liste_block_sieve', 'core'); +add_handler('ajax_liste_block_sieve', 'load_list_sieve_block', true); +add_output('ajax_liste_block_sieve', 'get_list_sieve_block', true); + /* get mailboxes script */ setup_base_ajax_page('ajax_sieve_get_mailboxes', 'core'); add_handler('ajax_sieve_get_mailboxes', 'load_imap_servers_from_config', true, 'imap', 'load_user_data', 'after'); @@ -124,6 +129,8 @@ 'ajax_sieve_block_domain', 'ajax_sieve_block_change_behaviour', 'ajax_sieve_toggle_script_state', + 'ajax_liste_block_sieve', + 'message_list', ), 'allowed_output' => array( 'imap_server_ids' => array(FILTER_UNSAFE_RAW, false), @@ -136,6 +143,7 @@ 'sieve_detail_display' => array(FILTER_UNSAFE_RAW, false), 'imap_extensions_display' => array(FILTER_UNSAFE_RAW, false), 'script_details' => array(FILTER_UNSAFE_RAW, FILTER_REQUIRE_ARRAY), + 'ajax_liste_block_sieve' => array(FILTER_UNSAFE_RAW, false), ), 'allowed_get' => array(), 'allowed_post' => array(