From 3d506c66cc8ec133730edddeaff4bd2ffd8a129b Mon Sep 17 00:00:00 2001 From: Andreas Brachold Date: Sat, 8 Mar 2008 06:39:36 +0000 Subject: * AJAX: add handler 'question' * REPORT: Don't fail if'nt HTTPD loaded * HTTPD: remove unused ->{cgi} from 'question' --- lib/XXV/OUTPUT/Ajax.pm | 109 +++++++++++++++++++++++++++++++++++++++++++++++++ lib/XXV/OUTPUT/Html.pm | 2 - 2 files changed, 109 insertions(+), 2 deletions(-) (limited to 'lib/XXV/OUTPUT') diff --git a/lib/XXV/OUTPUT/Ajax.pm b/lib/XXV/OUTPUT/Ajax.pm index 9cd44b4..ca7dca9 100644 --- a/lib/XXV/OUTPUT/Ajax.pm +++ b/lib/XXV/OUTPUT/Ajax.pm @@ -121,6 +121,7 @@ sub out { $self->{output}->{data} = $data; $self->{output}->{param} = $para if($para); +#dumper($self->{output}); } else { $self->{output}->{DATA} = $data; $self->{output}->{$name}->{data} = $data; @@ -204,6 +205,114 @@ sub headerNoAuth { ); } +# ------------------ +sub question { +# ------------------ + my $self = shift || return error('No object defined!'); + my $titel = shift || 'undef'; + my $questions = shift || return error ('No data defined!'); + my $erg = shift || 0; + + my $quest; + + # Check Data + if(ref $erg eq 'HASH' and ref $questions eq 'ARRAY' and exists $erg->{action}) { + my $error; + @$quest = @$questions; + while (my ($name, $data) = splice(@$quest, 0, 2)) { + + $data->{typ} = 'string' + unless($data->{typ}); + + # Required value ... + $error = $data->{req} + if($data->{req} and not $erg->{$name}); + + # Check Callback + if(exists $data->{check} and ref $data->{check} eq 'CODE' and not $error) { + ($erg->{$name}, $error) = $data->{check}($erg->{$name}, $data, $erg); + } + + # Check on directory + if($data->{typ} eq 'dir' and $data->{required} and not -d $erg->{$name}) { + ($erg->{$name}, $error) = (undef, sprintf(gettext("Directory '%s' does not exist!"), $erg->{$name})); + } + + # Check on file + if($data->{typ} eq 'file' and $data->{required} and not -e $erg->{$name}) { + ($erg->{$name}, $error) = (undef, sprintf(gettext("File '%s' does not exist!"), $erg->{$name})); + } + + # Check on password (is not set the take the old password) + if($data->{typ} eq 'password' and not $erg->{$name}) { + $erg->{$name} = $data->{def}; + } + + if($error) { + $self->err(sprintf(gettext("Error '%s' (%s) : %s!"), $data->{msg}, $name, $error)); + return undef; + } + } + unless($error) { + delete $erg->{action}; + return $erg; + } + } + + my $out = []; + if(ref $questions eq 'ARRAY') { + @$quest = @$questions; + while (my ($name, $data) = splice(@$quest, 0, 2)) { + my $type = $data->{typ} || 'string'; + my $def ; + if(ref $data->{def} eq 'CODE') { + $def = $data->{def}(); + } elsif(ref $data->{def} eq 'ARRAY') { + $def = join(',',@{$data->{def}}); + } else { + $def = $data->{def}; + } + my $choices ; + if($data->{choices}) { + if(ref $data->{choices} eq 'CODE') { + $choices = $data->{choices}(); + } else { + $choices = $data->{choices}; + } + if(ref $choices eq 'ARRAY') { + #$choices = join(',',@$choices); + } + } + + push(@$out,[$name,$data->{msg},$type,$def,$data->{req} ? 1 : 0,$data->{readonly} ? 1 : 0,$choices]); + } + $self->out( $out, 0 , 'question' ); + } else { + my $type = $questions->{typ} || 'string'; + my $def ; + if(ref $questions->{def} eq 'CODE') { + $def = $questions->{def}(); + } elsif(ref $questions->{def} eq 'ARRAY') { + $def = join(',',@{$questions->{def}}); + } else { + $def = $questions->{def}; + } + + my $choices ; + if($questions->{choices}) { + if(ref $questions->{choices} eq 'CODE') { + $choices = $questions->{choices}(); + } else { + $choices = $questions->{choices}; + } + } + + push(@$out,[$type,$questions->{msg},$type,$def,$questions->{req} ? 1 : 0,$questions->{readonly} ? 1 : 0,$choices]); + $self->out( $out, 0 , 'question' ); + } + return undef; +} + # ------------------ sub msg { # ------------------ diff --git a/lib/XXV/OUTPUT/Html.pm b/lib/XXV/OUTPUT/Html.pm index 2c67976..e28b87c 100644 --- a/lib/XXV/OUTPUT/Html.pm +++ b/lib/XXV/OUTPUT/Html.pm @@ -474,7 +474,6 @@ sub question { my $questions = shift || return error ('No data defined!'); my $erg = shift || 0; - my $q = $self->{cgi}; my $quest; # Check Data @@ -523,7 +522,6 @@ sub question { $self->formStart($titel); if(ref $questions eq 'ARRAY') { - my $q = $self->{cgi}; @$quest = @$questions; my $c=0; while (my ($name, $data) = splice(@$quest, 0, 2)) { -- cgit v1.2.3