Example #1
0
 function importVCard($filename, $module = 'Contacts')
 {
     global $current_user;
     $lines = file($filename);
     $start = false;
     $contact = loadBean($module);
     $contact->title = 'imported';
     $contact->assigned_user_id = $current_user->id;
     $fullname = '';
     $email_suffix = 1;
     for ($index = 0; $index < sizeof($lines); $index++) {
         $line = $lines[$index];
         // check the encoding and change it if needed
         $locale = new Localization();
         $encoding = $locale->detectCharset($line);
         if ($encoding != $GLOBALS['sugar_config']['default_charset']) {
             $line = $locale->translateCharset($line, $encoding);
         }
         $line = trim($line);
         if ($start) {
             //VCARD is done
             if (substr_count(strtoupper($line), 'END:VCARD')) {
                 if (!isset($contact->last_name)) {
                     $contact->last_name = $fullname;
                 }
                 break;
             }
             $keyvalue = explode(':', $line);
             if (sizeof($keyvalue) == 2) {
                 $value = $keyvalue[1];
                 for ($newindex = $index + 1; $newindex < sizeof($lines), substr_count($lines[$newindex], ':') == 0; $newindex++) {
                     $value .= $lines[$newindex];
                     $index = $newindex;
                 }
                 $values = explode(';', $value);
                 $key = strtoupper($keyvalue[0]);
                 $key = strtr($key, '=', '');
                 $key = strtr($key, ',', ';');
                 $keys = explode(';', $key);
                 if ($keys[0] == 'TEL') {
                     if (substr_count($key, 'WORK') > 0) {
                         if (substr_count($key, 'FAX') > 0) {
                             if (!isset($contact->phone_fax)) {
                                 $contact->phone_fax = $value;
                             }
                         } else {
                             if (!isset($contact->phone_work)) {
                                 $contact->phone_work = $value;
                             }
                         }
                     }
                     if (substr_count($key, 'HOME') > 0) {
                         if (substr_count($key, 'FAX') > 0) {
                             if (!isset($contact->phone_fax)) {
                                 $contact->phone_fax = $value;
                             }
                         } else {
                             if (!isset($contact->phone_home)) {
                                 $contact->phone_home = $value;
                             }
                         }
                     }
                     if (substr_count($key, 'CELL') > 0) {
                         if (!isset($contact->phone_mobile)) {
                             $contact->phone_mobile = $value;
                         }
                     }
                     if (substr_count($key, 'FAX') > 0) {
                         if (!isset($contact->phone_fax)) {
                             $contact->phone_fax = $value;
                         }
                     }
                 }
                 if ($keys[0] == 'N') {
                     if (sizeof($values) > 0) {
                         $contact->last_name = $values[0];
                     }
                     if (sizeof($values) > 1) {
                         $contact->first_name = $values[1];
                     }
                     if (sizeof($values) > 2) {
                         $contact->salutation = $values[2];
                     }
                 }
                 if ($keys[0] == 'FN') {
                     $fullname = $value;
                 }
             }
             if ($keys[0] == 'ADR') {
                 if (substr_count($key, 'WORK') > 0 && (substr_count($key, 'POSTAL') > 0 || substr_count($key, 'PARCEL') == 0)) {
                     if (!isset($contact->primary_address_street) && sizeof($values) > 2) {
                         $textBreaks = array("\n", "\r");
                         $vcardBreaks = array("=0A", "=0D");
                         $contact->primary_address_street = str_replace($vcardBreaks, $textBreaks, $values[2]);
                     }
                     if (!isset($contact->primary_address_city) && sizeof($values) > 3) {
                         $contact->primary_address_city = $values[3];
                     }
                     if (!isset($contact->primary_address_state) && sizeof($values) > 4) {
                         $contact->primary_address_state = $values[4];
                     }
                     if (!isset($contact->primary_address_postalcode) && sizeof($values) > 5) {
                         $contact->primary_address_postalcode = $values[5];
                     }
                     if (!isset($contact->primary_address_country) && sizeof($values) > 6) {
                         $contact->primary_address_country = $values[6];
                     }
                 }
             }
             if ($keys[0] == 'TITLE') {
                 $contact->title = $value;
             }
             if ($keys[0] == 'EMAIL') {
                 $field = 'email' . $email_suffix;
                 if (!isset($contact->{$field})) {
                     $contact->{$field} = $value;
                 }
                 if ($email_suffix == 1) {
                     $_REQUEST['email1'] = $value;
                 }
                 $email_suffix++;
             }
             if ($keys[0] == 'ORG') {
                 $GLOBALS['log']->debug('I found a company name');
                 if (!empty($value)) {
                     $GLOBALS['log']->debug('I found a company name (fer real)');
                     if (is_a($contact, "Contact") || is_a($contact, "Lead")) {
                         $GLOBALS['log']->debug('And Im dealing with a person!');
                         $accountBean = loadBean('Accounts');
                         // It's a contact, we better try and match up an account
                         $full_company_name = trim($values[0]);
                         // Do we have a full company name match?
                         $result = $accountBean->retrieve_by_string_fields(array('name' => $full_company_name, 'deleted' => 0));
                         if (!isset($result->id)) {
                             // Try to trim the full company name down, see if we get some other matches
                             $vCardTrimStrings = array('/ltd\\.*/i' => '', '/llc\\.*/i' => '', '/gmbh\\.*/i' => '', '/inc\\.*/i' => '', '/\\.com/i' => '');
                             // Allow users to override the trimming strings
                             if (file_exists('custom/include/vCardTrimStrings.php')) {
                                 require_once 'custom/include/vCardTrimStrings.php';
                             }
                             $short_company_name = trim(preg_replace(array_keys($vCardTrimStrings), $vCardTrimStrings, $full_company_name), " ,.");
                             $GLOBALS['log']->debug('Trying an extended search for: ' . $short_company_name);
                             $result = $accountBean->retrieve_by_string_fields(array('name' => $short_company_name, 'deleted' => 0));
                         }
                         if (!isset($result->id)) {
                             // We could not find a parent account
                             $GLOBALS['log']->debug("Did not find a matching company ({$full_company_name})");
                             $contact->account_id = '';
                             $contact->account_name = $full_company_name;
                         } else {
                             $GLOBALS['log']->debug("Found a matching company: " . $result->name);
                             $contact->account_id = $result->id;
                             $contact->account_name = $result->name;
                         }
                         $contact->department = $values[1];
                     } else {
                         $contact->department = $value;
                     }
                 }
             }
         }
         //FOUND THE BEGINING OF THE VCARD
         if (!$start && substr_count(strtoupper($line), 'BEGIN:VCARD')) {
             $start = true;
         }
     }
     if (empty($contact->account_id) && !empty($contact->account_name)) {
         $GLOBALS['log']->debug("Look ma! I'm creating a new account: " . $contact->account_name);
         // We need to create a new account
         $accountBean = loadBean('Accounts');
         // Populate the newly created account with all of the contact information
         foreach ($contact->field_defs as $field_name => $field_def) {
             if (!empty($contact->{$field_name})) {
                 $accountBean->{$field_name} = $contact->{$field_name};
             }
         }
         $accountBean->name = $contact->account_name;
         $accountBean->save();
         $contact->account_id = $accountBean->id;
     }
     $contactId = $contact->save();
     return $contactId;
 }