[ Index ]
 

Code source de eGroupWare 1.2.106-2

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/phpgwapi/inc/ -> class.vcard.inc.php (source)

   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  ?>


Généré le : Sun Feb 25 17:20:01 2007 par Balluche grâce à PHPXref 0.7