diff --git a/lib/Bric/Changes.pod b/lib/Bric/Changes.pod
index c21376b3a..b3ca211d5 100644
--- a/lib/Bric/Changes.pod
+++ b/lib/Bric/Changes.pod
@@ -97,6 +97,11 @@ The installer now checks to make sure that mod_perl is statically compiled
into Apache, since weird things tend to happen when Bricolage uses a DSO
mod_perl. [David]
+=item *
+
+Fixed reordering code for subelements. The select list for subelements should
+now always have an appropriate value. [David]
+
=back
=head1 VERSION 1.4.5
diff --git a/lib/Bric/SOAP/Util.pm b/lib/Bric/SOAP/Util.pm
index 336ab0842..f7a71174b 100644
--- a/lib/Bric/SOAP/Util.pm
+++ b/lib/Bric/SOAP/Util.pm
@@ -31,15 +31,15 @@ Bric::SOAP::Util - utility class for the Bric::SOAP classes
=head1 VERSION
-$Revision: 1.11.2.7 $
+$Revision: 1.11.2.8 $
=cut
-our $VERSION = (qw$Revision: 1.11.2.7 $ )[-1];
+our $VERSION = (qw$Revision: 1.11.2.8 $ )[-1];
=head1 DATE
-$Date: 2002-11-21 20:38:11 $
+$Date: 2002-12-06 06:50:31 $
=head1 SYNOPSIS
@@ -174,23 +174,26 @@ sub serialize_elements {
# output element data
$writer->startTag("elements");
my $element = $object->get_tile();
- my @e = $element->get_elements;
+ my $elems = $element->get_elements;
+ my $diff = $elems->[-1]->get_place - scalar @$elems + 1;
# first serialize all data elements
- foreach my $e (@e) {
+ foreach my $e (@$elems) {
next if $e->is_container;
push(@related, _serialize_tile(writer => $writer,
element => $e,
args => $options{args},
+ diff => $diff,
));
}
# then all containers
- foreach my $e (@e) {
+ foreach my $e (@$elems) {
next unless $e->is_container;
push(@related, _serialize_tile(writer => $writer,
- element => $e,
- args => $options{args},
+ element => $e,
+ args => $options{args},
+ diff => $diff,
));
}
@@ -345,11 +348,12 @@ sub _serialize_tile {
my %options = @_;
my $element = $options{element};
my $writer = $options{writer};
+ my $diff = $options{diff} || 0;
my @related;
if ($element->is_container) {
my %attr = (element => $element->get_element_name,
- order => $element->get_place);
+ order => $element->get_place - $diff);
my @e = $element->get_elements();
# look for related stuff and tag relative if we'll include in
@@ -410,11 +414,11 @@ sub _serialize_tile {
if (defined $data and length $data) {
$writer->dataElement("data", $data,
element => $element->get_element_name,
- order => $element->get_place);
+ order => $element->get_place - $diff);
} else {
$writer->emptyTag("data",
element => $element->get_element_name,
- order => $element->get_place);
+ order => $element->get_place - $diff);
}
}