]> git.decadent.org.uk Git - maypole.git/blobdiff - lib/Maypole/Model/CDBI.pm
check some hashrefs for existence before trying to access in some column_* meths.
[maypole.git] / lib / Maypole / Model / CDBI.pm
index ce93690d065c86d99ea98214ed2ab63852b15287..ed59356f4193f24cd1654ece585bfa221a14e764 100644 (file)
@@ -1,5 +1,6 @@
 package Maypole::Model::CDBI;
 use strict;
+use Class::C3;
 
 use Data::Dumper;
 
@@ -26,7 +27,6 @@ will instead use Class::DBI classes provided.
 =cut
 
 use base qw(Maypole::Model::Base Class::DBI);
-#use Class::DBI::Plugin::Type;
 use Class::DBI::Loader;
 use Class::DBI::AbstractSearch;
 use Class::DBI::Plugin::RetrieveAll;
@@ -35,7 +35,7 @@ use Lingua::EN::Inflect::Number qw(to_PL);
 use attributes ();
 
 use Maypole::Model::CDBI::AsForm;
-use Maypole::Model::CDBI::FromCGI; 
+use Maypole::Model::CDBI::FromCGI;
 use CGI::Untaint::Maypole;
 
 =head2 Untainter
@@ -44,13 +44,24 @@ Set the class you use to untaint and validate form data
 Note it must be of type CGI::Untaint::Maypole (takes $r arg) or CGI::Untaint
 
 =cut
+
 sub Untainter { 'CGI::Untaint::Maypole' };
 
-# or if you like bugs 
+=head2 add_model_superclass
+
+Adds model as superclass to model classes (if necessary)
+
+=cut
 
-#use Class::DBI::FromCGI;
-#use CGI::Untaint;
-#sub Untainter { 'CGI::Untaint' };
+sub add_model_superclass {
+  my ($class,$config) = @_;
+  foreach my $subclass ( @{ $config->classes } ) {
+    next if $subclass->isa("Maypole::Model::Base");
+    no strict 'refs';
+    push @{ $subclass . "::ISA" }, $config->model;
+  }
+  return;
+}
 
 
 __PACKAGE__->mk_classdata($_) for (qw/COLUMN_INFO/);
@@ -682,7 +693,7 @@ sub required_columns {
 
 sub column_required {
   my ($class, $colname) = @_;
-  $colname or $class->_croak( "Need a column for column_nullable" );
+  $colname or $class->_croak( "Need a column for column_required" );
   $class->_column_info() unless ref $class->COLUMN_INFO;
   if ($class->_isa_class($colname)) {
     return $class->_isa_class($colname)->column_required($colname);
@@ -692,7 +703,8 @@ sub column_required {
     warn "$colname is not a recognised column in this class ", ref $class || $class, "\n";
     return undef;
   }
-  return $class->COLUMN_INFO->{$colname}{required} || 0;
+  return $class->COLUMN_INFO->{$colname}{required} if ($class->COLUMN_INFO and $class->COLUMN_INFO->{$colname}); 
+  return  0;
 }
 
 =head2 column_nullable
@@ -723,7 +735,8 @@ sub column_nullable {
     warn "$colname is not a recognised column in this class ", ref $class || $class, "\n";
     return undef;
   }
-  return $class->COLUMN_INFO->{$colname}{nullable} || 0;
+  return $class->COLUMN_INFO->{$colname}{nullable} if ($class->COLUMN_INFO and $class->COLUMN_INFO->{$colname}); 
+  return  0;
 }
 
 =head2 column_default
@@ -746,7 +759,8 @@ sub column_default {
     return undef;
   }
 
-  return $class->COLUMN_INFO->{$colname}{default};
+  return $class->COLUMN_INFO->{$colname}{default} if ($class->COLUMN_INFO and $class->COLUMN_INFO->{$colname}); 
+  return; 
 }
 
 =head2 get_classmetadata