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 )