summaryrefslogtreecommitdiff
path: root/program/steps/addressbook/photo.inc
diff options
context:
space:
mode:
Diffstat (limited to 'program/steps/addressbook/photo.inc')
-rw-r--r--program/steps/addressbook/photo.inc91
1 files changed, 91 insertions, 0 deletions
diff --git a/program/steps/addressbook/photo.inc b/program/steps/addressbook/photo.inc
new file mode 100644
index 000000000..658027de4
--- /dev/null
+++ b/program/steps/addressbook/photo.inc
@@ -0,0 +1,91 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | program/steps/addressbook/photo.inc |
+ | |
+ | This file is part of the Roundcube Webmail client |
+ | Copyright (C) 2005-2013, The Roundcube Dev Team |
+ | |
+ | Licensed under the GNU General Public License version 3 or |
+ | any later version with exceptions for skins & plugins. |
+ | See the README file for a full license statement. |
+ | |
+ | PURPOSE: |
+ | Show contact photo |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com> |
+ | Author: Aleksander Machniak <alec@alec.pl> |
+ +-----------------------------------------------------------------------+
+*/
+
+// Get contact ID and source ID from request
+$cids = rcmail_get_cids();
+$source = key($cids);
+$cid = $cids ? array_shift($cids[$source]) : null;
+
+// read the referenced file
+if (($file_id = get_input_value('_photo', RCUBE_INPUT_GPC)) && ($tempfile = $_SESSION['contacts']['files'][$file_id])) {
+ $tempfile = $RCMAIL->plugins->exec_hook('attachment_display', $tempfile);
+ if ($tempfile['status']) {
+ if ($tempfile['data'])
+ $data = $tempfile['data'];
+ else if ($tempfile['path'])
+ $data = file_get_contents($tempfile['path']);
+ }
+}
+else {
+ // by email, search for contact first
+ if ($email = get_input_value('_email', RCUBE_INPUT_GPC)) {
+ foreach ($RCMAIL->get_address_sources() as $s) {
+ $abook = $RCMAIL->get_address_book($s['id']);
+ $result = $abook->search(array('email'), $email, 1, true, true, 'photo');
+ while ($result && ($record = $result->iterate())) {
+ if ($record['photo'])
+ break 2;
+ }
+ }
+ }
+
+ // by contact id
+ if (!$record && $cid) {
+ // Initialize addressbook source
+ $CONTACTS = rcmail_contact_source($source, true);
+ $SOURCE_ID = $source;
+ // read contact record
+ $record = $CONTACTS->get_record($cid, true);
+ }
+
+ if ($record['photo']) {
+ $data = is_array($record['photo']) ? $record['photo'][0] : $record['photo'];
+ if (!preg_match('![^a-z0-9/=+-]!i', $data))
+ $data = base64_decode($data, true);
+ }
+}
+
+// let plugins do fancy things with contact photos
+$plugin = $RCMAIL->plugins->exec_hook('contact_photo',
+ array('record' => $record, 'email' => $email, 'data' => $data));
+
+// redirect to url provided by a plugin
+if ($plugin['url']) {
+ $RCMAIL->output->redirect($plugin['url']);
+}
+else {
+ $data = $plugin['data'];
+}
+
+// deliver alt image
+if (!$data && ($alt_img = get_input_value('_alt', RCUBE_INPUT_GPC)) && is_file($alt_img)) {
+ $data = file_get_contents($alt_img);
+}
+
+// cache for one day if requested by email
+if (!$cid && $email) {
+ $RCMAIL->output->future_expire_header(86400);
+}
+
+header('Content-Type: ' . rc_image_content_type($data));
+echo $data ? $data : file_get_contents('program/resources/blank.gif');
+exit;