X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=src%2Faddressbook.php;h=50b16a9229865842540c6ddc9bc152add5dce65b;hb=fc99a551c505b2be1803373c8978f621ea2ea69f;hp=853b01a7b6ad82c0a98edaa4c25619611f031749;hpb=c435f076fe6b5b58e09ae19a8e216f37b069d802;p=squirrelmail.git diff --git a/src/addressbook.php b/src/addressbook.php index 853b01a7..50b16a92 100644 --- a/src/addressbook.php +++ b/src/addressbook.php @@ -3,11 +3,10 @@ /** * addressbook.php * - * Copyright (c) 1999-2004 The SquirrelMail Project Team - * Licensed under the GNU GPL. For full terms see the file COPYING. - * * Manage personal address book. * + * @copyright © 1999-2006 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License * @version $Id$ * @package squirrelmail * @subpackage addressbook @@ -20,7 +19,7 @@ define('SM_PATH','../'); /** SquirrelMail required files. */ -require_once(SM_PATH . 'include/validate.php'); +include_once(SM_PATH . 'include/validate.php'); require_once(SM_PATH . 'functions/display_messages.php'); require_once(SM_PATH . 'functions/addressbook.php'); require_once(SM_PATH . 'functions/forms.php'); @@ -45,10 +44,15 @@ sqgetGlobalVar('doedit', $doedit, SQ_POST); /* Get sorting order */ $abook_sort_order = get_abook_sort(); +/* Create page header before addressbook_init in order to display error messages correctly. */ +displayPageHeader($color, 'None'); + /* Open addressbook with error messages on. remote backends (LDAP) are enabled because they can be used. (list_addr function) */ $abook = addressbook_init(true, false); + +// FIXME: do we have to stop use of address book, when localbackend is not present. if($abook->localbackend == 0) { plain_error_message( _("No personal address book is defined. Contact administrator."), @@ -56,8 +60,6 @@ if($abook->localbackend == 0) { exit(); } -displayPageHeader($color, 'None'); - $defdata = array(); $formerror = ''; $abortform = false; @@ -144,7 +146,6 @@ if(sqgetGlobalVar('REQUEST_METHOD', $req_method, SQ_SERVER) && $req_method == 'P * Update/modify address * ***********************************************/ if (!empty($editaddr)) { - /* Stage one: Copy data into form */ if (isset($sel) && sizeof($sel) > 0) { if(sizeof($sel) > 1) { @@ -155,6 +156,7 @@ if(sqgetGlobalVar('REQUEST_METHOD', $req_method, SQ_SERVER) && $req_method == 'P $abortform = true; list($ebackend, $enick) = explode(':', $sel[0]); $olddata = $abook->lookup($enick, $ebackend); + // FIXME: Test if $olddata really contains anything and return an error message if it doesn't /* Display the "new address" form */ abook_create_form($form_url,'editaddr',_("Update address"),_("Update address"),$olddata); @@ -163,40 +165,40 @@ if(sqgetGlobalVar('REQUEST_METHOD', $req_method, SQ_SERVER) && $req_method == 'P addHidden('doedit', '1'). ''; } - } else { - + } elseif ($doedit == 1) { /* Stage two: Write new data */ - if ($doedit = 1) { - $newdata = $editaddr; - $r = $abook->modify($oldnick, $newdata, $backend); - - /* Handle error messages */ - if (!$r) { - /* Display error */ - echo html_tag( 'table', - html_tag( 'tr', - html_tag( 'td', - "\n". '' . _("ERROR") . ': ' . $abook->error . '' ."\n", - 'center' ) - ), - 'center', '', 'width="100%"' ); - - /* Display the "new address" form again */ - abook_create_form($form_url,'editaddr',_("Update address"),_("Update address"),$newdata); - echo addHidden('oldnick', $oldnick). - addHidden('backend', $backend). - addHidden('doedit', '1'). - "\n" . ''; - $abortform = true; - } - } else { + $newdata = $editaddr; + $r = $abook->modify($oldnick, $newdata, $backend); - /* Should not get here... */ - plain_error_message(_("Unknown error"), $color); + /* Handle error messages */ + if (!$r) { + /* Display error */ + echo html_tag( 'table', + html_tag( 'tr', + html_tag( 'td', + "\n". '' . _("ERROR") . ': ' . $abook->error . '' ."\n", + 'center' ) + ), + 'center', '', 'width="100%"' ); + + /* Display the "new address" form again */ + abook_create_form($form_url,'editaddr',_("Update address"),_("Update address"),$newdata); + echo addHidden('oldnick', $oldnick). + addHidden('backend', $backend). + addHidden('doedit', '1'). + "\n" . ''; $abortform = true; } - } + } else { + /** + * $editaddr is set, but $sel (address selection in address listing) + * and $doedit (address edit form) are not set. + * Assume that user clicked on "Edit address" without selecting any address. + */ + $formerror = _("Please select address that you want to edit"); + $showaddrlist = true; + } /* end of edit stage detection */ } /* !empty($editaddr) - Update/modify address */ } /* (!empty($deladdr)) && sizeof($sel) > 0 - Delete address(es) */ } /* !empty($addaddr['nickname']) - Add new address */ @@ -245,6 +247,11 @@ if ($showaddrlist) { /* List addresses */ if (count($alist) > 0) { echo addForm($form_url, 'post'); + if ($abook->add_extra_field) { + $abook_fields = 6; + } else { + $abook_fields = 5; + } while(list($undef,$row) = each($alist)) { /* New table header for each backend */ @@ -255,10 +262,10 @@ if ($showaddrlist) { html_tag( 'td', addSubmit(_("Edit selected"), 'editaddr'). addSubmit(_("Delete selected"), 'deladdr'), - 'center', '', 'colspan="5"' ) + 'center', '', "colspan=\"$abook_fields\"" ) ) . html_tag( 'tr', - html_tag( 'td', ' 
', 'center', '', 'colspan="5"' ) + html_tag( 'td', ' 
', 'center', '', "colspan=\"$abook_fields\"" ) ), 'center' ); echo "\n\n" . @@ -276,20 +283,22 @@ if ($showaddrlist) { 'left', '', 'width="1%"' ) . "\n" . html_tag( 'th', _("Info") . show_abook_sort_button($abook_sort_order, _("sort by info"), 6, 7), - 'left', '', 'width="1%"' ) . "\n", + 'left', '', 'width="1%"' ) . + ($abook->add_extra_field ? html_tag( 'th', ' ','left', '', 'width="1%"'): '') . + "\n", '', $color[9] ) . "\n"; } // Separate different backends with
if($prevbackend > 0) { echo html_tag( 'tr', - html_tag( 'td', "
", 'center', '' ,'colspan="5"' ) + html_tag( 'td', "
", 'center', '' ,"colspan=\"$abook_fields\"" ) ); } // Print backend name - echo html_tag( 'tr', - html_tag( 'td', "\n" . '' . $row['source'] . '' . "\n", 'center', $color[0] ,'colspan="5"' ) + echo html_tag( 'tr', + html_tag( 'td', "\n" . '' . $row['source'] . '' . "\n", 'center', $color[0] ,"colspan=\"$abook_fields\"" ) ); $line = 0; @@ -307,45 +316,54 @@ if ($showaddrlist) { } else { $tr_bgcolor = $color[4]; } + echo html_tag( 'tr', '', '', $tr_bgcolor); + if ($abook->backends[$row['backend']]->writeable) { + echo html_tag( 'td', + '' . + addCheckBox('sel[]', $selected, $row['backend'].':'.$row['nickname']). + '' , + 'center', '', 'valign="top" width="1%"' ); + } else { + echo html_tag( 'td', + ' ' , + 'center', '', 'valign="top" width="1%"' ); + } + echo html_tag( 'td', + ' ' . htmlspecialchars($row['nickname']) . ' ', + 'left', '', 'valign="top" width="1%" style="white-space: nowrap;"' ); + + // different full name display formating for Japanese translation if ($squirrelmail_language == 'ja_JP') { - echo html_tag( 'tr', '', '', $tr_bgcolor); - if ($abook->backends[$row['backend']]->writeable) { - echo html_tag( 'td', - '' . - addCheckBox('sel[]', $selected, $row['backend'].':'.$row['nickname']). - '' , - 'center', '', 'valign="top" width="1%"' ); - } else { - echo html_tag( 'td', - ' ' , - 'center', '', 'valign="top" width="1%"' ); - } - echo html_tag( 'td', ' ' . $row['nickname'] . ' ', 'left', '', 'valign="top" width="1%" style="white-space: nowrap;"' ) . - html_tag( 'td', ' ' . $row['lastname'] . ' ' . $row['firstname'] . ' ', 'left', '', 'valign="top" width="1%" style="white-space: nowrap;"' ) . - html_tag( 'td', '', 'left', '', 'valign="top" width="1%" style="white-space: nowrap;"' ) . ' '; + /* + * translation uses euc-jp character set internally. + * htmlspecialchars() should not break any characters. + */ + echo html_tag( 'td', + ' ' . htmlspecialchars($row['lastname']) . ' ' . htmlspecialchars($row['firstname']) . ' ', + 'left', '', 'valign="top" width="1%" style="white-space: nowrap;"' ); } else { - echo html_tag( 'tr', '', '', $tr_bgcolor); - if ($abook->backends[$row['backend']]->writeable) { - echo html_tag( 'td', - '' . - addCheckBox('sel[]', $selected, $row['backend'] . ':' . $row['nickname']). - '' , - 'center', '', 'valign="top" width="1%"' ); - } else { - echo html_tag( 'td', - ' ' , - 'center', '', 'valign="top" width="1%"' ); - } - echo html_tag( 'td', ' ' . $row['nickname'] . ' ', 'left', '', 'valign="top" width="1%" style="white-space: nowrap;"' ) . - html_tag( 'td', ' ' . $row['name'] . ' ', 'left', '', 'valign="top" width="1%" style="white-space: nowrap;"' ) . - html_tag( 'td', '', 'left', '', 'valign="top" width="1%" style="white-space: nowrap;"' ) . ' '; + echo html_tag( 'td', + ' ' . htmlspecialchars($row['name']) . ' ', + 'left', '', 'valign="top" width="1%" style="white-space: nowrap;"' ); } + + // email address column + echo html_tag( 'td', '', 'left', '', 'valign="top" width="1%" style="white-space: nowrap;"' ) . ' '; $email = $abook->full_address($row); echo makeComposeLink('src/compose.php?send_to='.rawurlencode($email), htmlspecialchars($row['email'])). - ' '."\n". - html_tag( 'td', ' ' . htmlspecialchars($row['label']) . ' ', 'left', '', 'valign="top" width="1%"' ) . - "\n"; + ' '."\n"; + + // info column + echo html_tag( 'td', ' ' . htmlspecialchars($row['label']) . ' ', 'left', '', 'valign="top" width="1%"' ); + + // add extra column if third party backend needs it + if ($abook->add_extra_field) { + echo html_tag( 'td', + ' ' . (isset($row['extra']) ? $row['extra'] : '') . ' ', + 'left', '', 'valign="top" width="1%"' ); + } + echo "\n"; $line++; } echo "" . @@ -358,7 +376,7 @@ if ($showaddrlist) { html_tag( 'td', addSubmit(_("Edit selected"), 'editaddr') . addSubmit(_("Delete selected"), 'deladdr'), - 'center', '', 'colspan="5"' ) + 'center', '', "colspan=\"$abook_fields\"" ) ), 'center' ); } @@ -376,5 +394,5 @@ echo "\n"; echo "\n"; do_hook('addressbook_bottom'); echo "\n\n"; -?> - \ No newline at end of file +$oTemplate->display('footer.tpl'); +?> \ No newline at end of file