On 1/30/07, John Siracusa <[EMAIL PROTECTED]> wrote:
> I have db_object_from_form() and init_with_db_object() methods that
> will handle a tree of RDBO-derived objects that correspond to a tree
> of nested RHTMLO forms. The code is included at the end of this
> email, but it's still "in progress" and may be buggy.
...and it was. Below is an updated version of init_with_db_object().
-John
---
sub init_with_db_object
{
my($self, $object) = @_;
croak "Missing required object argument" unless($object);
$self->clear();
my $selected_object;
foreach my $field (sort { $a->name cmp $b->name } $self->fields)
{
my $name = $field->name;
$selected_object = $object;
if($name =~ /$FF_SEPARATOR_RE/o)
{
my $nibble = $name;
my $tmp_obj = $selected_object;
while($nibble =~ s/^([^$FF_SEPARATOR]+)$FF_SEPARATOR_RE//o)
{
my $related = $1;
last unless($tmp_obj->can($related));
if(Rose::DB::Object::Util::has_loaded_related($tmp_obj, $related))
{
$tmp_obj = $tmp_obj->$related()
}
else
{
my $new_obj;
eval { $new_obj = $tmp_obj->$related() };
if($@ || !$new_obj)
{
# Restore failed segment
$nibble = "$related$FF_SEPARATOR$nibble";
last;
}
$tmp_obj = $new_obj;
}
}
if($nibble =~ /$FF_SEPARATOR_RE/o)
{
$name = $field->local_name;
}
else
{
$name = $nibble;
$selected_object = $tmp_obj;
}
}
else
{
$name = $field->local_name;
}
if($selected_object->can($name))
{
#$Debug && warn field($name) = $selected_object->$name = ",
$selected_object->$name(), "\n";
$field->input_value(scalar $selected_object->$name());
}
}
}
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Rose-db-object mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/rose-db-object