Aleksander Machniak
2012-09-17 32ba62889c1def94f555c3e683fc8087ee16c9b3
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.
3 files modified
26 ■■■■ changed files
program/steps/addressbook/edit.inc 3 ●●●●● patch | view | raw | blame | history
program/steps/addressbook/import.inc 22 ●●●●● patch | view | raw | blame | history
program/steps/addressbook/save.inc 1 ●●●● patch | view | raw | blame | history
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);
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;
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);