]> git.decadent.org.uk Git - maypole.git/commitdiff
This gives us the edit method. (Which also creates new things)
authorSimon Cozens <simon@simon-cozens.org>
Thu, 29 Jan 2004 14:10:53 +0000 (14:10 +0000)
committerSimon Cozens <simon@simon-cozens.org>
Thu, 29 Jan 2004 14:10:53 +0000 (14:10 +0000)
git-svn-id: http://svn.maypole.perl.org/Maypole/trunk@16 48953598-375a-da11-a14b-00016c27c3ee

lib/Apache/MVC.pm
lib/Apache/MVC/Model/Base.pm
lib/Apache/MVC/Model/CDBI.pm

index 7869cfa45125630b03ed96f7b5d58ace40a7d501..25a8adb0c6dc9d47259624b433d5c4a3fa20e43a 100644 (file)
@@ -51,6 +51,8 @@ sub init {
     for my $subclass (@{$config->{classes}}) {
         no strict 'refs';
         push @{$subclass."::ISA"}, $class->config->{model};
+        $config->{model}->adopt($subclass)
+           if $config->{model}->can("adopt");
     }
     $class->view_object($class->config->{view}->new);
     $class->init_done(1);
@@ -97,7 +99,7 @@ sub parse_location {
     $self->{action} = shift @pi;
     $self->{args} = \@pi;
 
-    $self->{params} = $self->{ar}->content;
+    $self->{params} = { $self->{ar}->content };
 }
 
 sub is_applicable {
index 1fe178f746f18281d0b8dbb2c8dac154aa83d348..89feb7c07278538e5ead90319fcbc3695e355dc6 100644 (file)
@@ -12,6 +12,13 @@ sub view :Exported {
     return $self->retrieve(shift @{$r->{args}});
 }
 
+sub edit :Exported {
+    my ($self, $r) = @_;
+    return $self->retrieve(shift @{$r->{args}});
+}
+
+sub do_edit { die "This is an abstract method" }
+
 sub list :Exported {
     my ($self, $r) = @_;
     return $self->retrieve_all;
index c06703a1fb433d0d6262df880670f28bfa62fc89..f9918bc9b84cf1b5f93019d204fd5b21bd8aff54 100644 (file)
@@ -2,9 +2,40 @@ 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 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->retrieve($r->{args}[0]);
+        $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 adopt {
+    my ($self, $child) = @_;
+    $child->autoupdate(1);
+    $child->columns( Stringify => qw/ name / );
+}
+
 1;