From 96eb9bb3fa1d805df967f44d13876f57b8ea121d Mon Sep 17 00:00:00 2001 From: joey Date: Fri, 10 Nov 2006 07:46:41 +0000 Subject: [PATCH] * 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. --- IkiWiki/CGI.pm | 1 + debian/changelog | 6 ++- doc/bugs/Problems_using_cygwin.mdwn | 42 +-------------- doc/bugs/formbuilder_3.0401_broken.mdwn | 69 +++++++++++++++++++++++++ templates/editpage.tmpl | 2 +- 5 files changed, 78 insertions(+), 42 deletions(-) create mode 100644 doc/bugs/formbuilder_3.0401_broken.mdwn diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm index 6b5a1e130..59e9ce161 100644 --- a/IkiWiki/CGI.pm +++ b/IkiWiki/CGI.pm @@ -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 { diff --git a/debian/changelog b/debian/changelog index 427480ceb..adbffb9c0 100644 --- a/debian/changelog +++ b/debian/changelog @@ -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 Thu, 9 Nov 2006 15:57:52 -0500 + -- Joey Hess Fri, 10 Nov 2006 02:34:49 -0500 ikiwiki (1.32) unstable; urgency=low diff --git a/doc/bugs/Problems_using_cygwin.mdwn b/doc/bugs/Problems_using_cygwin.mdwn index 8c615f296..66cd3f105 100644 --- a/doc/bugs/Problems_using_cygwin.mdwn +++ b/doc/bugs/Problems_using_cygwin.mdwn @@ -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: - -
-==> /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/
-
- -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]] \ No newline at end of file +> 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]] diff --git a/doc/bugs/formbuilder_3.0401_broken.mdwn b/doc/bugs/formbuilder_3.0401_broken.mdwn new file mode 100644 index 000000000..8e5126bf6 --- /dev/null +++ b/doc/bugs/formbuilder_3.0401_broken.mdwn @@ -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: + +
+==> /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/
+
+ +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]] diff --git a/templates/editpage.tmpl b/templates/editpage.tmpl index 6030fa2c1..ad1faa3a5 100644 --- a/templates/editpage.tmpl +++ b/templates/editpage.tmpl @@ -41,7 +41,7 @@ Page type: Optional comment about this change:

- + -- 2.26.2