use Lingua::EN::Inflect::Number qw(to_PL);
use Class::DBI::AsForm;
use Class::DBI::FromCGI;
+use Class::DBI::AbstractSearch;
use CGI::Untaint;
-
-sub description { "A poorly defined class" }
-
-sub column_names { my $class = shift; map { $_ => ucfirst $_ } $class->columns }
-
-sub get_objects {
- my ($self, $r) = @_;
- return $self->retrieve(shift @{$r->{args}});
-}
+use strict;
sub related {
my ($self, $r) = @_;
if (my %errors = $obj->cgi_update_errors) {
# Set it up as it was:
warn "There were errors: ".Dumper(\%errors)."\n";
- $r->{template_args}{cgi_params} = \%params;
+ $r->{template_args}{cgi_params} = $r->{params};
$r->{template_args}{errors} = \%errors;
$r->{template} = "edit";
} else {
$child->columns( Stringify => qw/ name / );
}
+sub search :Exported {
+ return shift->SUPER::search(@_) if caller eq "Class::DBI"; # oops
+ my ($self, $r) = @_;
+ my %fields = map {$_ => 1 } $self->columns;
+ my $oper = "like"; # For now
+ use Carp; Carp::confess("Urgh") unless ref $r;
+ my %params = %{$r->{params}};
+ my %values = map { $_ => {$oper, $oper eq "like" ? "%".$params{$_}."%"
+ :$params{$_} } }
+ grep { $params{$_} and $fields{$_} } keys %params;
+
+ $r->objects([ %values ? $self->search_where(%values) : $self->retrieve_all ]);
+ $r->template("list");
+ $r->{template_args}{search} = 1;
+}
+
1;
+
+=head1 NAME
+
+Apache::MVC::Model::CDBI - Model class based on Class::DBI
+
+=head1 DESCRIPTION
+
+This is a master model class which uses C<Class::DBI> to do all the hard
+work of fetching rows and representing them as objects; instead, it
+concentrates on the actions that can be performed in the URL:
+C<do_edit>, C<delete> and C<search>.