]> git.decadent.org.uk Git - maypole.git/blobdiff - lib/Apache/MVC/Model/CDBI.pm
General restructuring, and a delete method which doesn't quite work yet.
[maypole.git] / lib / Apache / MVC / Model / CDBI.pm
index 0a0e92384c7552980cf70b66d22cb6db63d4fb19..833550d5a059a0297973069bb144d80adb89685d 100644 (file)
@@ -1,4 +1,53 @@
 package Apache::MVC::Model::CDBI;
 use base 'Apache::MVC::Model::Base';
+use Class::DBI::AsForm;
+use Class::DBI::FromCGI;
+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}});
+}
+
+sub do_edit :Exported {
+    my ($self, $r) = @_;
+    my $h = CGI::Untaint->new(%{$r->{params}});
+    my $obj;
+    if (@{$r->{args}}) {
+        # We have something to edit
+        ($obj) = @{$self->objects};
+        $obj->update_from_cgi($h);
+        warn "Updating an object ($obj) with ".Dumper($h); use Data::Dumper;
+    } else {
+        $obj = $self->create_from_cgi($h);
+    }
+    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}{errors} = \%errors;
+        $r->{template} = "edit";
+    } else {
+        $r->{template} = "view";
+    }
+    return $obj;
+}
+
+sub delete :Exported {
+    my ($self, $r) = @_;
+    $self->delete for @{ $r->objects };
+    $r->objects([ $self->retrieve_all ]);
+    $r->{template} = "list";
+}
+
+sub adopt {
+    my ($self, $child) = @_;
+    $child->autoupdate(1);
+    $child->columns( Stringify => qw/ name / );
+}
 
 1;