]> source.dussan.org Git - nextcloud-server.git/commitdiff
Don't import cards that can't be parsed by Sabre, but log it instead.
authorThomas Tanghus <thomas@tanghus.net>
Wed, 8 Feb 2012 06:56:43 +0000 (07:56 +0100)
committerThomas Tanghus <thomas@tanghus.net>
Wed, 8 Feb 2012 06:59:39 +0000 (07:59 +0100)
Fix missing 'N' or 'FN' fields on import.

apps/contacts/ajax/contactdetails.php
apps/contacts/js/contacts.js
apps/contacts/lib/app.php
apps/contacts/lib/vcard.php

index 6ba2c7384d0b2812888a7c946be90f4e15c276b7..6a989c795e1e3b40e77a1f452750a5432c98f442 100644 (file)
@@ -36,8 +36,11 @@ OC_JSON::checkLoggedIn();
 OC_JSON::checkAppEnabled('contacts');
 $l=new OC_L10N('contacts');
 
-$id = $_GET['id'];
+$id = isset($_GET['id'])?$_GET['id']:null;
 $vcard = OC_Contacts_App::getContactVCard( $id );
+if(is_null($id)) {
+       bailOut($l->t('Missing ID'));
+}
 if(is_null($vcard)) {
        bailOut($l->t('Error parsing VCard for ID: "'.$id.'"'));
 }
index 9b1f21feab24d05cbb9341b01a278637ffa67297..26206e97c069a7431adaf8a2af4aab7e3c0310e3 100644 (file)
@@ -236,6 +236,7 @@ Contacts={
                        delete:function() {
                                $('#contacts_deletecard').tipsy('hide');
                                $.getJSON('ajax/deletecard.php',{'id':this.id},function(jsondata){
+                                       console.log('Card.delete: ' + this.id);
                                        if(jsondata.status == 'success'){
                                                $('#leftcontent [data-id="'+jsondata.data.id+'"]').remove();
                                                $('#rightcontent').data('id','');
@@ -1055,6 +1056,7 @@ $(document).ready(function(){
         */
        $('#leftcontent li').live('click',function(){
                var id = $(this).data('id');
+               console.log('Contact ' + id + ' clicked.');
                var oldid = $('#rightcontent').data('id');
                if(oldid != 0){
                        $('#leftcontent li[data-id="'+oldid+'"]').removeClass('active');
@@ -1094,32 +1096,32 @@ $(document).ready(function(){
        /**
         * Add and insert a new contact into the list. NOTE: Deprecated
         */
-       $('#contacts_addcardform input[type="submit"]').live('click',function(){
-               $.post('ajax/addcontact.php',$('#contact_identity').serialize(),function(jsondata){
-                       if(jsondata.status == 'success'){
-                               $('#rightcontent').data('id',jsondata.data.id);
-                               $('#rightcontent').html(jsondata.data.page);
-                               $('#leftcontent .active').removeClass('active');
-                               var item = '<li data-id="'+jsondata.data.id+'" class="active"><a href="index.php?id='+jsondata.data.id+'"  style="background: url(thumbnail.php?id='+jsondata.data.id+') no-repeat scroll 0% 0% transparent;">'+jsondata.data.name+'</a></li>';
-                               var added = false;
-                               $('#leftcontent ul li').each(function(){
-                                       if ($(this).text().toLowerCase() > jsondata.data.name.toLowerCase()) {
-                                               $(this).before(item).fadeIn('fast');
-                                               added = true;
-                                               return false;
-                                       }
-                               });
-                               if(!added) {
-                                       $('#leftcontent ul').append(item);
-                               }
-                       }
-                       else{
-                               Contacts.UI.messageBox(t('contacts', 'Error'), jsondata.data.message);
-                               //alert(jsondata.data.message);
-                       }
-               }, 'json');
-               return false;
-       });
+//     $('#contacts_addcardform input[type="submit"]').live('click',function(){
+//             $.post('ajax/addcontact.php',$('#contact_identity').serialize(),function(jsondata){
+//                     if(jsondata.status == 'success'){
+//                             $('#rightcontent').data('id',jsondata.data.id);
+//                             $('#rightcontent').html(jsondata.data.page);
+//                             $('#leftcontent .active').removeClass('active');
+//                             var item = '<li data-id="'+jsondata.data.id+'" class="active"><a href="index.php?id='+jsondata.data.id+'"  style="background: url(thumbnail.php?id='+jsondata.data.id+') no-repeat scroll 0% 0% transparent;">'+jsondata.data.name+'</a></li>';
+//                             var added = false;
+//                             $('#leftcontent ul li').each(function(){
+//                                     if ($(this).text().toLowerCase() > jsondata.data.name.toLowerCase()) {
+//                                             $(this).before(item).fadeIn('fast');
+//                                             added = true;
+//                                             return false;
+//                                     }
+//                             });
+//                             if(!added) {
+//                                     $('#leftcontent ul').append(item);
+//                             }
+//                     }
+//                     else{
+//                             Contacts.UI.messageBox(t('contacts', 'Error'), jsondata.data.message);
+//                             //alert(jsondata.data.message);
+//                     }
+//             }, 'json');
+//             return false;
+//     });
        
        $('#contacts li').bind('inview', function(event, isInView, visiblePartX, visiblePartY) {
                if (isInView) { //NOTE: I've kept all conditions for future reference ;-)
index 580cc72d5eb0a5f5fb3a7e90826134c130fe921c..724d632ea5d50519ac107b0b233b0591c133d40a 100644 (file)
@@ -58,7 +58,7 @@ class OC_Contacts_App{
        public static function getContactObject($id){
                $card = OC_Contacts_VCard::find( $id );
                if( $card === false ){
-                       OC_JSON::error(array('data' => array( 'message' => self::$l10n->t('Contact could not be found.'))));
+                       OC_JSON::error(array('data' => array( 'message' => self::$l10n->t('Contact could not be found.').' '.$id)));
                        exit();
                }
 
index b2b29433975763ff5bee15ca53c2068781b4910d..bb5b2da23d595454a73065e8e1e18bc787dab7a1 100644 (file)
@@ -99,7 +99,7 @@ class OC_Contacts_VCard{
         * @brief Adds a card
         * @param integer $id Addressbook id
         * @param string $data  vCard file
-        * @return insertid
+        * @return insertid on success or null if card is not parseable.
         */
        public static function add($id,$data){
                $fn = null;
@@ -107,6 +107,22 @@ class OC_Contacts_VCard{
                $card = OC_VObject::parse($data);
                if(!is_null($card)){
                        $fn = $card->getAsString('FN');
+                       if(!$fn){ // Fix missing 'FN' field.
+                               $n = $card->getAsString('N');
+                               if(!is_null($n)){
+                                       $fn = join(' ', array_reverse(array_slice(explode(';', $n), 0, 2)));
+                                       $card->setString('FN', $fn);
+                                       OC_Log::write('contacts','OC_Contacts_VCard::add. Added missing \'FN\' field: '.$fn,OC_Log::DEBUG);
+                               } else {
+                                       $fn = 'Unknown Name';
+                               }
+                       }
+                       $n = $card->getAsString('N');
+                       if(!$n){ // Fix missing 'N' field.
+                               $n = implode(';', array_reverse(array_slice(explode(' ', $fn), 0, 2))).';;;';
+                               $card->setString('N', $n);
+                               OC_Log::write('contacts','OC_Contacts_VCard::add. Added missing \'N\' field: '.$n,OC_Log::DEBUG);
+                       }
                        $uid = $card->getAsString('UID');
                        if(is_null($uid)){
                                $card->setUID();
@@ -137,8 +153,10 @@ class OC_Contacts_VCard{
                }
                else{
                        // that's hard. Creating a UID and not saving it
-                       $uid = self::createUID();
-                       $uri = $uid.'.vcf';
+                       OC_Log::write('contacts','OC_Contacts_VCard::add. Error parsing VCard: '.$data,OC_Log::ERROR);
+                       return null; // Ditch cards that can't be parsed by Sabre.
+                       //$uid = self::createUID();
+                       //$uri = $uid.'.vcf';
                };
 
                $stmt = OC_DB::prepare( 'INSERT INTO *PREFIX*contacts_cards (addressbookid,fullname,carddata,uri,lastmodified) VALUES(?,?,?,?,?)' );
@@ -175,7 +193,7 @@ class OC_Contacts_VCard{
                        if($email) {
                                $fn = $email;
                        } else {
-                               $fn = 'Unknown';
+                               $fn = 'Unknown Name';
                        }
                        $card->addProperty('FN', $fn);
                        $data = $card->serialize();