Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(other): screen email: fix adding to trust contact while the email is blo… #1265

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 60 additions & 1 deletion modules/imap/site.js
Original file line number Diff line number Diff line change
Expand Up @@ -1313,19 +1313,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 = JSON.parse(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.length > 0) {
list_blocked_senders.forEach((sender, index) => {
if (sender === email) {
email_existing_in_blocked_senders.push(email);
list_msg_uid.push($(this).parent().parent().attr("data-uid"));
delete list_blocked_senders[index];
}
});
}
}
}
});
add_email_in_contact_trusted(list_email); return false;

if (email_existing_in_blocked_senders) {
var list_html = "<ol>";
email_existing_in_blocked_senders.forEach(sender => {
sender = sender.trim();
list_html += `<li>${sender}</li>`;
});
list_html += "</ol>";
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 + `<p>${hm_trans('If you add these, all will be unblocked.<br>Are you sure you want to add this in your Trust contact?')}</p>`);
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() {
Expand Down
64 changes: 60 additions & 4 deletions modules/sievefilters/modules.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}

Expand Down Expand Up @@ -1345,9 +1347,7 @@ public function process() {
}
}

/**
* @subpackage sievefilterstoggle/handler
*/

class Hm_Handler_sieve_toggle_script_state extends Hm_Handler_Module {
christer77 marked this conversation as resolved.
Show resolved Hide resolved
public function process() {
list($success, $form) = $this->process_form(array('imap_account', 'script_state', 'sieve_script_name'));
Expand Down Expand Up @@ -1379,11 +1379,67 @@ public function process() {
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);
}
}
class Hm_Handler_liste_block_sieve_script extends Hm_Handler_Module {
public function process() {
list($success, $form) = $this->process_form(array('imap_server_id'));
if (!$success) {
return;
}

foreach ($this->user_config->get('imap_servers') as $idx => $mailbox) {
if ($idx == $form['imap_server_id']) {
$imap_account = $mailbox;
christer77 marked this conversation as resolved.
Show resolved Hide resolved
break;
}
}

$email_sender = $this->request->post['sender'];
if (mb_strstr($email_sender, '*')) {
$email_sender = str_replace('*', '', $email_sender);
}

$factory = get_sieve_client_factory($this->config);
try {
$client = $factory->init($this->user_config, $imap_account);
christer77 marked this conversation as resolved.
Show resolved Hide resolved
$scripts = $client->listScripts();

if(array_search('blocked_senders', $scripts, true) === false) {
$client->putScript(
'blocked_senders',
''
);
}

$blocked_senders = [];
$current_script = $client->getScript('blocked_senders');
if ($current_script != '') {
$base64_obj = str_replace("# ", "", preg_split('#\r?\n#', $current_script, 0)[1]);
$blocked_list = json_decode(str_replace("*", "", base64_decode($base64_obj)));
foreach ($blocked_list as $blocked_sender) {
$blocked_senders[] = $blocked_sender;
}
}
$this->out('ajax_liste_block_sieve', json_encode($blocked_senders));

} catch (Exception $e) {
Hm_Msgs::add("ERRSieve: {$e->getMessage()}");
return;
}
}
}


class Hm_Output_liste_block_sieve_output extends Hm_Output_Module {
public function output() {
$liste_block_sieve = $this->get('ajax_liste_block_sieve', "");
$this->out('ajax_liste_block_sieve', $liste_block_sieve);
}
}
8 changes: 8 additions & 0 deletions modules/sievefilters/setup.php
Original file line number Diff line number Diff line change
Expand Up @@ -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', 'liste_block_sieve_script', true);
add_output('ajax_liste_block_sieve', 'liste_block_sieve_output', 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');
Expand Down Expand Up @@ -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),
Expand All @@ -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(
Expand Down
Loading