X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=functions%2Faddressbook.php;h=08246cd6cf9446d62b145f1872b2cc2f15690d19;hb=d622d38af6c2101b24c27851caf30866070c90c1;hp=baaff51b376f8e3d89117eb8075b804e6ac3e3c7;hpb=245a6892bf5c780904ef9677f24d624ea17e0749;p=squirrelmail.git diff --git a/functions/addressbook.php b/functions/addressbook.php index baaff51b..08246cd6 100644 --- a/functions/addressbook.php +++ b/functions/addressbook.php @@ -1,50 +1,104 @@ in main directory) + // + // If you don't want a global site-wide addressbook, comment these + // two lines out. (They are disabled by default.) + // + // The global addressbook is unmodifiable by anyone. You must actually + // use a shell script or whatnot to modify the contents. + // + //global $data_dir; + //$address_book_global_filename = "$data_dir/global.abook"; + + // Include backends here. - include("../functions/abook_local_file.php"); - include("../functions/abook_ldap_server.php"); + require_once('../functions/abook_local_file.php'); + require_once('../functions/abook_ldap_server.php'); + + // Use this if you wanna have a global address book + if (isset($address_book_global_filename)) + include_once('../functions/abook_global_file.php'); + + // Only load database backend if database is configured + global $addrbook_dsn; + if(isset($addrbook_dsn)) + include_once('../functions/abook_database.php'); // Create and initialize an addressbook object. // Returns the created object function addressbook_init($showerr = true, $onlylocal = false) { - global $data_dir, $username, $ldap_server; + global $data_dir, $username, $ldap_server, $address_book_global_filename; + global $addrbook_dsn; // Create a new addressbook object $abook = new AddressBook; - // Always add a local backend - $filename = sprintf("%s%s.abook", $data_dir, $username); - $r = $abook->add_backend("local_file", Array("filename" => $filename, - "create" => true)); - if(!$r && $showerr) { - printf(_("Error opening file %s"), $filename); - exit; + // Always add a local backend. We use *either* file-based *or* a + // database addressbook. If $addrbook_dsn is set, the database + // backend is used. If not, addressbooks are stores in files. + if(isset($addrbook_dsn) && !empty($addrbook_dsn)) { + // Database + $r = $abook->add_backend('database', Array('dsn' => $addrbook_dsn, + 'owner' => $username, + 'table' => 'address')); + if(!$r && $showerr) { + printf(_("Error initializing addressbook database.")); + exit; + } + } else { + // File + $filename = sprintf('%s%s.abook', $data_dir, $username); + $r = $abook->add_backend('local_file', Array('filename' => $filename, + 'create' => true)); + if(!$r && $showerr) { + printf(_("Error opening file %s"), $filename); + exit; + } + + } + + // This would be for the global addressbook + if (isset($address_book_global_filename)) { + $r = $abook->add_backend('global_file'); + if (!$r && $showerr) { + printf(_("Error initializing global addressbook.")); + exit; + } } if($onlylocal) return $abook; // Load configured LDAP servers (if PHP has LDAP support) - if(is_array($ldap_server) && function_exists("ldap_connect")) { + if(isset($ldap_server) && is_array($ldap_server) && + function_exists('ldap_connect')) { reset($ldap_server); while(list($undef,$param) = each($ldap_server)) { if(is_array($param)) { - $r = $abook->add_backend("ldap_server", $param); + $r = $abook->add_backend('ldap_server', $param); if(!$r && $showerr) { - printf(" "._("Error initializing LDAP server %s:"). - "
\n", $param["host"]); - printf(" ".$abook->error); + printf(' ' . _("Error initializing LDAP server %s:") . + "
\n", $param['host']); + print(' ' . $abook->error); exit; } } @@ -58,12 +112,12 @@ // Had to move this function outside of the Addressbook Class // PHP 4.0.4 Seemed to be having problems with inline functions. - function cmp($a,$b) { - if($a["backend"] > $b["backend"]) + function addressbook_cmp($a,$b) { + if($a['backend'] > $b['backend']) return 1; - else if($a["backend"] < $b["backend"]) + else if($a['backend'] < $b['backend']) return -1; - return (strtolower($a["name"]) > strtolower($b["name"])) ? 1 : -1; + return (strtolower($a['name']) > strtolower($b['name'])) ? 1 : -1; } @@ -76,9 +130,9 @@ class AddressBook { var $backends = array(); var $numbackends = 0; - var $error = ""; + var $error = ''; var $localbackend = 0; - var $localbackendname = ""; + var $localbackendname = ''; // Constructor function. function AddressBook() { @@ -87,11 +141,11 @@ // Return an array of backends of a given type, // or all backends if no type is specified. - function get_backend_list($type = "") { + function get_backend_list($type = '') { $ret = array(); for($i = 1 ; $i <= $this->numbackends ; $i++) { if(empty($type) || $type == $this->backends[$i]->btype) { - array_push($ret, &$this->backends[$i]); + $ret[] = &$this->backends[$i]; } } return $ret; @@ -104,9 +158,9 @@ // (without the abook_ prefix), and $param is an optional // mixed variable that is passed to the backend constructor. // See each of the backend classes for valid parameters. - function add_backend($backend, $param = "") { - $backend_name = "abook_".$backend; - eval("\$newback = new $backend_name(\$param);"); + function add_backend($backend, $param = '') { + $backend_name = 'abook_' . $backend; + eval('$newback = new ' . $backend_name . '($param);'); if(!empty($newback->error)) { $this->error = $newback->error; return false; @@ -118,7 +172,7 @@ $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; } @@ -131,20 +185,20 @@ // all backends of a given type. function search($expression, $bnum = -1) { $ret = array(); - $this->error = ""; + $this->error = ''; // Search all backends if($bnum == -1) { - $sel = $this->get_backend_list(""); + $sel = $this->get_backend_list(''); $failed = 0; for($i = 0 ; $i < sizeof($sel) ; $i++) { $backend = &$sel[$i]; - $backend->error = ""; + $backend->error = ''; $res = $backend->search($expression); if(is_array($res)) { $ret = array_merge($ret, $res); } else { - $this->error = $this->error . "
\n". $backend->error; + $this->error .= "
\n" . $backend->error; $failed++; } } @@ -159,7 +213,7 @@ else { $ret = $this->backends[$bnum]->search($expression); if(!is_array($ret)) { - $this->error = $this->error . "
\n". $this->backends[$bnum]->error; + $this->error .= "
\n" . $this->backends[$bnum]->error; return false; } } @@ -174,7 +228,7 @@ $ret = $this->search($expression, $bnum); if(!is_array($ret)) return $ret; - usort($ret, 'cmp'); + usort($ret, 'addressbook_cmp'); return $ret; } @@ -194,10 +248,10 @@ } } - $sel = $this->get_backend_list("local"); + $sel = $this->get_backend_list('local'); for($i = 0 ; $i < sizeof($sel) ; $i++) { $backend = &$sel[$i]; - $backend->error = ""; + $backend->error = ''; $res = $backend->lookup($alias); if(is_array($res)) { if(!empty($res)) @@ -217,13 +271,13 @@ $ret = array(); if($bnum == -1) - $sel = $this->get_backend_list("local"); + $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 = ""; + $backend->error = ''; $res = $backend->list_addr(); if(is_array($res)) { $ret = array_merge($ret, $res); @@ -247,21 +301,21 @@ $this->error = _("Invalid input data"); return false; } - if(empty($userdata["firstname"]) && - empty($userdata["lastname"])) { + if(empty($userdata['firstname']) && + empty($userdata['lastname'])) { $this->error = _("Name is missing"); return false; } - if(empty($userdata["email"])) { + if(empty($userdata['email'])) { $this->error = _("E-mail address is missing"); return false; } - if(empty($userdata["nickname"])) { - $userdata["nickname"] = $userdata["email"]; + if(empty($userdata['nickname'])) { + $userdata['nickname'] = $userdata['email']; } - if(eregi("[\: \|\#\"\!]", $userdata["nickname"])) { - $this->error = _("Nickname contain illegal characters"); + if(eregi('[ \\:\\|\\#\\"\\!]', $userdata['nickname'])) { + $this->error = _("Nickname contains illegal characters"); return false; } @@ -328,23 +382,23 @@ $this->error = _("Invalid input data"); return false; } - if(empty($userdata["firstname"]) && - empty($userdata["lastname"])) { + if(empty($userdata['firstname']) && + empty($userdata['lastname'])) { $this->error = _("Name is missing"); return false; } - if(empty($userdata["email"])) { + if(empty($userdata['email'])) { $this->error = _("E-mail address is missing"); return false; } - if(eregi("[\: \|\#\"\!]", $userdata["nickname"])) { - $this->error = _("Nickname contain illegal characters"); + if(eregi('[\\: \\|\\#"\\!]', $userdata['nickname'])) { + $this->error = _("Nickname contains illegal characters"); return false; } - if(empty($userdata["nickname"])) { - $userdata["nickname"] = $userdata["email"]; + if(empty($userdata['nickname'])) { + $userdata['nickname'] = $userdata['email']; } // Check that specified backend is writable @@ -374,18 +428,18 @@ class addressbook_backend { // Variables that all backends must provide. - var $btype = "dummy"; - var $bname = "dummy"; - var $sname = "Dummy backend"; + var $btype = 'dummy'; + var $bname = 'dummy'; + var $sname = 'Dummy backend'; // Variables common for all backends, but that // should not be changed by the backends. var $bnum = -1; - var $error = ""; + var $error = ''; var $writeable = false; function set_error($string) { - $this->error = "[" . $this->sname . "] " . $string; + $this->error = '[' . $this->sname . '] ' . $string; return false; } @@ -393,32 +447,32 @@ // ========================== Public ======================== function search($expression) { - $this->set_error("search not implemented"); + $this->set_error('search not implemented'); return false; } function lookup($alias) { - $this->set_error("lookup not implemented"); + $this->set_error('lookup not implemented'); return false; } function list_addr() { - $this->set_error("list_addr not implemented"); + $this->set_error('list_addr not implemented'); return false; } function add($userdata) { - $this->set_error("add not implemented"); + $this->set_error('add not implemented'); return false; } function remove($alias) { - $this->set_error("delete not implemented"); + $this->set_error('delete not implemented'); return false; } function modify($alias, $newuserdata) { - $this->set_error("modify not implemented"); + $this->set_error('modify not implemented'); return false; }