[Html-widget] Possible bug with undef in DBIx::Class::HTMLWidget?
stephen joseph butler
stephen.butler at gmail.com
Mon Apr 2 15:27:02 GMT 2007
On 4/2/07, Zbigniew Lukasiak <zzbbyy at gmail.com> wrote:
> Hi,
>
> Thanks for such a detailed analysis of the problem. I'll apply your
> patch and release a new version of HTML::Widget::DBIC.
>
> But explaining the current situation - I am waiting for the
> HTML::FormFu to be released and then I'll convert the DBIC code to be
> based on it and make HTML::Widget::DBIC obsolete.
Well... I found some other bugs too in the meantime. As a pretty bad
one, I had a submit element called 'delete' along with 'save' and
'cancel' and suddenly my rows started getting deleted whenever I
submitted a form! Here's the current version I'm using, which fixes
that and a couple problems with undef too:
sub fill_widget {
my ($dbic,$widget)=@_;
croak('fill_widget needs a HTML::Widget object as argument')
unless ref $widget && $widget->isa('HTML::Widget');
my @real_elements = $widget->find_elements;
foreach my $element ( @real_elements ) {
my $name=$element->name;
next unless $name && $dbic->result_source->has_column($name)
&& $element->can('value');
if($element->isa('HTML::Widget::Element::Checkbox')) {
$element->checked($dbic->$name?1:0);
} else {
if (ref $dbic->$name and $dbic->$name->can('id') and $dbic->$name->id) {
$element->value($dbic->$name->id);
} else {
$element->value($dbic->$name)
unless $element->isa('HTML::Widget::Element::Password');
}
}
}
}
sub populate_from_widget {
my ($dbic,$result)=@_;
croak('populate_from_widget needs a HTML::Widget::Result object
as argument')
unless ref $result && $result->isa('HTML::Widget::Result');
# find all checkboxes
my %cb = map {$_->name => undef } grep {
$_->isa('HTML::Widget::Element::Checkbox') }
$result->find_elements;
my $params = $result->params;
foreach my $col ( $dbic->result_source->columns ) {
my $col_info = $dbic->column_info($col);
my $value = scalar($result->param($col));
next unless exists $params->{ $col } || exists $cb{ $col };
if (defined $value) {
if ($col_info->{data_type} and $col_info->{data_type} =~
m/^timestamp|date|int|numeric/i
and $value eq '') {
$value = undef;
} elsif (!ref($value) and $value eq 'undef') {
$value = undef;
}
}
$dbic->$col($value);
}
$dbic->insert_or_update;
return $dbic;
}
More information about the Html-widget
mailing list