First NameMiddle NameLast Name... // PatrickWalsh... // // Where the first line explains each optional field. This is what // will be looked up in the key. // // The array need not be in any order and any fields not defined will // not be transferred. If the val='+', the value will be appended to // the previous field and any text after the '+' will be appended // before the value. For example, the following would add a comma and // a space between LastName and FirstName and store it in FullName: // // array("LastName" => "FullName","FirstName" => "+, "); // // Also start with a '#' symbol and a comma separated list will be // turned into a number of the same entries. class outlook_conv { var $basedn; var $contactsdn; var $sn; //these two vars will be used in var $o; //building a dn field. var $givenName; //this is used in building a cn field var $currentrecord; //used for buffering to allow uid lines to go first var $outlook = array( "Title" => "", "First Name" => "givenName", "Middle Name" => "", "Last Name" => "sn", "Suffix" => "", "Company" => "o", //objectclass: organization "Department" => "ou", //objectclass: organizationalPerson "Job Title" => "title", //objectclass: organizationalPerson "Business Street" => "postalAddress", "Business Street 2" => "", "Business Street 3" => "", "Business City" => "l", "Business State" => "st", "Business Postal Code" => "postalCode", "Business Country" => "co", "Home Street" => "homePostalAddress", "Home City" => "+\n", "Home State" => "+, ", "Home Postal Code" => "+ ", "Home Country" => "+\n", "Home Street 2" => "", "Home Street 3" => "", "Other Street" => "", "Other City" => "+\n", "Other State" => "+, ", "Other Postal Code" => "+ ", "Other Country" => "+\n", "Assistant's Phone" => "", "Business Fax" => "facsimileTelephoneNumber", "Business Phone" => "telephoneNumber", "Business Phone 2" => "", "Callback" => "", "Car Phone" => "", "Company Main Phone" => "", "Home Fax" => "", "Home Phone" => "homePhone", "Home Phone 2" => "homePhone", //This will make another homePhone entry "ISDN" => "", "Mobile Phone" => "mobile", //newPilotPerson "Other Fax" => "", "Other Phone" => "", "Pager" => "pager", "Primary Phone" => "", "Radio Phone" => "", "TTY/TDD Phone" => "", "Telex" => "telexNumber", //organization "Account" => "", "Anniversary" => "", "Assistant's Name" => "secretary", //newPilotPerson "Billing Information" => "", "Birthday" => "", "Categories" => "#businessCategory", "Children" => "", "Directory Server" => "", "E-mail Address" => "mail", "E-mail Display Name" => "", "E-mail 2 Address" => "otherMailbox", "E-mail 2 Display Name" => "", "E-mail 3 Address" => "otherMailbox", //add another... "E-mail 3 Display Name" => "", "Gender" => "", "Government ID Number" => "", "Hobby" => "", "Initials" => "", "Internet Free Busy" => "", "Keywords" => "", "Language" => "", "Location" => "", "Manager's Name" => "", "Mileage" => "", "Notes" => "comment", "Office Location" => "physicalDeliveryOfficeName", "Organizational ID Number" => "", "PO Box" => "postOfficeBox", "Priority" => "", "Private Profession" => "", "Referred By" => "", "Sensitivity" => "", "Spouse" => "", "User 1" => "", "User 2" => "", "User 3" => "", "User 4" => "", "Web Page" => ""); function outlook_start_file($buffer,$basedn="",$context="") { # Here are some tests for correct basedn and Contacts context. # If none of these are correct, ldap_add will fail, but at least # we can give them a fighting chance. if (!empty($basedn) && empty($context)) { # Oops, no context, try a default $context = "ou=Contacts,".$basedn; } elseif (empty($basedn) && !empty($context)) { # Oops, no basedn, try this one $work = split(",",$context); array_shift($work); for ($i=0;$ibasedn= $basedn; $this->contactsdn= $context; return $buffer; } function outlook_end_file($buffer) { return $buffer; } function outlook_start_record($buffer) { global $phpgw_info; $top="\nobjectClass: person objectClass: organizationalPerson objectClass: inetOrgPerson objectClass: outlookPerson"; $this->o=""; $this->sn=""; $this->givenName=""; $this->currentrecord = $top; return $buffer; } function outlook_end_record($buffer,$private="") { if (trim($this->sn) != "") { $this->currentrecord = "cn: ".$this->givenName." ".$this->sn.$this->currentrecord; } else if (trim($this->o) != "") { $this->currentrecord = "cn: ".$this->o.$this->currentrecord; } else if (trim($this->givenName)) { $this->currentrecord = "cn: ".$this->givenName.$this->currentrecord; } else { $this->currentrecord = "cn: (unnamed)".$this->currentrecord; } $time = gettimeofday(); $uid = ($this->sn?$this->sn:$this->o); if (strpos($uid, ",")) { $uid = str_replace(",", "\,", $uid); $uid = "\"".$uid."\""; } $uid = time().$time["usec"].":".$uid; $this->currentrecord = "dn: uid=$uid,".$this->contactsdn."\nuid: $uid"."\n".$this->currentrecord; while ($pos = strpos($this->currentrecord, "|br x=y/|")) { $startline = strrpos(substr($this->currentrecord,0,$pos), "\n"); if ($startline == "") {$startline = 0;} $startattrib = strpos($this->currentrecord, ":", $startline) + 1; $endline = strpos($this->currentrecord, "\n", $startattrib); if ($endline == "") { $endline = strlen($this->currentrecord); } $attrib = str_replace("|br x=y/|", "\r\n", substr($this->currentrecord, $startattrib + 1, $endline - $startattrib - 1)); $this->currentrecord = substr($this->currentrecord, 0, $startattrib).": ".base64_encode($attrib).substr($this->currentrecord, $endline); } return $buffer.$this->currentrecord."\n\n"; } function outlook_new_attrib($buffer,$name,$value) { if ($name == "sn") { $this->sn = $value; } if ($name == "o") { $this->o = $value; } if ($name == "givenName") { $this->givenName = $value; } $value = str_replace("\n","|br x=y/|",$value); $name = str_replace("\n","|br x=y/|",$name); $value = str_replace("\r","",$value); $name = str_replace("\r","",$name); switch (substr($name,0,1)) { case '+': $this->currentrecord .= substr($name,1).$value; return $buffer; break; case '#': $data = explode(";",$value); $num = count($data); $return = ""; for ( $i=0; $i<$num; $i++ ) { $return .= "\n".substr($name,1).": $data[$i]"; } $this->currentrecord .= $return; return $buffer; break; default: if ($name == "otherMailbox") { $this->currentrecord .= "\n$name: smtp\$$value"; } else { $this->currentrecord .= "\n$name: $value"; } return $buffer; } } } ?>