\n);
}
}
sub action_detail
{
my $cn = param ('cn');
$cn = shift if (@_);
die unless ($cn);
my $person = Person->load ($cn);
if (!$person)
{
print qq(\t
Entry "$cn" could not be loaded from DB.
\n);
return;
}
print qq(\t
Details for $cn
\n);
my $cn_esc = uri_escape ($cn);
print <
Name
$cn
EOF
for (@MultiFields)
{
my $field = $_;
my $values = $person->get ($field);
my $num = scalar (@$values);
my $print = defined ($FieldNames{$field}) ? $FieldNames{$field} : $field;
next unless ($num);
print "\t\t
\n";
if ($num > 1)
{
print qq(\t\t\t
$print
\n);
}
else
{
print qq(\t\t\t
$print
\n);
}
for (my $i = 0; $i < $num; $i++)
{
my $val = $values->[$i];
print "\t\t
\n);
}
sub action_edit
{
my %opts = @_;
my $cn = param ('cn');
$cn = $opts{'cn'} if (defined ($opts{'cn'}));
$cn ||= '';
if (!$UserID)
{
$cn = $UserCN;
}
my $person;
my $lastname;
my $firstname;
my $contacts = {};
$contacts->{$_} = [] for (@MultiFields);
if ($cn)
{
$person = Person->load ($cn);
if (!$person)
{
print qq(\t
Unable to load CN "$cn". Sorry.
\n);
return;
}
$lastname = $person->lastname ();
$firstname = $person->firstname ();
for (@MultiFields)
{
$contacts->{$_} = $person->get ($_);
}
}
$lastname = param ('lastname') if (param ('lastname') and $UserID);
$firstname = param ('firstname') if (param ('firstname') and $UserID);
for (@MultiFields)
{
my $field = $_;
my @values = grep { $_ } (param ($field));
$contacts->{$field} = [@values] if (@values);
}
$lastname = $opts{'lastname'} if (defined ($opts{'lastname'}));
$firstname = $opts{'firstname'} if (defined ($opts{'firstname'}));
for (@MultiFields)
{
my $field = $_;
@{$contacts->{$field}} = @{$opts{$field}} if (defined ($opts{$field}));
}
if ($cn)
{
print "\t\t
Edit contact $cn
\n";
}
else
{
print "\t\t
Create new contact
\n";
}
print <
Lastname
EOF
if ($UserID)
{
print qq(\t\t\t\t
\n);
}
else
{
print qq(\t\t\t\t
$lastname
\n);
}
print <
Firstname
EOF
if ($UserID)
{
print qq(\t\t\t\t
\n);
}
else
{
print qq(\t\t\t\t
$firstname
\n);
}
print "\t\t\t
\n";
for (@MultiFields)
{
my $field = $_;
my $print = defined ($FieldNames{$field}) ? $FieldNames{$field} : $field;
my @values = @{$contacts->{$field}};
push (@values, '');
for (@values)
{
my $value = $_;
print <
$print
EOF
}
}
print <
EOF
print qq(\t\t\t\t\t\n) if ($UserID);
print <
EOF
}
sub action_save
{
my $cn = $UserID ? param ('cn') : $UserCN;
if ($cn)
{
action_update ();
return;
}
die unless ($UserID);
if (!param ('lastname') or !param ('firstname'))
{
print qq(\t
You have to give both, first and lastname, to identify this record.
\n);
action_edit (cn => '');
return;
}
my $lastname = param ('lastname');
my $firstname = param ('firstname');
my $contacts = {};
for (@MultiFields)
{
my $field = $_;
my @values = grep { $_ } (param ($field));
$contacts->{$field} = [@values] if (@values);
}
my $person = Person->create (lastname => $lastname, firstname => $firstname, %$contacts);
if (!$person)
{
print qq(\t
Unable to save entry. Sorry.
\n);
return;
}
$cn = $person->name ();
if (param ('button') eq 'Update')
{
action_edit (cn => $cn);
}
else
{
action_detail ($cn);
}
}
sub action_update
{
my $cn = $UserID ? param ('cn') : $UserCN;
my $person = Person->load ($cn);
die unless ($person);
if ($UserID)
{
my $lastname = param ('lastname');
my $firstname = param ('firstname');
$person->lastname ($lastname) if ($lastname and $lastname ne $person->lastname ());
$person->firstname ($firstname) if ($firstname and $firstname ne $person->firstname ());
$cn = $person->name ();
}
my $contacts = {};
for (@MultiFields)
{
my $field = $_;
my @values = grep { $_ } (param ($field));
$contacts->{$field} = [@values] if (@values);
}
for (@MultiFields)
{
my $field = $_;
if (defined ($contacts->{$field}))
{
my $values = $contacts->{$field};
$person->set ($field, $values);
}
else
{
$person->set ($field, []);
}
}
if (param ('button') eq 'Update' or !$UserID)
{
action_edit (cn => $cn);
}
else
{
action_detail ($cn);
}
}
sub action_vcard
{
my $cn = param ('cn');
$cn = shift if (@_);
die unless ($cn);
my $person = Person->load ($cn);
die unless ($person);
my %vcard_types =
(
homephone => 'TEL;TYPE=home,voice',
cellphone => 'TEL;TYPE=cell',
officephone => 'TEL;TYPE=work,voice',
fax => 'TEL;TYPE=fax',
mail => 'EMAIL',
uri => 'URL',
group => 'ORG'
);
my $sn = $person->lastname ();
my $gn = $person->firstname ();
my $cn_esc = uri_escape ($cn);
print <get ($field);
for (@$values)
{
my $value = $_;
print "$vc_fld:$value\n";
}
}
print "END:VCARD\n";
}
sub html_start
{
my $title = shift;
$title = q(octo's Lightweight Address Book) unless ($title);
print <$title
EOF
if ($UserID)
{
my $search = param ('search') || '';
print <
EOF
}
print "\t\t
octo's Lightweight Address Book
\n";
}
sub html_end
{
print <octo's Lightweight Address Book <octo at verplant.org>