* Added global address book support (disabled by default)
[squirrelmail.git] / functions / abook_global_file.php
diff --git a/functions/abook_global_file.php b/functions/abook_global_file.php
new file mode 100644 (file)
index 0000000..c59b6bc
--- /dev/null
@@ -0,0 +1,176 @@
+<?php
+
+  /**
+   **  abook_local_file.php
+   **
+   **  Backend for addressbook as a pipe separated file
+   **
+   **  An array with the following elements must be passed to
+   **  the class constructor (elements marked ? are optional):
+   **
+   **  NOTE. This class should not be used directly. Use the
+   **        "AddressBook" class instead.
+   **
+   **  Make sure you configure this before using it!
+   **
+   ** $Id$
+   **/
+
+   class abook_global_file extends addressbook_backend {
+     var $btype = 'local';
+     var $bname = 'global_file';
+
+     var $filehandle = 0;
+
+     // ========================== Private =======================
+
+     // Constructor
+     function abook_global_file() {
+       global $address_book_global_filename;
+       $this->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
+?>