diff --git a/php/module.contact.php b/php/module.contact.php index 82eefa6..228991c 100644 --- a/php/module.contact.php +++ b/php/module.contact.php @@ -753,35 +753,55 @@ class ContactModule extends Module { } if (isset($vCard->email) && count($vCard->email) > 0) { $emailcount = 0; + $properties["address_book_long"] = 0; foreach ($vCard->email as $type => $email) { - $email = $email[0]; // we only can store one mail address - $fileas = $email; - if(isset($properties["fileas"]) && !empty($properties["fileas"])) { - $fileas = $properties["fileas"]; // set to real name - } + foreach ($email as $mail) { + $fileas = $mail; + if (isset($properties["fileas"]) && !empty($properties["fileas"])) { + $fileas = $properties["fileas"]; // set to real name + } - // we only have storage for 3 mail addresses! - switch($emailcount) { - case 0: - $properties["email_address_1"] = $email; - $properties["email_address_display_name_1"] = $fileas . " (" . $email . ")"; - $properties["email_address_display_name_email_1"] = $email; - $properties["address_book_mv"] = [0]; // this is needed for adding the contact to the email address book, 0 = email 1 - $properties["address_book_long"] = 1; // this specifies the number of elements in address_book_mv - break; - case 1: - $properties["email_address_2"] = $email; - $properties["email_address_display_name_2"] = $fileas . " (" . $email . ")"; - $properties["email_address_display_name_email_2"] = $email; - break; - case 2: - $properties["email_address_3"] = $email; - $properties["email_address_display_name_3"] = $fileas . " (" . $email . ")"; - $properties["email_address_display_name_email_3"] = $email; - break; - default: break; + // we only have storage for 3 mail addresses! + /** + * type of email address address_book_mv address_book_long + * email1 0 1 (0x00000001) + * email2 1 2 (0x00000002) + * email3 2 4 (0x00000004) + * fax2(business fax) 3 8 (0x00000008) + * fax3(home fax) 4 16 (0x00000010) + * fax1(primary fax) 5 32 (0x00000020) + * + * address_book_mv is a multivalued property so all the values are passed in array + * address_book_long stores sum of the flags + * these both properties should be in sync always + */ + switch ($emailcount) { + case 0: + $properties["email_address_1"] = $mail; + $properties["email_address_display_name_1"] = $fileas . " (" . $mail . ")"; + $properties["email_address_display_name_email_1"] = $mail; + $properties["address_book_mv"][] = 0; // this is needed for adding the contact to the email address book, 0 = email 1 + $properties["address_book_long"] += 1; // this specifies the number of elements in address_book_mv + break; + case 1: + $properties["email_address_2"] = $mail; + $properties["email_address_display_name_2"] = $fileas . " (" . $mail . ")"; + $properties["email_address_display_name_email_2"] = $mail; + $properties["address_book_mv"][] = 1; // this is needed for adding the contact to the email address book, 1 = email 2 + $properties["address_book_long"] += 2; // this specifies the number of elements in address_book_mv + break; + case 2: + $properties["email_address_3"] = $mail; + $properties["email_address_display_name_3"] = $fileas . " (" . $mail . ")"; + $properties["email_address_display_name_email_3"] = $mail; + $properties["address_book_mv"][] = 2; // this is needed for adding the contact to the email address book, 2 = email 3 + $properties["address_book_long"] += 4; // this specifies the number of elements in address_book_mv + break; + default: + break; + } + $emailcount++; } - $emailcount++; } } if (isset($vCard->organization)) {