Correctly handle empty contact names when importing
| | |
| | | ($detected_charset = self::detect_encoding(self::vcard_encode($this->raw))) && $detected_charset != RCMAIL_CHARSET) { |
| | | $this->raw = self::charset_convert($this->raw, $detected_charset); |
| | | } |
| | | |
| | | // consider FN empty if the same as the primary e-mail address |
| | | if ($this->raw['FN'][0][0] == $this->raw['EMAIL'][0][0]) |
| | | $this->raw['FN'][0][0] = ''; |
| | | |
| | | // find well-known address fields |
| | | $this->displayname = $this->raw['FN'][0][0]; |
| | |
| | | if (preg_match('/^END:VCARD$/i', $line)) { |
| | | // parse vcard |
| | | $obj = new rcube_vcard(self::cleanup($vcard_block), $charset, true); |
| | | if (!empty($obj->displayname)) |
| | | if (!empty($obj->displayname) || !empty($obj->email)) |
| | | $out[] = $obj; |
| | | |
| | | $in_vcard_block = false; |
| | |
| | | $messages['contactremovedfromgroup'] = 'Kontakte wurden aus dieser Gruppe entfernt'; |
| | | $messages['importwait'] = 'Daten werden importiert, bitte warten...'; |
| | | $messages['importerror'] = 'Import fehlgeschlagen! Die hochgeladene Datei ist nicht im vCard-Format.'; |
| | | $messages['importconfirm'] = '<b>Es wurden $inserted Adressen erfolgreich importiert und $skipped bestehende Einträge übersprungen</b>:<p><em>$names</em></p>'; |
| | | $messages['importconfirm'] = '<b>Es wurden $inserted Adressen erfolgreich importiert</b>'; |
| | | $messages['importconfirmskipped'] = '<b>$skipped bestehende Einträge wurden übersprungen</b>'; |
| | | $messages['opnotpermitted'] = 'Operation nicht erlaubt!'; |
| | | $messages['nofromaddress'] = 'Fehlende E-Mail-Adresse in ausgewählter Identität'; |
| | | $messages['editorwarning'] = 'Beim Wechseln in den Texteditor gehen alle Textformatierungen verloren. Möchten Sie fortfahren?'; |
| | |
| | | if (!$replace && $email) { |
| | | // compare e-mail address |
| | | $existing = $CONTACTS->search('email', $email, false, false); |
| | | if (!$existing->count) { // compare display name |
| | | if (!$existing->count && $vcard->displayname) { // compare display name |
| | | $existing = $CONTACTS->search('name', $vcard->displayname, false, false); |
| | | } |
| | | if ($existing->count) { |
| | | $IMPORT_STATS->skipped++; |
| | | $IMPORT_STATS->skipped_names[] = $vcard->displayname; |
| | | $IMPORT_STATS->skipped_names[] = $vcard->displayname ? $vcard->displayname : $email; |
| | | continue; |
| | | } |
| | | } |
| | |
| | | |
| | | if ($success) { |
| | | $IMPORT_STATS->inserted++; |
| | | $IMPORT_STATS->names[] = $vcard->displayname; |
| | | $IMPORT_STATS->names[] = $vcard->displayname ? $vcard->displayname : $email; |
| | | } else { |
| | | $IMPORT_STATS->errors++; |
| | | } |