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 */ ?>