diff --git a/modules/core/js_modules/route_handlers.js b/modules/core/js_modules/route_handlers.js
index e4eccbbaa..8cc41de64 100644
--- a/modules/core/js_modules/route_handlers.js
+++ b/modules/core/js_modules/route_handlers.js
@@ -78,7 +78,9 @@ function applyMessaleListPageHandlers(routeParams) {
e.preventDefault();
Hm_Message_List.toggle_rows();
});
-
+
+ get_list_block_sieve();
+
if (routeParams.list_path === 'github_all') {
return applyGithubMessageListPageHandler(routeParams);
}
diff --git a/modules/imap/site.js b/modules/imap/site.js
index c16c06b9e..28d51c302 100644
--- a/modules/imap/site.js
+++ b/modules/imap/site.js
@@ -1356,19 +1356,80 @@ var add_email_in_contact_trusted = function(list_email) {
}
};
+
+function get_list_block_sieve() {
+ sessionStorage.removeItem('list_blocked');
+ var detail = Hm_Utils.parse_folder_path(hm_list_path());
+ var list_blocked_senders = [];
+ var page = hm_page_name();
+ if (page == 'message_list') {
+ Hm_Ajax.request(
+ [
+ { name: 'hm_ajax_hook', value: 'ajax_list_block_sieve' },
+ { name: 'imap_server_id', 'value': detail.server_id},
+ ],
+ function (res) {
+ if (res.ajax_list_block_sieve) {
+ sessionStorage.setItem('list_blocked', res.ajax_list_block_sieve);
+ }
+ }
+ );
+ }
+};
+
$('.screen-email-unlike').on("click", function() { imap_screen_email(); return false; });
$('.screen-email-like').on("click", function() {
+ var list_blocked_senders = (sessionStorage.getItem('list_blocked') !== null) ? JSON.parse(sessionStorage.getItem('list_blocked')) : [];
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 = "
";
+ email_existing_in_blocked_senders.forEach(sender => {
+ sender = sender.trim();
+ list_html += `- ${sender}
`;
+ });
+ 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/functions.php b/modules/sievefilters/functions.php
index ed3d3cb65..f2ac74c82 100644
--- a/modules/sievefilters/functions.php
+++ b/modules/sievefilters/functions.php
@@ -284,6 +284,22 @@ function get_sieve_client_factory($site_config)
}
}
+if (!hm_exists('prepare_sieve_script ')) {
+ function prepare_sieve_script ($script, $index = 1, $action = "decode")
+ {
+ $blocked_list = [];
+ if ($script != '') {
+ $base64_obj = str_replace("# ", "", preg_split('#\r?\n#', $script, 0)[$index]);
+ if ($action == "decode") {
+ $blocked_list = json_decode(str_replace("*", "", base64_decode($base64_obj)));
+ } else {
+ $blocked_list = json_encode(base64_decode($base64_obj));
+ }
+ }
+ return $blocked_list;
+ }
+}
+
if (!hm_exists('get_domain')) {
function get_domain($email)
{
@@ -424,8 +440,7 @@ function get_blocked_senders_array($mailbox, $site_config, $user_config)
$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(base64_decode($base64_obj));
+ $blocked_list = prepare_sieve_script ($current_script);
if (!$blocked_list) {
return [];
}
diff --git a/modules/sievefilters/modules.php b/modules/sievefilters/modules.php
index 8568b7fee..bcde5663b 100644
--- a/modules/sievefilters/modules.php
+++ b/modules/sievefilters/modules.php
@@ -30,10 +30,10 @@ public function process() {
try {
$client = $factory->init($this->user_config, $imap_account, $this->module_is_supported('nux'));
$script = $client->getScript($this->request->post['sieve_script_name']);
- $base64_obj = str_replace("# ", "", preg_split('#\r?\n#', $script, 0)[1]);
- $this->out('conditions', json_encode(base64_decode($base64_obj)));
- $base64_obj = str_replace("# ", "", preg_split('#\r?\n#', $script, 0)[2]);
- $this->out('actions', json_encode(base64_decode($base64_obj)));
+ $list = prepare_sieve_script ($script, 1, "encode");
+ $this->out('conditions', $list);
+ $list = prepare_sieve_script ($script, 2, "encode");
+ $this->out('actions', $list);
if (mb_strstr($script, 'allof')) {
$this->out('test_type', 'ALLOF');
} else {
@@ -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;
}
}
@@ -216,8 +218,7 @@ public function process() {
$scripts = $client->listScripts();
$current_script = $client->getScript('blocked_senders');
- $base64_obj = str_replace("# ", "", preg_split('#\r?\n#', $current_script, 0)[1]);
- $blocked_list = json_decode(base64_decode($base64_obj));
+ $blocked_list = prepare_sieve_script ($current_script);
$domain = get_domain($this->request->post['sender']);
$blocked_wildcard = '@'.$domain;
@@ -357,8 +358,7 @@ public function process() {
$current_script = $client->getScript('blocked_senders');
$unblock_sender = false;
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)));
+ $blocked_list = prepare_sieve_script ($current_script);
foreach ($blocked_list as $blocked_sender) {
if ($blocked_sender != $email_sender) {
$blocked_senders[] = $blocked_sender;
@@ -492,9 +492,7 @@ public function process() {
$blocked_list_actions = [];
$unblock_sender = false;
if ($current_script != '') {
- $script_split = preg_split('#\r?\n#', $current_script, 0);
- $base64_obj = str_replace("# ", "", $script_split[1]);
- $blocked_list = json_decode(base64_decode($base64_obj));
+ $blocked_list = prepare_sieve_script ($current_script);
foreach ($blocked_list as $blocked_sender) {
if ($blocked_sender != $email_sender) {
$blocked_senders[] = $blocked_sender;
@@ -502,10 +500,7 @@ public function process() {
}
$unblock_sender = true;
}
- $base64_obj_actions = str_replace("# ", "", $script_split[2]);
- if ($base64_obj_actions) {
- $blocked_list_actions = json_decode(base64_decode($base64_obj_actions), true);
- }
+ $blocked_list_actions = prepare_sieve_script ($current_script, 2);
}
if (isset($this->request->post['change_behavior']) && $unblock_sender) {
$unblock_sender = false;
@@ -1339,9 +1334,7 @@ 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'));
@@ -1373,7 +1366,7 @@ 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()}");
@@ -1381,3 +1374,41 @@ public function process() {
$this->out('success', $success);
}
}
+class Hm_Handler_list_block_sieve_script extends Hm_Handler_Module {
+ public function process() {
+ list($success, $form) = $this->process_form(array('imap_server_id'));
+ if (!$success) {
+ return;
+ }
+
+ Hm_IMAP_List::init($this->user_config, $this->session);
+ $imap_account = Hm_IMAP_List::get($form['imap_server_id'], true);
+
+ $factory = get_sieve_client_factory($this->config);
+ try {
+ $client = $factory->init($this->user_config, $imap_account);
+
+ $blocked_senders = [];
+ $current_script = $client->getScript('blocked_senders');
+ if ($current_script != '') {
+ $blocked_list = prepare_sieve_script ($current_script);
+ foreach ($blocked_list as $blocked_sender) {
+ $blocked_senders[] = $blocked_sender;
+ }
+ }
+ $this->out('ajax_list_block_sieve', json_encode($blocked_senders));
+
+ } catch (Exception $e) {
+ Hm_Msgs::add("ERRSieve: {$e->getMessage()}");
+ return;
+ }
+ }
+}
+
+
+class Hm_Output_list_block_sieve_output extends Hm_Output_Module {
+ public function output() {
+ $list_block_sieve = $this->get('ajax_list_block_sieve', "");
+ $this->out('ajax_list_block_sieve', $list_block_sieve);
+ }
+}
diff --git a/modules/sievefilters/setup.php b/modules/sievefilters/setup.php
index 121811301..d6a979f57 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_list_block_sieve', 'core');
+add_handler('ajax_list_block_sieve', 'list_block_sieve_script', true);
+add_output('ajax_list_block_sieve', 'list_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');
@@ -124,6 +129,8 @@
'ajax_sieve_block_domain',
'ajax_sieve_block_change_behaviour',
'ajax_sieve_toggle_script_state',
+ 'ajax_list_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_list_block_sieve' => array(FILTER_UNSAFE_RAW, false),
),
'allowed_get' => array(),
'allowed_post' => array(