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 }
/** * 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; }