From 32ba62889c1def94f555c3e683fc8087ee16c9b3 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Mon, 17 Sep 2012 12:23:34 +0200 Subject: 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/edit.inc | 3 --- program/steps/addressbook/import.inc | 22 +++++++++++++--------- 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 0f1fd6697..90069a7eb 100644 --- a/program/steps/addressbook/edit.inc +++ b/program/steps/addressbook/edit.inc @@ -117,9 +117,6 @@ function rcmail_contact_editform($attrib) $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 654a33602..15e04b82a 100644 --- a/program/steps/addressbook/import.inc +++ b/program/steps/addressbook/import.inc @@ -189,32 +189,36 @@ if (is_array($_FILES['_file'])) { $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 3bfce3b4d..887e49827 100644 --- a/program/steps/addressbook/save.inc +++ b/program/steps/addressbook/save.inc @@ -161,7 +161,6 @@ else { $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); -- cgit v1.2.3