From 092c41f375d70c9936bf010806dce1b34c05f43e Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Sat, 17 Dec 2011 20:38:52 +0100 Subject: [PATCH] Added missing files and tried to revert the wrong commit of app/contacts/js/interfaces.js --- apps/contacts/img/person.png | Bin 0 -> 978 bytes apps/contacts/img/person.svg | 175 ++++++++++++++++++++++++++++++ apps/contacts/js/interface.js | 125 --------------------- apps/contacts/js/jquery.inview.js | 118 ++++++++++++++++++++ apps/contacts/thumbnail.php | 150 +++++++++++++++++++++++++ 5 files changed, 443 insertions(+), 125 deletions(-) create mode 100644 apps/contacts/img/person.png create mode 100644 apps/contacts/img/person.svg create mode 100644 apps/contacts/js/jquery.inview.js create mode 100644 apps/contacts/thumbnail.php diff --git a/apps/contacts/img/person.png b/apps/contacts/img/person.png new file mode 100644 index 0000000000000000000000000000000000000000..17e791965402a1b9335d662b8909a8d392870416 GIT binary patch literal 978 zcmV;@11f z>ysiVXfH*oNTJCUiFBe(drhk73P%(vLc>+5PZUT{oPpR;i~#{&+v}a3AMd4!5#+!p zd8F5j_I>uN*?H?QGsdl*ot;1k@q-ZJYi3?_9OrK$dP_t;NX z^YimxluD%_m&;)=7@*l~Chd0nuYSM(tX8YV_w|Z#X|vhv>teB3URhZQJkLX~*8>1l ztJR=TD3r6=?CXbm$HL6~qFgTf#u#X=K|~l1hv@hFD3wY+GryP!Hpa|)o`)n!V66oa zftewtgzx*%TF*`d12~JK2&2Te@xfpK0A~}yMD(H8>%m$Jtu?gPFvi@#MD$@ISShvN z?RI&T*cbz242TF}7_!!SeYwhn7!Rzbme=_qg zdwY9ON`Z)At;NB?0j#xutgWrRn+OJgsi~>AzVGY9!$VwOU*qKD1X4=M<#Iod>-!`u zgotNmW@ILlL95k*loE4ub212m?zp}OM|yX6cS>vhEr9PTl}e^iD0o*_SD2oj#_8#) zIzB#*nE6#4$8T!2n))PMuh(aTAow1@%f-b-cWG%UU}iL%O@v{Hd_Ip-sRX4I8jXg$ zxVVUj=*KV&-)wAb$a~@K?d{Kn5C_$2HMg*^;CY@0W`?!)ri?ML)*_Wk!Sg)Cag0Wz z5ucx*heY(OR;zUYAay&fQtIXM^73cJVlg!w4&gWs9LE6wFf)kgrj$~!*1~mNR4SEB z5Co}4qwx)ZS0BOF+NVJfr273nj4>a>2%s-=BFd;4y?6)JQ~;0kLLEe z??Y>?;W!Rl*M-*l@o4|fbyG?`a$OfhgeZ#cqooujJTM?zTU*ZoJa=8U?7Hp~$8o+S zq6KU1l + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/contacts/js/interface.js b/apps/contacts/js/interface.js index 93fb13372b..d4b08deb41 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 0000000000..a38ab16497 --- /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 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 0000000000..bf0a6e96a5 --- /dev/null +++ b/apps/contacts/thumbnail.php @@ -0,0 +1,150 @@ +. + * + */ + +// 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.');