lib/kolab_sync_data_contacts.php

Aleksander Machniak machniak at kolabsys.com
Thu Aug 22 10:01:31 CEST 2013


 lib/kolab_sync_data_contacts.php |   48 +++++++++++++++++++++++++++------------
 1 file changed, 34 insertions(+), 14 deletions(-)

New commits:
commit d54dd1f0a705704c1562b0d035feb3a2dee0cf44
Author: Aleksander Machniak <alec at alec.pl>
Date:   Thu Aug 22 10:00:40 2013 +0200

    Fix contact email addresses handling (incompatibility with recent libkolab plugin code) (Bug #2136)

diff --git a/lib/kolab_sync_data_contacts.php b/lib/kolab_sync_data_contacts.php
index 7a60c0e..94dc2f6 100644
--- a/lib/kolab_sync_data_contacts.php
+++ b/lib/kolab_sync_data_contacts.php
@@ -49,9 +49,9 @@ class kolab_sync_data_contacts extends kolab_sync_data
         'children'              => 'children',
         'companyName'           => 'organization',
         'department'            => 'department',
-        'email1Address'         => 'email:0',
-        'email2Address'         => 'email:1',
-        'email3Address'         => 'email:2',
+        //'email1Address'         => 'email:0',
+        //'email2Address'         => 'email:1',
+        //'email3Address'         => 'email:2',
         //'fileAs'                => 'fileas', //@TODO: ?
         'firstName'             => 'firstname',
         //'home2PhoneNumber'      => 'home2phonenumber',
@@ -167,6 +167,13 @@ class kolab_sync_data_contacts extends kolab_sync_data
             $result[$key] = $value;
         }
 
+        // email address(es): email1Address, email2Address, email3Address
+        for ($x=0; $x<3; $x++) {
+            if (!empty($data['email'][$x]) && !empty($data['email'][$x]['address'])) {
+                $result['email' . ($x+1) . 'Address'] = $data['email'][$x]['address'];
+            }
+        }
+
         return new Syncroton_Model_Contact($result);
     }
 
@@ -181,7 +188,7 @@ class kolab_sync_data_contacts extends kolab_sync_data
      */
     public function toKolab(Syncroton_Model_IEntry $data, $folderId, $entry = null)
     {
-        $contact  = !empty($entry) ? $entry : array();
+        $contact = !empty($entry) ? $entry : array();
 
         // Contacts namespace fields
         foreach ($this->mapping as $key => $name) {
@@ -195,16 +202,6 @@ class kolab_sync_data_contacts extends kolab_sync_data
                 }
                 break;
 
-            case 'email:0':
-            case 'email:1':
-            case 'email:2':
-                // android send email address as
-                // Lars Kneschke <l.kneschke at metaways.de>
-                if (preg_match('/(.*)<(.+@[^@]+)>/', $value, $matches)) {
-                    $value = trim($matches[2]);
-                }
-                break;
-
             case 'website.homepage.url':
                 // remove facebook urls
                 if (preg_match('/^fb:\/\//', $value)) {
@@ -231,6 +228,29 @@ class kolab_sync_data_contacts extends kolab_sync_data
             $this->setKolabDataItem($contact, $name, $value);
         }
 
+        // email address(es): email1Address, email2Address, email3Address
+        $emails = array();
+        for ($x=0; $x<3; $x++) {
+            $key = 'email' . ($x+1) . 'Address';
+            if ($value = $data->$key) {
+                // Android sends email address as: Lars Kneschke <l.kneschke at metaways.de>
+                if (preg_match('/(.*)<(.+@[^@]+)>/', $value, $matches)) {
+                    $value = trim($matches[2]);
+                }
+
+                // try to find address type, at least we can do this if
+                // address wasn't changed
+                $type = '';
+                foreach ((array)$contact['email'] as $email) {
+                    if ($email['address'] == $value) {
+                        $type = $email['type'];
+                    }
+                }
+                $emails[] = array('address' => $value, 'type' => $type);
+            }
+        }
+        $contact['email'] = $emails;
+
         return $contact;
     }
 




More information about the commits mailing list