use Class::DBI::AsForm;
use Class::DBI::FromCGI;
use Class::DBI::AbstractSearch;
+use Class::DBI::Pager;
use CGI::Untaint;
use strict;
-sub description { "A poorly defined class" }
+=head1 NAME
-sub column_names { my $class = shift; map { $_ => ucfirst $_ } $class->columns }
+Apache::MVC::Model::CDBI - Model class based on Class::DBI
-sub get_objects {
- my ($self, $r) = @_;
- return $self->retrieve(shift @{$r->{args}});
-}
+=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. It is a good
+model to copy if you're replacing it with other database abstraction
+modules.
+
+=cut
sub related {
my ($self, $r) = @_;
}
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{$_} } }
+ my %values = map { $_ => {$oper, $params{$_} } }
grep { $params{$_} and $fields{$_} } keys %params;
$r->objects([ %values ? $self->search_where(%values) : $self->retrieve_all ]);
$r->{template_args}{search} = 1;
}
-
+sub list :Exported {
+ my ($self, $r) = @_;
+ if ( my $rows = $r->config->{rows_per_page}) {
+ $self = $self->pager($rows, $r->query->{page});
+ $r->{template_args}{pager} = $self;
+ }
+ $r->objects([ $self->retrieve_all ]);
+}
1;
+