Skip to content

Commit

Permalink
[ENH] Added functionality to enable or disable Sieve Filters with tog…
Browse files Browse the repository at this point in the history
…gle button
  • Loading branch information
amaninyumu1 committed Jun 27, 2024
1 parent 0e90fa8 commit a8bd54f
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 1 deletion.
5 changes: 5 additions & 0 deletions modules/sievefilters/functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ function get_mailbox_filters($mailbox, $site_config, $user_config, $html=false)

$script_list = '';
foreach ($scripts_sorted as $script_name => $sc) {

$exp_name = explode('-', $script_name);
$parsed_name = str_replace('_', ' ', $exp_name[0]);
$script_list .= '
Expand All @@ -142,6 +143,10 @@ function get_mailbox_filters($mailbox, $site_config, $user_config, $html=false)
<a href="#" script_name_parsed="'.$parsed_name.'" priority="'.$exp_name[sizeof($exp_name) - 2].'" imap_account="'.$mailbox['name'].'" script_name="'.$script_name.'" class="edit_'.$base_class.'">
<i class="bi bi-pencil-fill"></i>
</a>
<span class="form-switch">
<input script_name_parsed="'.$parsed_name.'" priority="'.$exp_name[sizeof($exp_name) - 2].'" imap_account="'.$mailbox['name'].'" script_name="'.$script_name.'" class="toggle_filter form-check-input" type="checkbox" role="switch" id="Check" name="script_state" checked>
</span>
<a href="#" script_name_parsed="'.$parsed_name.'" priority="'.$exp_name[sizeof($exp_name) - 2].'" imap_account="'.$mailbox['name'].'" script_name="'.$script_name.'" class="delete_'.$base_class.' ps-2">
<i class="bi bi-trash3 text-danger"></i>
</a>
Expand Down
44 changes: 44 additions & 0 deletions modules/sievefilters/modules.php
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,50 @@ 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) {
return;
}
$imap_account = Hm_IMAP_List::dump($form['imap_account']);

$factory = get_sieve_client_factory($this->config);

try {
$client = $factory->init($this->user_config, $imap_account);

$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]);
}
$script=$client->getScript($script);
$lines = explode("\n", $script);
}
}
$scripts = $client->listScripts();
$main_script = generate_main_script($scripts);

save_main_script($client, $main_script, $scripts);
$client->activateScript('main_script');
$client->close();

$state_msg = $form['script_state'] ? 'enabled': 'disabled';
Hm_Msgs::add("Script $state_msg");
} catch (Exception $e) {
Hm_Msgs::add("ERRSieve: {$e->getMessage()}");
}
}
}

/**
* @subpackage sievefilters/handler
Expand Down
11 changes: 11 additions & 0 deletions modules/sievefilters/setup.php
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,15 @@
add_handler('ajax_sieve_delete_filter', 'sieve_delete_filter', true);
add_output('ajax_sieve_delete_filter', 'sieve_delete_output', true);

/**
* toggle fliter
*/
setup_base_ajax_page('ajax_sieve_toggle_script_state', 'core');
add_handler('ajax_sieve_toggle_script_state', 'load_imap_servers_from_config', true, 'imap', 'load_user_data', 'after');
add_handler('ajax_sieve_toggle_script_state', 'settings_load_imap', true);
add_handler('ajax_sieve_toggle_script_state', 'sieve_toggle_script_state', true);


/* save script */
setup_base_ajax_page('ajax_sieve_save_script', 'core');
add_handler('ajax_sieve_save_script', 'settings_load_imap', true);
Expand Down Expand Up @@ -110,6 +119,7 @@
'ajax_sieve_save_filter',
'ajax_sieve_edit_filter',
'ajax_sieve_delete_filter',
'ajax_sieve_toggle_script_state',
'ajax_sieve_block_unblock',
'ajax_sieve_unblock_sender',
'ajax_sieve_get_mailboxes',
Expand All @@ -130,6 +140,7 @@
'allowed_get' => array(),
'allowed_post' => array(
'imap_account' => FILTER_DEFAULT,
'script_state' => FILTER_DEFAULT,
'sieve_script_name' => FILTER_DEFAULT,
'sieve_script_priority' => FILTER_VALIDATE_INT,
'sieve_filter_name' => FILTER_DEFAULT,
Expand Down
17 changes: 16 additions & 1 deletion modules/sievefilters/site.js
Original file line number Diff line number Diff line change
Expand Up @@ -849,7 +849,22 @@ $(function () {
);
});


/**
* Toggle Filter
*/
$('.toggle_filter').on('change', function () {
Hm_Ajax.request(
[ {'name': 'hm_ajax_hook', 'value': 'ajax_sieve_toggle_script_state'},
{'name': 'imap_account', 'value': $(this).attr('imap_account')},
{'name': 'script_state', 'value': $(this).prop('checked')},
{'name': 'sieve_script_name', 'value': $(this).attr('script_name')}],
function(res) {
if (res.router_user_msgs[0].startsWith('ERR')) {
$(this).prop('checked', !$(this).prop('checked'));
}
}
);
});
/**
* Delete script event
*/
Expand Down

0 comments on commit a8bd54f

Please sign in to comment.