NAME
DiaColloDB::WWW::CGI - diachronic collocation db, www wrappers: (f)cgi wrapper utility class
SYNOPSIS
##========================================================================
## PRELIMINARIES
use DiaColloDB::WWW::CGI;
##========================================================================
## constructors etc.
$dbcgi = $that->new(%args);
@keys  = $dbcgi->_param();
$dbcgi = $dbcgi->_reset();
$dbcgi = $dbcgi->_getenv();
$dbcgi = $dbcgi->fromRequest($httpRequest,$csock);
\%vars = $dbcgi->vars();
##========================================================================
## config loading (optional)
$dbcgi = $dbcgi->load_config($filename);
##========================================================================
## Template Toolkit stuff
$key   = $dbcgi->ttk_key($key);
@paths = $dbcgi->ttk_include();
$file  = $dbcgi->ttk_file();
$t     = $dbcgi->ttk_template(\%templateConfigArgs);
$data  = $dbcgi->ttk_process($srcFile, \%templateVars, \%templateConfigArgs, \%templateProcessArgs);
##========================================================================
## CGI stuff: generic
@error    = $dbcgi->htmlerror($status,@message);
@whatever = $dbcgi->cgi($method, @args);
undef     = $dbcgi->cgi_main();
undef     = $dbcgi->fcgi_main();
##========================================================================
## Template stuff: useful aliases
$uri      = $dbcgi->uri();
$scheme   = $dbcgi->uriScheme($uri?);
$dir      = $dbcgi->uriDir($uri?);
$userinfo = $dbcgi->uriUserInfo($uri?);
$uristr   = $dbcgi->quri($base, \%form);
$urisub   = $dbcgi->uuri($base, \%form);
$sqstring = $dbcgi->sqstring($str);
$str      = $dbcgi->sprintf_(...);
$mtime    = $dbcgi->mtime($filename);
$str      = $dbcgi->timestamp();
$json_str = PACKAGE->to_json($data);
$json_str = PACKAGE->from_json($data);
\@daytime = PACKAGE->gettimeofday();
$secs     = PACKAGE->tv_interval($t0,$t1);
$secs     = PACKAGE->t_elapsed();
$enc      = PACKAGE->encode_utf8($str);
$enc      = PACKAGE->decode_utf8($str);
DESCRIPTION
DiaColloDB::WWW::CGI provides abstractions and utilities for instantiating Template Toolkit template files in a CGI-like environment. It can be used together with the shared scripts and templates in the share/htdocs/ directory of the DiaColloDB::WWW distribution to create a CGI-wrapper directory for use with an external web server such as apache (via dcdb-www-create.perl(1)), and is implicitly called by the standalone DiaColloDB::WWW::Server class (see dcdb-www-server.perl(1)).
Globals
- Variable: @ISA
 - 
DiaColloDB::WWW::CGI inherits from DiaColloDB::Logger, and imports the CGI
:standardand:cgi-libaliases. 
Constructors etc.
- new
 - 
$dbcgi = $that->new(%args);%args, object structure:
##-- Basic Properties prog => $prog, ##-- handler basename for template resolution & error reporting; default=basename($0) cgipkg => $cgipkg, ##-- back-end CGI package to use (default='CGI') ## ##-- CGI params defaults => \%defaults, ##-- default parameter values (default={}) vars => \%vars, ##-- current parameters (after $dbcgi->vars()) charset => $charset, ##-- charset (default='utf-8') nodecode => \%varnames, ##-- names of variables not to be decoded (default=none) ## ##-- CGI environment stuff : see getenv() method remote_addr => $remote_addr, remote_user => $remote_user, request_method => $request_method, request_uri => $request_uri, request_query => $request_query, http_referer => $http_referer, http_host => $http_host, server_addr => $server_addr, server_port => $server_port, ## ##-- template toolkit stuff ttk_package => $ttk_package, ##-- package label for template processing (default=ref($dbcgi)||$dbcgi) ttk_vars => \%ttk_vars, ##-- extra template processing variables (default=$dbcgi->vars()) ttk_config => \%ttk_config, ##-- extra options for Template->new() ttk_process => \%ttk_process, ##-- extra options for $template->process() ttk_dir => $ttk_dir, ##-- template toolkit directory (default=abs_path(dirname($0))) ttk_sharedir=> $ttk_sharedir, ##-- fallback template directory (default=File::ShareDir::dist_dir("DiaColloDB-WWW")."/htdocs") ttk_key => $ttk_key, ##-- current template basename (default=basename($prog)) ttk_rawkeys => \%ttk_rawkeys ##-- pseudo-set of raw keys (default={profile=>1}) - _param
 - 
@keys = $dbcgi->_param(); $val = $dbcgi->_param($name);Wraps CGI::param().
 - _reset
 - 
$dbcgi = $dbcgi->_reset();resets CGI environment
 - _getenv
 - 
$dbcgi = $dbcgi->_getenv();populate $dbcgi keys from CGI environment variables.
 - fromRequest
 - 
$dbcgi = $dbcgi->fromRequest($httpRequest,$csock);populates $dbcgi keys from an HTTP::Request object, implicitly calls $dbcgi->vars().
 - vars
 - 
\%vars = $dbcgi->vars(); \%vars = $dbcgi->vars(\%vars);Get or set CGI variables, instantiating $dbcgi->{defaults} if present.
 
config loading (optional)
- load_config
 - 
$dbcgi = $dbcgi->load_config($filename);loads %$dbcgi keys from JSON filename, clobbering any existing values.
 
Template Toolkit stuff
- ttk_key
 - 
$key = $dbcgi->ttk_key(); $key = $dbcgi->ttk_key($key);returns requested template key
$keyif specified and defined, otherwise returns default template keybasename($dbcgi->{prog})without any final extension. - ttk_include
 - 
@paths = $dbcgi->ttk_include(); $paths = $dbcgi->ttk_include();returns ttk search path
@$dbcgi->{qw(ttk_dir ttk_sharedir)}, in scalar context as a ":"-separated list. - ttk_file
 - 
$file = $dbcgi->ttk_file(); $file = $dbcgi->ttk_file($key);Returns template filename for template key (basename)
$key, which defaults to$dbcgi->ttk_key($key). Returns first matching file found in$dbcgi->ttk_include(), throwing an error if no matching file was found. - ttk_template
 - 
$t = $dbcgi->ttk_template(\%templateConfigArgs);returns a new Template object for processing.
\$templateConfigArgscan be used to override the defaults in$dbcgi->{ttk_config}. - ttk_process
 - 
$data = $dbcgi->ttk_process($srcFile, \%templateVars, \%templateConfigArgs, \%templateProcessArgs); $dbcgi = $dbcgi->ttk_process($srcFile, \%templateVars, \%templateConfigArgs, \%templateProcessArgs, $outfh); $dbcgi = $dbcgi->ttk_process($srcFile, \%templateVars, \%templateConfigArgs, \%templateProcessArgs, \$outbuf);Process a Template $srcFile. In the first form, template output data is collected in a local string buffer and returned; in the second and third forms, template output is sent to the designated filehandle rsp. buffer. By default, the following top-level template variables are bound:
package => $dbcgi->{ttk_package}, ##-- caller package label version => $DiaColloDB::WWW::CGI::VERSION, ##-- caller package version ENV => \%ENV, ##-- caller environment %{$dbcgi->{ttk_vars}}, ##-- calling object-local template variables cdb => $dbcgi, ##-- calling object %templateVars, ##-- call-local variables, usually $dbcgi->vars() 
CGI stuff: generic
- htmlerror
 - 
@error = $dbcgi->htmlerror($status,@message);Returns a print()-able HTML error.
 - cgi
 - 
@whatever = $dbcgi->cgi($method, @args);Call a named
$methodfrom the designated CGI package, convenience wrapper for$dbcgi->{cgipkg}->can($method)->(@args). - cgi_main
 - 
undef = $dbcgi->cgi_main(); undef = $dbcgi->cgi_main($ttk_key);Top-level runtime routine for key
$dbcgi->ttk_key($ttk_key), with output to STDOUT. - fcgi_main
 - 
undef = $dbcgi->fcgi_main(); undef = $dbcgi-E<gt>fcgi_main($ttk_key);Top-level runtime routine for key
$dbcgi->ttk_key($ttk_key)using the CGI::Fast module. 
Template stuff: useful aliases
The following methods are provided for use within templates via the template cdb variable provided by ttk_process.
Template stuff: useful aliases: CGI environment
Accessors only.
- remoteAddr
 - remoteUser
 - requestMethod
 - requestUri
 - requestQuery
 - httpReferer
 - httpHost
 - serverAddr
 - serverPort
 
Template stuff: useful aliases: URIs
URI parsing & manipulation; optional argument $uri should be either a URI object, a valid URI string, or undef, in which case a URI is constructed from the httpHost, serverPort, and requestUri methods; see URI for details.
- uri
 - 
$uri = $dbcgi->uri($uri?);Returns a URI object for
$uri. - uriScheme
 - 
$scheme = $dbcgi->uriScheme($uri?); - uriOpaque
 - 
$opaque = $dbcgi-E<gt>uriOpaque($uri?); - uriPath
 - 
$path = $dbcgi-E<gt>uriPath($uri?); - uriFragment
 - 
$frag = $dbcgi-E<gt>uriFragment($uri?); - uriCanonical
 - 
$canon = $dbcgi-E<gt>uriCanonical($uri?); - uriAbs
 - 
$abs = $dbcgi-E<gt>uriAbs($uri?); - uriDir
 - 
$dir = $dbcgi->uriDir($uri?); - uriAuthority
 - 
$auth = $dbcgi->uriAuthority($uri?); - uriPathQuery
 - 
$path_query = $dbcgi->uriPathQuery($uri?); - uriPathSegments
 - 
\@segs = $dbcgi->uriPathSegments($uri?); - uriQuery
 - 
$query = $dbcgi->uriQuery($uri?); - uriQueryForm
 - 
\%form = $dbcgi->uriQueryForm($uri?); - uriQueryKeywords
 - 
\@kws = $dbcgi->uriQueryKeywords($uri?); - userinfo
 - 
$userinfo = $dbcgi->uriUserInfo($uri?); - uriHost
 - 
$host = $dbcgi-E<gt>uriHost($uri?); - uriPort
 - 
$port = $dbcgi-E<gt>uriPort($uri?); - quri
 - 
$uristr = quri($base, \%form);Returns a new query URI for base
$baseand query form\%form. - uuri
 - 
$urisub = uuri($base, \%form); $uristr = $urisub->(\%form);Returns a CODE-ref for generating query URIs.
 
Template stuff: useful aliases: miscellany
- sqstring
 - 
$sqstring = sqstring($str);Single-quoted string.
 - sprintf_
 - 
$str = sprintf_(...);Wrapper for
CORE::sprintf()|perlfunc/sprintf. - mtime
 - 
$mtime = $dbcgi->mtime($filename);Returns last file modification time for
$filename, as returned by stat(). - timestamp
 - 
$str = $dbcgi->timestamp();Gets current timestamp via localtime() and POSIX::strftime as a string of the form
YYYY-MM-DD HH:MM:SS. - to_json
 - 
$json_str = PACKAGE->to_json($data); $json_str = PACKAGE::to_json($data); $json_str = PACKAGE->to_json($data,\%opts); $json_str = PACKAGE::to_json($data,\%opts);Wraps JSON::to_json().
 - from_json
 - 
$json_str = PACKAGE->from_json($data); $json_str = PACKAGE::from_json($data);Wraps JSON::from_json().
 - gettimeofday
 - 
\@timeofday = PACKAGE->gettimeofday(); \@timeofday = PACKAGE::gettimeofday();Wraps Time::HiRes::gettimeofday.
 - tv_interval
 - 
$secs = PACKAGE->tv_interval($t0,$t1); $secs = PACKAGE::tv_interval($t0,$t1);Wraps Time::HiRes::tv_interval.
 - t_start
 - 
$t_started = PACKAGE->t_start();Start a global timer (for profiling) using Time::HiRes.
 - t_elapsed
 - 
$secs = PACKAGE->t_elapsed(); $secs = PACKAGE->t_elapsed($t1); $secs = PACKAGE->t_elapsed($t0,$t1); $secs = PACKAGE::t_elapsed(); $secs = PACKAGE::t_elapsed($t1); $secs = PACKAGE::t_elapsed($t0,$t1);Get (fractional) number of seconds elapsed between two Time::HiRes \@timeofday ARRAY-refs $t0 and $t1. $t0 defaults to the time of the last call to the t_start method, and $t1 defaults to the current time.
 - encode_utf8
 - 
$enc = PACKAGE->encode_utf8($str, $force=0); $enc = PACKAGE::encode_utf8($str, $force=0)encodes only if $force is true or if not already flagged as a byte-string.
 - decode_utf8
 - 
$enc = PACKAGE->decode_utf8($str, $force=0); $enc = PACKAGE::decode_utf8($str, $force=0);decodes only if $force is true or if not flagged as a byte-string.
 
AUTHOR
Bryan Jurish <moocow@cpan.org>
COPYRIGHT AND LICENSE
Copyright (C) 2016 by Bryan Jurish
This package is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.14.2 or, at your option, any later version of Perl 5 you may have available.
SEE ALSO
DiaColloDB(3pm), DiaColloDB::WWW::Server(3pm), CGI(3pm), CGI::Fast(3pm), perl(1), ...