aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/contacts/img/person.pngbin0 -> 978 bytes
-rw-r--r--apps/contacts/img/person.svg175
-rw-r--r--apps/contacts/js/interface.js125
-rw-r--r--apps/contacts/js/jquery.inview.js118
-rw-r--r--apps/contacts/thumbnail.php150
5 files changed, 443 insertions, 125 deletions
diff --git a/apps/contacts/img/person.png b/apps/contacts/img/person.png
new file mode 100644
index 00000000000..17e79196540
--- /dev/null
+++ b/apps/contacts/img/person.png
Binary files differ
diff --git a/apps/contacts/img/person.svg b/apps/contacts/img/person.svg
new file mode 100644
index 00000000000..c4842c5916b
--- /dev/null
+++ b/apps/contacts/img/person.svg
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ version="1.0"
+ width="22"
+ height="22"
+ id="svg11300">
+ <defs
+ id="defs3">
+ <linearGradient
+ id="linearGradient3785">
+ <stop
+ id="stop3787"
+ style="stop-color:#b8b8b8;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop3789"
+ style="stop-color:#878787;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6954">
+ <stop
+ id="stop6960"
+ style="stop-color:#f5f5f5;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop6962"
+ style="stop-color:#d2d2d2;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3341">
+ <stop
+ id="stop3343"
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop3345"
+ style="stop-color:#ffffff;stop-opacity:0"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5060">
+ <stop
+ id="stop5062"
+ style="stop-color:#000000;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop5064"
+ style="stop-color:#000000;stop-opacity:0"
+ offset="1" />
+ </linearGradient>
+ <radialGradient
+ cx="24.999998"
+ cy="28.659998"
+ r="16"
+ fx="24.999998"
+ fy="28.659998"
+ id="radialGradient2871"
+ xlink:href="#linearGradient6954"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.67742373,0,0,0.19285627,-5.0162555,9.9977318)" />
+ <linearGradient
+ x1="30"
+ y1="25.084745"
+ x2="30"
+ y2="45"
+ id="linearGradient2873"
+ xlink:href="#linearGradient3785"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.51613236,0,0,0.51667107,-0.98397254,-0.49180897)" />
+ <linearGradient
+ x1="29.996229"
+ y1="21.440447"
+ x2="29.996229"
+ y2="43.531425"
+ id="linearGradient2875"
+ xlink:href="#linearGradient3341"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.51613236,0,0,0.51667107,-0.98397254,-0.49180897)" />
+ <radialGradient
+ cx="26.375898"
+ cy="12.31301"
+ r="8"
+ fx="26.375898"
+ fy="12.31301"
+ id="radialGradient2877"
+ xlink:href="#linearGradient6954"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.86552039,-0.07102871,0.06760608,0.84907396,-11.038912,-4.204803)" />
+ <linearGradient
+ x1="30"
+ y1="5"
+ x2="30"
+ y2="44.678879"
+ id="linearGradient2879"
+ xlink:href="#linearGradient3785"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.52770326,0,0,0.53573244,-1.3310981,-1.4043014)" />
+ <linearGradient
+ x1="22"
+ y1="39"
+ x2="17"
+ y2="37.4375"
+ id="linearGradient2881"
+ xlink:href="#linearGradient5060"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.74999995,0,0,0.43478262,-5.1276295,2.9173914)" />
+ <radialGradient
+ cx="30"
+ cy="33.1875"
+ r="4.6875"
+ fx="30"
+ fy="33.1875"
+ id="radialGradient2883"
+ xlink:href="#linearGradient5060"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.81491924,-3.8844793e-7,1.136461e-7,0.25340272,-9.9475804,6.5902095)" />
+ <linearGradient
+ x1="22"
+ y1="39"
+ x2="17"
+ y2="37.4375"
+ id="linearGradient2885"
+ xlink:href="#linearGradient5060"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.74999995,0,0,0.43478262,34.15,2.9173914)" />
+ <linearGradient
+ x1="30.00001"
+ y1="6.333993"
+ x2="30.00001"
+ y2="24.913183"
+ id="linearGradient2887"
+ xlink:href="#linearGradient3341"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.52770326,0,0,0.53573244,-1.3310981,-1.4043014)" />
+ </defs>
+ <g
+ transform="translate(-3,-1.0000003)"
+ id="g3758">
+ <path
+ d="m 12.177403,10.099947 c 0.23753,1.124653 0.370116,1.975373 0.177421,3.100026 -1.502303,1.247697 -5.3445034,1.80835 -5.3387447,3.100025 l -0.5161321,3.875036 c 0,1.284073 3.5817448,2.325019 8.0000528,2.325019 4.418307,0 8.000053,-1.040946 8.000053,-2.325019 l -0.516134,-3.875036 c -0.0061,-1.105498 -3.870993,-1.808346 -5.354873,-3.100025 -0.126751,-1.043848 -0.02586,-2.056174 0.193549,-3.100026 l -4.645192,0 z"
+ id="path3766"
+ style="fill:url(#radialGradient2871);fill-opacity:1;stroke:url(#linearGradient2873);stroke-width:0.99989432;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 13.21875,11.09375 c 0.08722,0.856711 0.3354,1.801007 -0.04818,2.615857 -0.642554,0.728465 -1.594602,1.093826 -2.46738,1.472715 C 9.3226847,15.510467 7.7137266,16 7.9252179,16.998373 7.7834779,18.061416 7.641739,19.124458 7.5,20.1875 c 0.3063993,0.160613 1.0809439,0.584904 1.625,0.6875 2.520767,0.666947 5.16785,0.725367 7.754874,0.519516 1.511711,-0.166212 3.088649,-0.352665 4.432626,-1.113266 0.335436,-0.07362 0.107122,-0.316411 0.114936,-0.654915 -0.132062,-1.021278 -0.264124,-2.042557 -0.396186,-3.063835 -0.587648,-0.5027 -1.391296,-0.753519 -2.106391,-1.064577 -1.082782,-0.447299 -2.251468,-0.853003 -3.086912,-1.707994 -0.391617,-0.689558 -0.161473,-1.538743 -0.107324,-2.28649 0.259681,-0.52835 -0.223399,-0.401903 -0.552932,-0.409689 -0.652981,0 -1.305961,0 -1.958941,0 z"
+ id="path3742"
+ style="fill:none;stroke:url(#linearGradient2875);stroke-width:0.99989432;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ d="m 14.5,1.5422262 c -2.185818,0 -3.957774,1.67899 -3.957774,3.7501272 0.01713,0.7664876 0.08155,1.6770462 0.527701,3.750127 0.263852,0.8035986 2.617283,2.9465296 2.638517,3.2143946 0.511701,0.267865 1.319258,0.267865 1.846964,0 0,-0.267865 2.110813,-2.410796 2.374664,-3.2143946 0.502046,-2.1545496 0.500773,-2.9465283 0.527702,-3.750127 0,-2.0711372 -1.771956,-3.7501272 -3.957774,-3.7501272 z"
+ id="path3764"
+ style="fill:url(#radialGradient2877);fill-opacity:1;stroke:url(#linearGradient2879);stroke-width:1.08445191;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="M 10.62237,21.7 C 8.8506083,20.838176 9.6954668,18.924844 9.8723695,17.7 9.1223696,18.569566 9.5000001,21 8,21 c 1,0.355621 1.6845389,0.59817 2.62237,0.7 z"
+ id="path3848"
+ style="opacity:0.5;fill:url(#linearGradient2881);fill-opacity:1;stroke:none" />
+ <path
+ d="M 12,13.35048 C 12.366027,14.309818 13.343418,15 14.5,15 c 1.156582,0 2.133972,-0.690182 2.5,-1.64952 l -5,0 z"
+ id="path3833"
+ style="opacity:0.3;fill:url(#radialGradient2883);fill-opacity:1;stroke:none" />
+ <path
+ d="m 18.4,21.7 c 1.771762,-0.861824 0.926903,-2.775156 0.750001,-4 C 19.9,18.569566 19.52237,21 21.02237,21 c -1,0.355621 -1.684539,0.59817 -2.62237,0.7 z"
+ id="path3720"
+ style="opacity:0.5;fill:url(#linearGradient2885);fill-opacity:1;stroke:none" />
+ <path
+ d="m 14.5,2.53125 c -1.666616,0 -2.9513,1.2303173 -2.96875,2.71875 1.39e-4,0.00624 -1.45e-4,0.024997 0,0.03125 0.01647,0.7081029 0.08609,1.5272795 0.5,3.46875 -0.0051,-0.03667 0.09671,0.2041393 0.3125,0.46875 0.232433,0.2850235 0.566603,0.6083312 0.875,0.9375 0.308397,0.329169 0.598847,0.668975 0.84375,0.9375 0.09435,0.103448 0.171956,0.186905 0.25,0.28125 0.166811,0.03524 0.415249,0.03212 0.625,0 0.06182,-0.08397 0.114751,-0.159431 0.1875,-0.25 0.218248,-0.271707 0.473896,-0.575993 0.75,-0.90625 0.276104,-0.3302573 0.569207,-0.6813941 0.78125,-0.96875 0.197562,-0.2677316 0.307312,-0.503144 0.3125,-0.5 0.460701,-1.9997828 0.473735,-2.6695721 0.5,-3.46875 0,-0.010182 1.19e-4,-0.021091 0,-0.03125 C 17.4513,3.7615673 16.166616,2.53125 14.5,2.53125 z"
+ id="path3730"
+ style="fill:none;stroke:url(#linearGradient2887);stroke-width:1.08445191;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+</svg>
diff --git a/apps/contacts/js/interface.js b/apps/contacts/js/interface.js
index 93fb13372b2..d4b08deb417 100644
--- a/apps/contacts/js/interface.js
+++ b/apps/contacts/js/interface.js
@@ -1,118 +1,3 @@
-Contacts={
- UI:{
- showCardDAVUrl:function(username, bookname){
- $('#carddav_url').val(totalurl + '/' + username + '/' + bookname);
- $('#carddav_url').show();
- $('#carddav_url_close').show();
- },
- Addressbooks:{
- overview:function(){
- if($('#chooseaddressbook_dialog').dialog('isOpen') == true){
- $('#chooseaddressbook_dialog').dialog('moveToTop');
- }else{
- $('#dialog_holder').load(OC.filePath('contacts', 'ajax', 'chooseaddressbook.php'), function(){
- $('#chooseaddressbook_dialog').dialog({
- width : 600,
- close : function(event, ui) {
- $(this).dialog('destroy').remove();
- }
- });
- });
- }
- },
- activation:function(checkbox, bookid)
- {
- $.post(OC.filePath('contacts', 'ajax', 'activation.php'), { bookid: bookid, active: checkbox.checked?1:0 },
- function(data) {
- /*
- * Arguments:
- * data.status
- * data.bookid
- * data.active
- */
- if (data.status == 'success'){
- checkbox.checked = data.active == 1;
- Contacts.UI.Contacts.update();
- }
- });
- },
- newAddressbook:function(object){
- var tr = $(document.createElement('tr'))
- .load(OC.filePath('contacts', 'ajax', 'addbook.php'));
- $(object).closest('tr').after(tr).hide();
- /* TODO: Shouldn't there be some kinda error checking here? */
- },
- editAddressbook:function(object, bookid){
- var tr = $(document.createElement('tr'))
- .load(OC.filePath('contacts', 'ajax', 'editaddressbook.php') + "?bookid="+bookid);
- $(object).closest('tr').after(tr).hide();
- },
- deleteAddressbook:function(bookid){
- var check = confirm("Do you really want to delete this address book?");
- if(check == false){
- return false;
- }else{
- $.post(OC.filePath('contacts', 'ajax', 'deletebook.php'), { id: bookid},
- function(data) {
- if (data.status == 'success'){
- $('#chooseaddressbook_dialog').dialog('destroy').remove();
- Contacts.UI.Contacts.update();
- Contacts.UI.Addressbooks.overview();
- } else {
- alert('Error: ' + data.message);
- }
- });
- }
- },
- submit:function(button, bookid){
- var displayname = $("#displayname_"+bookid).val();
- var active = $("#edit_active_"+bookid+":checked").length;
- var description = $("#description_"+bookid).val();
-
- var url;
- if (bookid == 'new'){
- url = OC.filePath('contacts', 'ajax', 'createaddressbook.php');
- }else{
- url = OC.filePath('contacts', 'ajax', 'updateaddressbook.php');
- }
- $.post(url, { id: bookid, name: displayname, active: active, description: description },
- function(data){
- if(data.status == 'success'){
- $(button).closest('tr').prev().html(data.page).show().next().remove();
- }
- });
- Contacts.UI.Contacts.update();
- },
- cancel:function(button, bookid){
- $(button).closest('tr').prev().show().next().remove();
- }
- },
- Contacts:{
- update:function(){
- $.getJSON('ajax/contacts.php',{},function(jsondata){
- if(jsondata.status == 'success'){
- $('#contacts').html(jsondata.data.page);
- }
- else{
- alert(jsondata.data.message);
- }
- });
- /*
- var contactlist = $('#contacts');
- var contacts = contactlist.children('li').get();
- //alert(contacts);
- contacts.sort(function(a, b) {
- var compA = $(a).text().toUpperCase();
- var compB = $(b).text().toUpperCase();
- return (compA < compB) ? -1 : (compA > compB) ? 1 : 0;
- })
- $.each(contacts, function(idx, itm) { contactlist.append(itm); });
- */
- }
- }
- }
-}
-
$(document).ready(function(){
/*-------------------------------------------------------------------------
* Event handlers
@@ -194,11 +79,6 @@ $(document).ready(function(){
return false;
});
- $('#chooseaddressbook').click(function(){
- Contacts.UI.Addressbooks.overview();
- return false;
- });
-
$('#contacts_newcontact').click(function(){
$.getJSON('ajax/showaddcard.php',{},function(jsondata){
if(jsondata.status == 'success'){
@@ -300,9 +180,4 @@ $(document).ready(function(){
// element has gone out of viewport
}
});
- /*
- $('#contacts li').each(function(index) {
- $(this).css('background','url(thumbnail.php?id='+$(this).data('id')+') no-repeat');
- });
- */
});
diff --git a/apps/contacts/js/jquery.inview.js b/apps/contacts/js/jquery.inview.js
new file mode 100644
index 00000000000..a38ab164977
--- /dev/null
+++ b/apps/contacts/js/jquery.inview.js
@@ -0,0 +1,118 @@
+/**
+ * author Christopher Blum
+ * - based on the idea of Remy Sharp, http://remysharp.com/2009/01/26/element-in-view-event-plugin/
+ * - forked from http://github.com/zuk/jquery.inview/
+ */
+(function ($) {
+ var inviewObjects = {}, viewportSize, viewportOffset,
+ d = document, w = window, documentElement = d.documentElement, expando = $.expando;
+
+ $.event.special.inview = {
+ add: function(data) {
+ inviewObjects[data.guid + "-" + this[expando]] = { data: data, $element: $(this) };
+ },
+
+ remove: function(data) {
+ try { delete inviewObjects[data.guid + "-" + this[expando]]; } catch(e) {}
+ }
+ };
+
+ function getViewportSize() {
+ var mode, domObject, size = { height: w.innerHeight, width: w.innerWidth };
+
+ // if this is correct then return it. iPad has compat Mode, so will
+ // go into check clientHeight/clientWidth (which has the wrong value).
+ if (!size.height) {
+ mode = d.compatMode;
+ if (mode || !$.support.boxModel) { // IE, Gecko
+ domObject = mode === 'CSS1Compat' ?
+ documentElement : // Standards
+ d.body; // Quirks
+ size = {
+ height: domObject.clientHeight,
+ width: domObject.clientWidth
+ };
+ }
+ }
+
+ return size;
+ }
+
+ function getViewportOffset() {
+ return {
+ top: w.pageYOffset || documentElement.scrollTop || d.body.scrollTop,
+ left: w.pageXOffset || documentElement.scrollLeft || d.body.scrollLeft
+ };
+ }
+
+ function checkInView() {
+ var $elements = $(), elementsLength, i = 0;
+
+ $.each(inviewObjects, function(i, inviewObject) {
+ var selector = inviewObject.data.selector,
+ $element = inviewObject.$element;
+ $elements = $elements.add(selector ? $element.find(selector) : $element);
+ });
+
+ elementsLength = $elements.length;
+ if (elementsLength) {
+ viewportSize = viewportSize || getViewportSize();
+ viewportOffset = viewportOffset || getViewportOffset();
+
+ for (; i<elementsLength; i++) {
+ // Ignore elements that are not in the DOM tree
+ if (!$.contains(documentElement, $elements[i])) {
+ continue;
+ }
+
+ var $element = $($elements[i]),
+ elementSize = { height: $element.height(), width: $element.width() },
+ elementOffset = $element.offset(),
+ inView = $element.data('inview'),
+ visiblePartX,
+ visiblePartY,
+ visiblePartsMerged;
+
+ // Don't ask me why because I haven't figured out yet:
+ // viewportOffset and viewportSize are sometimes suddenly null in Firefox 5.
+ // Even though it sounds weird:
+ // It seems that the execution of this function is interferred by the onresize/onscroll event
+ // where viewportOffset and viewportSize are unset
+ if (!viewportOffset || !viewportSize) {
+ return;
+ }
+
+ if (elementOffset.top + elementSize.height > viewportOffset.top &&
+ elementOffset.top < viewportOffset.top + viewportSize.height &&
+ elementOffset.left + elementSize.width > viewportOffset.left &&
+ elementOffset.left < viewportOffset.left + viewportSize.width) {
+ visiblePartX = (viewportOffset.left > elementOffset.left ?
+ 'right' : (viewportOffset.left + viewportSize.width) < (elementOffset.left + elementSize.width) ?
+ 'left' : 'both');
+ visiblePartY = (viewportOffset.top > elementOffset.top ?
+ 'bottom' : (viewportOffset.top + viewportSize.height) < (elementOffset.top + elementSize.height) ?
+ 'top' : 'both');
+ visiblePartsMerged = visiblePartX + "-" + visiblePartY;
+ if (!inView || inView !== visiblePartsMerged) {
+ $element.data('inview', visiblePartsMerged).trigger('inview', [true, visiblePartX, visiblePartY]);
+ }
+ } else if (inView) {
+ $element.data('inview', false).trigger('inview', [false]);
+ }
+ }
+ }
+ }
+
+ $(w).bind("scroll resize", function() {
+ viewportSize = viewportOffset = null;
+ });
+
+ // Use setInterval in order to also make sure this captures elements within
+ // "overflow:scroll" elements or elements that appeared in the dom tree due to
+ // dom manipulation and reflow
+ // old: $(window).scroll(checkInView);
+ //
+ // By the way, iOS (iPad, iPhone, ...) seems to not execute, or at least delays
+ // intervals while the user scrolls. Therefore the inview event might fire a bit late there
+ setInterval(checkInView, 250);
+})(jQuery); \ No newline at end of file
diff --git a/apps/contacts/thumbnail.php b/apps/contacts/thumbnail.php
new file mode 100644
index 00000000000..bf0a6e96a5d
--- /dev/null
+++ b/apps/contacts/thumbnail.php
@@ -0,0 +1,150 @@
+<?php
+/**
+ * ownCloud - Addressbook
+ *
+ * @author Jakob Sack
+ * @copyright 2011 Jakob Sack mail@jakobsack.de
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+// Init owncloud
+require_once('../../lib/base.php');
+OC_Util::checkLoggedIn();
+OC_Util::checkAppEnabled('contacts');
+
+if(!function_exists('imagecreatefromjpeg')) {
+ OC_Log::write('contacts','GD module not installed',OC_Log::ERROR);
+ header('Content-Type: image/png');
+ // TODO: Check if it works to read the file and echo the content.
+ return 'img/person.png';
+}
+
+function getStandardImage(){
+ $src_img = imagecreatefrompng('img/person.png');
+ header('Content-Type: image/png');
+ imagepng($src_img);
+ imagedestroy($src_img);
+}
+
+
+$id = $_GET['id'];
+
+$l10n = new OC_L10N('contacts');
+
+$card = OC_Contacts_VCard::find( $id );
+if( $card === false ){
+ echo $l10n->t('Contact could not be found.');
+ exit();
+}
+
+$addressbook = OC_Contacts_Addressbook::find( $card['addressbookid'] );
+if( $addressbook === false || $addressbook['userid'] != OC_USER::getUser()){
+ echo $l10n->t('This is not your contact.'); // This is a weird error, why would it come up? (Better feedback for users?)
+ exit();
+}
+
+$content = OC_VObject::parse($card['carddata']);
+
+// invalid vcard
+if( is_null($content)){
+ echo $l10n->t('This card is not RFC compatible.');
+ exit();
+}
+
+// define the width and height for the thumbnail
+// note that theese dimmensions are considered the maximum dimmension and are not fixed,
+// because we have to keep the image ratio intact or it will be deformed
+$thumbnail_width = 23;
+$thumbnail_height = 23;
+
+// Photo :-)
+foreach($content->children as $child){
+ if($child->name == 'PHOTO'){
+ foreach($child->parameters as $parameter){
+ if( $parameter->name == 'TYPE' ){
+ $mime = $parameter->value;
+ }
+ }
+ $data = base64_decode($child->value);
+ $src_img = imagecreatefromstring($data);
+ if ($src_img !== false) {
+ //gets the dimmensions of the image
+ $width_orig=imageSX($src_img);
+ $height_orig=imageSY($src_img);
+ $ratio_orig = $width_orig/$height_orig;
+
+ if ($thumbnail_width/$thumbnail_height > $ratio_orig) {
+ $new_height = $thumbnail_width/$ratio_orig;
+ $new_width = $thumbnail_width;
+ } else {
+ $new_width = $thumbnail_height*$ratio_orig;
+ $new_height = $thumbnail_height;
+ }
+
+ $x_mid = $new_width/2; //horizontal middle
+ $y_mid = $new_height/2; //vertical middle
+
+ $process = imagecreatetruecolor(round($new_width), round($new_height));
+ if ($process == false) {
+ getStandardImage();
+ //echo 'Error creating process image: '.$new_width.'x'.$new_height;
+ OC_Log::write('contacts','Error creating process image for '.$id.' '.$new_width.'x'.$new_height,OC_Log::ERROR);
+ imagedestroy($process);
+ imagedestroy($src_img);
+ exit();
+ }
+
+ imagecopyresampled($process, $src_img, 0, 0, 0, 0, $new_width, $new_height, $width_orig, $height_orig);
+ if ($process == false) {
+ getStandardImage();
+ //echo 'Error resampling process image: '.$new_width.'x'.$new_height;
+ OC_Log::write('contacts','Error resampling process image for '.$id.' '.$new_width.'x'.$new_height,OC_Log::ERROR);
+ imagedestroy($process);
+ imagedestroy($src_img);
+ exit();
+ }
+ $thumb = imagecreatetruecolor($thumbnail_width, $thumbnail_height);
+ if ($process == false) {
+ getStandardImage();
+ //echo 'Error creating thumb image: '.$thumbnail_width.'x'.$thumbnail_height;
+ OC_Log::write('contacts','Error creating thumb image for '.$id.' '.$thumbnail_width.'x'.$thumbnail_height,OC_Log::ERROR);
+ imagedestroy($process);
+ imagedestroy($src_img);
+ exit();
+ }
+ imagecopyresampled($thumb, $process, 0, 0, ($x_mid-($thumbnail_width/2)), ($y_mid-($thumbnail_height/2)), $thumbnail_width, $thumbnail_height, $thumbnail_width, $thumbnail_height);
+ if ($thumb !== false) {
+ header('Content-Type: image/png');
+ imagepng($thumb);
+ } else {
+ getStandardImage();
+ OC_Log::write('contacts','Error resampling thumb image for '.$id.' '.$thumbnail_width.'x'.$thumbnail_height,OC_Log::ERROR);
+ //echo 'An error occurred resampling thumb.';
+ }
+ imagedestroy($thumb);
+ imagedestroy($process);
+ imagedestroy($src_img);
+ }
+ else {
+ getStandardImage();
+ }
+ exit();
+ }
+}
+getStandardImage();
+
+// Not found :-(
+//echo $l10n->t('This card does not contain a photo.');