From 01589f262093b5af1c25621dd36d6bd8a509b4f8 Mon Sep 17 00:00:00 2001 From: fidian Date: Fri, 25 May 2001 18:15:13 +0000 Subject: [PATCH] * Added global address book support (disabled by default) git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@1409 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- functions/abook_global_file.php | 176 ++++++++++++++++++++++++++++++++ functions/addressbook.php | 33 +++++- src/addressbook.php | 10 ++ 3 files changed, 218 insertions(+), 1 deletion(-) create mode 100644 functions/abook_global_file.php diff --git a/functions/abook_global_file.php b/functions/abook_global_file.php new file mode 100644 index 00000000..c59b6bc7 --- /dev/null +++ b/functions/abook_global_file.php @@ -0,0 +1,176 @@ +global_filename = $address_book_global_filename; + + $this->sname = _("Global address book"); + + $this->open(true); + } + + // Open the addressbook file and store the file pointer. + // Use $file as the file to open, or the class' own + // filename property. If $param is empty and file is + // open, do nothing. + function open($new = false) { + $this->error = ''; + + // Return true is file is open and $new is unset + if($this->filehandle && !$new) + return true; + + // Check that new file exists + if (! file_exists($this->global_filename) || + ! is_readable($this->global_filename)) + return $this->set_error($this->global_filename . ': ' . + _("No such file or directory")); + + // Close old file, if any + if ($this->filehandle) $this->close(); + + // Open file, read only. + $fh = @fopen($this->global_filename, 'r'); + $this->writeable = false; + if(! $fh) + return $this->set_error($this->global_filename . ': ' . + _("Open failed")); + + $this->filehandle = &$fh; + return true; + } + + // Close the file and forget the filehandle + function close() { + @fclose($this->filehandle); + $this->filehandle = 0; + $this->global_filename = ''; + $this->writable = false; + } + + // ========================== Public ======================== + + // Search the file + function search($expr) { + + // To be replaced by advanded search expression parsing + if(is_array($expr)) return; + + // Make regexp from glob'ed expression + // May want to quote other special characters like (, ), -, [, ], etc. + $expr = str_replace('?', '.', $expr); + $expr = str_replace('*', '.*', $expr); + + $res = array(); + if(!$this->open()) + return false; + + @rewind($this->filehandle); + + while ($row = @fgetcsv($this->filehandle, 2048, '|')) { + $line = join(' ', $row); + if (eregi($expr, $line)) { + $res[] = array('nickname' => $row[0], + 'name' => $row[1] . ' ' . $row[2], + 'firstname' => $row[1], + 'lastname' => $row[2], + 'email' => $row[3], + 'label' => $row[4], + 'backend' => $this->bnum, + 'source' => &$this->sname); + } + } + + return $res; + } + + // Lookup alias + function lookup($alias) { + if (empty($alias)) + return array(); + + $alias = strtolower($alias); + + $this->open(); + @rewind($this->filehandle); + + while ($row = @fgetcsv($this->filehandle, 2048, '|')) { + if (strtolower($row[0]) == $alias) { + return array('nickname' => $row[0], + 'name' => $row[1] . ' ' . $row[2], + 'firstname' => $row[1], + 'lastname' => $row[2], + 'email' => $row[3], + 'label' => $row[4], + 'backend' => $this->bnum, + 'source' => &$this->sname); + } + } + + return array(); + } + + // List all addresses + function list_addr() { + $res = array(); + $this->open(); + @rewind($this->filehandle); + + while ($row = @fgetcsv($this->filehandle, 2048, '|')) { + $res[] = array('nickname' => $row[0], + 'name' => $row[1] . ' ' . $row[2], + 'firstname' => $row[1], + 'lastname' => $row[2], + 'email' => $row[3], + 'label' => $row[4], + 'backend' => $this->bnum, + 'source' => &$this->sname); + } + return $res; + } + + // Add address + function add($userdata) { + $this->set_error(_("Can not modify global address book")); + return false; + } + + // Delete address + function remove($alias) { + $this->set_error(_("Can not modify global address book")); + return false; + } + + // Modify address + function modify($alias, $userdata) { + $this->set_error(_("Can not modify global address book")); + return false; + } + + } // End of class abook_local_file +?> diff --git a/functions/addressbook.php b/functions/addressbook.php index 6a7a7dca..11cb7d09 100644 --- a/functions/addressbook.php +++ b/functions/addressbook.php @@ -12,10 +12,31 @@ return; define ('addressbook_php', true); + // This is the path to the global site-wide addressbook. + // It looks and feels just like a user's .abook file + // If this is in the data directory, use "$data_dir/global.abook" + // If not, specify the path as though it was accessed from the + // src/ directory ("../global.abook" -> 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'); + // Use this if you wanna have a global address book + if (isset($address_book_global_filename)) + include('../functions/abook_global_file.php'); + // Only load database backend if database is configured global $addrbook_dsn; if(isset($addrbook_dsn)) @@ -25,7 +46,7 @@ // 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 @@ -52,6 +73,16 @@ 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) diff --git a/src/addressbook.php b/src/addressbook.php index 4789080d..f36496ba 100644 --- a/src/addressbook.php +++ b/src/addressbook.php @@ -280,6 +280,9 @@ $prevbackend = -1; $headerprinted = false; + echo "

" . + _("Add address") . "

\n"; + // List addresses printf("
\n", $PHP_SELF); while(list($undef,$row) = each($alist)) { @@ -287,6 +290,12 @@ // New table header for each backend if($prevbackend != $row["backend"]) { if($prevbackend >= 0) { + print "\n"; + printf("\n", + _("Edit selected")); + printf("\n", + _("Delete selected")); + echo "\n"; print ''; print " 
\n"; } @@ -349,6 +358,7 @@ // Display the "new address" form + echo "\n"; printf("\n", $PHP_SELF); print "\n"; print "
\n"; -- 2.25.1