X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=src%2Faddressbook.php;h=69e45f7bc794e88197338807f88d858fa1f5bfdd;hb=47fa8e9b48dcd34b60bd0af76eb57643aeeb2c0a;hp=f3fb8b1afbdb7bd6366389f70a6e19f008d88883;hpb=828c58f18565da37215df7d138ba05485ce8c4cd;p=squirrelmail.git
diff --git a/src/addressbook.php b/src/addressbook.php
index f3fb8b1a..69e45f7b 100644
--- a/src/addressbook.php
+++ b/src/addressbook.php
@@ -5,7 +5,7 @@
*
* Manage personal address book.
*
- * @copyright © 1999-2006 The SquirrelMail Project Team
+ * @copyright © 1999-2007 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id$
* @package squirrelmail
@@ -20,25 +20,27 @@ include('../include/init.php');
/** SquirrelMail required files. */
/* address book functions */
require_once(SM_PATH . 'functions/addressbook.php');
+include_once(SM_PATH . 'templates/util_addressbook.php');
+
/* form functions */
require_once(SM_PATH . 'functions/forms.php');
/** lets get the global vars we may need */
/* From the address form */
-sqgetGlobalVar('addaddr', $addaddr, SQ_POST);
-sqgetGlobalVar('editaddr', $editaddr, SQ_POST);
-sqgetGlobalVar('deladdr', $deladdr, SQ_POST);
-sqgetGlobalVar('sel', $sel, SQ_POST);
-sqgetGlobalVar('oldnick', $oldnick, SQ_POST);
-sqgetGlobalVar('backend', $backend, SQ_POST);
-sqgetGlobalVar('doedit', $doedit, SQ_POST);
+sqgetGlobalVar('addaddr', $addaddr, SQ_POST);
+sqgetGlobalVar('editaddr', $editaddr, SQ_POST);
+sqgetGlobalVar('deladdr', $deladdr, SQ_POST);
+sqgetGlobalVar('sel', $sel, SQ_POST);
+sqgetGlobalVar('oldnick', $oldnick, SQ_POST);
+sqgetGlobalVar('backend', $backend, SQ_POST);
+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');
+displayPageHeader($color);
/* Open addressbook with error messages on.
remote backends (LDAP) are enabled because they can be used. (list_addr function)
@@ -47,12 +49,29 @@ $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."),
- $color);
+ plain_error_message(_("No personal address book is defined. Contact administrator."));
exit();
}
+$current_backend = $abook->localbackend;
+if (sqgetGlobalVar('new_bnum',$new_backend,SQ_POST) && array_key_exists($new_backend,$abook->backends)) {
+ $current_backend = (int) $new_backend;
+}
+
+$abook_selection = ' ';
+$list_backends = array();
+if (count($abook->backends) > 1) {
+ foreach($abook->get_backend_list() as $oBackend) {
+ if ($oBackend->listing) {
+ $list_backends[$oBackend->bnum]=$oBackend->sname;
+ }
+ }
+ if (count($list_backends)>1) {
+ $abook_selection = addSelect('new_bnum',$list_backends,$current_backend,true)
+ .addSubmit(_("Change"),'change_abook');
+ }
+}
+
$defdata = array();
$formerror = '';
$abortform = false;
@@ -92,14 +111,14 @@ if(sqgetGlobalVar('REQUEST_METHOD', $req_method, SQ_SERVER) && $req_method == 'P
$orig_sel = $sel;
sort($sel);
- /* The selected addresses are identidied by "backend:nickname". *
+ /* The selected addresses are identidied by "nickname_backend". *
* Sort the list and process one backend at the time */
$prevback = -1;
$subsel = array();
$delfailed = false;
for ($i = 0 ; (($i < sizeof($sel)) && !$delfailed) ; $i++) {
- list($sbackend, $snick) = explode(':', $sel[$i]);
+ list($snick, $sbackend) = explode('_', $sel[$i]);
/* When we get to a new backend, process addresses in *
* previous one. */
@@ -147,16 +166,19 @@ if(sqgetGlobalVar('REQUEST_METHOD', $req_method, SQ_SERVER) && $req_method == 'P
$defselected = $sel;
} else {
$abortform = true;
- list($ebackend, $enick) = explode(':', $sel[0]);
+ list($enick, $ebackend) = explode('_', current($sel));
$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);
- echo addHidden('oldnick', $olddata['nickname']).
- addHidden('backend', $olddata['backend']).
- addHidden('doedit', '1').
- '';
+ // Test if $olddata really contains anything and return an error message if it doesn't
+ if (!$olddata) {
+ error_box(nl2br(htmlspecialchars($abook->error)));
+ } else {
+ /* Display the "new address" form */
+ abook_create_form($form_url,'editaddr',_("Update address"),_("Update address"),$olddata);
+ echo addHidden('oldnick', $olddata['nickname']).
+ addHidden('backend', $olddata['backend']).
+ addHidden('doedit', '1').
+ '';
+ }
}
} elseif ($doedit == 1) {
/* Stage two: Write new data */
@@ -166,14 +188,7 @@ if(sqgetGlobalVar('REQUEST_METHOD', $req_method, SQ_SERVER) && $req_method == 'P
/* 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%"' );
+ plain_error_message( nl2br(htmlspecialchars($abook->error)));
/* Display the "new address" form again */
abook_create_form($form_url,'editaddr',_("Update address"),_("Update address"),$newdata);
@@ -211,173 +226,57 @@ if(sqgetGlobalVar('REQUEST_METHOD', $req_method, SQ_SERVER) && $req_method == 'P
/* Display error messages */
if (!empty($formerror)) {
- echo html_tag( 'table',
- html_tag( 'tr',
- html_tag( 'td',
- "\n". '
' . _("ERROR") . ': ' . nl2br(htmlspecialchars($formerror)) . '' ."\n",
- 'center' )
- ),
- 'center', '', 'width="100%"' );
+ plain_error_message(nl2br(htmlspecialchars($formerror)));
}
/* Display the address management part */
-if ($showaddrlist) {
- /* Get and sort address list */
- $alist = $abook->list_addr();
- if(!is_array($alist)) {
- plain_error_message(nl2br(htmlspecialchars($abook->error)), $color);
- exit;
+$addresses = array();
+while (list($k, $backend) = each ($abook->backends)) {
+ $a = array();
+ $a['BackendID'] = $backend->bnum;
+ $a['BackendSource'] = $backend->sname;
+ $a['BackendWritable'] = $backend->writeable;
+ $a['Addresses'] = array();
+
+ $alist = $abook->list_addr($backend->bnum);
+
+ /* check return (array with data or boolean false) */
+ if (is_array($alist)) {
+ usort($alist,'alistcmp');
+
+ $a['Addresses'] = formatAddressList($alist);
+
+ $addresses[$backend->bnum] = $a;
+ } else {
+ // list_addr() returns boolean
+ plain_error_message(nl2br(htmlspecialchars($abook->error)));
}
+}
- usort($alist,'alistcmp');
- $prevbackend = -1;
- $headerprinted = false;
-
- echo html_tag( 'p', '' . _("Add address") . '', 'center' ) . "\n";
-
- /* 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 */
- if($prevbackend != $row['backend']) {
- if($prevbackend < 0) {
- echo html_tag( 'table',
- html_tag( 'tr',
- html_tag( 'td',
- addSubmit(_("Edit selected"), 'editaddr').
- addSubmit(_("Delete selected"), 'deladdr'),
- 'center', '', "colspan=\"$abook_fields\"" )
- ) .
- html_tag( 'tr',
- html_tag( 'td', '
', 'center', '', "colspan=\"$abook_fields\"" )
- ),
- 'center' );
- echo "\n\n" .
- html_tag( 'table', '', 'center', '', 'border="0" cellpadding="1" cellspacing="0" width="90%"' ) .
- html_tag( 'tr', "\n" .
- html_tag( 'th', ' ', 'left', '', 'width="1%"' ) . "\n" .
- html_tag( 'th', _("Nickname") .
- show_abook_sort_button($abook_sort_order, _("sort by nickname"), 0, 1),
- 'left', '', 'width="1%"' ) . "\n" .
- html_tag( 'th', _("Name") .
- show_abook_sort_button($abook_sort_order, _("sort by name"), 2, 3),
- 'left', '', 'width="1%"' ) . "\n" .
- html_tag( 'th', _("E-mail") .
- show_abook_sort_button($abook_sort_order, _("sort by email"), 4, 5),
- 'left', '', 'width="1%"' ) . "\n" .
- html_tag( 'th', _("Info") .
- show_abook_sort_button($abook_sort_order, _("sort by info"), 6, 7),
- 'left', '', 'width="1%"' ) .
- ($abook->add_extra_field ? html_tag( 'th', ' ','left', '', 'width="1%"'): '') .
- "\n",
- '', $color[9] ) . "\n";
- }
-
- // Separate different backends with