Example #1
0
 public function testFormatMSID1()
 {
     $this->assertEquals(formatMSID('0707123456', '46'), '46707123456');
     $this->assertEquals(formatMSID('0707-123 456', '46'), '46707123456');
     $this->assertEquals(formatMSID('46707123456', '46'), '46707123456');
     $this->assertEquals(formatMSID('0046707123456', '46'), '46707123456');
     // 46 is country code for Sweden
     $this->assertEquals(formatMSID('04612345', '46'), '464612345');
     // 046 is area code for Lund, Sweden
     $this->assertEquals(formatMSID('0044', '46'), '0044');
     // dont touch short special codes
 }
Example #2
0
 /**
  * Parses the content inside a VCARD:BEGIN + VCARD:END couple into a VcardAddress object
  */
 private static function parseVcard($data)
 {
     $data = str_replace("\r\n", "\n", $data);
     $data = str_replace("\r", "\n", $data);
     $rows = explode("\n", $data);
     $adr = new VcardAddress();
     foreach ($rows as $row) {
         $p1 = strpos($row, ':');
         if ($p1 === false) {
             throw new \Exception('invalid vcard format: ' . $row);
         }
         $key = substr($row, 0, $p1);
         $val = explode(';', substr($row, $p1 + 1));
         $params = array();
         $p2 = strpos($key, ';');
         if ($p2 !== false) {
             $params = explode(';', substr($key, $p2 + 1));
             $key = substr($key, 0, $p2);
         }
         switch ($key) {
             case 'BEGIN':
                 break;
             case 'END':
                 break;
             case 'VERSION':
                 if ($val[0] != '2.1') {
                     throw new \Exception('unsupported vcard version ' . $val[0]);
                 }
                 break;
             case 'BDAY':
                 $adr->birthdate = $val[0];
                 break;
             case 'N':
                 //val = Lastname;Firstname;??;??;??
                 $adr->last_name = $val[0];
                 $adr->first_name = $val[1];
                 break;
             case 'FN':
                 // full name.. XXX FIXME parse ONLY if no "N" tag was found
                 break;
             case 'TEL':
                 switch ($params[count($params) - 1]) {
                     case 'CELL':
                         $adr->cellphone = formatMSID($val[0]);
                         break;
                     case 'HOME':
                         $adr->homephone = formatMSID($val[0]);
                         break;
                     case 'WORK':
                         $adr->cellphone = formatMSID($val[0]);
                         break;
                     default:
                         dp('XXX VcardReader unhandled telephone type: ' . $params[count($params) - 1]);
                 }
                 break;
             case 'ADR':
                 switch ($params[0]) {
                     case 'HOME':
                         // val = ;;Terrassebakken 14;Ålgård;;4330;
                         $adr->street = $val[2];
                         $adr->city = $val[3];
                         $adr->zipcode = $val[5];
                         break;
                     case 'WORK':
                         // ADR;WORK:;;Verkensveien 6;Hell;;7517;
                         // XXXX: store work adddress separately?
                         if (!$adr->street) {
                             $adr->street = $val[2];
                             $adr->city = $val[3];
                             $adr->zipcode = $val[5];
                         }
                         break;
                     default:
                         dp('XXX VcardReader unhandled address type: ' . $params[0]);
                 }
                 break;
             default:
                 //echo "key ".$key."\t, params = ".implode('; ', $params)."\t, val = ".implode('; ', $val)."\n";
         }
     }
     return $adr;
 }