Skip to content

Commit

Permalink
Rest of the code for article 3
Browse files Browse the repository at this point in the history
  • Loading branch information
davorg committed Jan 1, 2016
1 parent c7c8854 commit 44330ac
Show file tree
Hide file tree
Showing 8 changed files with 268 additions and 0 deletions.
46 changes: 46 additions & 0 deletions 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/</&lt/g;
$name = b($name);

print p("Hello $name");

print start_form;
if ($logged) {
print p(submit(-name=>'logout', -value=>'logout'));
} else {
print p('Enter your name: ', textfield(-name=>'name'),
submit(-name=>'login', -value=>'Set name'));
}
print end_form;
print end_html;
62 changes: 62 additions & 0 deletions 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/</&lt/g;

my $h = HTML::Tiny->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;
};

29 changes: 29 additions & 0 deletions 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;
38 changes: 38 additions & 0 deletions 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 ] ];
};

21 changes: 21 additions & 0 deletions 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;
32 changes: 32 additions & 0 deletions 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 ] ];
};

15 changes: 15 additions & 0 deletions form.tt
@@ -0,0 +1,15 @@
<html>
<head>
<title>[% name %]</title>
</head>
<body>
<h1>Welcome [% name %]</h1>
<p>Here are your details:</p>
<table>
<tr><td>Name:</td> <td>[% name %]</td></tr>
<tr><td>Age:</td> <td>[% age %]</td></tr>
<tr><td>Gender:</td> <td>[% gender %]</td></tr>
<tr><td>Hobbies:</td> <td>[% hobbies %]</td></tr>
</table>
</body>
</html>
25 changes: 25 additions & 0 deletions form2.tt
@@ -0,0 +1,25 @@
<html>
<head>
<title>[% name %]</title>
</head>
<body>
<h1>Welcome [% name %]</h1>
<p>Here are your details:</p>
<table>
<tr><td>Name:</td> <td>[% name %]</td></tr>
<tr><td>Age:</td> <td>[% age %]</td></tr>
<tr><td>Gender:</td> <td>[% gender %]</td></tr>
<tr><td>Hobbies:</td> <td>
[% IF hobbies.size %]
<ul>
[% FOREACH hobby = hobbies %]
<li>[% hobby %]</li>
[% END %]
</ul>
[% ELSE %]
None
[% END %]
</td></tr>
</table>
</body>
</html>

0 comments on commit 44330ac

Please sign in to comment.