diff options
| author | till <till@208e9e7b-5314-0410-a742-e7e81cd9613c> | 2010-03-20 14:20:01 +0000 |
|---|---|---|
| committer | till <till@208e9e7b-5314-0410-a742-e7e81cd9613c> | 2010-03-20 14:20:01 +0000 |
| commit | 8660a74501de5ee206f6c14246f7112e6ea91ad3 (patch) | |
| tree | 1e67a0bcc9ebe254d6f0c21eb07728216f5b3149 /plugins/vcard_attachments | |
| parent | 85de1261ba60e3df477a49a15de8471f79d2946a (diff) | |
moved plugins
git-svn-id: https://svn.roundcube.net/trunk@3394 208e9e7b-5314-0410-a742-e7e81cd9613c
Diffstat (limited to 'plugins/vcard_attachments')
| -rw-r--r-- | plugins/vcard_attachments/localization/de_CH.inc | 7 | ||||
| -rw-r--r-- | plugins/vcard_attachments/localization/de_DE.inc | 7 | ||||
| -rw-r--r-- | plugins/vcard_attachments/localization/en_US.inc | 7 | ||||
| -rw-r--r-- | plugins/vcard_attachments/localization/ru_RU.inc | 7 | ||||
| -rw-r--r-- | plugins/vcard_attachments/vcard_add_contact.png | bin | 0 -> 1361 bytes | |||
| -rw-r--r-- | plugins/vcard_attachments/vcard_attachments.php | 119 | ||||
| -rw-r--r-- | plugins/vcard_attachments/vcardattach.js | 10 |
7 files changed, 157 insertions, 0 deletions
diff --git a/plugins/vcard_attachments/localization/de_CH.inc b/plugins/vcard_attachments/localization/de_CH.inc new file mode 100644 index 000000000..dcc8ce713 --- /dev/null +++ b/plugins/vcard_attachments/localization/de_CH.inc @@ -0,0 +1,7 @@ +<?php + +$labels = array(); +$labels['addvardmsg'] = 'Kontakt im Adressbuch speichern'; +$labels['vcardsavefailed'] = 'Der Kontakt konnte nicht gespeichert werden'; + +?>
\ No newline at end of file diff --git a/plugins/vcard_attachments/localization/de_DE.inc b/plugins/vcard_attachments/localization/de_DE.inc new file mode 100644 index 000000000..dcc8ce713 --- /dev/null +++ b/plugins/vcard_attachments/localization/de_DE.inc @@ -0,0 +1,7 @@ +<?php + +$labels = array(); +$labels['addvardmsg'] = 'Kontakt im Adressbuch speichern'; +$labels['vcardsavefailed'] = 'Der Kontakt konnte nicht gespeichert werden'; + +?>
\ No newline at end of file diff --git a/plugins/vcard_attachments/localization/en_US.inc b/plugins/vcard_attachments/localization/en_US.inc new file mode 100644 index 000000000..59a36e9bd --- /dev/null +++ b/plugins/vcard_attachments/localization/en_US.inc @@ -0,0 +1,7 @@ +<?php + +$labels = array(); +$labels['addvardmsg'] = 'Add vCard to addressbook'; +$labels['vcardsavefailed'] = 'Unable to save vCard'; + +?>
\ No newline at end of file diff --git a/plugins/vcard_attachments/localization/ru_RU.inc b/plugins/vcard_attachments/localization/ru_RU.inc new file mode 100644 index 000000000..e127b58d6 --- /dev/null +++ b/plugins/vcard_attachments/localization/ru_RU.inc @@ -0,0 +1,7 @@ +<?php + +$labels = array(); +$labels['addvardmsg'] = 'Добавить в контакты'; +$labels['vcardsavefailed'] = 'Не удалось сохранить vCard'; + +?>
\ No newline at end of file diff --git a/plugins/vcard_attachments/vcard_add_contact.png b/plugins/vcard_attachments/vcard_add_contact.png Binary files differnew file mode 100644 index 000000000..478c1f3f2 --- /dev/null +++ b/plugins/vcard_attachments/vcard_add_contact.png diff --git a/plugins/vcard_attachments/vcard_attachments.php b/plugins/vcard_attachments/vcard_attachments.php new file mode 100644 index 000000000..d23cf37b1 --- /dev/null +++ b/plugins/vcard_attachments/vcard_attachments.php @@ -0,0 +1,119 @@ +<?php + +/** + * Detect VCard attachments and show a button to add them to address book + * + * @version 1.0 + * @author Thomas Bruederli + */ +class vcard_attachments extends rcube_plugin +{ + public $task = 'mail'; + + private $message; + private $vcard_part; + + function init() + { + $rcmail = rcmail::get_instance(); + if ($rcmail->action == 'show' || $rcmail->action == 'preview') { + $this->add_hook('message_load', array($this, 'message_load')); + $this->add_hook('template_object_messagebody', array($this, 'html_output')); + } + + $this->register_action('plugin.savevcard', array($this, 'save_vcard')); + } + + /** + * Check message attachments for vcards + */ + function message_load($p) + { + $this->message = $p['object']; + + foreach ((array)$this->message->attachments as $attachment) { + if (in_array($attachment->mimetype, array('text/vcard', 'text/x-vcard'))) + $this->vcard_part = $attachment->mime_id; + } + + if ($this->vcard_part) + $this->add_texts('localization'); + } + + /** + * This callback function adds a box below the message content + * if there is a vcard attachment available + */ + function html_output($p) + { + if ($this->vcard_part) { + $vcard = new rcube_vcard($this->message->get_part_content($this->vcard_part)); + + // successfully parsed vcard + if ($vcard->displayname) { + $display = $vcard->displayname; + if ($vcard->email[0]) + $display .= ' <'.$vcard->email[0].'>'; + + // add box below messsage body + $p['content'] .= html::p(array('style' => "margin:1em; padding:0.5em; border:1px solid #999; border-radius:4px; -moz-border-radius:4px; -webkit-border-radius:4px; width: auto;"), + html::a(array( + 'href' => "#", + 'onclick' => "return plugin_vcard_save_contact('".JQ($this->vcard_part)."')", + 'title' => $this->gettext('addvardmsg')), + html::img(array('src' => $this->url('vcard_add_contact.png'), 'align' => "middle"))) + . ' ' . html::span(null, Q($display))); + + $this->include_script('vcardattach.js'); + } + } + + return $p; + } + + /** + * Handler for request action + */ + function save_vcard() + { + $this->add_texts('localization', true); + + $uid = get_input_value('_uid', RCUBE_INPUT_POST); + $mbox = get_input_value('_mbox', RCUBE_INPUT_POST); + $mime_id = get_input_value('_part', RCUBE_INPUT_POST); + + $rcmail = rcmail::get_instance(); + $part = $uid && $mime_id ? $rcmail->imap->get_message_part($uid, $mime_id) : null; + + $error_msg = $this->gettext('vcardsavefailed'); + + if ($part && ($vcard = new rcube_vcard($part)) && $vcard->displayname && $vcard->email) { + $contacts = $rcmail->get_address_book(null, true); + + // check for existing contacts + $existing = $contacts->search('email', $vcard->email[0], true, false); + if ($done = $existing->count) { + $rcmail->output->command('display_message', $this->gettext('contactexists'), 'warning'); + } + else { + // add contact + $success = $contacts->insert(array( + 'name' => $vcard->displayname, + 'firstname' => $vcard->firstname, + 'surname' => $vcard->surname, + 'email' => $vcard->email[0], + 'vcard' => $vcard->export(), + )); + + if ($success) + $rcmail->output->command('display_message', $this->gettext('addedsuccessfully'), 'confirmation'); + else + $rcmail->output->command('display_message', $error_msg, 'error'); + } + } + else + $rcmail->output->command('display_message', $error_msg, 'error'); + + $rcmail->output->send(); + } +} diff --git a/plugins/vcard_attachments/vcardattach.js b/plugins/vcard_attachments/vcardattach.js new file mode 100644 index 000000000..e03e5084d --- /dev/null +++ b/plugins/vcard_attachments/vcardattach.js @@ -0,0 +1,10 @@ + +function plugin_vcard_save_contact(mime_id) +{ + rcmail.set_busy(true, 'loading'); + rcmail.http_post('plugin.savevcard', '_uid='+rcmail.env.uid+'&_mbox='+urlencode(rcmail.env.mailbox)+'&_part='+urlencode(mime_id), true); + + return false; +} + + |
