]> git.decadent.org.uk Git - maypole.git/blobdiff - lib/Maypole/Model/CDBI.pm
small fixes from peter
[maypole.git] / lib / Maypole / Model / CDBI.pm
index 5013d4ff54063f9d07f4617f5336f0f3d157cd89..a62c8fcde8d1e11b84213ef3a931a3339c4dfb19 100644 (file)
@@ -26,7 +26,7 @@ will instead use Class::DBI classes provided.
 use base qw(Maypole::Model::Base Class::DBI);
 use Maypole::Model::CDBI::AsForm;
 use CGI::Untaint::Maypole;
-
+use Class::DBI::Plugin::Type;
 use Class::DBI::FromCGI;
 use Class::DBI::Loader;
 use Class::DBI::AbstractSearch;
@@ -36,6 +36,8 @@ use Class::DBI::Pager;
 use Lingua::EN::Inflect::Number qw(to_PL);
 use attributes ();
 
+use Data::Dumper;
+
 ###############################################################################
 # Helper methods
 
@@ -77,7 +79,25 @@ sub do_edit : Exported {
   if (%errors) {
     # Set it up as it was:
     $r->template_args->{cgi_params} = $r->params;
-    $r->template_args->{errors}     = \%errors;
+
+    #
+    # replace user unfriendly error messages with something nicer
+
+    foreach (@{$config->{$table}->{required_cols}}) {
+      next unless ($errors{$_});
+      my $key = $_;
+      s/_/ /g;
+      $r->template_args->{errors}{ucfirst($_)} = 'This field is required, please provide a valid value';
+      $r->template_args->{errors}{$key} = 'This field is required, please provide a valid value';
+      delete $errors{$key};
+    }
+
+    foreach (keys %errors) {
+      my $key = $_;
+      s/_/ /g;
+      $r->template_args->{errors}{ucfirst($_)} = 'Please provide a valid value for this field';
+      $r->template_args->{errors}{$key} = 'Please provide a valid value for this field';
+    }
 
     undef $obj if $creating;
     $r->template("edit");
@@ -94,7 +114,8 @@ sub _do_update_or_create {
 
   my $fatal;
   my $creating = 0;
-  my $h = CGI::Untaint::Maypole->new( %{$r->params} );
+
+  my $h = CGI::Untaint->new( %{$r->params} );
 
   # update or create
   if ($obj) {
@@ -102,7 +123,9 @@ sub _do_update_or_create {
     eval { $obj->update_from_cgi( $h => {
                                         required => $required_cols,
                                         ignore => $ignored_cols,
-                                       } ) };
+                                       } );
+          $obj->update(); # pos fix for bug 17132 'autoupdate required by do_edit'
+        };
     $fatal = $@;
   } else {
     eval {
@@ -122,6 +145,11 @@ sub _do_update_or_create {
 }
 
 
+=head2 delete
+
+Deprecated method that calls do_delete or a given classes delete method, please
+use do_delete instead
+
 =head2 do_delete
 
 Unsuprisingly, this command causes a database record to be forever lost.
@@ -133,10 +161,14 @@ This method replaces the, now deprecated, delete method provided in prior versio
 sub delete : Exported {
   my $self = shift;
   my ($sub) = (caller(1))[3];
+  # So subclasses can still send delete down ...
   $sub =~ /^(.+)::([^:]+)$/;
-  # So subclasses can still send search down ...
-  return ($1 ne "Maypole::Model::Base" && $2 ne "delete") ?
-    $self->SUPER::search(@_) : $self->do_delete(@_);
+  if ($1 ne "Maypole::Model::Base" && $2 ne "delete") {
+    $self->SUPER::delete(@_);
+  } else {
+    warn "Maypole::Model::CDBI delete method is deprecated\n";
+    $self->do_delete(@_);
+  }
 }
 
 sub do_delete {
@@ -147,6 +179,9 @@ sub do_delete {
   $self->list($r);
 }
 
+=head2 search
+
+Deprecated searching method - use do_search instead.
 
 =head2 do_search
 
@@ -548,15 +583,29 @@ sub setup_database {
     );
     $config->{classes} = [ $config->{loader}->classes ];
     $config->{tables}  = [ $config->{loader}->tables ];
-    warn( 'Loaded tables: ' . join ',', @{ $config->{tables} } )
+
+    my @table_class = map { $_ . " => " . $config->{loader}->_table2class($_) } @{ $config->{tables} };
+    warn( 'Loaded tables to classes: ' . join ', ', @table_class )
       if $namespace->debug;
 }
 
+=head2 class_of
+
+  returns class for given table
+
+=cut
+
 sub class_of {
     my ( $self, $r, $table ) = @_;
     return $r->config->loader->_table2class($table); # why not find_class ?
 }
 
+=head2 fetch_objects
+
+Returns 1 or more objects of the given class when provided with the request
+
+=cut
+
 sub fetch_objects {
     my ($class, $r)=@_;
     my @pcs = $class->primary_columns;