Apache-Voodoo
view release on metacpan or search on metacpan
lib/Apache/Voodoo/Table.pm view on Meta::CPAN
$self->{'pager'} = $conf->{'pager'};
}
else {
$self->{'pager'} = Apache::Voodoo::Pager->new();
# setup the pagination options
$self->{'pager'}->set_configuration(
'count' => 40,
'window' => 10,
'persist' => [
'pattern',
'limit',
'sort',
'last_sort',
'desc',
@{$conf->{'list_options'}->{'persist'} || []}
]
);
}
if (@errors) {
Apache::Voodoo::Exception::RunTime::BadConfig->throw("Configuration Errors:\n\t".join("\n\t",@errors));
}
}
sub table {
my $self = shift;
if ($_[0]) {
$self->{'table'} = $_[0];
}
return $self->{'table'};
}
sub success {
my $self = shift;
return $self->{'success'};
}
sub edit_details {
my $self = shift;
# if there wasn't a successful edit, then there's no details :)
return unless $self->{'success'};
return $self->{'edit_details'} || [];
}
sub add_details {
my $self = shift;
# if there wasn't a successful add, then there's no details :)
return unless $self->{'success'};
return $self->{'add_details'} || [];
}
sub add_insert_callback {
my $self = shift;
my $sub_ref = shift;
push(@{$self->{'insert_callbacks'}},$sub_ref);
}
sub add_update_callback {
my $self = shift;
my $sub_ref = shift;
push(@{$self->{'update_callbacks'}},$sub_ref);
}
sub list_param_parser {
my $self = shift;
my $sub_ref = shift;
$self->{'list_param_parser'} = $sub_ref;
}
sub validate_add {
my $self = shift;
my $p = shift;
my $dbh = $p->{'dbh'};
my $params = $p->{'params'};
my $errors = {};
# call each of the insert callbacks
foreach (@{$self->{'insert_callbacks'}}) {
my $callback_errors = $_->($dbh,$params);
@{$errors}{keys %{$callback_errors}} = values %{$callback_errors};
}
# do all the normal parameter checking
my ($values,$e) = $self->{valid}->validate($params);
# copy the errors from the process_params
$errors = { %{$errors}, %{$e} } if ref($e) eq "HASH";
# check to see if the user supplied primary key (optional) is unique
if ($self->{'pkey_user_supplied'}) {
if ($params->{$self->{'pkey'}} =~ /$self->{'pkey_regexp'}/) {
my $res = $dbh->selectall_arrayref("
SELECT 1
FROM $self->{'table'}
WHERE $self->{'pkey'} = ?",
undef,
$params->{$self->{'pkey'}} );
if ($res->[0]->[0] == 1) {
$errors->{'DUP_'.$self->{'pkey'}} = 1;
}
}
else {
$errors->{'BAD_'.$self->{'pkey'}} = 1;
}
}
# check each unique column constraint
foreach (@{$self->{'unique'}}) {
my $res = $dbh->selectall_arrayref("
SELECT 1
FROM $self->{'table'}
WHERE $_ = ?",
undef,
$values->{$_});
if ($res->[0]->[0] == 1) {
$errors->{"DUP_$_"} = 1;
}
}
return ($values,$errors);
}
sub validate_edit {
my $self = shift;
my $p = shift;
my $dbh = $p->{'dbh'};
my $params = $p->{'params'};
unless ($params->{$self->{'pkey'}} =~ /$self->{'pkey_regexp'}/) {
return $self->display_error("Invalid ID");
}
my $errors = {};
# call each of the update callbacks
foreach (@{$self->{'update_callbacks'}}) {
# call back should return a list of error strings
my $callback_errors = $_->($dbh,$params);
@{$errors}{keys %{$callback_errors}} = values %{$callback_errors};
}
# run the standard error checks
my ($values,$e) = $self->{valid}->validate($params);
# copy the errors from the process_params
$errors = { %{$errors}, %{$e} } if ref($e) eq "HASH";
# check all the unique columns
foreach (@{$self->{'unique'}}) {
my $res = $dbh->selectall_arrayref("
SELECT 1
FROM $self->{'table'}
WHERE $_ = ? AND $self->{'pkey'} != ?",
undef,
$values->{$_},
$params->{$self->{'pkey'}});
if ($res->[0]->[0] == 1) {
$errors->{"DUP_$_"} = 1;
}
}
return $values,$errors;
}
sub add {
my $self = shift;
my $p = shift;
my $dbh = $p->{'dbh'};
my $params = $p->{'params'};
my $errors = {};
$self->{'success'} = 0;
$self->{'add_details'} = [];
if ($params->{'cm'} eq "add") {
my ($values,$errors) = $self->validate_add($p);
if (scalar keys %{$errors}) {
$errors->{'HAS_ERRORS'} = 1;
# copy values back into form
foreach (keys(%{$values})) {
$errors->{$_} = $values->{$_};
}
}
else {
# copy clean dates,times into params for insertion
foreach (@{$self->{'dates'}},@{$self->{'times'}}) {
$values->{$_->{'name'}} = $values->{$_->{'name'}."_CLEAN"};
}
my $c = join(",", @{$self->{'columns'}}); # the column names
my $q = join(",",map {"?"} @{$self->{'columns'}}); # the ? mark placeholders
( run in 2.000 seconds using v1.01-cache-2.11-cpan-cdf2f3d4e48 )