]> git.decadent.org.uk Git - maypole.git/blob - ex/fancy_example/BeerDB/Drinker.pm
Drinker uses add_to_from_cgi and other stuff. Now it is a nice working
[maypole.git] / ex / fancy_example / BeerDB / Drinker.pm
1 package BeerDB::Drinker;
2 use strict;
3 use warnings;
4
5 use Data::Dumper;
6
7 __PACKAGE__->columns('Stringify' => qw/handle/);
8
9 # A drinker is a person but we do not want to select who that person is 
10 # from a list because this is a 1:1 relationship rather than a M:1. 
11 # The no_select option tells AsForm not to bother making a select box
12
13 __PACKAGE__->has_a(person => 'BeerDB::Person', no_select => 1);
14
15 # Drinker drinks many beers at pubs if they are lucky. I like to specify the
16 # name of the foreign key unless i can control the order that the
17 # cdbi classes are created. CDBI does not guess very well the fk column.
18
19 #__PACKAGE__->has_many(pints => 'BeerDB::Pint', 'drinker');
20
21 # When we create a drinker we want to create a person as well
22 # So tell AsForm to display the person inputs too.
23
24 sub display_columns { qw/person handle/ }
25 sub list_columns { qw/person handle/ }
26 # AsForm and templates may check for search_colums when making 
27 #sub search_columns { qw/person handle/ }
28
29 # We need to tweak the cgi inputs a little. 
30 # Since list is where addnew is, override that.
31 # Person is a has_a rel and AsForm wont make foreign inputs automatically so
32 # we manually do it.
33
34 sub list : Exported {
35         my ($self, $r) = @_;
36         $self->SUPER::list($r);
37         my %cgi = $self->to_cgi;
38         $cgi{person} = $self->to_field('person', 'foreign_inputs');
39         $r->template_args->{classmetadata}{cgi} = \%cgi;
40         #$r->template_args->{classmetadata}{search_cgi} = $self->search_inputs;
41 }
42
43 sub view : Exported {
44         my ($self, $r, $obj) = @_;
45         $self->_croak( "Object method only") unless $obj;
46
47         if ($r->params->{submit}) {
48                 my ($pint) = $obj->add_to_from_cgi($r);
49                 if (my $errs = $obj->cgi_update_errors) {
50                         $r->template_args->{errors} = $errs;
51                 }
52         }
53
54         my %cgi = $self->to_cgi('pints'); 
55         delete $cgi{pints}{drinker}; # =  $obj->to_field(drinker => 'link_hidden', {r => $r});
56         $r->template_args->{classmetadata}{cgi} =  \%cgi ; 
57 }
58
59         
60
61 #sub foreign_input_delimiter { '__IMODDD__'}
62
63 1;