Nes
view release on metacpan or search on metacpan
share/cgi-bin/obj/Nes/form/multi_step.pl view on Meta::CPAN
#!/usr/bin/perl
# -----------------------------------------------------------------------------
#
# Nes by Skriptke
# Copyright 2009 - 2010 Enrique Castañón
# Licensed under the GNU GPL.
#
# CPAN:
# http://search.cpan.org/dist/Nes/
#
# Sample:
# http://nes.sourceforge.net/
#
# Repository:
# http://github.com/Skriptke/nes
#
# Version 1.03
#
# Documentation:
# perldoc Nes::Obj::multi_step
#
# -----------------------------------------------------------------------------
use strict;
use Nes;
use multi_step;
my $vars = multi_step->new;
my $nes = Nes::Singleton->new();
my $cfg = $nes->{'CFG'};
my $nes_env = $nes->{'top_container'}->{'nes_env'};
my $remote = $nes->{'query'}->{'q'}{'_'.$vars->{'form_name'}.'_ip'};
my $send = $nes->{'query'}->{'q'}{'_'.$vars->{'form_name'}.'_send'};
my $q_step = $nes->{'query'}->{'q'}{'_'.$vars->{'form_name'}.'_step'} || 1;
my $q_err = $nes->{'query'}->{'q'}{'_'.$vars->{'form_name'}.'_err'};
my $q_autho = $nes->{'query'}->{'q'}{'_'.$vars->{'form_name'}.'_autho'};
my $key = $vars->{'private_key'} || $nes->{'CFG'}{'private_key'};
my %data;
my $vars_error;
my $return_fields_error;
$vars->{'latest'} = $#{$vars->{'steps'}}+1+$vars->{'show_captcha'};
$vars->{'show_captcha'} = 0 if $q_autho;
$vars->{'autho'} = $q_autho;
my $error_referer = $vars->{'referer'} && $ENV{'HTTP_REFERER'} !~ /$vars->{'referer'}/;
my $captcha_ok = check_captcha();
$captcha_ok = 1 if !$vars->{'show_captcha'};
my $in_errors_step = $q_err;
my $in_captcha_step = 1 if defined $nes->{'query'}->{'q'}{$vars->{'captcha_name'}};
my $in_fields_step = !$in_errors_step && !$in_captcha_step;
my $last = $#{$vars->{'steps'}};
$last += 1 if $vars->{'show_captcha'};
my $end_form = $q_step > $last && $captcha_ok;
my $fields_is_ok = 0;
set_this_step();
set_fields_default();
if ( $send ) {
if ( $error_referer ) {
$vars->{'form_error_fatal'} = 1;
$nes->add(%$vars);
return 1;
}
if ( check_autho() ) {
$vars->{'form_error_fatal'} = 5;
$nes->add(%$vars);
return 1;
}
set_fields();
save_step();
$fields_is_ok = check_fields();
}
if ( $fields_is_ok ) {
if ( $end_form ) {
$vars->{'fields_err'} = '';
$return_fields_error = undef;
$vars->{'form_error_fatal'} = check_form();
if ( !$vars->{'form_error_fatal'} ) {
$vars->{'exec_script_NES'} = $vars->{'script_NES'};
my $error = send_data() if $vars->{'script_handler'} && $vars->{'function_handler'};
if ( $error ) {
$in_errors_step = 1;
$in_captcha_step = 0;
$in_fields_step = 0;
go_next_step();
}
to_database() if $vars->{'to_fields_assort'} && $vars->{'to_table'} && !$error;
}
if ( !$vars->{'form_error_fatal'} && !$vars->{'error_handler'} ) {
$nes->{'container'}->{'content_obj'}->location( $vars->{'out_page'}, "302 Found" ) if $vars->{'out_page'};
}
} else {
go_next_step();
}
}
$vars->{'private_key'} = ''; # For safety, do not show
$nes->add(%$vars);
# end.
sub send_data {
$vars->{'error_handler'} = 0;
require "$vars->{'script_handler'}";
my $handler = \&{$vars->{'function_handler'}};
$return_fields_error = $handler->(\%data);
if ( ref $return_fields_error ne 'HASH' && $return_fields_error ) {
$vars->{'form_error_fatal'} = 0;
$vars->{'error_data'} = 1;
$vars->{'msg_error_data'} = $return_fields_error if !$vars->{'msg_error_data'};
$nes->add(%$vars);
return 1;
}
$vars->{'error_handler'} = 1 if $return_fields_error;
$vars->{'ok_data'} = 1 if !$return_fields_error;
return $vars->{'error_handler'};
}
sub go_next_step {
if ( $in_fields_step ) {
$vars->{'next_step'}++;
$vars->{'this_step'} = $vars->{'next_step'} - 1;
$vars->{'fields'} = $vars->{'steps'}[$vars->{'this_step'}];
$vars->{'last_step'} = 1 if $vars->{'this_step'} > $vars->{'last'};
} elsif ( $in_errors_step ) {
set_fields_error();
$vars->{'error_fields'} = 1;
$vars->{'next_step'} = $#{$vars->{'steps'}} + 1;
$vars->{'next_step'} += 1 if $vars->{'show_captcha'};
$vars->{'this_step'} = $vars->{'next_step'};
$vars->{'last_step'} = 0;
$vars->{'fields'} = $vars_error;
} elsif ( $in_captcha_step ) {
$vars->{'next_step'}++;
$vars->{'this_step'} = $vars->{'next_step'} - 1;
$vars->{'fields'} = $vars->{'steps'}[$vars->{'this_step'}];
$vars->{'last_step'} = 1 if $vars->{'this_step'} > $vars->{'last'};
}
js_regexp();
$vars->{'in_step'} = $vars->{'this_step'} + 1;
$vars->{'in_step'} = $vars->{'latest'} if $vars->{'in_step'} > $vars->{'latest'};
}
sub set_this_step {
$vars->{'last'} = $#{$vars->{'steps'}};
if ( $in_fields_step ) {
( run in 0.628 second using v1.01-cache-2.11-cpan-39bf76dae61 )