function request_action() { $this->add_texts('localization'); $rcmail = rcmail::get_instance(); $storage = $rcmail->get_storage(); foreach (rcmail::get_uids() as $mbox => $uids) { $storage->unset_flag($uids, 'NONJUNK', $mbox); $storage->set_flag($uids, 'JUNK', $mbox); $message = new rcube_message($uids[0]); if ($junk_mbox = $rcmail->config->get('junk_mbox')) { $rcmail->output->command('move_messages', $junk_mbox); } if (isset($message->headers->others['received-spfbl'])) { $received_spfbl = $message->headers->others['received-spfbl']; $received_spfbl = explode(' ', $received_spfbl); $received_spfbl = $received_spfbl[1]; $fp = fsockopen($this->spfbl_server, $this->spfbl_port, $errno, $errstr, $this->spfbl_timeout); if (!$fp) { echo "Erro: {$errstr} ({$errno})<br />\n"; } else { $out = "SPAM {$received_spfbl}\n"; fwrite($fp, $out); $return = ''; while (!feof($fp)) { $return .= fgets($fp, 128); } fclose($fp); $return = strtolower(trim($return)); if (substr($return, 0, 2) == 'ok') { $rcmail->output->command('display_message', $this->gettext('reportedasjunk'), 'confirmation'); } else { if ($return == 'error: decryption') { $rcmail->output->command('display_message', "Ticket SPFBL inválido.", 'error'); } else { if ($return == 'duplicate complain') { $rcmail->output->command('display_message', "Esta mensagem já foi reportada como spam", 'error'); } else { if ($return == '') { $rcmail->output->command('display_message', "Timeout no envio do report", 'error'); } else { $rcmail->output->command('display_message', "Erro: " . $return, 'error'); } } } } } } } $rcmail->output->send(); }
function request_action() { $this->add_texts('localization'); $rcmail = rcmail::get_instance(); $storage = $rcmail->get_storage(); foreach (rcmail::get_uids() as $mbox => $uids) { $storage->unset_flag($uids, 'NONJUNK', $mbox); $storage->set_flag($uids, 'JUNK', $mbox); } if ($junk_mbox = $rcmail->config->get('junk_mbox')) { $rcmail->output->command('move_messages', $junk_mbox); } $rcmail->output->command('display_message', $this->gettext('reportedasjunk'), 'confirmation'); $rcmail->output->send(); }
function mark_message() { $this->add_texts('localization'); $is_spam = rcube::get_instance()->action == 'plugin.markasjunk2.junk' ? true : false; $multi_folder = $_POST['_multifolder'] == 'true' ? true : false; $messageset = rcmail::get_uids(); $mbox_name = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST); $dest_mbox = $is_spam ? $this->spam_mbox : $this->ham_mbox; $result = $is_spam ? $this->_spam($messageset, $dest_mbox) : $this->_ham($messageset, $dest_mbox); if ($result) { if ($dest_mbox && ($mbox_name !== $dest_mbox || $multi_folder)) { $this->api->output->command('rcmail_markasjunk2_move', $dest_mbox, $this->_messageset_to_uids($messageset, $multi_folder)); } else { $this->api->output->command('command', 'list', $mbox_name); } $this->api->output->command('display_message', $is_spam ? $this->gettext('reportedasjunk') : $this->gettext('reportedasnotjunk'), 'confirmation'); } $this->api->output->send(); }
/** * Plugin action handler */ function managesieve_actions() { // handle fetching email headers for the new filter form if ($uid = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST)) { $uids = rcmail::get_uids(); $mailbox = key($uids); $message = new rcube_message($uids[$mailbox][0], $mailbox); $headers = $this->parse_headers($message->headers); $this->rc->output->set_env('sieve_headers', $headers); $this->rc->output->command('managesieve_create', true); $this->rc->output->send(); } // handle other actions $engine_type = $this->rc->action == 'plugin.managesieve-vacation' ? 'vacation' : ''; $engine = $this->get_engine($engine_type); $this->init_ui(); $engine->actions(); }
/** * Handler for message download action */ public function download_messages() { $rcmail = rcmail::get_instance(); if ($rcmail->config->get('zipdownload_selection') && !empty($_POST['_uid'])) { $messageset = rcmail::get_uids(); if (sizeof($messageset)) { $this->_download_messages($messageset); } } }
function add_rule() { $_SESSION['plugin.sieverules.rule'] = true; $_SESSION['plugin.sieverules.messageset'] = serialize(rcmail::get_uids()); rcube::get_instance()->output->redirect(array('task' => 'settings', 'action' => 'plugin.sieverules')); }
/** * Plugin action to move the submitted list of messages to the archive subfolders * according to the user settings and their headers. */ function move_messages() { $this->add_texts('localization'); $rcmail = rcmail::get_instance(); $storage = $rcmail->get_storage(); $delimiter = $storage->get_hierarchy_delimiter(); $archive_folder = $rcmail->config->get('archive_mbox'); $archive_type = $rcmail->config->get('archive_type', ''); $current_mbox = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST); $result = array('reload' => false, 'update' => false, 'errors' => array()); $folders = array(); $uids = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST); $search_request = rcube_utils::get_input_value('_search', rcube_utils::INPUT_GPC); if ($uids == '*') { $index = $storage->index(null, rcmail_sort_column(), rcmail_sort_order()); $messageset = array($current_mbox => $index->get()); } else { $messageset = rcmail::get_uids(); } foreach ($messageset as $mbox => $uids) { $storage->set_folder($current_mbox = $mbox); foreach ($uids as $uid) { if (!$archive_folder || !($message = $rcmail->storage->get_message($uid))) { continue; } $subfolder = null; switch ($archive_type) { case 'year': $subfolder = $rcmail->format_date($message->timestamp, 'Y'); break; case 'month': $subfolder = $rcmail->format_date($message->timestamp, 'Y') . $delimiter . $rcmail->format_date($message->timestamp, 'm'); break; case 'folder': $subfolder = $current_mbox; break; case 'sender': $from = $message->get('from'); if (preg_match('/[\\b<](.+@.+)[\\b>]/i', $from, $m)) { $subfolder = $m[1]; } else { $subfolder = $this->gettext('unkownsender'); } // replace reserved characters in folder name $repl = $delimiter == '-' ? '_' : '-'; $replacements[$delimiter] = $repl; $replacements['.'] = $repl; // some IMAP server do not allow . characters $subfolder = strtr($subfolder, $replacements); break; default: $subfolder = ''; break; } // compose full folder path $folder = $archive_folder . ($subfolder ? $delimiter . $subfolder : ''); // create archive subfolder if it doesn't yet exist // we'll create all folders in the path if (!in_array($folder, $folders)) { if (empty($list)) { $list = $storage->list_folders('', $archive_folder . '*', 'mail', null, true); } $path = explode($delimiter, $folder); for ($i = 0; $i < count($path); $i++) { $_folder = implode($delimiter, array_slice($path, 0, $i + 1)); if (!in_array($_folder, $list)) { if ($storage->create_folder($_folder, true)) { $result['reload'] = true; $list[] = $_folder; } } } $folders[] = $folder; } // move message to target folder if ($storage->move_message(array($uid), $folder)) { $result['update'] = true; } else { $result['errors'][] = $uid; } } // end for } // send response if ($result['errors']) { $rcmail->output->show_message($this->gettext('archiveerror'), 'warning'); } if ($result['reload']) { $rcmail->output->show_message($this->gettext('archivedreload'), 'confirmation'); } else { if ($result['update']) { $rcmail->output->show_message($this->gettext('archived'), 'confirmation'); } } // refresh saved search set after moving some messages if ($search_request && $rcmail->storage->get_search_set()) { $_SESSION['search'] = $rcmail->storage->refresh_search(); } if ($_POST['_from'] == 'show' && !empty($result['update'])) { if ($next = rcube_utils::get_input_value('_next_uid', rcube_utils::INPUT_GPC)) { $rcmail->output->command('show_message', $next); } else { $rcmail->output->command('command', 'list'); } } else { $rcmail->output->command('plugin.move2archive_response', $result); } }
/** * Plugin action to move the submitted list of messages to the archive subfolders * according to the user settings and their headers. */ function move_messages() { $rcmail = rcmail::get_instance(); // only process ajax requests if (!$rcmail->output->ajax_call) { return; } $this->add_texts('localization'); $storage = $rcmail->get_storage(); $delimiter = $storage->get_hierarchy_delimiter(); $read_on_move = (bool) $rcmail->config->get('read_on_archive'); $archive_type = $rcmail->config->get('archive_type', ''); $archive_folder = $rcmail->config->get('archive_mbox'); $archive_prefix = $archive_folder . $delimiter; $current_mbox = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST); $search_request = rcube_utils::get_input_value('_search', rcube_utils::INPUT_GPC); $uids = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST); // count messages before changing anything if ($_POST['_from'] != 'show') { $threading = (bool) $storage->get_threading(); $old_count = $storage->count(null, $threading ? 'THREADS' : 'ALL'); $old_pages = ceil($old_count / $storage->get_pagesize()); } $count = 0; // this way response handler for 'move' action will be executed $rcmail->action = 'move'; $this->result = array('reload' => false, 'error' => false, 'sources' => array(), 'destinations' => array()); foreach (rcmail::get_uids(null, null, $multifolder) as $mbox => $uids) { if (!$archive_folder || strpos($mbox, $archive_prefix) === 0) { $count = count($uids); continue; } else { if (!$archive_type || $archive_type == 'folder') { $folder = $archive_folder; if ($archive_type == 'folder') { // compose full folder path $folder .= $delimiter . $mbox; // create archive subfolder if it doesn't yet exist $this->subfolder_worker($folder); } $count += $this->move_messages_worker($uids, $mbox, $folder, $read_on_move); } else { if ($uids == '*') { $index = $storage->index(null, rcmail_sort_column(), rcmail_sort_order()); $uids = $index->get(); } $messages = $storage->fetch_headers($mbox, $uids); $execute = array(); foreach ($messages as $message) { $subfolder = null; switch ($archive_type) { case 'year': $subfolder = $rcmail->format_date($message->timestamp, 'Y'); break; case 'month': $subfolder = $rcmail->format_date($message->timestamp, 'Y') . $delimiter . $rcmail->format_date($message->timestamp, 'm'); break; case 'sender': $from = $message->get('from'); preg_match('/[\\b<](.+@.+)[\\b>]/i', $from, $m); $subfolder = $m[1] ?: $this->gettext('unkownsender'); // replace reserved characters in folder name $repl = $delimiter == '-' ? '_' : '-'; $replacements[$delimiter] = $repl; $replacements['.'] = $repl; // some IMAP server do not allow . characters $subfolder = strtr($subfolder, $replacements); break; } // compose full folder path $folder = $archive_folder . ($subfolder ? $delimiter . $subfolder : ''); $execute[$folder][] = $message->uid; } foreach ($execute as $folder => $uids) { // create archive subfolder if it doesn't yet exist $this->subfolder_worker($folder); $count += $this->move_messages_worker($uids, $mbox, $folder, $read_on_move); } } } } if ($this->result['error']) { if ($_POST['_from'] != 'show') { $rcmail->output->command('list_mailbox'); } $rcmail->output->show_message($this->gettext('archiveerror'), 'warning'); $rcmail->output->send(); } if (!empty($_POST['_refresh'])) { // FIXME: send updated message rows instead of reloading the entire list $rcmail->output->command('refresh_list'); } else { $addrows = true; } // refresh saved search set after moving some messages if ($search_request && $rcmail->storage->get_search_set()) { $_SESSION['search'] = $rcmail->storage->refresh_search(); } if ($_POST['_from'] == 'show') { if ($next = rcube_utils::get_input_value('_next_uid', rcube_utils::INPUT_GPC)) { $rcmail->output->command('show_message', $next); } else { $rcmail->output->command('command', 'list'); } $rcmail->output->send(); } $mbox = $storage->get_folder(); $msg_count = $storage->count(null, $threading ? 'THREADS' : 'ALL'); $exists = $storage->count($mbox, 'EXISTS', true); $page_size = $storage->get_pagesize(); $page = $storage->get_page(); $pages = ceil($msg_count / $page_size); $nextpage_count = $old_count - $page_size * $page; $remaining = $msg_count - $page_size * ($page - 1); // jump back one page (user removed the whole last page) if ($page > 1 && $remaining == 0) { $page -= 1; $storage->set_page($page); $_SESSION['page'] = $page; $jump_back = true; } // update message count display $rcmail->output->set_env('messagecount', $msg_count); $rcmail->output->set_env('current_page', $page); $rcmail->output->set_env('pagecount', $pages); $rcmail->output->set_env('exists', $exists); // update mailboxlist $unseen_count = $msg_count ? $storage->count($mbox, 'UNSEEN') : 0; $old_unseen = rcmail_get_unseen_count($mbox); $quota_root = $multifolder ? $this->result['sources'][0] : 'INBOX'; if ($old_unseen != $unseen_count) { $rcmail->output->command('set_unread_count', $mbox, $unseen_count, $mbox == 'INBOX'); rcmail_set_unseen_count($mbox, $unseen_count); } $rcmail->output->command('set_quota', $rcmail->quota_content(null, $quota_root)); $rcmail->output->command('set_rowcount', rcmail_get_messagecount_text($msg_count), $mbox); if ($threading) { $count = rcube_utils::get_input_value('_count', rcube_utils::INPUT_POST); } // add new rows from next page (if any) if ($addrows && $count && $uids != '*' && ($jump_back || $nextpage_count > 0)) { $a_headers = $storage->list_messages($mbox, null, rcmail_sort_column(), rcmail_sort_order(), $jump_back ? null : $count); rcmail_js_message_list($a_headers, false); } if ($this->result['reload']) { $rcmail->output->show_message($this->gettext('archivedreload'), 'confirmation'); } else { $rcmail->output->show_message($this->gettext('archived'), 'confirmation'); if (!$read_on_move) { foreach ($this->result['destinations'] as $folder) { rcmail_send_unread_count($folder, true); } } } // send response $rcmail->output->send(); }