[imp] Adding fields to contacts - solved

Chen Shiyuan csy@hjc.edu.sg
Tue, 30 Jan 2001 12:22:59 +0800 (SGT)


Does anyone have any idea if this patch will be included in the 2.2.4 
release? It would be something good to have before switching over to 
using Turba in 2.3 ...

Thanks!

On Sun, 28 Jan 2001 23:49:30 +0200, Chen Naor 
<chennaor@netvision.net.il> wrote :

> Hello Stephen,
> 
> I just finish adding the fields (home-address and home-phone) to
> the contact
> database and pages.
> It will be hard to give you the diffs because my code is a bit
> customize to
> my client needs, but here is the explanation with the code parts
> you have to
> add:
> I added 2 fields 1. homeaddress 2.homephone.
> 
> 1). Add to your db to table imp_addr the fields (in my case
> homeaddress &
> homephone).
> 2). Change  horde/imp/lib/db.pgsql (or other one if you work with
> a
> different db than postgresql).
> --------------------------------------------------
> function imp_get_addresses ($user, $server) {
>    global $default;
> 
>    /* post: returns a 2d array of addresses where each
>     element is an array in which element 0 is the address,
>     element 1 is the nickname, and element 2 is the fullname.
>     it returns false on failure.
>     */
> 
>    if (!($db = imp_open_pg_db())) { return false; }
>    if (!($result = pg_Exec($db, "select address, nickname,
> fullname,
> homeaddress, homephone from $default->db_address_table where
> username='$user@$server' order by nickname"))) { return false;
> }
>    if (($rowcount = pg_NumRows($result))==0) { return false; }
> 
>    for ($i=0; $i<$rowcount; $i++) {
> 
> $return[$i]=array(0=>pg_Result($result,$i,"address"),1=>pg_Result
($result,$i
> ,"nickname"),2=>pg_Result($result,$i,"fullname"),3=>pg_Result
($result,$i,"ho
> meaddress"),4=>pg_Result($result,$i,"homephone"));
>    }
>    return($return);
> }
> ----------------------------------------------------
> function imp_update_address ($old_address, $address, $nickname,
> $fullname,
> $homeaddress, $homephone, $user, $server) {
>    global $default;
> 
>    /* post: changes the entry for $old_address to $address,
> $nickname,
> $fullname.
>     returns true on success and false on failure
>     */
> 
>    if (!($db = imp_open_pg_db())) { return false; }
>    if (!($result = pg_Exec($db, "update
> $default->db_address_table set
> address='$address', nickname='$nickname', fullname='$fullname',
> homeaddress='$homeaddress', homephone='$homephone' where
> username='$user@$server' and address='$old_address'"))) { return
> false; }
>    pg_Exec($db, "COMMIT");
>    return true;
> }
> --------------------------------------------------------
> function imp_add_address ($address, $nickname, $fullname,
> $homeaddress,
> $homephone, $user, $server) {
>         global $default;
> 
>         /* post: adds $address, $nickname, $fullname,
> $homeaddress,
> $homephone, to the addressbook for $user@$server
>            returns true on success and false on failure
>     */
> 
>         if (!($db = imp_open_pg_db())) { return false; }
>         if (!($result = pg_Exec($db, "delete from
> $default->db_address_table
> where username='$user@$server' and address='$address'"))) { ret
> urn true; }
>         if (!($result = pg_exec($db, "insert into
> $default->db_address_table
> (username, address, nickname, fullname, homeaddress, homephone)
>  values ('$user@$server', '$address', '$nickname', '$fullname',
> '$homeaddress', '$homephone')"))) { return false; }
>         pg_exec($db, "COMMIT");
> 
>         return true;
> }
> ==========================
> 2). Change horde/imp/contact.php3.
> ----------------------------------------------
>    case ADD_ADDR:
>                 if (!empty($new_address) && !empty($new_nickname)
> &&
> !empty($new_fullname)) {
>                         // escape/quote special characters as
> necessary
>                         if ($new_nickname[0] == '"' &&
> $new_nickname[strlen($new_nickname) - 1] == '"') {
>                             $new_nickname = substr($new_nickname,
> 1,
> strlen($new_nickname) - 2);
>                         }
>                         $nickname = $new_nickname;
>                         $clean_nickname =
> imap_rfc822_write_address('', '',
> $nickname);
>                         $clean_nickname = substr($clean_nickname,
> 0,
> strlen($clean_nickname)-4);
>                         $clean_nickname = str_replace("'",
> "\\'",
> $clean_nickname);
>                         if ($new_fullname[0] == '"' &&
> $new_fullname[strlen($new_fullname) - 1] == '"') {
>                             $new_fullname = substr($new_fullname,
> 1,
> strlen($new_fullname) - 2);
>                         }
>                         $fullname = $new_fullname;
>                         $clean_fullname =
> imap_rfc822_write_address('', '',
> $fullname);
>                         $clean_fullname = substr($clean_fullname,
> 0,
> strlen($clean_fullname)-4);
>                         $clean_fullname = str_replace("'",
> "\\'",
> $clean_fullname);
>                         $clean_address = str_replace(',', '',
> $new_address);
>                         $clean_address = str_replace("'", '',
> $clean_address);
> 
>                         $errormsg = '';
>                         if ($clean_address != $new_address) {
>                                 $errormsg .=
> $lang->error_address_chars;
>                                 echo '<script
> language="javascript">alert(\'' . addslashes($errormsg) .
> '\')</script>';
>                         }
>                         $clean_address =
> addslashes($clean_address);
>                 //added by chen naor
>                         $homeaddress = $new_homeaddress;
>                         $clean_homeaddress =
> imap_rfc822_write_address('',
> '', $homeaddress);
>                         $clean_homeaddress =
> substr($clean_homeaddress, 0,
> strlen($clean_homeaddress)-4);
>                         $clean_homeaddress = str_replace("'",
> "\\'",
> $clean_homeaddress);
> 
>                         $homephone = $new_homephone;
>                         $clean_homephone =
> imap_rfc822_write_address('', '',
> $homephone);
>                         $clean_homephone =
> substr($clean_homephone, 0,
> strlen($clean_homephone)-4);
>                         $clean_homephone = str_replace("'",
> "\\'",
> $clean_homephone);
> 
>                         if (!(imp_add_address($clean_address,
> $clean_nickname, $clean_fullname, $clean_homeaddress,
> $clean_homephone,
> $imp->user, $imp->server))) {
>                                 $errormsg .=
> $lang->error_create_address;
>                         }
>                 }
>                 $new_address = '';
>                 break;
> 
>  case UPDATE_ADDR:
>                 if ($old_address && $new_address && $new_nickname
> &&
> $new_fullname) {
>                         // escape/quote special characters as
> necessary
>                         if ($new_nickname[0] == '"' &&
> $new_nickname[strlen($new_nickname) - 1] == '"') {
>                             $new_nickname = substr($new_nickname,
> 1,
> strlen($new_nickname) - 2);
>                         }
>                         $nickname = $new_nickname;
>                         $clean_nickname =
> imap_rfc822_write_address('', '',
> $nickname);
>                         $clean_nickname = substr($clean_nickname,
> 0,
> strlen($clean_nickname)-4);
>                         $clean_nickname = str_replace("'",
> "\\'",
> $clean_nickname);
>                         if ($new_fullname[0] == '"' &&
> $new_fullname[strlen($new_fullname) - 1] == '"') {
>                             $new_fullname = substr($new_fullname,
> 1,
> strlen($new_fullname) - 2);
>                         }
>                         $fullname = $new_fullname;
>                         $clean_fullname =
> imap_rfc822_write_address('', '',
> $fullname);
>                         $clean_fullname = substr($clean_fullname,
> 0,
> strlen($clean_fullname)-4);
>                         $clean_fullname = str_replace("'",
> "\\'",
> $clean_fullname);
>                         $clean_address = str_replace(',', '',
> $new_address);
>                         $clean_address = str_replace("'", '',
> $clean_address);
>                 //added by chen naor
>                         $homeaddress = $new_homeaddress;
>                         $clean_homeaddress =
> imap_rfc822_write_address('',
> '', $homeaddress);
>                         $clean_homeaddress =
> substr($clean_homeaddress, 0,
> strlen($clean_homeaddress)-4);
>                         $clean_homeaddress = str_replace("'",
> "\\'",
> $clean_homeaddress);
> 
>                         $homephone = $new_homephone;
>                         $clean_homephone =
> imap_rfc822_write_address('', '',
> $homephone);
>                         $clean_homephone =
> substr($clean_homephone, 0,
> strlen($clean_homephone)-4);
>                         $clean_homephone = str_replace("'",
> "\\'",
> $clean_homephone);
> 
>                         $errormsg = '';
>                         if ($clean_address != $new_address) {
>                                 $errormsg .=
> $lang->error_address_chars;
>                                 echo '<script
> language="javascript">alert(\'' . addslashes($errormsg) .
> '\')</script>';
>                         }
>                         $clean_address =
> addslashes($clean_address);
>                         if (!(imp_update_address($old_address,
> $clean_address, $clean_nickname, $clean_fullname,
> $clean_homeaddress,
> $clean_homephone, $imp->user, $imp->server))) {
>                                 $errormsg =
> $lang->error_update_address;
>                         }
>                 }
>                 $new_address = '';
>                 break;
>         }
> }
> =========================
> 4). Make the same changes to horde/imp/addcontact.php3
> =========================
> 5). Change horde/imp/templates/contacts/addr-php3.inc
> add this to the table inside of the form:
> --------------------------------------------------------------
> <tr>
>   <td><?php echo $lang->homeaddress_string ?>&nbsp;</td>
>   <td bgcolor="<?php echo $default->item_bg ?>"><input
> type="text"
> name="new_homeaddress" value="" size="40"></td>
> </tr>
> <tr>
>   <td><?php echo $lang->homephone_string ?>&nbsp;</td>
>   <td bgcolor="<?php echo $default->item_bg ?>"><input
> type="text"
> name="new_homephone" value="" size="40"></td>
> </tr>
> ================================
> 6). Make the same changes to
> horde/imp/templates/contacts/add-contact-php3.inc
> ================================
> 7). Change horde/imp/templates/contacts/javascript.inc
> -------------------------------------------------------
> function ClearSelection() {
>    window.document.addressbook.new_address.value = "";
>    window.document.addressbook.new_nickname.value = "";
>    window.document.addressbook.new_fullname.value = "";
>    window.document.addressbook.new_homeaddress.value = "";
>    window.document.addressbook.new_homephone.value = "";
> }
> ----------------------------------------------------------
> var Homeaddresses = new Array (
>   <?php
>   if (is_array($addresses)) {
>     for ($i = 0; $i < count($addresses); $i++) {
>       if ($i > 0) { echo ' , '; }
>       echo '"' . addslashes($addresses[$i][3]) . '"';
>     }
>     echo "\n";
>   }
>   ?>
> )
> 
> var Homephones = new Array (
>   <?php
>   if (is_array($addresses)) {
>     for ($i = 0; $i < count($addresses); $i++) {
>       if ($i > 0) { echo ' , '; }
>       echo '"' . addslashes($addresses[$i][4]) . '"';
>     }
>     echo "\n";
>   }
>   ?>
> )
> -------------------------------------------------------------
> function setFields_ins () {
>    document.addressbook.new_address.value =
> Addresses[document.addressbook.old_address.selectedIndex];
>    document.addressbook.new_nickname.value =
> Nicknames[document.addressbook.old_address.selectedIndex];
>    document.addressbook.new_fullname.value =
> Fullnames[document.addressbook.old_address.selectedIndex];
>    document.addressbook.new_homeaddress.value =
> Homeaddresses[document.addressbook.old_address.selectedIndex];
>    document.addressbook.new_homephone.value =
> Homephones[document.addressbook.old_address.selectedIndex];
> }
> ==================================
> 
> This is it, a little bit long but it's working,
> Good luck,
> 
> Chen Naor
> Lilux Systems.
> http://www.lilux.co.il
> email: chen@lilux.co.il