<?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):
- **
- ** filename => path to addressbook file
- ** ? create => if true: file is created if it does not exist.
- ** ? umask => umask set before opening file.
- **
- ** NOTE. This class should not be used directly. Use the
- ** "AddressBook" class instead.
- **
- ** $Id$
- **/
-
- class abook_local_file extends addressbook_backend {
+/**
+ * abook_local_file.php
+ *
+ * Copyright (c) 1999-2001 The Squirrelmail Development Team
+ * Licensed under the GNU GPL. For full terms see the file COPYING.
+ *
+ * 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):
+ *
+ * filename => path to addressbook file
+ * ? create => if true: file is created if it does not exist.
+ * ? umask => umask set before opening file.
+ *
+ * NOTE. This class should not be used directly. Use the
+ * "AddressBook" class instead.
+ *
+ * $Id$
+ */
+
+/*****************************************************************/
+/*** THIS FILE NEEDS TO HAVE ITS FORMATTING FIXED!!! ***/
+/*** PLEASE DO SO AND REMOVE THIS COMMENT SECTION. ***/
+/*** + Base level indent should begin at left margin, as ***/
+/*** the first line of the class definition below. ***/
+/*** + All identation should consist of four space blocks ***/
+/*** + Tab characters are evil. ***/
+/*** + all comments should use "slash-star ... star-slash" ***/
+/*** style -- no pound characters, no slash-slash style ***/
+/*** + FLOW CONTROL STATEMENTS (if, while, etc) SHOULD ***/
+/*** ALWAYS USE { AND } CHARACTERS!!! ***/
+/*** + Please use ' instead of ", when possible. Note " ***/
+/*** should always be used in _( ) function calls. ***/
+/*** Thank you for your help making the SM code more readable. ***/
+/*****************************************************************/
+
+class abook_local_file extends addressbook_backend {
var $btype = 'local';
var $bname = 'local_file';
// Constructor
function abook_local_file($param) {
- $this->sname = _('Personal address book');
+ $this->sname = _("Personal address book");
$this->umask = Umask();
if(is_array($param)) {
return $this->set_error('Invalid parameters');
if(!is_string($param['filename']))
return $this->set_error($param['filename'] . ': '.
- _('Not a file name'));
+ _("Not a file name"));
$this->filename = $param['filename'];
// Check that new file exitsts
if((!(file_exists($file) && is_readable($file))) && !$create)
- return $this->set_error("$file: " . _('No such file or directory'));
+ return $this->set_error("$file: " . _("No such file or directory"));
// Close old file, if any
if($this->filehandle) $this->close();
$this->filename = $file;
$this->writeable = false;
} else {
- return $this->set_error("$file: " . _('Open failed'));
+ return $this->set_error("$file: " . _("Open failed"));
}
}
// Overwrite the file with data from $rows
// NOTE! Previous locks are broken by this function
- function overwrite($rows) {
+ function overwrite(&$rows) {
$newfh = @fopen($this->filename, 'w');
if(!$newfh)
- return $this->set_error("$file: " . _('Open failed'));
+ return $this->set_error("$file: " . _("Open failed"));
for($i = 0 ; $i < sizeof($rows) ; $i++) {
if(is_array($rows[$i]))
// To be replaced by advanded search expression parsing
if(is_array($expr)) return;
- // Make regexp from glob'ed expression
- $expr = ereg_replace('\?', '.', $expr);
- $expr = ereg_replace('\*', '.*', $expr);
+ // 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())
// Add address
function add($userdata) {
if(!$this->writeable)
- return $this->set_error(_('Addressbook is read-only'));
+ return $this->set_error(_("Addressbook is read-only"));
// See if user exist already
$ret = $this->lookup($userdata['nickname']);
if(!empty($ret))
- return $this->set_error(sprintf(_('User \'%s\' already exist'),
+ return $this->set_error(sprintf(_("User '%s' already exist"),
$ret['nickname']));
// Here is the data to write
// Reopen file, just to be sure
$this->open(true);
if(!$this->writeable)
- return $this->set_error(_('Addressbook is read-only'));
+ return $this->set_error(_("Addressbook is read-only"));
// Lock the file
if(!$this->lock())
- return $this->set_error(_('Could not lock datafile'));
+ return $this->set_error(_("Could not lock datafile"));
// Write
$r = fwrite($this->filehandle, $data);
if($r > 0) return true;
// Fail
- $this->set_error(_('Write to addressbook failed'));
+ $this->set_error(_("Write to addressbook failed"));
return false;
}
// Delete address
function remove($alias) {
if(!$this->writeable)
- return $this->set_error(_('Addressbook is read-only'));
+ return $this->set_error(_("Addressbook is read-only"));
// Lock the file to make sure we're the only process working
// on it.
if(!$this->lock())
- return $this->set_error(_('Could not lock datafile'));
+ return $this->set_error(_("Could not lock datafile"));
// Read file into memory, ignoring nicknames to delete
- $this->open();
@rewind($this->filehandle);
$i = 0;
$rows = array();
}
// Write data back
- if(!$this->overwrite(&$rows)) {
+ if(!$this->overwrite($rows)) {
$this->unlock();
return false;
}
// Modify address
function modify($alias, $userdata) {
if(!$this->writeable)
- return $this->set_error(_('Addressbook is read-only'));
+ return $this->set_error(_("Addressbook is read-only"));
// See if user exist
$ret = $this->lookup($alias);
if(empty($ret))
- return $this->set_error(sprintf(_('User \'%s\' does not exist'),
+ return $this->set_error(sprintf(_("User '%s' does not exist"),
$alias));
// Lock the file to make sure we're the only process working
// on it.
if(!$this->lock())
- return $this->set_error(_('Could not lock datafile'));
+ return $this->set_error(_("Could not lock datafile"));
// Read file into memory, modifying the data for the
// user identifyed by $alias
- $this->open();
+ $this->open(true);
@rewind($this->filehandle);
$i = 0;
$rows = array();
}
// Write data back
- if(!$this->overwrite(&$rows)) {
+ if(!$this->overwrite($rows)) {
$this->unlock();
return false;
}