From 44330ace84378fb39186b8157a852f83ec7ec737 Mon Sep 17 00:00:00 2001 From: Dave Cross Date: Fri, 1 Jan 2016 20:44:44 +0000 Subject: [PATCH] Rest of the code for article 3 --- article3-3.cgi | 46 ++++++++++++++++++++++++++++++++++++ article3-3.psgi | 62 +++++++++++++++++++++++++++++++++++++++++++++++++ article3-4.cgi | 29 +++++++++++++++++++++++ article3-4.psgi | 38 ++++++++++++++++++++++++++++++ article3-5.cgi | 21 +++++++++++++++++ article3-5.psgi | 32 +++++++++++++++++++++++++ form.tt | 15 ++++++++++++ form2.tt | 25 ++++++++++++++++++++ 8 files changed, 268 insertions(+) create mode 100644 article3-3.cgi create mode 100644 article3-3.psgi create mode 100644 article3-4.cgi create mode 100644 article3-4.psgi create mode 100644 article3-5.cgi create mode 100644 article3-5.psgi create mode 100644 form.tt create mode 100644 form2.tt diff --git a/article3-3.cgi b/article3-3.cgi new file mode 100644 index 0000000..eae3c04 --- /dev/null +++ b/article3-3.cgi @@ -0,0 +1,46 @@ +#!/usr/bin/perl -T + +use strict; +use warnings; +use CGI ':standard'; + +my $name; +my $logged; + +if (param('login')) { + $logged = 1; + $name = param('name'); + print header(-cookie => cookie(-name=>'name', + -value=>$name, + -expires=>'+1y')); +} elsif (param('logout')) { + $logged = 0; + $name = 'Guest'; + print header(-cookie => cookie(-name=>'name', + -value=>'', + -expires=>'-1d')); +} else { + $logged = defined cookie('name'); + $name = cookie('name') || 'Guest'; + print header; +} + +print start_html(-title => 'Cookies'); + +print h1('Cookies'); +print p('This is a cookie test page'); + +$name =~ s/'logout', -value=>'logout')); +} else { + print p('Enter your name: ', textfield(-name=>'name'), + submit(-name=>'login', -value=>'Set name')); +} +print end_form; +print end_html; diff --git a/article3-3.psgi b/article3-3.psgi new file mode 100644 index 0000000..983bad2 --- /dev/null +++ b/article3-3.psgi @@ -0,0 +1,62 @@ +#!/usr/bin/plackup + +use strict; +use warnings; +use Plack::Request; +use Plack::Response; +use HTML::Tiny; + +my $app = sub { + my $name; + my $logged; + + my $req = Plack::Request->new(shift); + my $res = Plack::Response->new(200); + + if ($req->parameters->{login}) { + $logged = 1; + $name = $req->parameters->{name}; + $res->cookies->{name} = { + value => $name, + expires => '+1y', + }; + } elsif ($req->parameters->{logout}) { + $logged = 0; + $name = 'Guest'; + $res->cookies->{name} = { + value => '', + expires => '-1d', + }; + } else { + $logged = defined $req->cookies->{name}; + $name = $req->cookies->{name} || 'Guest'; + } + + $name =~ s/new; + + my $form; + if ($logged) { + $form = $h->p( + $h->input({ type => 'submit', name => 'logout', value => 'logout' }), + ); + } else { + $form = $h->p([ + $h->p('Enter your name: ' . $h->input({ name => 'name' })), + $h->input({ type => 'submit', name => 'login', value => 'Set name' }), + ]); + } + + my $body = $h->html([ + $h->h1('Cookies'), + $h->p('This is a cookie test page'), + $h->p([ 'Hello ', $h->b($name) ]), + $h->form($form), + ]); + + $res->body($body); + + return $res->finalize; +}; + diff --git a/article3-4.cgi b/article3-4.cgi new file mode 100644 index 0000000..28c82dd --- /dev/null +++ b/article3-4.cgi @@ -0,0 +1,29 @@ +#!/usr/bin/perl -T + +use strict; +use warnings; +use CGI ':standard'; +use Template; + +my $name = param('name'); +my $age = param('age'); +my $gender = param('gender'); +my @hobbies = param('hobby'); + +my $list; + +if (@hobbies) { + $list = join ', ', @hobbies; +} else { + $list = 'None'; +} + +my $t = Template->new; + +print header; + +$t->process('form.tt', { name => $name, + age => $age, + gender => $gender, + hobbies => $list }) + || die $t->error; diff --git a/article3-4.psgi b/article3-4.psgi new file mode 100644 index 0000000..1143bcd --- /dev/null +++ b/article3-4.psgi @@ -0,0 +1,38 @@ +#!/usr/bin/plackup + +use strict; +use warnings; +use Plack::Request; +use Template; + +my $app = sub { + my $req = Plack::Request->new(shift); + + my $name = $req->parameters->{name}; + my $age = $req->parameters->{age}; + my $gender = $req->parameters->{gender}; + my @hobbies = $req->parameters->get_all('hobby'); + + my $list; + + if (@hobbies) { + $list = join ', ', @hobbies; + } else { + $list = 'None'; + } + + my $t = Template->new; + + my $body; + + $t->process('form.tt', { + name => $name, + age => $age, + gender => $gender, + hobbies => $list, + }, \$body) + || die $t->error; + + return [ 200, [ 'Content-type' => 'text/html' ], [ $body ] ]; +}; + diff --git a/article3-5.cgi b/article3-5.cgi new file mode 100644 index 0000000..57da771 --- /dev/null +++ b/article3-5.cgi @@ -0,0 +1,21 @@ +#!/usr/bin/perl -T + +use strict; +use warnings; +use CGI ':standard'; +use Template; + +my $name = param('name'); +my $age = param('age'); +my $gender = param('gender'); +my @hobbies = param('hobby'); + +my $t = Template->new; + +print header; + +$t->process('form.tt', { name => $name, + age => $age, + gender => $gender, + hobbies => \@hobbies }) + || die $t->error; diff --git a/article3-5.psgi b/article3-5.psgi new file mode 100644 index 0000000..3ea5fb8 --- /dev/null +++ b/article3-5.psgi @@ -0,0 +1,32 @@ +#!/usr/bin/plackup + +use strict; +use warnings; +use Plack::Request; +use Template; + +my $app = sub { + my $req = Plack::Request->new(shift); + + my $name = $req->parameters->{name}; + my $age = $req->parameters->{age}; + my $gender = $req->parameters->{gender}; + my @hobbies = $req->parameters->get_all('hobby'); + + warn join ' / ', @hobbies; + + my $t = Template->new; + + my $body; + + $t->process('form2.tt', { + name => $name, + age => $age, + gender => $gender, + hobbies => \@hobbies, + }, \$body) + || die $t->error; + + return [ 200, [ 'Content-type' => 'text/html' ], [ $body ] ]; +}; + diff --git a/form.tt b/form.tt new file mode 100644 index 0000000..ea23a7f --- /dev/null +++ b/form.tt @@ -0,0 +1,15 @@ + + + [% name %] + + +

Welcome [% name %]

+

Here are your details:

+ + + + + +
Name: [% name %]
Age: [% age %]
Gender: [% gender %]
Hobbies: [% hobbies %]
+ + diff --git a/form2.tt b/form2.tt new file mode 100644 index 0000000..444cc4e --- /dev/null +++ b/form2.tt @@ -0,0 +1,25 @@ + + + [% name %] + + +

Welcome [% name %]

+

Here are your details:

+ + + + + +
Name: [% name %]
Age: [% age %]
Gender: [% gender %]
Hobbies: +[% IF hobbies.size %] +
    +[% FOREACH hobby = hobbies %] +
  • [% hobby %]
  • +[% END %] +
+[% ELSE %] + None +[% END %] +
+ +