PHP Classes

File: ext/hcard.profile.php

Recommend this page to a friend!
  Classes of Raskin Veniamin   PHP Address Parser   ext/hcard.profile.php   Download  
File: ext/hcard.profile.php
Role: Example script
Content type: text/plain
Description: Example script
Class: PHP Address Parser
Extract address and other contact types from text
Author: By
Last change:
Date: 4 years ago
Size: 3,153 bytes
 

Contents

Class file image Download
<?php
// hcard profile for hkit

$this->root_class = 'vcard';

$this->classes = array(
   
'fn', array('honorific-prefix', 'given-name', 'additional-name', 'family-name', 'honorific-suffix'),
   
'n', array('honorific-prefix', 'given-name', 'additional-name', 'family-name', 'honorific-suffix'),
   
'adr', array('post-office-box', 'extended-address', 'street-address', 'postal-code', 'country-name', 'type', 'region', 'locality'),
   
'label', 'bday', 'agent', 'nickname', 'photo', 'class',
   
'email', array('type', 'value'),
   
'category', 'key', 'logo', 'mailer', 'note',
   
'org', array('organization-name', 'organization-unit'),
   
'tel', array('type', 'value'),
   
'geo', array('latitude', 'longitude'),
   
'tz', 'uid', 'url', 'rev', 'role', 'sort-string', 'sound', 'title'
);

// classes that must only appear once per card
$this->singles = array(
   
'fn'
);

// classes that are required (not strictly enforced - give at least one!)
$this->required = array(
   
'fn'
);

$this->att_map = array(
   
'fn' => array('IMG|alt'),
   
'url' => array('A|href', 'IMG|src', 'AREA|href'),
   
'photo' => array('IMG|src'),
   
'bday' => array('ABBR|title'),
   
'logo' => array('IMG|src'),
   
'email' => array('A|href'),
   
'geo' => array('ABBR|title')
);


$this->callbacks = array(
   
'url' => array($this, 'resolvePath'),
   
'photo' => array($this, 'resolvePath'),
   
'logo' => array($this, 'resolvePath'),
   
'email' => array($this, 'resolveEmail')
);



function
hKit_hcard_post($a)
{

    foreach (
$a as &$vcard){

       
hKit_implied_n_optimization($vcard);
       
hKit_implied_n_from_fn($vcard);

    }

    return
$a;

}


function
hKit_implied_n_optimization(&$vcard)
{
    if (
array_key_exists('fn', $vcard) && !is_array($vcard['fn']) &&
        !
array_key_exists('n', $vcard) && (!array_key_exists('org', $vcard) || $vcard['fn'] != $vcard['org'])){

        if (
sizeof(explode(' ', $vcard['fn'])) == 2){
           
$patterns = array();
           
$patterns[] = array('/^(\S+),\s*([\S\pL]{1})$/', 2, 1); // Lastname, Initial
           
$patterns[] = array('/^(\S+)\s*([\S\pL]{1})\.*$/u', 2, 1); // Lastname Initial(.)
           
$patterns[] = array('/^(\S+),\s*(\S+)$/', 2, 1); // Lastname, Firstname
           
$patterns[] = array('/^(\S+)\s*(\S+)$/', 1, 2); // Firstname Lastname

           
foreach ($patterns as $pattern){
                if (
preg_match($pattern[0], $vcard['fn'], $matches) === 1){
                   
$n = array();
                   
$n['given-name'] = $matches[$pattern[1]];
                   
$n['family-name'] = $matches[$pattern[2]];
                   
$vcard['n'] = $n;


                    break;
                }
            }
        }
    }
}


function
hKit_implied_n_from_fn(&$vcard)
{
    if (
array_key_exists('fn', $vcard) && is_array($vcard['fn'])
        && !
array_key_exists('n', $vcard) && (!array_key_exists('org', $vcard) || $vcard['fn'] != $vcard['org'])){

       
$vcard['n'] = $vcard['fn'];
    }

    if (
array_key_exists('fn', $vcard) && is_array($vcard['fn']) && isset($vcard['fn']['text'])){
       
$vcard['fn'] = $vcard['fn']['text'];
    }
}

?>