X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=functions%2Faddressbook.php;h=45f586b38b7e0d9da0a5709349c1e5feebe8b429;hb=6b6381715922c24dc8664cc62464096814d6a291;hp=1bac6c0c9c61ff54ccb9b7f0307afde6c36e5c26;hpb=ce916cdff59ae68ef8147158ade6e2230d471899;p=squirrelmail.git diff --git a/functions/addressbook.php b/functions/addressbook.php index 1bac6c0c..45f586b3 100644 --- a/functions/addressbook.php +++ b/functions/addressbook.php @@ -34,17 +34,19 @@ return $abook; // Load configured LDAP servers - reset($ldap_server); - while(list($key,$param) = each($ldap_server)) { - if(is_array($param)) { - $r = $abook->add_backend("ldap_server", $param); - if(!$r && $showerr) { - printf(" "._("Error initializing LDAP server %s:")."
\n", - $param["host"]); - printf(" ".$abook->error); - exit; - } - } + if(is_array($ldap_server)) { + reset($ldap_server); + while(list($key,$param) = each($ldap_server)) { + if(is_array($param)) { + $r = $abook->add_backend("ldap_server", $param); + if(!$r && $showerr) { + printf(" "._("Error initializing LDAP server %s:"). + "
\n", $param["host"]); + printf(" ".$abook->error); + exit; + } + } + } } // Return the initialized object @@ -63,9 +65,11 @@ var $numbackends = 0; var $error = ""; var $localbackend = 0; + var $localbackendname = ""; // Constructor function. function AddressBook() { + $localbackendname = _("Personal address book"); } // Return an array of backends of a given type, @@ -101,8 +105,10 @@ $this->backends[$this->numbackends] = $newback; // Store ID of first local backend added - if($this->localbackend == 0 && $newback->btype == "local") + if($this->localbackend == 0 && $newback->btype == "local") { $this->localbackend = $this->numbackends; + $this->localbackendname = $newback->sname; + } return $this->numbackends; } @@ -110,36 +116,49 @@ // Return a list of addresses matching expression in // all backends of a given type. - function search($expression, $btype = "") { + function search($expression, $bnum = -1) { $ret = array(); $this->error = ""; - $sel = $this->get_backend_list($btype); - $failed = 0; - for($i = 0 ; $i < sizeof($sel) ; $i++) { - $backend = &$sel[$i]; - $backend->error = ""; - $res = $backend->search($expression); - if(is_array($res)) { - $ret = array_merge($ret, $res); - } else { - $this->error = $this->error . "
\n". $backend->error; - $failed++; + // Search all backends + if($bnum == -1) { + $sel = $this->get_backend_list(""); + $failed = 0; + for($i = 0 ; $i < sizeof($sel) ; $i++) { + $backend = &$sel[$i]; + $backend->error = ""; + $res = $backend->search($expression); + if(is_array($res)) { + $ret = array_merge($ret, $res); + } else { + $this->error = $this->error . "
\n". $backend->error; + $failed++; + } } + + // Only fail if all backends failed + if($failed >= sizeof($sel)) + return false; + } - // Only fail if all backends failed - if($failed >= sizeof($sel)) - return false; + // Search only one backend + else { + $ret = $this->backends[$bnum]->search($expression); + if(!is_array($ret)) { + $this->error = $this->error . "
\n". $this->backends[$bnum]->error; + return false; + } + } return $ret; } // Return a sorted search - function s_search($expression, $btype = "") { + function s_search($expression, $bnum = -1) { - $ret = $this->search($expression, $btype); + $ret = $this->search($expression, $bnum); if(!is_array($ret)) return $ret; @@ -160,16 +179,27 @@ // Lookup an address by alias. Only possible in // local backends. - function lookup($alias) { + function lookup($alias, $bnum = -1) { $ret = array(); + if($bnum > -1) { + $res = $this->backends[$bnum]->lookup($alias); + if(is_array($res)) { + return $res; + } else { + $this->error = $backend->error; + return false; + } + } + $sel = $this->get_backend_list("local"); for($i = 0 ; $i < sizeof($sel) ; $i++) { $backend = &$sel[$i]; $backend->error = ""; $res = $backend->lookup($alias); if(is_array($res)) { - return $res; + if(!empty($res)) + return $res; } else { $this->error = $backend->error; return false; @@ -181,10 +211,14 @@ // Return all addresses - function list_addr() { + function list_addr($bnum = -1) { $ret = array(); - $sel = $this->get_backend_list("local"); + if($bnum == -1) + $sel = $this->get_backend_list("local"); + else + $sel = array(0 => &$this->backends[$bnum]); + for($i = 0 ; $i < sizeof($sel) ; $i++) { $backend = &$sel[$i]; $backend->error = ""; @@ -211,7 +245,7 @@ $this->error = _("Invalid input data"); return false; } - if(empty($userdata["fullname"]) && + if(empty($userdata["firstname"]) && empty($userdata["lastname"])) { $this->error = _("Name is missing"); return false; @@ -224,6 +258,11 @@ $userdata["nickname"] = $userdata["email"]; } + if(eregi("[\: \|\#\"\!]", $userdata["nickname"])) { + $this->error = _("Nickname contain illegal characters"); + return false; + } + // Check that specified backend accept new entries if(!$this->backends[$bnum]->writeable) { $this->error = _("Addressbook is read-only"); @@ -240,9 +279,85 @@ } return false; // Not reached - } + } // end of add() + + + // Remove the user identified by $alias from backend $bnum + // If $alias is an array, all users in the array are removed. + function remove($alias, $bnum) { + + // Check input + if(empty($alias)) + return true; + + // Convert string to single element array + if(!is_array($alias)) + $alias = array(0 => $alias); + + // Check that specified backend is writable + if(!$this->backends[$bnum]->writeable) { + $this->error = _("Addressbook is read-only"); + return false; + } + + // Remove user from backend + $res = $this->backends[$bnum]->remove($alias); + if($res) { + return $bnum; + } else { + $this->error = $this->backends[$bnum]->error; + return false; + } + + return false; // Not reached + } // end of remove() - } + + // Remove the user identified by $alias from backend $bnum + // If $alias is an array, all users in the array are removed. + function modify($alias, $userdata, $bnum) { + + // Check input + if(empty($alias) || !is_string($alias)) + return true; + + // Validate data + if(!is_array($userdata)) { + $this->error = _("Invalid input data"); + return false; + } + if(empty($userdata["firstname"]) && + empty($userdata["lastname"])) { + $this->error = _("Name is missing"); + return false; + } + if(empty($userdata["email"])) { + $this->error = _("E-mail address is missing"); + return false; + } + if(empty($userdata["nickname"])) { + $userdata["nickname"] = $userdata["email"]; + } + + // Check that specified backend is writable + if(!$this->backends[$bnum]->writeable) { + $this->error = _("Addressbook $bnum is read-only"); + return false; + } + + // Modify user in backend + $res = $this->backends[$bnum]->modify($alias, $userdata); + if($res) { + return $bnum; + } else { + $this->error = $this->backends[$bnum]->error; + return false; + } + + return false; // Not reached + } // end of modify() + + } // End of class Addressbook /** @@ -289,6 +404,16 @@ return false; } + function remove($alias) { + $this->set_error("delete not implemented"); + return false; + } + + function modify($alias, $newuserdata) { + $this->set_error("modify not implemented"); + return false; + } + } ?>