diff options
author | Hugues Hiegel <root@paranoid> | 2014-08-05 16:46:22 +0200 |
---|---|---|
committer | Hugues Hiegel <root@paranoid> | 2014-08-05 16:46:22 +0200 |
commit | 59478e06c25303a790a0840ab2ac30662c4ef781 (patch) | |
tree | 8d5e964a8f94adaef41efebb0597629f11495c42 /plugins/listcommands/listcommands.php | |
parent | 7c494b677f9e470ee0d32e62cfa8dc709f39e748 (diff) |
c'est la merde..working
Diffstat (limited to 'plugins/listcommands/listcommands.php')
-rw-r--r-- | plugins/listcommands/listcommands.php | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/plugins/listcommands/listcommands.php b/plugins/listcommands/listcommands.php new file mode 100644 index 000000000..7a7948fd6 --- /dev/null +++ b/plugins/listcommands/listcommands.php @@ -0,0 +1,106 @@ +<?php + +/** + * This plugin parses email headers looking for mailinglist specific + * information. If headers are found, it uses them to create an additional + * header in the header box to easily perform certain mailinglist commands + * like subscribing, unsubscribing, asking for help, and sending a new mail. + * + * @version 2.1 + * @author Cor Bosman + * + */ + +class listcommands extends rcube_plugin +{ + public $task = 'mail'; + + function init() + { + $rcmail = rcmail::get_instance(); + if (!$rcmail->action || in_array($rcmail->action, array('list', 'show', 'preview'))) { + $this->add_hook('storage_init', array($this, 'storage_init')); + $this->add_hook('message_headers_output', array($this, 'listcommands_output')); + } + } + + function storage_init($p) + { + $rcmail = rcmail::get_instance(); + $mailinglist_headers = array_keys($this->get_list_headers()); + $p['fetch_headers'] .= trim($p['fetch_headers']. ' ' . strtoupper(join(' ', $mailinglist_headers))); + return($p); + } + + function listcommands_output($p) + { + $list_output = ""; + $rcmail = rcmail::get_instance(); + $this->add_texts('localization/', false); + $mailinglist_headers = $this->get_list_headers(); + + foreach ($mailinglist_headers as $header => $title) { + $key = strtolower($header); + + if($value = $p['headers']->others[$key]) { + if(is_string($value)){ + $list_output .= $this->create_link($key, $value, $title) . ' '; + } + else{ + $list_output .= $this->create_link($key, $value[0], $title) . ' '; + } + } + } + if($list_output != "") + $p['output']['Mailinglist'] = array( + 'title' => $this->gettext('listcommands_mailinglist'), 'value' => $list_output); + return($p); + } + + private function get_list_headers() + { + $mailinglist_headers = array( + 'List-Help' => $this->gettext('listcommands_help'), + 'List-Subscribe' => $this->gettext('listcommands_subscribe'), + 'List-Unsubscribe' => $this->gettext('listcommands_unsubscribe'), + 'List-Post' => $this->gettext('listcommands_post'), + 'List-Owner' => $this->gettext('listcommands_admin'), + 'List-Archive' => $this->gettext('listcommands_archive') + ); + return($mailinglist_headers); + } + + private function create_link($key, $value, $title) + { + $proto = ""; + + // some headers have multiple targets + $targets = explode(',', $value); + + // only use 1 of the targets + $target = strip_quotes($targets[0]); + + // first strip angle brackets + $link = trim($target, "<>"); + + if(preg_match('/^(mailto|http|https)(:\/\/|:)(.*)$/', $link, $matches)) { + $proto = $matches[1]; + $target = $matches[3]; + } + + // use RC for emailing instead of relying on the mailto header + if($proto == "mailto") { + $onclick = "return rcmail.command('compose','$target',this)"; + } else { + $onclick = ""; + } + + $a = html::a(array('href' => $link , + 'target' => '_blank', + 'onclick' => $onclick + ), $title); + + return($a); + } +} +?> |