FormPage expects to be provided with a property list when it calls GetPropertyDescriptors() at the very latest. So while that method may return an empty list, returning undef is not allowed.
Signed-off-by: Francois Gouget fgouget@codeweavers.com --- The patch reordering the FormPage methods contained a change it shouldn't have which broke the submit job page.
The FormPage methods were inconsistent about whether they would correctly deal with $self->GetPropertyDescriptors() returning undef (this specific issue is in the most used method, GenerateFields()). Now they don't accept it and so the subclasses should make sure to always provide a property list.
This updates the Submit page accordingly. --- testbot/web/Submit.pl | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-)
diff --git a/testbot/web/Submit.pl b/testbot/web/Submit.pl index 79d1c8772..472622dd5 100644 --- a/testbot/web/Submit.pl +++ b/testbot/web/Submit.pl @@ -665,16 +665,23 @@ sub GetPropertyDescriptors($) my ($self) = @_;
# Note that this may be called for different pages. For instance first to - # validate the properties of the page 1, then again to generate the form - # fields of page 2. See _SetPage(). - if ($self->{Page} == 1) + # validate the page 1 properties, then again to generate the page 2 form + # fields. See _SetPage(). + if ($self->{PropertyDescriptors}) { - $self->{PropertyDescriptors} ||= [ + # The property descriptors list is already set for $self->{Page} + } + elsif ($self->{Page} == 1) + { + $self->{PropertyDescriptors} = [ CreateBasicPropertyDescriptor("Remarks", "Remarks", !1, !1, "A", 128), ]; } - elsif (($self->{Page} == 3 or $self->{Page} == 4) and - !$self->{PropertyDescriptors}) + elsif ($self->{Page} == 2) + { + $self->{PropertyDescriptors} = []; # no fields, only a collection block + } + elsif ($self->{Page} == 3 or $self->{Page} == 4) { if ($self->{Page} == 4) { @@ -960,9 +967,12 @@ sub _SetPage($$) { my ($self, $Page) = @_;
- $self->{Page} = $Page; - # Changing the page also changes the fields of the HTML form - delete $self->{PropertyDescriptors}; + if ($self->{Page} != $Page) + { + $self->{Page} = $Page; + # Changing the page also changes the fields of the HTML form + $self->{PropertyDescriptors} = undef; + } }
sub OnUnset($)