package Maypole::Model::CDBI;
use strict;
+use Class::C3;
+
+use Data::Dumper;
=head1 NAME
=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;
use attributes ();
use Maypole::Model::CDBI::AsForm;
-use Maypole::Model::CDBI::FromCGI;
+use Maypole::Model::CDBI::FromCGI;
use CGI::Untaint::Maypole;
=head2 Untainter
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
-#use Class::DBI::FromCGI;
-#use CGI::Untaint;
-#sub Untainter { 'CGI::Untaint' };
+Adds model as superclass to model classes (if necessary)
+
+=cut
+
+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/);
# sub _column_info {
sub _column_info {
my $self = shift;
- warn "__column_info called by ", join (', ', caller), "\n";
my $dbh = $self->db_Main;
my $meta; # The info we are after
# required / nullable
$meta->{$colname}{nullable} = $row->{NULLABLE};
-
- $meta->{$colname}{required} = ($row->{NULLABLE} && $row->{NULLABLE} == 0) ? 1 : 0;
+ $meta->{$colname}{required} = ( $meta->{$colname}{nullable} == 0 ) ? 1 : 0;
# default
if (defined $row->{COLUMN_DEF}) {
my ($class, $columns) = @_;
$class->_column_info() unless ref $class->COLUMN_INFO;
my $column_info = $class->COLUMN_INFO;
+
if ($columns) {
foreach my $colname ( @$columns ) {
if ($class->_isa_class($colname)) {
warn "$colname is not a recognised column in this class ", ref $class || $class, "\n";
next;
}
- $column_info->{required} = 1;
+ $column_info->{$colname}{required} = 1;
}
$class->COLUMN_INFO($column_info);
}
- return [ grep ($column_info->{$_}{required}, keys %{$column_info}) ] ;
+ return [ grep ($column_info->{$_}{required}, keys %$column_info) ] ;
}
=head2 column_required
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);
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
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
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