From c25333778d69ddec480348e749bfa08217081566 Mon Sep 17 00:00:00 2001 From: Mael Dodin Date: Wed, 12 Jun 2002 12:51:26 +0000 Subject: fix some bug with interaction between wizard and script shell --- server_wizard.pl | 102 +++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 73 insertions(+), 29 deletions(-) diff --git a/server_wizard.pl b/server_wizard.pl index c6365a59..a1d9b3d1 100644 --- a/server_wizard.pl +++ b/server_wizard.pl @@ -1,9 +1,22 @@ #!/usr/bin/perl + +# Wizdrake + +# Copyright (C) 2002 MandrakeSoft Mael Dodin (mdodin@mandrakesoft.com) # +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. # +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. # -# Copyright (c) 2002 ... -# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. use lib qw(/usr/lib/libDrakX); use strict; @@ -22,37 +35,42 @@ sub get_parameter { my ($o, $tree, $tag ,$page) = @_; foreach my $leaf (@$tree) { if (ref($leaf) eq 'ARRAY') { - get_parameter($o, $leaf, $tag, $page); + $page = get_parameter($o, $leaf, $tag, $page); } elsif (ref($leaf) eq 'HASH') { - my $common_freetext_chooser; - my %actions = (Wizard => sub { + my $common_freetext_chooser; + my %actions = (Wizard => sub { ($wizard_title, $lib_script) = @{$leaf}{qw(wizardTitle libScript)}; }, Variable => sub { $variable{$leaf->{name}} = $leaf->{shellVariable}; $ENV{$leaf->{shellVariable}} = $leaf->{defaultValue}; }, - Page => sub { + Page => sub { my $old_page = $page; push @$o, $page = { %$leaf }; $old_page->{next_page} = $page; }, Target => sub { - $page->{$leaf->{jumpIndex} > 3 ? 'targetOK' : 'targetNOK'} = $leaf->{targetName}; + $page->{Target}->{jumpIndex}->{$leaf->{jumpIndex}} = $leaf->{targetName}; }, Info => sub { $page->{info} = $leaf->{helpText} ? "$page->{info} $leaf->{helpText}" : "$page->{info}\n"; }, Freetext => $common_freetext_chooser = sub { - push @{$page->{freetext}}, { %$leaf, main_order => ($tag eq 'Chooser') ? 'combo' : 'entry' }; + push @{$page->{freetext}}, { %$leaf, main_order => ($tag eq 'Chooser') ? 'combo' + : (($tag eq 'Boolean') ? 'bool' : 'entry') }; }, - Chooser => \&$common_freetext_chooser); + Chooser => \&$common_freetext_chooser, + + Boolean => \&$common_freetext_chooser, + + Option => sub { push @{${$page->{freetext}}[-1]->{Option}}, $leaf->{value}.$leaf->{description};} ); $actions{$tag} and &{$actions{$tag}}; - undef $tag; - } else { + }elsif($leaf=~ /\w\D/){ $tag = $leaf; } } + return $page; } @@ -63,43 +81,68 @@ sub find_page { sub display { my ($o, $page) = @_; - - if (member($page->{name}, qw(error_need_root done))) { + if ( $page->{nextFinish} eq 'true') { + $::Wizard_no_previous = 1; $in->ask_okcancel(translate($page->{name}), translate($page->{info}), 1) or quit_global($in, 0); - exit 0; - } elsif (!$page->{main_order}) { + $in->exit; + } elsif (!$page->{freetext}) { $in->ask_okcancel(translate($page->{name}), translate($page->{info}), 1) or navigation($o, $page->{old_page}); } else { + my $valeur; + my @liste; my @data = map { for ($_->{fillScript}) { - m,^\s*echo|/, and system("source $lib_script ; $_"); - /^(\S*) (.*)$/ and system("source $lib_script ; $1($2)"); + system("source $lib_script ; $_"); + } + if($_->{main_order} eq 'combo'){ + if($_->{fillScript}){ + $valeur = `$_->{fillScript}`; + while( $valeur =~ /(.+)\n/g ){ + push @liste, $1; + } + }else{ + @liste = @{$_->{Option}}; + } } - { label => translate($_->{helpText}), - val => \$ENV{$variable{$_->{variableName}}}, type => $_->{main_order} }; + ($_->{main_order} eq 'entry') ? { label => translate($_->{helpText}), + val => \$ENV{$variable{$_->{variableName}}}, type => $_->{main_order} } + : ($_->{main_order} eq 'bool') ? { val => \$ENV{$variable{$_->{variableName}}}, type => $_->{main_order}, + text => translate($_->{helpText}, advanced => 1) } + : { label => translate($_->{helpText}), val => \$ENV{$variable{$_->{variableName}}}, + list => [@liste, ""], type => $_->{main_order} }; } @{$page->{freetext}}; + if($page->{executionLevel} eq 'NORMAL'){ + $in->ask_from(translate($page->{name}), translate($page->{info}), + \@data) or navigation($o, $page->{old_page}); + + foreach(@{$page->{freetext}}){ + if($_->{main_order} eq 'bool'){ + $ENV{$variable{$_->{variableName}}} = $ENV{$variable{$_->{variableName}}} ? 1 : 0; + } + } - $in->ask_from(translate($page->{name}), translate($page->{info}), \@data) - or navigation($o, $page->{old_page}); + } } undef $::Wizard_no_previous; } sub navigation { - my ($o, $page, $previous_page) = @_; + my ($o, $page, $previous_ $page->{old_page} ||= $previous_page; + display($o, $page); if ($page->{jumpPage}) { - navigation($o, $page->{jumpPage}, $page->{old_page}); - } else { - display($o, $page); - + navigation($o, find_page($o, $page->{jumpPage}), $page->{old_page}); + } else { my ($next, $prev) = do { if($page->{jumpScript}) { system("source $lib_script ; $page->{jumpScript}"); - if ($page->{targetOK} && $page->{targetNOK}) { - find_page($o, $? == 256 ? $page->{targetNOK} : $page->{targetOK}), $page; + if ($page->{Target}->{jumpIndex}) { + if(!$page->{Target}->{jumpIndex}->{0}){ + $? = $? ==0|2560 ? 10 : $?-255; + } + find_page($o, $page->{Target}->{jumpIndex}->{$?}), $page; } else { $page->{next_page}, $page->{old_page}; } @@ -112,7 +155,8 @@ sub navigation { } my $o = []; -get_parameter($o, XML::Parser->new(Style => 'Tree')->parsefile("server.wiz")); + +get_parameter($o, XML::Parser->new(Style => 'Tree')->parsefile($ARGV[0])); $in = 'interactive'->vnew; -- cgit v1.2.1