* Work around a strange bug in CGI::FormBuilder 3.0401 that makes

FORM-SUBMIT unusable on customised formbuilder templates. For now,
  hardcode the submit buttons in editpage.tmpl instead of using the
  template variable, which is ok, since the buttons are static.
master
joey 2006-11-10 07:46:41 +00:00
parent 54c90b2d41
commit 96eb9bb3fa
5 changed files with 78 additions and 42 deletions

View File

@ -582,6 +582,7 @@ sub cgi_editpage ($$) { #{{{
$form->title("editing ".pagetitle($page));
}
print "Content-Type: text/html\n\n";
print $form->render(submit => \@buttons);
}
else {

6
debian/changelog vendored
View File

@ -9,8 +9,12 @@ ikiwiki (1.33) UNRELEASED; urgency=low
* Make sure to check for errors from every eval.
* Fix img plugin's handling of adding dependencies for images that do not
yet exist.
* Work around a strange bug in CGI::FormBuilder 3.0401 that makes
FORM-SUBMIT unusable on customised formbuilder templates. For now,
hardcode the submit buttons in editpage.tmpl instead of using the
template variable, which is ok, since the buttons are static.
-- Joey Hess <joeyh@debian.org> Thu, 9 Nov 2006 15:57:52 -0500
-- Joey Hess <joeyh@debian.org> Fri, 10 Nov 2006 02:34:49 -0500
ikiwiki (1.32) unstable; urgency=low

View File

@ -1,44 +1,6 @@
I'd like to run ikiwiki under cygwin. I'm new to ikiwiki and have tried to follow the setup tutorial as best I could. I got all the way up to step 7, but I can't get the CGI to run successfully (step 8).
After editing ikiwiki.setup, and running "ikiwiki --setup", the CGI script is successfully created. However, if I then click on "Edit Page" link, I see nothing in the browser and the following in the logs:
<pre>
==> /var/log/apache2/access_log <==
192.168.0.125 - - [06/Oct/2006:15:12:05 -0500] "GET /cgi-bin/ikiwiki.cgi?page=index&do=edit HTTP/1.1" 500 666
==> /var/log/apache2/error_log <==
[Fri Oct 06 15:12:07 2006] [error] [client 192.168.0.125] HTML::Template::param() : attempt to set parameter 'form-submit' with an array ref - parameter is not a TMPL_LOOP! at /usr/lib/perl5/site_perl/5.8/CGI/FormBuilder.pm line 1415, referer: http://imrisws36/wiki/
[Fri Oct 06 15:12:07 2006] [error] [client 192.168.0.125] Premature end of script headers: ikiwiki.cgi, referer: http://imrisws36/wiki/
</pre>
Can anyone decipher this for me? I spent some time with cpan earlier today downloading the latest version I could find of prerequisite modules such as HTML::Template and CGI::FormBuilder.
> It would help to know what version of CGI::FormBuilder you have. Mine
> (3.03.01) does not seem to contain this error message. --[[Joey]]
I have version 3.0401 of CGI::FormBuilder -- the latest from CPAN. If you are wondering about any other modules, the answer
is likely the same: the latest from CPAN. And you're right: the error string in question does not appear in CGI::FormBuilder. I found it in HTML::Template (version 2.8).
-----
OK, so downgrading CGI::FormBuilder to 3.0302 makes the problem go away. I'll leave it to you to figure out whether the bug is in CGI::FormBuilder or in IkiWiki. --Steve
Maybee this bug should be renamed as "doesn't work with CGI::FormBuilder (3.04)." I get same error on FreeBSD.
HTML::Template::param() : attempt to set parameter 'form-submit' with an array
ref - parameter is not a TMPL_LOOP!
at /usr/local/lib/perl5/site_perl/5.8.7/CGI/FormBuilder.pm line 1415
version info:
root@freedom# pkg_info | grep p5-CGI
p5-CGI-FastTemplate-1.09 Perl module for manage templates and parses templates
p5-CGI-FormBuilder-3.0401 FormBuilder for CGI
p5-CGI-Session-4.14 Perl extension for persistent session management
--Mark
> Seems likely.. So far I've been lazy and stuck with the FormBuilder in Debian, so haven't got a system I can debug this on (sorry). --[[Joey]]
> Moved the formbuilder bug to [[formbuilder_3.0401_broken]] --[[Joey]]
-----
@ -52,4 +14,4 @@ A different problem has reared its ugly head. When I click on "RecentChanges",
Indeed there is no such routine IkiWiki::XMLin(). I don't understand how this can possibly work -- as it manifestly does on linux.
> XMLin is supposed to be exported by XML::Simple. My guess is that, due to a missing error check, XML::Simple is failing to load, and it's not aborting then. You probably need to install that module; in the meantime, I've fixed the missing error check in svn. --[[Joey]]
> XMLin is supposed to be exported by XML::Simple. My guess is that, due to a missing error check, XML::Simple is failing to load, and it's not aborting then. You probably need to install that module; in the meantime, I've fixed the missing error check in svn. --[[Joey]]

View File

@ -0,0 +1,69 @@
After editing ikiwiki.setup, and running "ikiwiki --setup", the CGI script is successfully created. However, if I then click on "Edit Page" link, I see nothing in the browser and the following in the logs:
<pre>
==> /var/log/apache2/access_log <==
192.168.0.125 - - [06/Oct/2006:15:12:05 -0500] "GET /cgi-bin/ikiwiki.cgi?page=index&do=edit HTTP/1.1" 500 666
==> /var/log/apache2/error_log <==
[Fri Oct 06 15:12:07 2006] [error] [client 192.168.0.125] HTML::Template::param() : attempt to set parameter 'form-submit' with an array ref - parameter is not a TMPL_LOOP! at /usr/lib/perl5/site_perl/5.8/CGI/FormBuilder.pm line 1415, referer: http://imrisws36/wiki/
[Fri Oct 06 15:12:07 2006] [error] [client 192.168.0.125] Premature end of script headers: ikiwiki.cgi, referer: http://imrisws36/wiki/
</pre>
Can anyone decipher this for me? I spent some time with cpan earlier today downloading the latest version I could find of prerequisite modules such as HTML::Template and CGI::FormBuilder.
> It would help to know what version of CGI::FormBuilder you have. Mine
> (3.03.01) does not seem to contain this error message. --[[Joey]]
I have version 3.0401 of CGI::FormBuilder -- the latest from CPAN. If you are wondering about any other modules, the answer
is likely the same: the latest from CPAN. And you're right: the error string in question does not appear in CGI::FormBuilder. I found it in HTML::Template (version 2.8).
-----
OK, so downgrading CGI::FormBuilder to 3.0302 makes the problem go away. I'll leave it to you to figure out whether the bug is in CGI::FormBuilder or in IkiWiki. --Steve
Maybee this bug should be renamed as "doesn't work with CGI::FormBuilder (3.04)." I get same error on FreeBSD.
HTML::Template::param() : attempt to set parameter 'form-submit' with an array
ref - parameter is not a TMPL_LOOP!
at /usr/local/lib/perl5/site_perl/5.8.7/CGI/FormBuilder.pm line 1415
version info:
root@freedom# pkg_info | grep p5-CGI
p5-CGI-FastTemplate-1.09 Perl module for manage templates and parses templates
p5-CGI-FormBuilder-3.0401 FormBuilder for CGI
p5-CGI-Session-4.14 Perl extension for persistent session management
--Mark
----
For the curious, this new version of CGI::FormBuilder changes how it passes
some values to the HTML::Template template. In particular, FORM-SUBMIT used
to be just a string containing the buttons used to submit the form. With
the new version, it's an array of strings, one per button, and the template
needs to be written differently to deal with this. Oddly, the docs have not
been updated about this. In fact, from all I can tell, it's a bug, since
the array is not in the form that HTML::Template expects to receive it.
Here's a simple test case:
#!/usr/bin/perl
my @fields=qw(editcontent);
my @buttons=("Save", "Preview", "Cancel");
use CGI::FormBuilder;
my $form = CGI::FormBuilder->new(
fields => \@fields,
template => "foo.tmpl",
);
print $form->render(submit => \@buttons);
With this test case, it does not seem to be possible to write a foo.tmpl that
outputs the buttons using the FORM-SUBMIT template variable.
I was able to work around this bug by just not using FORM-SUBMIT in the
template, and hardcoding the buttons (since they never change anyway).
Nasty, but it should work. I haven't fully installed the new version of
CGI::FormBuilder to test it, and it's quite possible that other changes
in the new version cause other breakage. If you want to test the fix,
it's in svn now. --[[Joey]]

View File

@ -41,7 +41,7 @@ Page type: <TMPL_VAR FIELD-TYPE>
Optional comment about this change:<br />
<TMPL_VAR FIELD-COMMENTS><br />
</TMPL_IF>
<TMPL_VAR FORM-SUBMIT>
<input id="_submit" name="_submit" type="submit" value="Save Page" /><input id="_submit_2" name="_submit" type="submit" value="Preview" /><input id="_submit_3" name="_submit" type="submit" value="Cancel" />
<TMPL_VAR HELPONFORMATTINGLINK>
<TMPL_VAR FORM-END>
<TMPL_IF NAME="PAGE_PREVIEW">