X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/c8d3626c51bdc53781d9431b1da88ae1e92dc2d5..fdb5da46b0122d9cb4b2611526c6c955478a80cf:/IkiWiki/Plugin/websetup.pm

diff --git a/IkiWiki/Plugin/websetup.pm b/IkiWiki/Plugin/websetup.pm
index b110939e4..827ee3099 100644
--- a/IkiWiki/Plugin/websetup.pm
+++ b/IkiWiki/Plugin/websetup.pm
@@ -236,6 +236,10 @@ sub showform ($$) { #{{{
 		error(gettext("you are not logged in as an admin"));
 	}
 
+	if (! exists $config{setupfile}) {
+		error(gettext("setup file for this wiki is not known"));
+	}
+
 	eval q{use CGI::FormBuilder};
 	error($@) if $@;
 
@@ -349,10 +353,7 @@ sub showform ($$) { #{{{
 				next;
 			}
 
-			print STDERR "on $key\n";
-
 			if (ref $config{$key} eq "ARRAY" || ref $info{example} eq "ARRAY") {
-				print STDERR "$key is array\n";
 				@value=sort grep { length $_ } @value;
 				my @oldvalue=sort grep { length $_ }
 					(defined $config{$key} ? @{$config{$key}} : ());
@@ -368,20 +369,16 @@ sub showform ($$) { #{{{
 			}
 			else {
 				if (defined $config{$key} && $config{$key} eq $value[0]) {
-					print STDERR "$key SET SAME ($config{$key})\n";
 					delete $rebuild{$field};
 				}
 				elsif (! defined $config{$key} && ! length $value[0]) {
-					print STDERR "$key UNDEF and unset\n";
 					delete $rebuild{$field};
 				}
 				elsif ((! defined $config{$key} || ! $config{$key}) &&
 				       ! $value[0] && $info{type} eq "boolean") {
-				        print STDERR "omitting false $key\n";
 					delete $rebuild{$field};
 				}
 				else {
-					print STDERR "for $key : $value[0] vs $config{$key}; type: $info{type}\n";
 					$config{$key}=$value[0];
 				}
 			}
@@ -406,19 +403,40 @@ sub showform ($$) { #{{{
 			$form->reset(0); # doesn't really make sense here
 		}
 		else {
-			$form->field(name => "rebuild_asked", type => "hidden",
-				value => 0, force => 1);
-			# TODO save to real path
-			IkiWiki::Setup::dump("/tmp/s");
-			$form->text(gettext("Setup saved."));
+			IkiWiki::Setup::dump($config{setupfile});
+
+			IkiWiki::saveindex();
+			IkiWiki::unlockwiki();
+
+			# Print the top part of a standard misctemplate,
+			# then show the rebuild or refresh.
+			my $divider="xxx";
+			my $html=IkiWiki::misctemplate("setup", $divider);
+			IkiWiki::printheader($session);
+			my ($head, $tail)=split($divider, $html, 2);
+			print $head."<pre>\n";
 
+			my @command;
 			if ($form->submitted eq 'Rebuild Wiki') {
-				# TODO rebuild
+				@command=("ikiwiki", "-setup", $config{setupfile},
+                                        "-rebuild", "-v");
 			}
 			else {
-				# TODO refresh wiki and wrappers
+				@command=("ikiwiki", "-setup", $config{setupfile},
+					"-refresh", "-wrappers", "-v");
 			}
-	
+
+			my $ret=system(@command);
+			print "\n<pre>";
+			if ($ret != 0) {
+				print '<p class="error">'.
+					sprintf(gettext("<p class=\"error\">Error: %s exited nonzero (%s)"),
+						join(" ", @command), $ret).
+					'</p>';
+			}
+
+			print $tail;			
+			exit 0;
 		}
 	}