]> Dogcows Code - chaz/p5-CGI-Ex/blobdiff - samples/app/cgi_ex_1.cgi
CGI::Ex 2.04
[chaz/p5-CGI-Ex] / samples / app / cgi_ex_1.cgi
diff --git a/samples/app/cgi_ex_1.cgi b/samples/app/cgi_ex_1.cgi
new file mode 100755 (executable)
index 0000000..16ce4ba
--- /dev/null
@@ -0,0 +1,183 @@
+#!/usr/bin/perl -w
+
+=head1 NAME
+
+cgi_ex_1.cgi - Show a basic example using some of the CGI::Ex tools (but not App based)
+
+=cut
+
+if (__FILE__ eq $0) {
+    main();
+}
+
+###----------------------------------------------------------------###
+
+use strict;
+use CGI::Ex;
+use CGI::Ex::Validate ();
+use CGI::Ex::Dump qw(debug);
+
+###----------------------------------------------------------------###
+
+sub main {
+    my $cgix = CGI::Ex->new;
+    my $vob  = CGI::Ex::Validate->new;
+    my $form = $cgix->get_form();
+
+    ### allow for js validation libraries
+    ### path_info should contain something like /CGI/Ex/yaml_load.js
+    ### see the line with 'js_val' below
+    my $info = $ENV{PATH_INFO} || '';
+    if ($info =~ m|^(/\w+)+.js$|) {
+        $info =~ s|^/+||;
+        $cgix->print_js($info);
+        return;
+    }
+
+
+    ### check for errors - if they have submitted information
+    my $has_info = ($form->{'processing'}) ? 1 : 0;
+    my $errob = $has_info ? $vob->validate($form, validation_hash()) : undef;
+    my $form_name = 'formfoo';
+
+    ### failed validation - send out the template
+    if (! $has_info || $errob) {
+
+        ### get a template and swap defaults
+        my $swap = defaults_hash();
+
+        ### add errors to the swap (if any)
+        if ($errob) {
+            my $hash = $errob->as_hash();
+            $swap->{$_} = delete($hash->{$_}) foreach keys %$hash;
+            $swap->{'error_header'} = 'Please correct the form information below';
+        }
+
+        ### get js validation ready
+        $swap->{'form_name'} = $form_name;
+        $swap->{'js_val'} = $vob->generate_js(validation_hash(), # filename or valhash
+                                              $form_name,         # name of form
+                                              $ENV{'SCRIPT_NAME'}); # browser path to cgi that calls print_js
+
+        ### swap in defaults, errors and js_validation
+        my $content = $cgix->swap_template(get_content_form(), $swap);
+
+        ### fill form fields
+        $cgix->fill(\$content, $form);
+        #debug $content;
+
+        ### print it out
+        $cgix->print_content_type();
+        print $content;
+        return;
+    }
+
+    debug $form;
+
+    ### show some sort of success if there were no errors
+    $cgix->print_content_type;
+    my $content = $cgix->swap_template(get_content_success(), defaults_hash());
+    print $content;
+    return;
+
+}
+
+###----------------------------------------------------------------###
+
+sub validation_hash {
+    return {
+        'group order' => ['username', 'password', 'password_verify'],
+        username => {
+            required => 1,
+            min_len  => 3,
+            max_len  => 30,
+            match    => 'm/^\w+$/',
+            # could probably all be done with match => 'm/^\w{3,30}$/'
+        },
+        password => {
+            required => 1,
+            max_len  => 20,
+        },
+        password_verify => {
+            validate_if => 'password',
+            equals      => 'password',
+        },
+    };
+}
+
+sub defaults_hash {
+    return {
+        title       => 'My Application',
+        script_name => $ENV{'SCRIPT_NAME'},
+        color       => ['#ccccff', '#aaaaff'],
+    }
+}
+
+###----------------------------------------------------------------###
+
+sub get_content_form {
+  return qq{
+    <html>
+    <head>
+      <title>[% title %]</title>
+      <style>
+      .error {
+        display: block;
+        color: red;
+        font-weight: bold;
+      }
+      </style>
+    </head>
+    <body>
+    <h1 style='color:blue'>Please Enter information</h1>
+    <span style='color:red'>[% error_header %]</span>
+    <br>
+
+    <form name="[% form_name %]" action="[% script_name %]" method="POST">
+    <input type=hidden name=processing value=1>
+
+    <table>
+    <tr bgcolor=[% color.0 %]>
+      <td>Username:</td>
+      <td>
+        <input type=text size=30 name=username>
+        <span class=error id=username_error>[% username_error %]</span></td>
+    </tr>
+    <tr bgcolor=[% color.1 %]>
+      <td>Password:</td>
+      <td><input type=password size=20 name=password>
+        <span class=error id=password_error>[% password_error %]</span></td>
+    </tr>
+    <tr bgcolor=[% color.0 %]>
+      <td>Password Verify:</td>
+      <td><input type=password size=20 name=password_verify>
+        <span class=error id=password_verify_error>[% password_verify_error %]</span></td>
+    </tr>
+    <tr bgcolor=[% color.1 %]>
+      <td colspan=2 align=right><input type=submit value=Submit></td>
+    </tr>
+
+    </table>
+
+    </form>
+
+    [% js_val %]
+    </body>
+    </html>
+  };
+}
+
+sub get_content_success {
+  return qq{
+    <html>
+    <head><title>[% title %]</title></head>
+    <body>
+    <h1 style='color:green'>Success</h1>
+    <br>
+    print "I can now continue on with the rest of my script!";
+    </body>
+    </html>
+  };
+}
+
+__END__
This page took 0.026296 seconds and 4 git commands to generate.