save => [\&html_start, \&action_save, \&html_end],
search => [\&html_start, \&action_search, \&html_end],
verify => [\&html_start, \&action_verify, \&html_end],
+ delete => [\&html_start, \&action_ask_del, \&html_end],
+ expunge => [\&html_start, \&action_do_del, \&html_end],
vcard => \&action_vcard
);
[<a href="$MySelf?action=verify&cn=$cn_esc">Verify</a>]
[<a href="$MySelf?action=vcard&cn=$cn_esc">vCard</a>]
[<a href="$MySelf?action=edit&cn=$cn_esc">Edit</a>]
+ [<a href="$MySelf?action=delete&cn=$cn_esc">Delete</a>]
</div>
EOF
my $print = defined ($FieldNames{$field}) ? $FieldNames{$field} : $field;
my @values = @{$contacts->{$field}};
- next if (!$UserID and $field eq 'group');
+ next if ($field eq 'group');
push (@values, '');
}
}
+ if ($UserID)
+ {
+ my %c_groups = map { $_ => 1 } (@{$contacts->{'group'}});
+ my %a_groups = ();
+ my @a_persons = LiCoM::Person->search ();
+
+ for (@a_persons)
+ {
+ $a_groups{$_} = 1 for ($_->get ('group'));
+ }
+
+ print "\t\t\t<tr>\n",
+ "\t\t\t\t<th>", $FieldNames{'group'}, "</th>\n",
+ qq(\t\t\t\t<td><select name="group" multiple="multiple">\n);
+ for (sort (keys %a_groups))
+ {
+ my $group = $_;
+ my $selec = defined ($c_groups{$group}) ? ' selected="selected"' : '';
+
+ print qq(\t\t\t\t\t<option value="$group"$selec>$group</option>\n);
+ }
+ print "\t\t\t\t</select></td>\n",
+ "\t\t\t</tr>\n";
+ }
+
print <<EOF;
<tr>
<th colspan="2" class="menu">
my $vc_fld = $vcard_types{$field};
my $values = $person->get ($field);
+ next unless ($vc_fld);
+
for (@$values)
{
my $value = $_;
$mail ||= '';
my $message;
- my $password = $person->password ();
+ my $password = $person->get ('password');
if (!$password)
{
$password = pwgen ();
- $person->password ($password);
+ $person->set ('password', $password);
}
$message = qq(The password for the record "$cn" is "$password".);
my $person_name = $person->name ();
my ($person_mail) = $person->get ('mail');
my $person_gn = $person->firstname ();
- my $password = $person->password ();
+ my $password = $person->get ('password');
my $host = $ENV{'HTTP_HOST'};
- my $url = 'http://' . $host . $MySelf;
+ my $url = (defined ($ENV{'HTTPS'}) ? 'https://' : 'http://') . $host . $MySelf;
open ($smh, "| /usr/sbin/sendmail -t -f $owner_mail") or die ("open pipe to sendmail: $!");
print $smh <<EOM;
print $smh <<EOM;
If this entry is outdated or incomplete, please take a minute and correct it.
- Address: $url
+ Address: $url
Username: $person_name
Password: $password
-Thank you very much :) Regards,
+Thank you very much :)
+
+Regards,
$UserCN
+--
+This message was automatically generated by LiCoM,
+http://verplant.org/licom/
EOM
close ($smh);
return (1);
}
+sub action_ask_del
+{
+ my $cn = param ('cn');
+ $cn or die;
+
+ my $person = LiCoM::Person->load ($cn);
+ $person or die;
+
+ my $cn_esc = uri_escape ($cn);
+
+ print <<EOF;
+ <h2>Really delete $cn?</h2>
+
+ <div>
+ You are about to delete <strong>$cn</strong>. Are you
+ totally, absolutely sure you want to do this?
+ </div>
+
+ <div class="menu">
+ [<a href="$MySelf?action=expunge&cn=$cn_esc">Yes, delete</a>]
+ [<a href="$MySelf?action=detail&cn=$cn_esc">No, keep</a>]
+ </div>
+
+EOF
+}
+
+sub action_do_del
+{
+ my $cn = param ('cn');
+ $cn or die;
+
+ my $person = LiCoM::Person->load ($cn);
+ $person or die;
+
+ $person->delete ();
+
+ print <<EOF;
+ <div>$cn has been deleted.</div>
+
+EOF
+ action_browse ();
+}
+
sub html_start
{
my $title = shift;
<body>
EOF
+
if ($UserID)
{
my $search = param ('search') || '';
my $number = $_;
next unless ($number);
- if ($number !~ m/^\+/)
+ if ($number !~ m/^\+[0-9 \-]+$/)
{
- push (@errors, 'Telephone numbers have to begin with the country code, e.g. "+49 911 123456"');
+ push (@errors, 'Telephone numbers have to begin with the country code and only numbers, spaces and dashes are allowed, e.g. "+49 911-123456"');
last;
}
}
{
for (@values)
{
- $_ =~ s/\D//g;
- $_ = '+' . $_;
+ $_ =~ s/[^0-9 \-]//g;
+ $_ = '+' . $_ if ($_);
}
}