From a82f283dd557582bdfcc17351061e7ad6ab80b7f Mon Sep 17 00:00:00 2001 From: pallo Date: Sun, 2 Apr 2000 16:52:23 +0000 Subject: [PATCH] Address management (delete & modify) complete. git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@374 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- src/addressbook.php | 225 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 189 insertions(+), 36 deletions(-) diff --git a/src/addressbook.php b/src/addressbook.php index cb3bd0e9..7b0a2152 100644 --- a/src/addressbook.php +++ b/src/addressbook.php @@ -33,6 +33,11 @@ // Sort array by the key "name" function alistcmp($a,$b) { + if($a["backend"] > $b["backend"]) + return 1; + else if($a["backend"] < $b["backend"]) + return -1; + return (strtolower($a["name"]) > strtolower($b["name"])) ? 1 : -1; } @@ -105,12 +110,15 @@ $formerror = ""; $abortform = false; $showaddrlist = true; + $defselected = array(); // Handle user's actions if($REQUEST_METHOD == "POST") { - // Check for user addition + // *********************************************** + // Add new address + // *********************************************** $add_data = $HTTP_POST_VARS["addaddr"]; if(!empty($add_data["nickname"])) { @@ -127,30 +135,147 @@ $defdata = $add_data; } - } + } - // Check for "delete address" - if((!empty($HTTP_POST_VARS["deladdr"])) && - sizeof($HTTP_POST_VARS["sel"]) > 0) { - plain_error_message("Delete address not implemented yet", $color); - $abortform = true; - } - // Check for "edit address" - if((!empty($HTTP_POST_VARS["editaddr"])) && + // *********************************************** + // Delete address(es) + // *********************************************** + else if((!empty($HTTP_POST_VARS["deladdr"])) && sizeof($HTTP_POST_VARS["sel"]) > 0) { - plain_error_message("Edit address not implemented yet", $color); - $abortform = true; + + $sel = $HTTP_POST_VARS["sel"]; + sort($sel); + + // The selected addresses are identidied by "backend:nickname". + // 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) = split(":", $sel[$i]); + + // When we get to a new backend, process addresses in + // previous one. + if($prevback != $sbackend && $prevback != -1) { + + $r = $abook->remove($subsel, $prevback); + if(!$r) { + $formerror = $abook->error; + $i = sizeof($sel); + $delfailed = true; + break; + } + $subsel = array(); + } + + // Queue for processing + array_push($subsel, $snick); + $prevback = $sbackend; + } + + if(!$delfailed) { + $r = $abook->remove($subsel, $prevback); + if(!$r) { // Handle errors + $formerror = $abook->error; + $delfailed = true; + } + } + + if($delfailed) { + $showaddrlist = true; + $defselected = $HTTP_POST_VARS["sel"]; + } } + + // *********************************************** + // Update/modify address + // *********************************************** + else if(!empty($HTTP_POST_VARS["editaddr"])) { + + // Stage one: Copy data into form + if(sizeof($HTTP_POST_VARS["sel"]) > 0) { + if(sizeof($HTTP_POST_VARS["sel"]) > 1) { + $formerror = _("You can only edit one address at the time"); + $showaddrlist = true; + $defselected = $HTTP_POST_VARS["sel"]; + } else { + $abortform = true; + list($ebackend, $enick) = split(":", $HTTP_POST_VARS["sel"][0]); + $olddata = $abook->lookup($enick, $ebackend); + + // Display the "new address" form + printf("
\n", $PHP_SELF); + print "\n"; + print "\n"; + print "
\n"; + print _("Update address"); + print "\n
\n"; + address_form("editaddr", _("Update address"), $olddata); + printf("\n", + htmlspecialchars($olddata["nickname"])); + printf("\n", + htmlspecialchars($olddata["backend"])); + print "\n"; + print "
"; + } + } + + // Stage two: Write new data + else if($HTTP_POST_VARS["doedit"] = 1) { + $newdata = $HTTP_POST_VARS["editaddr"]; + $r = $abook->modify($HTTP_POST_VARS["oldnick"], + $newdata, + $HTTP_POST_VARS["backend"]); + + // Handle error messages + if(!$r) { + // Display error + print "\n"; + print "\n"; + print "
\n
"; + print ""._("ERROR").": ". + $abook->error.""; + print "\n
\n"; + + // Display the "new address" form again + printf("
\n", $PHP_SELF); + print "\n"; + print "\n"; + print "
\n"; + print _("Update address"); + print "\n
\n"; + address_form("editaddr", _("Update address"), $newdata); + printf("\n", + htmlspecialchars($newdata["nickname"])); + printf("\n", + htmlspecialchars($newdata["backend"])); + print "\n"; + print "
"; + + $abortform = true; + } + } + + // Should not get here... + else { + plain_error_message(_("Unknown error"), $color); + $abortform = true; + } + } // End of edit address + + + // Some times we end output before forms are printed if($abortform) { print "\n"; exit(); } - } + // =================================================================== // The following is only executed on a GET request, or on a POST when // a user is added, or when "delete" or "modify" was successful. @@ -165,49 +290,77 @@ print "\n"; } + // Display the address management part if($showaddrlist) { printf("
\n", $PHP_SELF); - print "\n"; - print "\n"; - print "
\n"; - print _("Personal address book"); - print "\n
\n"; - // Get and sort address list $alist = $abook->list_addr(); usort($alist,'alistcmp'); - - print ""; - printf("\n", - _("Nickname"), _("Name"), _("E-mail"), _("Info")); + $prevbackend = -1; + + // List addresses while(list($key,$row) = each($alist)) { - printf("\n", - ($line % 2) ? " bgcolor=\"$color[0]\"" : "", $row["nickname"], - $row["nickname"], $row["name"], rawurlencode($row["email"]), - $row["email"], $row["label"]); + + // New table header for each backend + if($prevbackend != $row["backend"]) { + if($prevbackend >= 0) { + print "
 ". - "%s%s%s". - "%s
". - "". - " %s  %s ". - " %s ". - " %s
"; + print " 
\n"; + } + + print "\n"; + print "\n"; + print "
\n"; + print $row["source"]; + print "\n
\n"; + + print ""; + printf("\n", + _("Nickname"), _("Name"), _("E-mail"), _("Info")); + $line = 0; + } // End of header + + $prevbackend = $row["backend"]; + + // Check if this user is selected + if(in_array($row["backend"].":".$row["nickname"], $defselected)) + $selected = "CHECKED"; + else + $selected = ""; + + // Print one row + printf("\n \n", + ($line % 2) ? " bgcolor=\"$color[0]\"" : "", + $selected, $row["backend"], $row["nickname"], + $row["nickname"], $row["name"], + rawurlencode($row["email"]), $row["email"], $row["label"]); $line++; - } + } + + // End of list. Close table. print "
". + " %s%s". + "%s%s
". + "". + " %s  %s ". + " %s". + "  %s
\n"; printf("\n", _("Edit selected")); printf("\n", _("Delete selected")); print "
"; - } + } // end of addresslist + // Display the "new address" form printf("
\n", $PHP_SELF); print "\n"; print "\n"; print "
\n"; - print _("Add to personal address book"); + printf(_("Add to %s"), $abook->localbackendname); print "\n
\n"; address_form("addaddr", _("Add address"), $defdata); -- 2.25.1