$b["backend"]) return 1; else if($a["backend"] < $b["backend"]) return -1; return (strtolower($a["name"]) > strtolower($b["name"])) ? 1 : -1; } // Output form to add and modify address data function address_form($name, $submittext, $values = array()) { global $color; print "\n"; printf("", _("Nickname")); printf("\n", $color[4], $name, htmlspecialchars($values["nickname"]), _("Must be unique")); printf("", _("E-mail address")); printf("\n", $color[4], $name, htmlspecialchars($values["email"])); printf("", _("First name")); printf("\n", $color[4], $name, htmlspecialchars($values["firstname"])); printf("", _("Last name")); printf("\n", $color[4], $name, htmlspecialchars($values["lastname"])); printf("", _("Additional info")); printf("\n", $color[4], $name, htmlspecialchars($values["label"])); printf("\n", $color[4], $name, $submittext); print "
%s:". "". " %s
%s:". "
%s:". "
%s:". "
%s:". "
\n". "
\n"; } include("../src/load_prefs.php"); // Open addressbook, with error messages on but without LDAP (the // second "true"). Don't need LDAP here anyway $abook = addressbook_init(true, true); if($abook->localbackend == 0) { plain_error_message(_("No personal address book is defined. Contact administrator."), $color); exit(); } displayPageHeader($color, "None"); $defdata = array(); $formerror = ""; $abortform = false; $showaddrlist = true; $defselected = array(); // Handle user's actions if($REQUEST_METHOD == "POST") { // *********************************************** // Add new address // *********************************************** if(!empty($addaddr["nickname"])) { $r = $abook->add($addaddr, $abook->localbackend); // Handle error messages if(!$r) { // Remove backend name from error string $errstr = $abook->error; $errstr = ereg_replace("^\[.*\] *", "", $errstr); $formerror = $errstr; $showaddrlist = false; $defdata = $addaddr; } } // *********************************************** // Delete address(es) // *********************************************** else if((!empty($deladdr)) && sizeof($sel) > 0) { $orig_sel = $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 = $orig_sel; } } // *********************************************** // Update/modify address // *********************************************** else if(!empty($editaddr)) { // Stage one: Copy data into form if(sizeof($sel) > 0) { if(sizeof($sel) > 1) { $formerror = _("You can only edit one address at the time"); $showaddrlist = true; $defselected = $sel; } else { $abortform = true; list($ebackend, $enick) = split(":", $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($doedit = 1) { $newdata = $editaddr; $r = $abook->modify($oldnick, $newdata, $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. // =================================================================== // Display error messages if(!empty($formerror)) { print "\n"; print "\n"; print "
\n
"; print ""._("ERROR").": $formerror"; print "\n
\n"; } // Display the address management part if($showaddrlist) { // Get and sort address list $alist = $abook->list_addr(); if(!is_array($alist)) { plain_error_message($abook->error, $color); exit; } usort($alist,'alistcmp'); $prevbackend = -1; $headerprinted = false; // List addresses printf("
\n", $PHP_SELF); while(list($undef,$row) = each($alist)) { // New table header for each backend if($prevbackend != $row["backend"]) { if($prevbackend >= 0) { print ""; print " 
\n"; } print "\n"; print "\n"; print "
\n"; print $row["source"]; print "\n
\n"; print ''; printf('\n", $color[9], "1%", "1%", _("Nickname"), "1%", _("Name"), "1%", _("E-mail"), "%", _("Info")); $line = 0; $headerprinted = true; } // 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("", (($line % 2) ? " bgcolor=\"$color[0]\"" : "")); print '', $selected, $row["backend"], $row["nickname"]); printf(''. '', "1%", $row["nickname"], "1%", $row["name"]); printf(''."\n", "1%", rawurlencode($row["email"]), $row["email"]); printf('', "%", $row["label"]); print "\n"; $line++; } // End of list. Close table. if($headerprinted) { print "
 '. '%s%s'. '%s%s'. "
'; printf(' %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"; printf(_("Add to %s"), $abook->localbackendname); print "\n
\n"; address_form("addaddr", _("Add address"), $defdata); print "
"; // Add hook for anything that wants on the bottom do_hook("addressbook_bottom"); ?>