/**
  * (non-PHPdoc)
  * @see Tinebase_WebDav_Collection_AbstractContainerTree::getChildren()
  */
 public function getChildren()
 {
     list($client) = Addressbook_Convert_Contact_VCard_Factory::getUserAgent();
     if (count($this->_getPathParts()) === 2 && in_array($client, array(Addressbook_Convert_Contact_VCard_Factory::CLIENT_MACOSX))) {
         $children[] = $this->getChild(Addressbook_Frontend_CardDAV_AllContacts::NAME);
         return $children;
     }
     return parent::getChildren();
 }
Пример #2
0
 /**
  * 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;
 }
Пример #6
0
 /**
  * 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);
 }
Пример #9
0
 /**
  * test factory with useragent string from kde 
  */
 public function testUserAgentKDE()
 {
     list($backend, $version) = Addressbook_Convert_Contact_VCard_Factory::parseUserAgent('Mozilla/5.0 (X11; Linux i686) KHTML/4.7.3 (like Gecko) Konqueror/4.7');
     $this->assertEquals(Addressbook_Convert_Contact_VCard_Factory::CLIENT_KDE, $backend);
     $this->assertEquals('4.7', $version);
 }
 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);
 }
Пример #11
0
 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);
 }