| Class-DBI-FormBuilder-Plugin-Time-Piece documentation | Contained in the Class-DBI-FormBuilder-Plugin-Time-Piece distribution. |
Class::DBI::FormBuilder::Plugin::Time::Piece - Output Dates/Times Properly
Class::DBI::FormBuilder::Plugin::Time::Piece-E<gt>require; my $ok = Class::DBI::FormBuilder::Plugin::Time::Piece-E<gt>field($obj,$form,$column);
This module is loaded implicitly by CDBI::FormBuilder <= 0.32, when it encounters a Time::Piece object as a has_a field within a Class::DBI object/class. When that happens, Class::DBI::FormBuilder::Plugin::Time::Piece->field($obj,$form,$column) is called.
This routine will accept the object for which a form is being created, the CGI::FormBuilder object we're working with, and the field in question. field() is then expected to call (and return the return value of) $form->field(%args). As a result, a text field will be created within the form.
At this point, CDBI::FB::Plugin::Time::Piece serializes itself based upon MySQL types. Patches are most welcome!
We call column_type() on $obj, so it must be a Class::DBI::mysql object, or it needs to have used Class::DBI::Plugin::Type.
Class::DBI, CGI::FormBuilder, Class::DBI::FormBuilder
James Tolley, <james@bitperfect.com>
Copyright (C) 2005 by James Tolley
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.6 or, at your option, any later version of Perl 5 you may have available.
| Class-DBI-FormBuilder-Plugin-Time-Piece documentation | Contained in the Class-DBI-FormBuilder-Plugin-Time-Piece distribution. |
package Class::DBI::FormBuilder::Plugin::Time::Piece; use strict; use warnings; our $VERSION = '0.1'; my %rx = ( date => '/^(?:|\d{4}-\d\d-\d\d)$/', time => '/^(?:|\d\d:\d\d:\d\d)$/', datetime => '/^(?:|\d{4}-\d\d-\d\d \d\d:\d\d:\d\d)$/', timestamp => '//', #'/^(?:|\d{14})$/', ); sub field { my($class,$cdbifb,$them,$form,$field) = @_; # for certain CDBI::FB versions $field = $field->name if UNIVERSAL::isa($field,'Class::DBI::Column'); my $type = $cdbifb->table_meta($them)->column($field)->type; my %args = ( name => $field, value => '', required => 0, validate => '//', ); # called as a class method # no data; create empty field unless(ref $them) { $args{validate} = $rx{$type}; return $form->field(%args); } my $value = do { no warnings 'uninitialized'; $them->$field.''; # lousy default }; my $validate = undef; if($type =~ /\btime\b/) { $args{value} = UNIVERSAL::can($them->$field,'hms') ? $them->$field->hms : ''; } elsif($type =~ /date\b/) { $args{value} = UNIVERSAL::can($them->$field,'ymd') ? $them->$field->ymd : ''; } elsif($type =~ /timestamp\b/) { $args{value} = UNIVERSAL::can($them->$field,'strftime') ? $them->$field->strftime('%Y%m%d%H%M%S') : ''; $args{readonly} = 1; # no update of timestamps } elsif($type =~ /datetime\b/) { $args{value} = UNIVERSAL::can($them->$field,'strftime') ? $them->$field->strftime('%Y-%m-%d %H:%M:%S') : ''; } else { die "don't understand column type '$type'"; } $form->field(%args); } 1; __END__ # Below is stub documentation for your module. You'd better edit it!