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
Rose-db-object@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rose-db-object

Reply via email to