[[toc]]
This document is intended to help Horde administrators create a more Outlook-like experience for their users by giving them the address book fields they are accustomed to. An export of an Outlook 2003 address book contains a number of fields not included in the Outlook UI. This document only covers the fields available in the Outlook UI.
++ Modifying attributes.php
//turba/config/attributes.php// is the file that defines which fields are available to turba, and what type of data they can hold. Make the following changes and additions to the default //attributes.php//
Modify the //name// field to look like:
$attributes['name'] = array(
'label' => '',
'type' => 'html',
'required' => true
);
Modify the //lastname// field to look like:
$attributes['lastname'] = array(
'label' => _("Last Name"),
'type' => 'text',
'required' => false
);
Modify the //email// field to look like:
$attributes['email'] = array(
'label' => _("Email"),
'type' => 'email',
'required' => false
);
Modify the //alias// field to look like:
$attributes['alias'] = array(
'label' => _("Alias"),
'type' => 'text',
'required' => false
);
Modify the //title// field to look like:
$attributes['title'] = array(
'label' => _("Title"),
'type' => 'text',
'required' => false
);
Modify the //company// field to look like:
$attributes['company'] = array(
'label' => _("Company"),
'type' => 'text',
'required' => false
);
Modify the //homeAddress// field to look like:
$attributes['homeAddress'] = array(
'label' => '',
'type' => 'addresslink',
'required' => false,
);
Modify the //workAddress// field to look like:
$attributes['workAddress'] = array(
'label' => '',
'type' => 'addresslink',
'required' => false,
);
Modify the //cellPhone// field to look like:
$attributes['cellPhone'] = array(
'label' => _("Mobile Phone"),
'type' => 'text',
'required' => false
);
Modify the //birthday// field to look like:
$attributes['birthday'] = array(
'label' => _("Birthday"),
'type' => 'monthdayyear',
'params' => array(1900, null, true, 1),
'required' => false,
);
Modify the //freebusyUrl// field to look like:
$attributes['freebusyUrl'] = array(
'label' => _("Freebusy URL"),
'type' => 'text',
'required' => false
);
And, add the following to the end of the file:
$attributes['homeStreet2'] = array(
'label' => _("Home Street 2"),
'type' => 'text',
'required' => false,
);
$attributes['homeStreet3'] = array(
'label' => _("Home Street 3"),
'type' => 'text',
'required' => false,
);
$attributes['workStreet2'] = array(
'label' => _("Work Street 2"),
'type' => 'text',
'required' => false,
);
$attributes['workStreet3'] = array(
'label' => _("Work Street 3"),
'type' => 'text',
'required' => false,
);
$attributes['employeeType'] = array(
'label' => _("Employee Type"),
'type' => 'text',
'required' => false
);
require_once 'Horde/Prefs/CategoryManager.php';
$cManager = &new Prefs_CategoryManager();
$categories = array_merge(array(_("Unfiled")), $cManager->get());
$attributes['category'] = array(
'label' => _("Category"),
'type' => 'enum',
'params' => array($categories),
'required' => false
);
$attributes['jobtitle'] = array(
'label' => _("Job Title"),
'type' => 'text',
'required' => false,
);
$attributes['profession'] = array(
'label' => _("Profession"),
'type' => 'text',
'required' => false,
);
$attributes['manager'] = array(
'label' => _("Manager's Name"),
'type' => 'text',
'required' => false,
);
$attributes['assistant'] = array(
'label' => _("Assistant's Name"),
'type' => 'text',
'required' => false,
);
$attributes['suffix'] = array(
'label' => _("Suffix"),
'type' => 'text',
'required' => false,
);
$attributes['spouse'] = array(
'label' => _("Spouse's Name"),
'type' => 'text',
'required' => false,
);
$attributes['anniversary'] = array(
'label' => _("Anniversary"),
'type' => 'monthdayyear',
'params' => array(1900, null, true, 1),
'required' => false,
);
$attributes['pager'] = array(
'label' => _("Pager"),
'type' => 'text',
'required' => false,
'params' => array('', 40, 25)
);
$attributes['callbackPhone'] = array(
'label' => _("Callback Phone"),
'type' => 'text',
'required' => false,
'params' => array('', 40, 25)
);
$attributes['email2'] = array(
'label' => _("Email") . ' 2',
'type' => 'email',
'required' => false,
'params' => array('', 40, 255)
);
$attributes['email3'] = array(
'label' => _("Email") . ' 3',
'type' => 'email',
'required' => false,
'params' => array('', 40, 255)
);
$attributes['assistantPhone'] = array(
'label' => _("Assistant's Phone"),
'type' => 'text',
'required' => false,
'params' => array('', 40, 25)
);
$attributes['workPhone2'] = array(
'label' => _("Work Phone") . ' 2',
'type' => 'text',
'required' => false,
'params' => array('', 40, 25)
);
$attributes['Phone'] = array(
'label' => _("Home Phone"),
'type' => 'text',
'required' => false,
'params' => array('', 40, 25)
);
$attributes['workFax'] = array(
'label' => _("Work Fax"),
'type' => 'text',
'required' => false,
'params' => array('', 40, 25)
);
$attributes['callback'] = array(
'label' => _("Callback"),
'type' => 'text',
'required' => false,
'params' => array('', 40, 25)
);
$attributes['carPhone'] = array(
'label' => _("Car Phone"),
'type' => 'text',
'required' => false,
'params' => array('', 40, 25)
);
$attributes['companyPhone'] = array(
'label' => _("Company Main Phone"),
'type' => 'text',
'required' => false,
'params' => array('', 40, 25)
);
$attributes['homePhone2'] = array(
'label' => _("Home Phone") . ' 2',
'type' => 'text',
'required' => false,
'params' => array('', 40, 25)
);
$attributes['homeFax'] = array(
'label' => _("Home Fax") . ' 2',
'type' => 'text',
'required' => false,
'params' => array('', 40, 25)
);
$attributes['isdn'] = array(
'label' => _("ISDN"),
'type' => 'text',
'required' => false,
'params' => array('', 40, 25)
);
$attributes['otherPhone'] = array(
'label' => _("Other Phone"),
'type' => 'text',
'required' => false,
'params' => array('', 40, 25)
);
$attributes['otherFax'] = array(
'label' => _("Other Fax"),
'type' => 'text',
'required' => false,
'params' => array('', 40, 25)
);
$attributes['primaryPhone'] = array(
'label' => _("Primary Phone"),
'type' => 'email',
'required' => false,
'params' => array('', 40, 255)
);
$attributes['radio'] = array(
'label' => _("Radio Phone"),
'type' => 'text',
'required' => false,
'params' => array('', 40, 25)
);
$attributes['telex'] = array(
'label' => _("Telex"),
'type' => 'text',
'required' => false,
'params' => array('', 40, 25)
);
$attributes['tty/tdd'] = array(
'label' => _("TTY/TDD Phone"),
'type' => 'text',
'required' => false,
'params' => array('', 40, 25)
);
$attributes['otherAddress'] = array(
'label' => '',
'type' => 'addresslink',
'required' => false,
);
$attributes['otherStreet'] = array(
'label' => _("Other Street Address"),
'type' => 'text',
'required' => false,
);
$attributes['otherStreet2'] = array(
'label' => _("Other Street 2"),
'type' => 'text',
'required' => false,
);
$attributes['otherStreet3'] = array(
'label' => _("Other Street 3"),
'type' => 'text',
'required' => false,
);
$attributes['otherCity'] = array(
'label' => _("Other City"),
'type' => 'text',
'required' => false
);
$attributes['otherProvince'] = array(
'label' => _("Other State/Province"),
'type' => 'text',
'required' => false
);
$attributes['otherPostalCode'] = array(
'label' => _("Other Postal Code"),
'type' => 'text',
'required' => false
);
$attributes['otherCountry'] = array(
'label' => _("Other Country"),
'type' => 'text',
'required' => false
);
$attributes['middlename'] = array(
'label' => _("Middle Name"),
'type' => 'text',
'required' => false
);
++ Modifying sources.php
//turba/config/sources.php// is the file that tells Turba which sources to use, and gives it all of the parameters for that source, such as what fields from //attributes.php// are used.
Use the following for your sql source's //'map'// parameter:
'map' => array(
'__key' => 'object_id',
'__owner' => 'owner_id',
'__type' => 'object_type',
'__members' => 'object_members',
'__uid' => 'object_uid',
'name' => array('fields' => array('firstname', 'lastname'),
'format' => '%s %s'),
'title' => 'object_title',
'firstname' => 'object_firstname',
'middlename' => 'object_middlename',
'lastname' => 'object_lastname',
'suffix' => 'object_suffix',
'company' => 'object_company',
'department' => 'object_department',
'jobtitle' => 'object_jobtitle',
'workStreet' => 'object_workstreet',
'workStreet2' => 'object_workstreet2',
'workStreet3' => 'object_workstreet3',
'workCity' => 'object_workcity',
'workProvince' => 'object_workprovince',
'workPostalCode' => 'object_workpostalcode',
'workCountry' => 'object_workcountry',
'workAddress' => array('fields' => array('workStreet', 'workStreet2', 'workStreet3', 'workCity', 'workProvince', 'workPostalCode'),
'format' => "%s\n%s\n%s\n%s, %s %s"),
'homeStreet' => 'object_homestreet',
'homeStreet2' => 'object_homestreet2',
'homeStreet3' => 'object_homestreet3',
'homeCity' => 'object_homecity',
'homeProvince' => 'object_homeprovince',
'homePostalCode' => 'object_homepostalcode',
'homeCountry' => 'object_homecountry',
'homeAddress' => array('fields' => array('homeStreet', 'homeStreet2', 'homeStreet3', 'homeCity', 'homeProvince', 'homePostalCode'),
'format' => "%s\n%s\n%s\n%s, %s %s"),
'otherStreet' => 'object_otherstreet',
'otherStreet2' => 'object_otherstreet2',
'otherStreet3' => 'object_otherstreet3',
'otherCity' => 'object_othercity',
'otherProvince' => 'object_otherprovince',
'otherPostalCode' => 'object_otherpostalcode',
'otherCountry' => 'object_othercountry',
'otherAddress' => array('fields' => array('otherStreet', 'otherStreet2', 'otherStreet3', 'otherCity', 'otherProvince', 'otherPostalCode'),
'format' => "%s\n%s\n%s\n%s, %s %s"),
'assistantPhone' => 'object_assistantphone',
'workFax' => 'object_workfax',
'workPhone' => 'object_workphone',
'workPhone2' => 'object_workphone2',
'callback' => 'object_callback',
'carPhone' => 'object_carphone',
'companyPhone' => 'object_companyphone',
'homeFax' => 'object_homefax',
'homePhone' => 'object_homephone',
'homePhone2' => 'object_homephone2',
'isdn' => 'object_isdn',
'cellPhone' => 'object_cellphone',
'otherFax' => 'object_otherfax',
'otherPhone' => 'object_otherphone',
'pager' => 'object_pager',
'primaryPhone' => 'object_primaryphone',
'radio' => 'object_radio',
'tty/tdd' => 'object_ttytdd',
'telex' => 'object_telex',
'anniversary' => 'object_anniversary',
'assistant' => 'object_assistant',
'birthday' => 'object_birthday',
'category' => 'object_category',
'email' => 'object_email',
'email2' => 'object_email2',
'email3' => 'object_email3',
'freebusyUrl' => 'object_freebusyurl',
'manager' => 'object_manager',
'notes' => 'object_notes',
'office' => 'object_office',
'profession' => 'object_profession',
'spouse' => 'object_spouse',
'website' => 'object_website',
'alias' => 'object_alias',
'nickname' => 'object_nickname',
'pgpPublicKey' => 'object_pgppublickey',
'smimePublicKey' => 'object_smimepublickey',
),
And, use the following for your sql source's //'tabs'// parameter. This is not included in the default //sources.php//, so you will have to add it.
'tabs' => array(
'General' => array('name', 'firstname', 'middlename', 'lastname', 'jobtitle', 'company', 'email', 'email2',
'email3', 'alias', 'website', 'category'),
'Phone Numbers' => array('primaryPhone', 'homePhone', 'homePhone2', 'homeFax', 'workPhone', 'workPhone2',
'workFax', 'cellPhone', 'pager', 'assistantPhone', 'callback', 'carPhone',
'companyPhone', 'isdn', 'otherPhone', 'otherFax', 'radio', 'telex', 'tty/tdd'),
'Home Address' => array('homeStreet', 'homeStreet2', 'homeStreet3', 'homeCity', 'homeProvince', 'homePostalCode', 'homeCountry', 'homeAddress'),
'Work Address' => array('workStreet', 'workStreet2', 'workStreet3', 'workCity', 'workProvince', 'workPostalCode', 'workCountry', 'workAddress'),
'Other Address' => array('otherStreet', 'otherStreet2', 'otherStreet3', 'otherCity', 'otherProvince', 'otherPostalCode', 'otherCountry', 'otherAddress'),
'Details' => array('department', 'office', 'profession', 'manager', 'assistant', 'nickname', 'title',
'suffix', 'spouse', 'birthday', 'anniversary', 'freebusyUrl', 'notes'),
'Certificates' => array('pgpPublicKey', 'smimePublicKey'),
),
++ Preparing the database to use new fields