summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMael Dodin <mdodin@mandriva.org>2002-06-12 12:51:26 +0000
committerMael Dodin <mdodin@mandriva.org>2002-06-12 12:51:26 +0000
commitc25333778d69ddec480348e749bfa08217081566 (patch)
tree94d58519c30dafd060ace7fd3b06dee583acebd4
parent7591dfe57e0b781b185a42f0760b362b2193beb8 (diff)
downloaddrakwizard-c25333778d69ddec480348e749bfa08217081566.tar
drakwizard-c25333778d69ddec480348e749bfa08217081566.tar.gz
drakwizard-c25333778d69ddec480348e749bfa08217081566.tar.bz2
drakwizard-c25333778d69ddec480348e749bfa08217081566.tar.xz
drakwizard-c25333778d69ddec480348e749bfa08217081566.zip
fix some bug with interaction between wizard and script shell
-rw-r--r--server_wizard.pl102
1 files 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;