From 32ba62889c1def94f555c3e683fc8087ee16c9b3 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Mon, 17 Sep 2012 06:23:34 -0400
Subject: [PATCH] Don't directly require email address on contact import, allowing import of contacts being validated by addressbook validation code. The same as for create/edit contact actions.

---
 program/steps/addressbook/import.inc |   22 +++++++++++++---------
 program/steps/addressbook/edit.inc   |    3 ---
 program/steps/addressbook/save.inc   |    1 -
 3 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/program/steps/addressbook/edit.inc b/program/steps/addressbook/edit.inc
index 0f1fd66..90069a7 100644
--- a/program/steps/addressbook/edit.inc
+++ b/program/steps/addressbook/edit.inc
@@ -117,9 +117,6 @@
 
     $record = rcmail_get_edit_record();
 
-    // add some labels to client
-    $RCMAIL->output->add_label('noemailwarning', 'nonamewarning');
-
     // copy (parsed) address template to client
     if (preg_match_all('/\{([a-z0-9]+)\}([^{]*)/i', $RCMAIL->config->get('address_template', ''), $templ, PREG_SET_ORDER))
       $RCMAIL->output->set_env('address_template', $templ);
diff --git a/program/steps/addressbook/import.inc b/program/steps/addressbook/import.inc
index 654a336..15e04b8 100644
--- a/program/steps/addressbook/import.inc
+++ b/program/steps/addressbook/import.inc
@@ -189,32 +189,36 @@
         $IMPORT_STATS->names = array();
         $IMPORT_STATS->skipped_names = array();
         $IMPORT_STATS->count = count($vcards);
-        $IMPORT_STATS->inserted = $IMPORT_STATS->skipped = $IMPORT_STATS->nomail = $IMPORT_STATS->errors = 0;
+        $IMPORT_STATS->inserted = $IMPORT_STATS->skipped = $IMPORT_STATS->invalid = $IMPORT_STATS->errors = 0;
 
         if ($replace) {
             $CONTACTS->delete_all();
         }
 
         foreach ($vcards as $vcard) {
-            $email    = $vcard->email[0];
             $a_record = $vcard->get_assoc();
 
-            // skip entries without an e-mail address or invalid
-            if (empty($email) || !$CONTACTS->validate($a_record, true)) {
-                $IMPORT_STATS->nomail++;
+            // skip invalid (incomplete) entries
+            if (!$CONTACTS->validate($a_record, true)) {
+                $IMPORT_STATS->invalid++;
                 continue;
             }
 
             // We're using UTF8 internally
+            $email = $vcard->email[0];
             $email = rcube_idn_to_utf8($email);
 
-            if (!$replace && $email) {
+            if (!$replace) {
+                $existing = null;
                 // compare e-mail address
-                $existing = $CONTACTS->search('email', $email, 1, false);
-                if (!$existing->count && $vcard->displayname) {  // compare display name
+                if ($email) {
+                    $existing = $CONTACTS->search('email', $email, 1, false);
+                }
+                // compare display name if email not found
+                if ((!$existing || !$existing->count) && $vcard->displayname) {
                     $existing = $CONTACTS->search('name', $vcard->displayname, 1, false);
                 }
-                if ($existing->count) {
+                if ($existing && $existing->count) {
                     $IMPORT_STATS->skipped++;
                     $IMPORT_STATS->skipped_names[] = $vcard->displayname ? $vcard->displayname : $email;
                     continue;
diff --git a/program/steps/addressbook/save.inc b/program/steps/addressbook/save.inc
index 3bfce3b..887e498 100644
--- a/program/steps/addressbook/save.inc
+++ b/program/steps/addressbook/save.inc
@@ -161,7 +161,6 @@
     $source = $orig_source;
 
   // show notice if existing contacts with same e-mail are found
-  $existing = false;
   foreach ($CONTACTS->get_col_values('email', $a_record, true) as $email) {
       if ($email && ($res = $CONTACTS->search('email', $email, 1, false, true)) && $res->count) {
           $OUTPUT->show_message('contactexists', 'notice', null, false);

--
Gitblit v1.9.1