diff options
author | thomascube <thomas@roundcube.net> | 2010-09-29 10:00:48 +0000 |
---|---|---|
committer | thomascube <thomas@roundcube.net> | 2010-09-29 10:00:48 +0000 |
commit | 2baa16ae6d8355e0dfb38e400fd4115057b0680d (patch) | |
tree | 0e5790c0ff37980bfcdca26b1bfe4c392cf211b6 /plugins/archive/archive.php | |
parent | 717815c9a88222fc19989d6545134bb4d1df62c9 (diff) |
Copy plugins into 0.4.1 release branch
Diffstat (limited to 'plugins/archive/archive.php')
-rw-r--r-- | plugins/archive/archive.php | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/plugins/archive/archive.php b/plugins/archive/archive.php new file mode 100644 index 000000000..bd18aa4ed --- /dev/null +++ b/plugins/archive/archive.php @@ -0,0 +1,144 @@ +<?php + +/** + * Archive + * + * Plugin that adds a new button to the mailbox toolbar + * to move messages to a (user selectable) archive folder. + * + * @version @package_version@ + * @author Andre Rodier, Thomas Bruederli + */ +class archive extends rcube_plugin +{ + public $task = 'mail|settings'; + + function init() + { + $rcmail = rcmail::get_instance(); + + $this->register_action('plugin.archive', array($this, 'request_action')); + + // There is no "Archived flags" + // $GLOBALS['IMAP_FLAGS']['ARCHIVED'] = 'Archive'; + if ($rcmail->task == 'mail' && ($rcmail->action == '' || $rcmail->action == 'show') + && ($archive_folder = $rcmail->config->get('archive_mbox'))) { + $skin_path = $this->local_skin_path(); + + $this->include_script('archive.js'); + $this->add_texts('localization', true); + $this->add_button( + array( + 'command' => 'plugin.archive', + 'imagepas' => $skin_path.'/archive_pas.png', + 'imageact' => $skin_path.'/archive_act.png', + 'title' => 'buttontitle', + 'domain' => $this->ID, + ), + 'toolbar'); + + // register hook to localize the archive folder + $this->add_hook('render_mailboxlist', array($this, 'render_mailboxlist')); + + // set env variable for client + $rcmail->output->set_env('archive_folder', $archive_folder); + $rcmail->output->set_env('archive_folder_icon', $this->url($skin_path.'/foldericon.png')); + + // add archive folder to the list of default mailboxes + if (($default_folders = $rcmail->config->get('default_imap_folders')) && !in_array($archive_folder, $default_folders)) { + $default_folders[] = $archive_folder; + $rcmail->config->set('default_imap_folders', $default_folders); + } + } + else if ($rcmail->task == 'settings') { + $dont_override = $rcmail->config->get('dont_override', array()); + if (!in_array('archive_mbox', $dont_override)) { + $this->add_hook('preferences_list', array($this, 'prefs_table')); + $this->add_hook('preferences_save', array($this, 'save_prefs')); + } + } + } + + function render_mailboxlist($p) + { + $rcmail = rcmail::get_instance(); + $archive_folder = $rcmail->config->get('archive_mbox'); + + // set localized name for the configured archive folder + if ($archive_folder) { + if (isset($p['list'][$archive_folder])) + $p['list'][$archive_folder]['name'] = $this->gettext('archivefolder'); + else // search in subfolders + $this->_mod_folder_name($p['list'], $archive_folder, $this->gettext('archivefolder')); + } + + return $p; + } + + function _mod_folder_name(&$list, $folder, $new_name) + { + foreach ($list as $idx => $item) { + if ($item['id'] == $folder) { + $list[$idx]['name'] = $new_name; + return true; + } else if (!empty($item['folders'])) + if ($this->_mod_folder_name($list[$idx]['folders'], $folder, $new_name)) + return true; + } + return false; + } + + function request_action() + { + $this->add_texts('localization'); + + $uids = get_input_value('_uid', RCUBE_INPUT_POST); + $mbox = get_input_value('_mbox', RCUBE_INPUT_POST); + + $rcmail = rcmail::get_instance(); + + // There is no "Archive flags", but I left this line in case it may be useful + // $rcmail->imap->set_flag($uids, 'ARCHIVE'); + + if (($archive_mbox = $rcmail->config->get('archive_mbox')) && $mbox != $archive_mbox) { + $rcmail->output->command('move_messages', $archive_mbox); + $rcmail->output->command('display_message', $this->gettext('archived'), 'confirmation'); + } + + $rcmail->output->send(); + } + + function prefs_table($args) + { + global $CURR_SECTION; + + if ($args['section'] == 'folders') { + $this->add_texts('localization'); + + $rcmail = rcmail::get_instance(); + + // load folders list when needed + if ($CURR_SECTION) + $select = rcmail_mailbox_select(array('noselection' => '---', 'realnames' => true, + 'maxlength' => 30, 'exceptions' => array('INBOX'))); + else + $select = new html_select(); + + $args['blocks']['main']['options']['archive_mbox'] = array( + 'title' => $this->gettext('archivefolder'), + 'content' => $select->show($rcmail->config->get('archive_mbox'), array('name' => "_archive_mbox")) + ); + } + + return $args; + } + + function save_prefs($args) + { + if ($args['section'] == 'folders') { + $args['prefs']['archive_mbox'] = get_input_value('_archive_mbox', RCUBE_INPUT_POST); + return $args; + } + } + +} |