[ Index ] |
|
Code source de eGroupWare 1.2.106-2 |
1 <?php 2 /**************************************************************************\ 3 * eGroupWare API - VCard import/export class * 4 * This file written by Miles Lott <milos@groupwhere.org> * 5 * Parse vcards->contacts class fields, and vice-versa * 6 * Copyright (C) 2001-2004 Miles Lott * 7 * ------------------------------------------------------------------------ * 8 * This library is free software; you can redistribute it and/or modify it * 9 * under the terms of the GNU Lesser General Public License as published by * 10 * the Free Software Foundation; either version 2.1 of the License, * 11 * or any later version. * 12 * This library is distributed in the hope that it will be useful, but * 13 * WITHOUT ANY WARRANTY; without even the implied warranty of * 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * 15 * See the GNU Lesser General Public License for more details. * 16 * You should have received a copy of the GNU Lesser General Public License * 17 * along with this library; if not, write to the Free Software Foundation, * 18 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * 19 \**************************************************************************/ 20 21 /* $Id: class.vcard.inc.php 13606 2004-01-31 19:48:34Z milosch $ */ 22 23 class vcard 24 { 25 var $import = array( 26 'n' => 'n', 27 'sound' => 'sound', 28 'bday' => 'bday', 29 'note' => 'note', 30 'tz' => 'tz', 31 'geo' => 'geo', 32 'url' => 'url', 33 'pubkey' => 'pubkey', 34 'org' => 'org', 35 'title' => 'title', 36 'adr' => 'adr', 37 'label' => 'label', 38 'tel' => 'tel', 39 'email' => 'email' 40 ); 41 42 var $export = array( 43 'fn' => 'FN', 44 'n_given' => 'N;GIVEN', 45 'n_family' => 'N;FAMILY', 46 'n_middle' => 'N;MIDDLE', 47 'n_prefix' => 'N;PREFIX', 48 'n_suffix' => 'N;SUFFIX', 49 'sound' => 'SOUND', 50 'bday' => 'BDAY', 51 'note' => 'NOTE', 52 'tz' => 'TZ', 53 'geo' => 'GEO', 54 'url' => 'URL', 55 'pubkey' => 'PUBKEY', 56 'org_name' => 'ORG;NAME', 57 'org_unit' => 'ORG;UNIT', 58 'title' => 'TITLE', 59 60 'adr_one_type' => 'ADR;TYPE;WORK', 61 'adr_two_type' => 'ADR;TYPE;HOME', 62 'tel_prefer' => 'TEL;PREFER', 63 'email_type' => 'EMAIL;TYPE;WORK', 64 'email_home_type' => 'EMAIL;TYPE;HOME', 65 66 'adr_one_street' => 'ADR;WORK;STREET', 67 'adr_one_locality' => 'ADR;WORK;LOCALITY', 68 'adr_one_region' => 'ADR;WORK;REGION', 69 'adr_one_postalcode' => 'ADR;WORK;POSTALCODE', 70 'adr_one_countryname' => 'ADR;WORK;COUNTRYNAME', 71 'address2' => 'EXT', 72 'label' => 'LABEL', 73 74 'adr_two_street' => 'ADR;HOME;STREET', 75 'adr_two_locality' => 'ADR;HOME;LOCALITY', 76 'adr_two_region' => 'ADR;HOME;REGION', 77 'adr_two_postalcode' => 'ADR;HOME;POSTALCODE', 78 'adr_two_countryname' => 'ADR;HOME;COUNTRYNAME', 79 80 'tel_work' => 'TEL;WORK', 81 'tel_home' => 'TEL;HOME', 82 'tel_voice' => 'TEL;VOICE', 83 'tel_fax' => 'TEL;FAX', 84 'tel_msg' => 'TEL;MSG', 85 'tel_cell' => 'TEL;CELL', 86 'tel_pager' => 'TEL;PAGER', 87 'tel_bbs' => 'TEL;BBS', 88 'tel_modem' => 'TEL;MODEM', 89 'tel_car' => 'TEL;CAR', 90 'tel_isdn' => 'TEL;ISDN', 91 'tel_video' => 'TEL;VIDEO', 92 'email' => 'EMAIL;WORK', 93 'email_home' => 'EMAIL;HOME' 94 ); 95 96 var $names = array( 97 'family' => 'family', 98 'given' => 'given', 99 'middle' => 'middle', 100 'prefix' => 'prefix', 101 'suffix' => 'suffix' 102 ); 103 104 function vcard() 105 { 106 /* _debug_array($this); */ 107 } 108 109 /* 110 This now takes the upload filename 111 and parses using the class string and array processors. 112 The return is a contacts class entry, ready for add. 113 */ 114 function in_file($filename='') 115 { 116 if(!$filename) 117 { 118 return array(); 119 } 120 121 $buffer = array(); 122 123 $fp = fopen($filename,'r'); 124 while($data = fgets($fp,8000)) 125 { 126 list($name,$value,$extra) = split(':', $data); 127 if(substr($value,0,5) == 'http') 128 { 129 $value = $value . ':'.$extra; 130 } 131 if($name && $value) 132 { 133 foreach($this->import as $fname => $fvalue) 134 { 135 if(strstr(strtolower($name), $this->import[$fname])) 136 { 137 $value = trim($value); 138 $value = str_replace('=0D=0A',"\n",$value); 139 $buffer += array($name => $value); 140 } 141 } 142 } 143 } 144 fclose($fp); 145 146 $entry = $this->in($buffer); 147 /* _debug_array($entry);exit; */ 148 149 return $entry; 150 } 151 152 /* Try to decode strings that may be base64 encoding, otherwise assume they are QUOTED-PRINTABLE */ 153 function decode($string) 154 { 155 $tmp = base64_decode($string); 156 if(base64_encode($tmp) == $string) 157 { 158 return $tmp; 159 } 160 else 161 { 162 return(str_replace('=0D=0A',"\n",$string)); 163 } 164 } 165 166 function encode($string, $type='qp') 167 { 168 $out = ''; 169 switch($type) 170 { 171 case 'qp': 172 $out = str_replace("\r\n",'=0D=0A',$string); 173 $out = str_replace("\n",'=0D=0A',$out); 174 break; 175 case 'base64': 176 $out = base64_encode($string); 177 } 178 return $out; 179 } 180 181 /* 182 This is here to match the old in() function, now called _parse_in(). 183 It is called now also by in_file() above. 184 It takes a pre-parsed file using the methods in in_file(), returns a clean contacts class array. 185 */ 186 function in($buffer) 187 { 188 $buffer = $this->_parse_in($buffer); 189 190 $contacts = CreateObject('phpgwapi.contacts'); /* RB 2001/05/08 Lotus Organizer uses/needs extrafields from edit.php */ 191 $all_fields = $contacts->stock_contact_fields + array( 192 'ophone' => 'ophone', 193 'address2' => 'address2', 194 'address3' => 'address3' 195 ); 196 197 foreach($all_fields as $fname => $fvalue) 198 { 199 if($buffer[$fname]) 200 { 201 $entry[$fname] = $buffer[$fname]; 202 /* echo '<br>'.$fname.' = "'.$entry[$fname].'"'."\n"; */ 203 } 204 } 205 return $entry; 206 } 207 208 /* 209 Pass this an associative array of fieldnames and values 210 returns a clean array based on contacts class std fields 211 This array can then be passed via $phpgw->contacts->add($ownerid,$buffer) 212 */ 213 function _parse_in($buffer) 214 { 215 /* Following is a lot of pain and little magic */ 216 settype($buffer,'array'); 217 foreach($buffer as $name => $value) 218 { 219 $field = split(';',$name); 220 $field[0] = ereg_replace("A\.",'',$field[0]); 221 $field[0] = ereg_replace("B\.",'',$field[0]); 222 $field[0] = ereg_replace("C\.",'',$field[0]); 223 $field[0] = ereg_replace("D\.",'',$field[0]); 224 $values = split(';',$value); 225 if($field[1]) 226 { 227 //echo $field[0]; 228 switch($field[0]) 229 { 230 case 'LABEL': 231 $entry['label'] = $this->decode($values[0]); 232 break; 233 case 'NOTE': 234 $entry['note'] = $this->decode($values[0]); 235 break; 236 case 'ADR': 237 switch($field[1]) 238 { 239 case 'INTL': 240 switch($field[2]) 241 { 242 case 'WORK': 243 if(!stristr($buffer['adr_one_type'],$field[1])) 244 { 245 $entry['adr_one_type'] .= 'intl;'; 246 } 247 if(!$buffer['adr_one_street']) 248 { 249 $entry['address2'] = $values[1]; 250 $entry['adr_one_street'] = $values[2]; 251 $entry['adr_one_locality'] = $values[3]; 252 $entry['adr_one_region'] = $values[4]; 253 $entry['adr_one_postalcode'] = $values[5]; 254 $entry['adr_one_countryname'] = $values[6]; 255 } 256 break; 257 case 'HOME': 258 if(!stristr($buffer['adr_two_type'],$field[1])) 259 { 260 $entry['adr_two_type'] .= 'intl;'; 261 } 262 if(!$buffer['adr_two_street']) 263 { 264 $entry['adr_two_street'] = $values[2]; 265 $entry['adr_two_locality'] = $values[3]; 266 $entry['adr_two_region'] = $values[4]; 267 $entry['adr_two_postalcode'] = $values[5]; 268 $entry['adr_two_countryname'] = $values[6]; 269 } 270 break; 271 default: 272 break; 273 } 274 break; 275 case 'DOM': 276 switch($field[2]) 277 { 278 case 'WORK': 279 if(!stristr($buffer['adr_one_type'],$field[1])) 280 { 281 $entry['adr_one_type'] .= 'dom;'; 282 } 283 if(!$buffer['adr_one_street']) 284 { 285 $entry['address2'] = $values[1]; 286 $entry['adr_one_street'] = $values[2]; 287 $entry['adr_one_locality'] = $values[3]; 288 $entry['adr_one_region'] = $values[4]; 289 $entry['adr_one_postalcode'] = $values[5]; 290 $entry['adr_one_countryname'] = $values[6]; 291 } 292 break; 293 case 'HOME': 294 if(!stristr($buffer['adr_two_type'],$field[1])) 295 { 296 $entry['adr_two_type'] .= 'dom;'; 297 } 298 if(!$buffer['adr_two_street']) 299 { 300 $entry['adr_two_street'] = $values[2]; 301 $entry['adr_two_locality'] = $values[3]; 302 $entry['adr_two_region'] = $values[4]; 303 $entry['adr_two_postalcode'] = $values[5]; 304 $entry['adr_two_countryname'] = $values[6]; 305 } 306 break; 307 default: 308 break; 309 } 310 break; 311 case 'PARCEL': 312 switch($field[2]) 313 { 314 case 'WORK': 315 if(!stristr($buffer['adr_one_type'],$field[1])) 316 { 317 $entry['adr_one_type'] .= 'parcel;'; 318 } 319 if(!$buffer['adr_one_street']) 320 { 321 $entry['address2'] = $values[1]; 322 $entry['adr_one_street'] = $values[2]; 323 $entry['adr_one_locality'] = $values[3]; 324 $entry['adr_one_region'] = $values[4]; 325 $entry['adr_one_postalcode'] = $values[5]; 326 $entry['adr_one_countryname'] = $values[6]; 327 } 328 break; 329 case 'HOME': 330 if(!stristr($buffer['adr_two_type'],$field[1])) 331 { 332 $entry['adr_two_type'] .= 'parcel;'; 333 } 334 if(!$buffer['adr_two_street']) 335 { 336 $entry['adr_two_street'] = $values[2]; 337 $entry['adr_two_locality'] = $values[3]; 338 $entry['adr_two_region'] = $values[4]; 339 $entry['adr_two_postalcode'] = $values[5]; 340 $entry['adr_two_countryname'] = $values[6]; 341 } 342 break; 343 default: 344 break; 345 } 346 break; 347 case 'POSTAL': 348 switch($field[2]) 349 { 350 case 'WORK': 351 if(!stristr($buffer['adr_one_type'],$field[1])) 352 { 353 $entry['adr_one_type'] .= 'postal;'; 354 } 355 if(!$buffer['adr_one_street']) 356 { 357 $entry['address2'] = $values[1]; 358 $entry['adr_one_street'] = $values[2]; 359 $entry['adr_one_locality'] = $values[3]; 360 $entry['adr_one_region'] = $values[4]; 361 $entry['adr_one_postalcode'] = $values[5]; 362 $entry['adr_one_countryname'] = $values[6]; 363 } 364 break; 365 case 'HOME': 366 if(!stristr($buffer['adr_two_type'],$field[1])) 367 { 368 $entry['adr_two_type'] .= 'postal;'; 369 } 370 if(!$buffer['adr_two_street']) 371 { 372 $entry['adr_two_street'] = $values[2]; 373 $entry['adr_two_locality'] = $values[3]; 374 $entry['adr_two_region'] = $values[4]; 375 $entry['adr_two_postalcode'] = $values[5]; 376 $entry['adr_two_countryname'] = $values[6]; 377 } 378 break; 379 default: 380 break; 381 } 382 break; 383 case 'WORK': 384 if(!$buffer['adr_one_street']) 385 { 386 $entry['address2'] = $values[1]; 387 $entry['adr_one_street'] = $values[2]; 388 $entry['adr_one_locality'] = $values[3]; 389 $entry['adr_one_region'] = $values[4]; 390 $entry['adr_one_postalcode'] = $values[5]; 391 $entry['adr_one_countryname'] = $values[6]; 392 } 393 break; 394 case 'HOME': 395 $entry['adr_two_street'] = $values[2]; 396 $entry['adr_two_locality'] = $values[3]; 397 $entry['adr_two_region'] = $values[4]; 398 $entry['adr_two_postalcode'] = $values[5]; 399 $entry['adr_two_countryname'] = $values[6]; 400 break; 401 default: 402 if(!$buffer['adr_one_street']) 403 { 404 $entry['address2'] = $values[1]; 405 $entry['adr_one_street'] = $values[2]; 406 $entry['adr_one_locality'] = $values[3]; 407 $entry['adr_one_region'] = $values[4]; 408 $entry['adr_one_postalcode'] = $values[5]; 409 $entry['adr_one_countryname'] = $values[6]; 410 } 411 break; 412 } 413 break; 414 case 'TEL': // RB 2001/05/07 added for Lotus Organizer ueses TEL;{WORK|HOME};{VOICE|FAX}[;PREF] 415 if($field[2] == 'FAX' && ($field[1] == 'WORK' || $field[i] == 'HOME')) 416 { 417 array_shift($field); // --> ignore the WORK or HOME if FAX follows, HOME;FAX and HOME;TEL are maped later 418 } 419 switch($field[1]) 420 { 421 case 'PREF': 422 //echo $field[2].' is preferred'; 423 if($field[2]) 424 { 425 $buffer['tel_prefer'] .= strtolower($field[2]) . ';'; 426 } 427 break; 428 case 'WORK': // RB don't overwrite TEL;WORK;VOICE (main nr.) with TEL;WORK, TEL;WORK --> tel_isdn 429 $entry[$buffer['tel_work'] ? 'tel_isdn' : 'tel_work'] = $values[0]; 430 if($field[2] == 'PREF') 431 { 432 $entry['tel_prefer'] .= strtolower($field[1]) . ';'; 433 } 434 break; 435 case 'HOME': // RB don't overwrite TEL;HOME;VOICE (main nr.) with TEL;HOME, TEL;HOME --> ophone 436 $entry[$buffer['tel_home'] ? 'ophone' : 'tel_home' ] = $values[0]; 437 if($field[2] == 'PREF') 438 { 439 $entry['tel_prefer'] .= strtolower($field[1]) . ';'; 440 } 441 break; 442 case 'VOICE': 443 $entry['tel_voice'] = $values[0]; 444 if($field[2] == 'PREF') 445 { 446 $entry['tel_prefer'] .= strtolower($field[1]) . ';'; 447 } 448 break; 449 case 'FAX': 450 if($entry['tel_fax']) 451 { 452 // RB don't overwrite TEL;WORK;FAX with TEL;HOME;FAX, TEL;HOME;FAX --> ophone 453 $entry['ophone'] = $values[0] . ' Fax'; 454 break; 455 } 456 $entry['tel_fax'] = $values[0]; 457 if($field[2] == 'PREF') 458 { 459 $entry['tel_prefer'] .= strtolower($field[1]) . ';'; 460 } 461 break; 462 case 'MSG': 463 $entry['tel_msg'] = $values[0]; 464 if($field[2] == 'PREF') 465 { 466 $entry['tel_prefer'] .= strtolower($field[1]) . ';'; 467 } 468 break; 469 case 'CELL': 470 $entry['tel_cell'] = $values[0]; 471 if($field[2] == 'PREF') 472 { 473 $entry['tel_prefer'] .= strtolower($field[1]) . ';'; 474 } 475 break; 476 case 'PAGER': 477 $entry['tel_pager'] = $values[0]; 478 if($field[2] == 'PREF') 479 { 480 $entry['tel_prefer'] .= strtolower($field[1]) . ';'; 481 } 482 break; 483 case 'BBS': 484 $entry['tel_bbs'] = $values[0]; 485 if($field[2] == 'PREF') 486 { 487 $entry['tel_prefer'] .= strtolower($field[1]) . ';'; 488 } 489 break; 490 case 'MODEM': 491 $entry['tel_modem'] = $values[0]; 492 if($field[2] == 'PREF') 493 { 494 $entry['tel_prefer'] .= strtolower($field[1]) . ';'; 495 } 496 break; 497 case 'CAR': 498 $entry['tel_car'] = $values[0]; 499 if($field[2] == 'PREF') 500 { 501 $entry['tel_prefer'] .= strtolower($field[1]) . ';'; 502 } 503 break; 504 case 'ISDN': 505 $entry['tel_isdn'] = $values[0]; 506 if($field[2] == 'PREF') 507 { 508 $entry['tel_prefer'] .= strtolower($field[1]) . ';'; 509 } 510 break; 511 case 'VIDEO': 512 $entry['tel_video'] = $values[0]; 513 if($field[2] == 'PREF') 514 { 515 $entry['tel_prefer'] .= strtolower($field[1]) . ';'; 516 } 517 break; 518 default: 519 break; 520 } 521 break; 522 case 'EMAIL': 523 switch($field[1]) 524 { 525 case 'WORK': 526 $entry['email'] = $values[0]; 527 $entry['email_type'] = $field[2]; 528 break; 529 case 'HOME': 530 $entry['email_home'] = $values[0]; 531 $entry['email_home_type'] = $field[2]; 532 break; 533 default: 534 if($buffer['email']) 535 { 536 $entry['email_type'] = $field[2]; 537 } 538 elseif(!$buffer['email']) 539 { 540 $entry['email'] = $values[0]; 541 $entry['email_type'] = $field[1]; 542 } 543 break; 544 } 545 break; 546 case 'URL': // RB 2001/05/08 Lotus Organizer uses URL;WORK and URL;HOME (URL;HOME droped if both) 547 $entry['url'] = $values[0]; 548 break; 549 default: 550 break; 551 } 552 } 553 else 554 { 555 switch($field[0]) 556 { 557 case 'N': 558 $j=0; 559 foreach($this->names as $myname => $myval) 560 { 561 $namel = 'n_' . $myname; 562 $entry[$namel] = $values[$j]; 563 $j++; 564 } 565 break; 566 case 'FN': 567 $entry['fn'] = $values[0]; 568 break; 569 case 'TITLE': 570 $entry['title'] = $values[0]; 571 break; 572 case 'TZ': 573 $entry['tz'] = $values[0]; 574 break; 575 case 'GEO': 576 $entry['geo'] = $values[0]; 577 break; 578 case 'URL': 579 $entry['url'] = $values[0]; 580 break; 581 case 'NOTE': 582 $entry['note'] = $this->decode($values[0]); 583 break; 584 case 'KEY': 585 $entry['key'] = $this->decode($values[0]); 586 break; 587 case 'LABEL': 588 $entry['label'] = $this->decode($values[0]); 589 break; 590 case 'BDAY': #1969-12-31 591 if(strlen($values[0]) == 8) 592 { 593 $entry['bday'] = substr($values[0],4,2) . '/' . substr($values[0],6,2) . '/' . substr($values[0],0,4); 594 } 595 else 596 { 597 $tmp = split('-',$values[0]); 598 if($tmp[0]) 599 { 600 $entry['bday'] = $tmp[1] . '/' . $tmp[2] . '/' . $tmp[0]; 601 } 602 } 603 break; 604 case 'ORG': // RB 2001/05/07 added for Lotus Organizer: ORG:Company;Department 605 $entry['org_name'] = $values[0]; 606 $entry['org_unit'] = $values[1]; 607 break; 608 } 609 } 610 } 611 $entry['tel_prefer'] = substr($buffer['tel_prefer'],0,-1); 612 $entry['adr_one_type'] = substr($buffer['adr_one_type'],0,-1); 613 $entry['adr_two_type'] = substr($buffer['adr_two_type'],0,-1); 614 615 if(count($street = split("\r*\n",$buffer['adr_one_street'],3)) > 1) 616 { 617 $entry['adr_one_street'] = $street[0]; // RB 2001/05/08 added for Lotus Organizer to split multiline adresses 618 $entry['address2'] = $street[1]; 619 $entry['address3'] = $street[2]; 620 } 621 622 return $entry; 623 } 624 625 // Takes an array of contacts class fields/values, turns it into a vcard string: 626 // 627 // for($i=0;$i<count($buffer);$i++) 628 // { 629 // $vcards .= $this->vcard->out($buffer[$i]); 630 // } 631 // 632 function out($buffer) 633 { 634 $entry = ''; 635 $header = 'BEGIN:VCARD' . "\n"; 636 $header .= 'VERSION:2.1' . "\n"; 637 $header .= 'X-EGROUPWARE-FILE-AS:eGroupWare.org' . "\n"; 638 639 foreach($this->export as $name => $value) 640 { 641 if(!empty($buffer[$value])) 642 { 643 $mult = explode(';',$value); 644 if(!$mult[1]) 645 { // Normal 646 if(strstr($buffer[$value],"\r\n") || strstr($buffer[$value],"\n")) 647 { 648 $buffer[$value] = $this->encode($buffer[$value]); 649 $entry .= $value . ';QUOTED-PRINTABLE:' . $buffer[$value]."\n"; 650 } 651 elseif($value == 'BDAY') 652 { 653 $tmp = split('/',$buffer[$value]); # 12/31/1969 -> 1969-12-31 654 if($tmp[0]) 655 { 656 if(strlen($tmp[0]) == 1) { $tmp[0] = '0'.$tmp[0]; } 657 if(strlen($tmp[1]) == 1) { $tmp[1] = '0'.$tmp[1]; } 658 $entry .= 'BDAY:' . $tmp[2] . '-' . $tmp[0] . '-' . $tmp[1] . "\n"; 659 } 660 } 661 else 662 { 663 $entry .= $value . ':' . $buffer[$value] . "\n"; 664 } 665 } 666 else 667 { 668 switch($mult[0]) 669 { 670 case 'N': 671 switch($mult[1]) 672 { 673 case 'PREFIX': 674 $prefix = ';' . $buffer[$value]; 675 break; 676 case 'GIVEN': 677 $firstname = ';' . $buffer[$value]; 678 break; 679 case 'MIDDLE': 680 $middle = ';' . $buffer[$value]; 681 break; 682 case 'FAMILY': 683 $lastname = $buffer[$value]; 684 break; 685 case 'SUFFIX': 686 $suffix = ';' . $buffer[$value]; 687 break; 688 } 689 break; 690 case 'ORG': 691 switch($mult[1]) 692 { 693 case 'NAME': 694 $org_name = $buffer[$value]; 695 break; 696 case 'UNIT': 697 $org_unit = ';' . $buffer[$value]; 698 break; 699 } 700 break; 701 case 'ADR': 702 switch($mult[1]) 703 { 704 case 'TYPE': 705 $types = explode(';',$buffer[$value]); 706 if($types[1]) 707 { 708 while($type = each($types)) 709 { 710 $typei[$i][$mult[2]] .= ';' . strtoupper($type[1]); 711 } 712 } 713 elseif($types[0]) 714 { 715 $typei[$i][$mult[2]] .= ';' . strtoupper($types[0]); 716 } 717 else 718 { 719 $typei[$i][$mult[2]] .= ';' . strtoupper($buffer[$value]); 720 } 721 //echo "TYPE=".$typei[$i][$mult[2]]; 722 break; 723 case 'WORK': 724 $workaddr .= $buffer[$value] . ';'; 725 $workattr = $mult[0] . ';' . $mult[1] . $typei[$i][$mult[1]]; 726 break; 727 case 'HOME': 728 $homeaddr .= $buffer[$value] . ';'; 729 $homeattr = $mult[0] . ';' . $mult[1] . $typei[$i][$mult[1]]; 730 break; 731 default: 732 break; 733 } 734 break; 735 case 'TEL': 736 switch($mult[1]) 737 { 738 case 'PREFER': 739 $prefer = explode(';',$buffer[$value]); 740 if($prefer[1]) 741 { 742 while($pref = strtoupper(each($prefer))) 743 { 744 $prefi[$i][$pref] = ';PREF'; 745 } 746 //echo 'PREF1'; 747 } 748 elseif($prefer[0]) 749 { 750 $prefi[$i][strtoupper($prefer[0])] = ';PREF'; 751 //echo 'PREF='.strtoupper($prefer[0]); 752 } 753 elseif($buffer[$value]) 754 { 755 $prefi[$i][$buffer[$value]] = ';PREF'; 756 //echo 'PREF3'; 757 } 758 break; 759 case 'WORK': 760 // Wow, this is fun! 761 $entry .= 'A.' . $mult[0] . ';' . $mult[1] . $prefi[$i][$mult[1]] . ':' . $buffer[$value] . "\n"; 762 break; 763 case 'HOME': 764 $entry .= 'B.' . $mult[0] . ';' . $mult[1] . $prefi[$i][$mult[1]] . ':' . $buffer[$value] . "\n"; 765 break; 766 default: 767 $entry .= $mult[0] . ';' . $mult[1] . $prefi[$i][$mult[1]] . ':' . $buffer[$value] . "\n"; 768 break; 769 } 770 break; 771 case 'EMAIL': 772 switch($mult[1]) 773 { 774 case 'TYPE': 775 if($mult[2] == 'WORK') { $emailtype = ';' . $buffer[$value]; } 776 if($mult[2] == 'HOME') { $hemailtype = ';' . $buffer[$value]; } 777 break; 778 case 'WORK': 779 $newval = 'A.'.$value; 780 $entry .= $newval . $emailtype . ':' . $buffer[$value] . "\n"; 781 break; 782 case 'HOME': 783 $newval = 'B.' . $value; 784 $entry .= $newval . $hemailtype . ':' . $buffer[$value] . "\n"; 785 break; 786 default: 787 break; 788 } 789 break; 790 default: 791 break; 792 } //end switch($mult[0]) 793 } //end else 794 } //end if(!empty) 795 } //end while 796 797 if($lastname && $firstname) 798 { 799 $entries .= $header; 800 $entries .= 'N:' . $lastname . $firstname . $middle . $prefix . $suffix . "\n"; 801 $entries .= $entry; 802 803 if(!$buffer['FN']) 804 { 805 if($lastname || $firstname) 806 { 807 $entries .= 'FN:' . substr($firstname,1) . ' ' . $lastname . "\n"; 808 } 809 } 810 if($org_name || $org_unit) 811 { 812 $entries .= 'ORG:' . $org_name . $org_unit . "\n"; 813 } 814 815 $workattr = str_replace('ADR;','',$workattr); 816 $homeattr = str_replace('ADR;','',$homeattr); 817 if(!$buffer['EXT']) { $buffer['EXT'] = ';'; } 818 if($workaddr) 819 { 820 $work = 'A.ADR;' . $workattr . ':;' . $buffer['EXT'] . substr($workaddr,0,-1) . "\n"; 821 if(!$buffer['LABEL']) 822 { 823 $wlabel = substr($workaddr,0,-1); 824 $wlabel = str_replace(';','=0D=0A',$wlabel); 825 //$wlabel = str_replace('(',',',$wlabel); 826 //$wlabel = str_replace(')',',',$wlabel); 827 $wlabel = 'LABEL;WORK;QUOTED-PRINTABLE:' . $wlabel . "\n"; 828 } 829 } 830 if($homeaddr) 831 { 832 $home = 'B.ADR;'.$homeattr.':;;'.substr($homeaddr,0,-1)."\n"; 833 $hlabel = substr($homeaddr,0,-1); 834 $hlabel = str_replace(';','=0D=0A',$hlabel); 835 //$hlabel = str_replace('(',',',$hlabel); 836 //$hlabel = str_replace(')',',',$hlabel); 837 $hlabel = 'LABEL;HOME;QUOTED-PRINTABLE:' . $hlabel . "\n"; 838 } 839 $entries = str_replace('PUBKEY','KEY',$entries); 840 $entries .= $work . $home . $wlabel . $hlabel . 'END:VCARD' . "\n"; 841 $entries .= "\n"; 842 843 $buffer = $entries; 844 return $buffer; 845 } 846 else 847 { 848 return; 849 } 850 } //end function 851 } //end class 852 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sun Feb 25 17:20:01 2007 | par Balluche grâce à PHPXref 0.7 |