bugzilla-4intranet/editemailin.cgi

111 lines
2.6 KiB
Perl
Executable File

#!/usr/bin/perl -wT
# -*- Mode: perl; indent-tabs-mode: nil -*-
use strict;
use lib qw(. lib);
use Bugzilla;
use Bugzilla::Error;
use Bugzilla::Constants;
use Bugzilla::User;
use Bugzilla::Util;
use Mail::RFC822::Address qw(valid);
my $cgi = Bugzilla->cgi;
my $dbh = Bugzilla->dbh;
my $user = Bugzilla->login(LOGIN_REQUIRED);
my $template = Bugzilla->template;
my $userid = $user->id;
unless ($user->in_group('admin'))
{
ThrowUserError("auth_failure", {
group => "admin",
action => "edit",
object => "e-mail parse parameters",
});
}
my $params = {};
for ($cgi->param)
{
if (defined $cgi->param($_))
{
$params->{$_} = $cgi->param($_);
trick_taint($params->{$_});
}
}
my $vars = {
mode_add => $params->{add} ? 1 : 0,
email => $params->{email} || '',
curfield => $params->{field} || '',
value => $params->{value} || '',
};
if ($params->{do})
{
if ($vars->{mode_add})
{
my ($e, $f, $v) = @$params{qw(email field value)};
if (valid($e) && $f)
{
$dbh->do("INSERT INTO `emailin_fields` SET `address`=?, `field`=?, `value`=?",
undef, $e, $f, $v);
print $cgi->redirect(-location => "editemailin.cgi");
exit;
}
else
{
$vars->{bad} = 1;
}
}
else
{
my $change = [];
my $del = [];
for (keys %$params)
{
if (/^f_(.*?)_(.*?)$/so && !$params->{"del_$1_$2"})
{
push @$change, [ $1, $2, $params->{$_} ];
}
elsif (/^del_(.*?)_(.*?)$/so)
{
push @$del, [ $1, $2 ];
}
}
if (@$change)
{
$dbh->do(
"REPLACE INTO `emailin_fields` (`address`, `field`, `value`) VALUES ".
join(",", ("(?,?,?)") x @$change), undef, map { @$_ } @$change
);
}
if (@$del)
{
$dbh->do(
"DELETE FROM `emailin_fields` WHERE (`address`,`field`) IN (".
join(",", ("(?,?)") x @$del) . ")", undef, map { @$_ } @$del
);
}
print $cgi->redirect(-location => "editemailin.cgi");
exit;
}
}
if (!$vars->{mode_add})
{
$vars->{fields} = $dbh->selectall_arrayref(
"SELECT * FROM `emailin_fields` ORDER BY `address`, `field`",
{Slice=>{}}
) || [];
}
$cgi->send_header();
$template->process("admin/editemailin.html.tmpl", $vars)
|| ThrowTemplateError($template->error());
1;
__END__