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.
pull/22/merge
Aleksander Machniak 12 years ago
parent fa4bf4388b
commit 32ba62889c

@ -117,9 +117,6 @@ function rcmail_contact_editform($attrib)
$record = rcmail_get_edit_record(); $record = rcmail_get_edit_record();
// add some labels to client
$RCMAIL->output->add_label('noemailwarning', 'nonamewarning');
// copy (parsed) address template to client // copy (parsed) address template to client
if (preg_match_all('/\{([a-z0-9]+)\}([^{]*)/i', $RCMAIL->config->get('address_template', ''), $templ, PREG_SET_ORDER)) if (preg_match_all('/\{([a-z0-9]+)\}([^{]*)/i', $RCMAIL->config->get('address_template', ''), $templ, PREG_SET_ORDER))
$RCMAIL->output->set_env('address_template', $templ); $RCMAIL->output->set_env('address_template', $templ);

@ -189,32 +189,36 @@ if (is_array($_FILES['_file'])) {
$IMPORT_STATS->names = array(); $IMPORT_STATS->names = array();
$IMPORT_STATS->skipped_names = array(); $IMPORT_STATS->skipped_names = array();
$IMPORT_STATS->count = count($vcards); $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) { if ($replace) {
$CONTACTS->delete_all(); $CONTACTS->delete_all();
} }
foreach ($vcards as $vcard) { foreach ($vcards as $vcard) {
$email = $vcard->email[0];
$a_record = $vcard->get_assoc(); $a_record = $vcard->get_assoc();
// skip entries without an e-mail address or invalid // skip invalid (incomplete) entries
if (empty($email) || !$CONTACTS->validate($a_record, true)) { if (!$CONTACTS->validate($a_record, true)) {
$IMPORT_STATS->nomail++; $IMPORT_STATS->invalid++;
continue; continue;
} }
// We're using UTF8 internally // We're using UTF8 internally
$email = $vcard->email[0];
$email = rcube_idn_to_utf8($email); $email = rcube_idn_to_utf8($email);
if (!$replace && $email) { if (!$replace) {
$existing = null;
// compare e-mail address // compare e-mail address
$existing = $CONTACTS->search('email', $email, 1, false); if ($email) {
if (!$existing->count && $vcard->displayname) { // compare display name $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); $existing = $CONTACTS->search('name', $vcard->displayname, 1, false);
} }
if ($existing->count) { if ($existing && $existing->count) {
$IMPORT_STATS->skipped++; $IMPORT_STATS->skipped++;
$IMPORT_STATS->skipped_names[] = $vcard->displayname ? $vcard->displayname : $email; $IMPORT_STATS->skipped_names[] = $vcard->displayname ? $vcard->displayname : $email;
continue; continue;

@ -161,7 +161,6 @@ else {
$source = $orig_source; $source = $orig_source;
// show notice if existing contacts with same e-mail are found // show notice if existing contacts with same e-mail are found
$existing = false;
foreach ($CONTACTS->get_col_values('email', $a_record, true) as $email) { foreach ($CONTACTS->get_col_values('email', $a_record, true) as $email) {
if ($email && ($res = $CONTACTS->search('email', $email, 1, false, true)) && $res->count) { if ($email && ($res = $CONTACTS->search('email', $email, 1, false, true)) && $res->count) {
$OUTPUT->show_message('contactexists', 'notice', null, false); $OUTPUT->show_message('contactexists', 'notice', null, false);

Loading…
Cancel
Save