/** * this function creates a Addressbook_Model_Contact and stores it in the database * * @todo the header handling does not belong here. It should be moved to the DAV_Server class when supported * * @param Tinebase_Model_Container $container * @param stream|string $vcardData */ public static function create(Tinebase_Model_Container $container, $name, $vcardData) { list($backend, $version) = Addressbook_Convert_Contact_VCard_Factory::parseUserAgent($_SERVER['HTTP_USER_AGENT']); $converter = Addressbook_Convert_Contact_VCard_Factory::factory($backend, $version); $contact = $converter->toTine20Model($vcardData); $contact->container_id = $container->getId(); $id = ($pos = strpos($name, '.')) === false ? $name : substr($name, 0, $pos); $contact->setId($id); $contact = Addressbook_Controller_Contact::getInstance()->create($contact, false); $card = new self($container, $contact); return $card; }
/** * test converting vcard from sogo connector to Addressbook_Model_Contact * * @return Addressbook_Model_Contact */ public function testConvertToTine20Model() { $vcardStream = fopen(dirname(__FILE__) . '/../../../Import/files/telefonbuch.vcf', 'r'); $converter = Addressbook_Convert_Contact_VCard_Factory::factory(Addressbook_Convert_Contact_VCard_Factory::CLIENT_TELEFONBUCH); $contact = $converter->toTine20Model($vcardStream); $this->assertEquals('Hamburg', $contact->adr_one_locality); $this->assertEquals('12345', $contact->adr_one_postalcode); $this->assertEquals('Teststraße 1', $contact->adr_one_street); $this->assertEquals('Spahn', $contact->n_family); $this->assertEquals('Spahn, Michael', $contact->n_fileas); $this->assertEquals('Michael', $contact->n_given); $this->assertEquals('040 12345', $contact->tel_work); $this->assertEquals('http://michaelspahn.de', $contact->url); return $contact; }
/** * this function creates a Addressbook_Model_Contact and stores it in the database * * @todo the header handling does not belong here. It should be moved to the DAV_Server class when supported * * @param Tinebase_Model_Container $container * @param stream|string $vcardData */ public static function create(Tinebase_Model_Container $container, $name, $vcardData) { list($backend, $version) = Addressbook_Convert_Contact_VCard_Factory::parseUserAgent($_SERVER['HTTP_USER_AGENT']); $converter = Addressbook_Convert_Contact_VCard_Factory::factory($backend, $version); $contact = $converter->toTine20Model($vcardData); $contact->container_id = $container->getId(); $id = ($pos = strpos($name, '.')) === false ? $name : substr($name, 0, $pos); $id = strlen($id) > 40 ? sha1($id) : $id; $contact->setId($id); try { $contact = Addressbook_Controller_Contact::getInstance()->create($contact, false); } catch (Tinebase_Exception_AccessDenied $tead) { Tinebase_Exception::log($tead); throw new DAV\Exception\Forbidden('Access denied'); } $card = new self($container, $contact); return $card; }
/** * test converting vcard from sogo connector to Addressbook_Model_Contact * * @return Addressbook_Model_Contact */ public function testConvertToTine20Model() { $vcardStream = fopen(dirname(__FILE__) . '/../../../Import/files/WebDAVCollaborator.vcf', 'r'); $converter = Addressbook_Convert_Contact_VCard_Factory::factory(Addressbook_Convert_Contact_VCard_Factory::CLIENT_COLLABORATOR); $contact = $converter->toTine20Model($vcardStream); $this->assertEquals('DEUTSCHLAND', $contact->adr_one_countryname); $this->assertEquals('businesscity', $contact->adr_one_locality); $this->assertEquals('45734', $contact->adr_one_postalcode); $this->assertEquals('businessarea', $contact->adr_one_region); $this->assertEquals('business street 2', $contact->adr_one_street); // $this->assertEquals('Address Business 2', $contact->adr_one_street2); $this->assertEquals('DEUTSCHLAND', $contact->adr_two_countryname); $this->assertEquals('private cyty', $contact->adr_two_locality); $this->assertEquals('44322', $contact->adr_two_postalcode); $this->assertEquals('private area', $contact->adr_two_region); $this->assertEquals('private street 44', $contact->adr_two_street); // $this->assertEquals('Address Privat 2', $contact->adr_two_street2); $this->assertEquals('*****@*****.**', $contact->email); $this->assertEquals('*****@*****.**', $contact->email_home); $this->assertEquals('Nachname', $contact->n_family); $this->assertEquals('Vorname', $contact->n_given); $this->assertEquals('Middle', $contact->n_middle); $this->assertEquals('salutation', $contact->n_prefix); $this->assertEquals('name suffix', $contact->n_suffix); $this->assertEquals("Nots \nWith \nLine\nBreaks\n", $contact->note); $this->assertEquals('Firma', $contact->org_name); $this->assertEquals('department', $contact->org_unit); $this->assertEquals('+49 (040) 12345 - 3', $contact->tel_cell); $this->assertEquals(null, $contact->tel_cell_private); $this->assertEquals('+49 (040) 12345 - 2', $contact->tel_fax); $this->assertEquals(null, $contact->tel_fax_home); $this->assertEquals('+49 (040) 12345 - 1', $contact->tel_home); $this->assertEquals(null, $contact->tel_pager); $this->assertEquals('+49 (040) 12345 - 0', $contact->tel_work); // $this->assertEquals('Titel', $contact->title); $this->assertEquals('websi.te', $contact->url); // $this->assertEquals('http://www.tine20.org', $contact->url_home); return $contact; }
/** * test converting vcard from sogo connector to Addressbook_Model_Contact */ public function testConvertToTine20Model() { $vcardStream = fopen(dirname(__FILE__) . '/../../../Import/files/sogo_connector.vcf', 'r'); $converter = Addressbook_Convert_Contact_VCard_Factory::factory(Addressbook_Convert_Contact_VCard_Factory::CLIENT_SOGO); $contact = $converter->toTine20Model($vcardStream); $this->assertEquals('COUNTRY BUSINESS', $contact->adr_one_countryname); $this->assertEquals('City Business', $contact->adr_one_locality); $this->assertEquals('12345', $contact->adr_one_postalcode); $this->assertEquals('Region Business', $contact->adr_one_region); $this->assertEquals('Address Business 1', $contact->adr_one_street); $this->assertEquals('Address Business 2', $contact->adr_one_street2); $this->assertEquals('COUNTRY PRIVAT', $contact->adr_two_countryname); $this->assertEquals('City Privat', $contact->adr_two_locality); $this->assertEquals('12345', $contact->adr_two_postalcode); $this->assertEquals('Region Privat', $contact->adr_two_region); $this->assertEquals('Address Privat 1', $contact->adr_two_street); $this->assertEquals('Address Privat 2', $contact->adr_two_street2); $this->assertEquals('*****@*****.**', $contact->email); $this->assertEquals('*****@*****.**', $contact->email_home); $this->assertEquals('Kneschke', $contact->n_family); $this->assertEquals('Kneschke, Lars', $contact->n_fileas); $this->assertEquals('Lars', $contact->n_given); $this->assertEquals(null, $contact->n_middle); $this->assertEquals(null, $contact->n_prefix); $this->assertEquals(null, $contact->n_suffix); $this->assertEquals("Notes\nwith\nLine Break", $contact->note); $this->assertEquals('Organisation', $contact->org_name); $this->assertEquals('Business Unit', $contact->org_unit); $this->assertEquals('+49 MOBIL', $contact->tel_cell); $this->assertEquals(null, $contact->tel_cell_private); $this->assertEquals('+49 FAX', $contact->tel_fax); $this->assertEquals(null, $contact->tel_fax_home); $this->assertEquals('+49 PRIVAT', $contact->tel_home); $this->assertEquals('+49 PAGER', $contact->tel_pager); $this->assertEquals('+49 BUSINESS', $contact->tel_work); $this->assertEquals('Titel', $contact->title); $this->assertEquals('http://www.tine20.com', $contact->url); $this->assertEquals('http://www.tine20.org', $contact->url_home); }
/** * get contact information from string by parsing it using predefined rules * * @param string $address * @return array */ public function parseAddressData($address) { if (preg_match('/^http/', $address)) { $vcard = file_get_contents($address); // Could not load file from remote if ($vcard === false) { return array('exceptions' => "Cannot get file from remote."); } $converter = Addressbook_Convert_Contact_VCard_Factory::factory(strpos($address, 'dastelefonbuch') ? Addressbook_Convert_Contact_VCard_Factory::CLIENT_TELEFONBUCH : Addressbook_Convert_Contact_VCard_Factory::CLIENT_GENERIC); $record = $converter->toTine20Model($vcard); $contactData = $this->_recordToJson($record); if (array_key_exists('jpegphoto', $contactData)) { unset($contactData['jpegphoto']); } return array('contact' => $contactData); } else { $result = Addressbook_Controller_Contact::getInstance()->parseAddressData($address); $contactData = $this->_recordToJson($result['contact']); if (array_key_exists('jpegphoto', $contactData)) { unset($contactData['jpegphoto']); } if (array_key_exists('salutation', $contactData)) { unset($contactData['salutation']); } return array('contact' => $contactData, 'unrecognizedTokens' => $result['unrecognizedTokens']); } }
public function testConvertToVCard() { $contact = $this->testConvertToTine20Model(); $converter = Addressbook_Convert_Contact_VCard_Factory::factory(Addressbook_Convert_Contact_VCard_Factory::CLIENT_SOGO); $vcard = $converter->fromTine20Model($contact)->serialize(); // required fields $this->assertContains('VERSION:3.0', $vcard, $vcard); $version = Tinebase_Application::getInstance()->getApplicationByName('Addressbook')->version; $this->assertContains("PRODID:-//tine20.com//Tine 2.0 Addressbook V{$version}//EN", $vcard, $vcard); // @todo can not test for folded lines $this->assertContains('ADR;TYPE=HOME:;Address Privat 2;Address Privat 1;City Privat;Region Privat;', $vcard, $vcard); $this->assertContains('ADR;TYPE=WORK:;Address Business 2;Address Business 1;City Business;Region B', $vcard, $vcard); $this->assertContains('EMAIL;TYPE=HOME:lars@kneschke.de', $vcard, $vcard); $this->assertContains('EMAIL;TYPE=WORK:l.kneschke@metaways.de', $vcard, $vcard); $this->assertContains('N:Kneschke;Lars', $vcard, $vcard); $this->assertContains('NOTE:Notes\\nwith\\nLine Break', $vcard, $vcard); $this->assertContains('ORG:Organisation;Business Unit', $vcard, $vcard); $this->assertContains('TEL;TYPE=CELL:+49 MOBIL', $vcard, $vcard); $this->assertContains('TEL;TYPE=FAX:+49 FAX', $vcard, $vcard); $this->assertContains('TEL;TYPE=HOME:+49 PRIVAT', $vcard, $vcard); $this->assertContains('TEL;TYPE=PAGER:+49 PAGER', $vcard, $vcard); $this->assertContains('TEL;TYPE=WORK:+49 BUSINESS', $vcard, $vcard); $this->assertContains('TITLE:Titel', $vcard, $vcard); $this->assertContains('URL;TYPE=WORK:http://www.tine20.com', $vcard, $vcard); $this->assertContains('URL;TYPE=HOME:http://www.tine20.org', $vcard, $vcard); $this->assertContains('BDAY:1975-01-16', $vcard, $vcard); }
public function testConvertToVCard() { $contact = $this->testConvertToTine20Model(); $converter = Addressbook_Convert_Contact_VCard_Factory::factory(Addressbook_Convert_Contact_VCard_Factory::CLIENT_IOS); $vcard = $converter->fromTine20Model($contact)->serialize(); // required fields $this->assertContains('VERSION:3.0', $vcard, $vcard); $version = Tinebase_Application::getInstance()->getApplicationByName('Addressbook')->version; $this->assertContains("PRODID:-//tine20.com//Tine 2.0 Addressbook V{$version}//EN", $vcard, $vcard); // @todo can not test for folded lines $this->assertContains('ADR;TYPE=WORK:;;Pickhuben 2;Hamburg;;20457;C', $vcard, $vcard); $this->assertContains('ADR;TYPE=HOME:;;Address Privat 1;City Privat;;12345;C', $vcard, $vcard); $this->assertContains('EMAIL;TYPE=INTERNET,HOME:lars@kneschke.de', $vcard, $vcard); $this->assertContains('EMAIL;TYPE=INTERNET,WORK,PREF:l.kneschke@metaways.de', $vcard, $vcard); $this->assertContains('N:Kneschke;Lars', $vcard, $vcard); $this->assertContains('NOTE:Notes\\nwith\\nLine Break', $vcard, $vcard); $this->assertContains('ORG:Organisation;Department', $vcard, $vcard); $this->assertContains('TEL;TYPE=CELL,VOICE,PREF:+49 MOBIL', $vcard, $vcard); $this->assertContains('TEL;TYPE=CELL,IPHONE:Tel Iphone', $vcard, $vcard); $this->assertContains('TEL;TYPE=FAX,HOME:+49 FAX PRIVAT', $vcard, $vcard); $this->assertContains('TEL;TYPE=FAX,WORK:+49 FAX', $vcard, $vcard); $this->assertContains('TEL;TYPE=HOME,VOICE:+49 PRIVAT', $vcard, $vcard); $this->assertContains('TEL;TYPE=PAGER:+49 PAGER', $vcard, $vcard); $this->assertContains('TEL;TYPE=WORK,VOICE:+49 BUSINESS', $vcard, $vcard); $this->assertContains('TITLE:Team Leader', $vcard, $vcard); }
public function testConvertToVCard() { $contact = $this->testConvertToTine20Model(); $converter = Addressbook_Convert_Contact_VCard_Factory::factory(Addressbook_Convert_Contact_VCard_Factory::CLIENT_MACOSX); $vcard = $converter->fromTine20Model($contact)->serialize(); // required fields $this->assertContains('VERSION:3.0', $vcard, $vcard); $this->assertContains('PRODID:-//tine20.org//Tine 2.0//EN', $vcard, $vcard); // @todo can not test for folded lines $this->assertContains('ADR;TYPE=HOME:;;Address Privat 1;City Privat;;12345;C', $vcard, $vcard); $this->assertContains('ADR;TYPE=WORK:;;Address Business 1;City Business;;12345;C', $vcard, $vcard); $this->assertContains('EMAIL;TYPE=HOME:lars@kneschke.de', $vcard, $vcard); $this->assertContains('EMAIL;TYPE=WORK:l.kneschke@metaways.de', $vcard, $vcard); $this->assertContains('N:Kneschke;Lars', $vcard, $vcard); $this->assertContains('NOTE:Notes\\nwith\\nLine Break', $vcard, $vcard); $this->assertContains('ORG:Organisation;', $vcard, $vcard); $this->assertContains('TEL;TYPE=CELL:+49 MOBIL', $vcard, $vcard); $this->assertContains('TEL;TYPE=FAX;TYPE=HOME:+49 FAX PRIVAT', $vcard, $vcard); $this->assertContains('TEL;TYPE=FAX;TYPE=WORK:+49 FAX', $vcard, $vcard); $this->assertContains('TEL;TYPE=HOME:+49 PRIVAT', $vcard, $vcard); $this->assertContains('TEL;TYPE=PAGER:+49 PAGER', $vcard, $vcard); $this->assertContains('TEL;TYPE=WORK:+49 BUSINESS', $vcard, $vcard); }
public function testConvertToVCard() { $contact = $this->testConvertToTine20Model(); $converter = Addressbook_Convert_Contact_VCard_Factory::factory(Addressbook_Convert_Contact_VCard_Factory::CLIENT_EMCLIENT); $vcard = $converter->fromTine20Model($contact)->serialize(); // required fields $this->assertContains('VERSION:3.0', $vcard, $vcard); $version = Tinebase_Application::getInstance()->getApplicationByName('Addressbook')->version; $this->assertContains("PRODID:-//tine20.com//Tine 2.0 Addressbook V{$version}//EN", $vcard, $vcard); // @todo can not test for folded lines $this->assertContains('ADR;TYPE=HOME:;;Address Privat;City Privat;;98765;COUNTRY PRIVAT', $vcard, $vcard); $this->assertContains('ADR;TYPE=WORK:;;Address Business;City Business;;12345;COUNTRY BUSINESS', $vcard, $vcard); $this->assertContains('EMAIL:privat@email.de', $vcard, $vcard); $this->assertContains('EMAIL;TYPE=PREF:business@email.de', $vcard, $vcard); $this->assertContains('N:Nach;Vor;;Prefix', $vcard, $vcard); $this->assertContains('NOTE:Notes\\nwith\\nbreaks', $vcard, $vcard); $this->assertContains('ORG:Firma;Abteilung', $vcard, $vcard); $this->assertContains('TEL;TYPE=CELL:+49 MOBIL', $vcard, $vcard); $this->assertContains('TEL;TYPE=FAX,HOME:+49 PRIVATFAX', $vcard, $vcard); $this->assertContains('TEL;TYPE=FAX,WORK:+49 FAX', $vcard, $vcard); $this->assertContains('TEL;TYPE=HOME,VOICE:+49 PRIVAT', $vcard, $vcard); $this->assertContains('TEL;TYPE=OTHER:+49 MOBIL2', $vcard, $vcard); $this->assertContains('TEL;TYPE=WORK,VOICE:+49 BUSINESS', $vcard, $vcard); }
public function testConvertToVCard() { $contact = $this->testConvertToTine20Model(); $converter = Addressbook_Convert_Contact_VCard_Factory::factory(Addressbook_Convert_Contact_VCard_Factory::CLIENT_MACOSX); $vcard = $converter->fromTine20Model($contact)->serialize(); // required fields $this->assertContains('VERSION:3.0', $vcard, $vcard); $version = Tinebase_Application::getInstance()->getApplicationByName('Addressbook')->version; $this->assertContains("PRODID:-//tine20.com//Tine 2.0 Addressbook V{$version}//EN", $vcard, $vcard); // @todo can not test for folded lines $this->assertContains('ADR;TYPE=HOME:;;Address Privat 1;City Privat;;12345;C', $vcard, $vcard); $this->assertContains('ADR;TYPE=WORK:;;Address Business 1;City Business;;12345;C', $vcard, $vcard); $this->assertContains('EMAIL;TYPE=HOME:lars@kneschke.de', $vcard, $vcard); $this->assertContains('EMAIL;TYPE=WORK:l.kneschke@metaways.de', $vcard, $vcard); $this->assertContains('N:Kneschke;Lars', $vcard, $vcard); $this->assertContains('NOTE:Notes\\nwith\\nLine Break and \\, and \\; yeah!', $vcard, $vcard); $this->assertContains('ORG:ORGANI\\,SATION;UN\\;IT', $vcard, $vcard); $this->assertContains('TEL;TYPE=CELL:+49 MOBIL', $vcard, $vcard); $this->assertContains('TEL;TYPE=FAX,HOME:+49 FAX PRIVAT', $vcard, $vcard); $this->assertContains('TEL;TYPE=FAX,WORK:+49 FAX', $vcard, $vcard); $this->assertContains('TEL;TYPE=HOME:+49 PRIVAT', $vcard, $vcard); $this->assertContains('TEL;TYPE=PAGER:+49 PAGER', $vcard, $vcard); $this->assertContains('TEL;TYPE=WORK:+49 BUSINESS', $vcard, $vcard); }