# vim: set cindent expandtab ts=4 sw=4:
#
# Copyright (c) 1998-2005 Chi-Keung Ho. All rights reserved.
#
# This programe is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# Extmail - a high-performance webmail to maildir
# $Id$
package Ext::GlobalAbook::File;
use Exporter;
use Ext::CSV;
use Ext::Utils;
use Fcntl qw(:flock);
use vars qw(@ISA @ABOOK $REF);
@ISA = qw(Exporter);
undef @ABOOK;
$REF = undef;
sub new {
my $class = shift;
my %opt = @_;
$opt{file} = '/var/www/cgi-bin/extmail/globabook.cf' unless $opt{file};
$opt{convert} = 0 unless $opt{convert};
$opt{charset} = 'iso-8859' unless $opt{charset};
$opt{lock} = 0 unless $opt{lock};
my $self = bless {@_}, ref $class || $class;
$self->{opt} = \%opt;
$REF = new Ext::CSV unless($REF);
$self->parse; # XXX auto
$self;
}
sub parse {
my $self = shift;
my $file = $self->{opt}{file};
my $count = 0;
open(FD, "< $file") or
warn "$file not exists, abort\n" and return "";
while(<FD>) {
chomp;
if ($REF->parse($_)) {
my @field = $REF->fields;
$ABOOK[$count] = \@field;
$count ++;
}else {
warn $REF->error_input;
}
}
shift @ABOOK; # XXX remove the first element !
close FD;
}
sub dump {
my $self = shift;
if ($self->{opt}{convert}) {
my $ref = [];
my $charset = $self->{opt}{charset};
foreach my $e (@ABOOK) {
for (my $i=0; $i<scalar @$e;$i++) {
$e->[$i] = str2ncr($charset, $e->[$i]);
}
push @$ref, $e;
}
return $ref;
} else {
return \@ABOOK;
}
}
sub search {
my $self = shift;
my $key = $_[0];
my @id;
my $ref = [];
foreach(my $k=0; $k < scalar @ABOOK; $k++) {
# join to a big string
my $s = join('', @{$ABOOK[$k]});
if($s=~/$key/i) {
if ($self->{opt}{convert}) {
my $charset = $self->{opt}{charset};
my $e = $ABOOK[$k];
for (my $i=0; $i<scalar @$e;$i++) {
$e->[$i] = str2ncr($charset, $e->[$i]);
}
push @$ref, $e;
} else {
push @$ref, $ABOOK[$k];
}
}
}
$ref;
}
sub DESTROY {
undef $REF;
undef @ABOOK;
}
1;
syntax highlighted by Code2HTML, v. 0.9.1