CAM-App
view release on metacpan or search on metacpan
example/SampleConfig.pm view on Meta::CPAN
#################### Edit below here!!! ########################
# Below are sample config variables. Not all of them are used with
# every application. You can add more to suit your application.
## Paths and URLs
# Where to find files
$config{'basedir'} = "/home/web/myApp";
$config{'templatedir'} = "$config{basedir}/tmpls";
$config{'cgidir'} = "$config{basedir}/cgi";
$config{'htmldir'} = "$config{basedir}/html";
$config{'libdir'} = "$config{basedir}/lib";
$config{'sqldir'} = "$config{libdir}/sql";
# Where to find links
$config{'baseurl'} = "http://www.clotho.com/myApp";
$config{'cgiurl'} = "$config{baseurl}/cgi";
$config{'htmlurl'} = "$config{baseurl}/html";
lib/CAM/App.pm view on Meta::CPAN
Subclass: (then use just like above, replacing CAM::App with my::App)
package my::App;
use CAM::App;
@ISA = qw(CAM::App);
sub init {
my $self = shift;
my $basedir = "..";
$self->{config}->{cgidir} = ".";
$self->{config}->{basedir} = $basedir;
$self->{config}->{htmldir} = "$basedir/html";
$self->{config}->{templatedir} = "$basedir/tmpls";
$self->{config}->{libdir} = "$basedir/lib";
$self->{config}->{sqldir} = "$basedir/lib/sql";
$self->{config}->{error_template} = "error_tmpl.html";
$self->addDB("App", "live", "dbi:mysql:database=app", "me", "mypass");
$self->addDB("App", "dev", "dbi:mysql:database=appdev", "me", "mypass");
lib/CAM/App.pm view on Meta::CPAN
sub init {
my $self = shift;
$self->{config}->{sqldir} = "../lib/sql";
return $self->SUPER::init();
}
This init function does the following:
* Sets up some of the basic configuration parameters
(myURL, fullURL, cgidir, cgiurl)
* Creates a new CGI object if one does not exist (as per getCGI)
* Sets up the DBH object if one exists
* Tells CAM::SQLManager where the sqldir is located if possible
=cut
sub init
lib/CAM/App.pm view on Meta::CPAN
use warnings;
}
## Initialize cgiurl
if ($cfg->{myURL} && (!exists $cfg->{cgiurl}))
{
# Truncate the filename from the URL
($cfg->{cgiurl} = $cfg->{myURL}) =~ s,/[^/\\]*$,,;
}
## Initialize cgidir
if (!exists $cfg->{cgidir})
{
$cfg->{cgidir} = $self->computeDir();
}
## Initialize DBH
if ($self->{dbh})
{
# Note that unlike getDBH(), the DBH is NOT cached in this case.
# This is the correct behavior. Since the calling script handed
# us the DBH, it's assumed that the caller will handle any
# caching
lib/CAM/App.pm view on Meta::CPAN
Returns the directory in which this CGI script is located. This can
be a class or instance method.
=cut
sub computeDir
{
my $pkg_or_self = shift;
my $cgidir;
if ($ENV{SCRIPT_FILENAME})
{
($cgidir = $ENV{SCRIPT_FILENAME}) =~ s,/[^/\\]*$,,;
}
elsif ($ENV{PATH_TRANSLATED})
{
$cgidir = $ENV{PATH_TRANSLATED};
}
elsif ($ENV{PWD})
{
# Append the calling path (if any) to the PWD
if ($0 =~ /(.*)[\/\\]/)
{
my $execpath = $1;
if ($execpath =~ m,^[/\\],)
{
$cgidir = $execpath;
}
else
{
$cgidir = File::Spec->catdir($ENV{PWD}, $execpath);
}
}
else
{
$cgidir = $ENV{PWD};
}
}
# Fix odd cases, like a script called from "./myscript" or "../myscript
if ($cgidir)
{
$cgidir =~ s,/[^/]+/\.\.,,g; # remove "/dir/.."
$cgidir =~ s,\\[^\\]+\\\.\.,,g; # remove "\dir\.."
$cgidir =~ s,/\./,/,g; # change "path/./path" to "path/path"
$cgidir =~ s,\\\.\\,\\,g; # change "path\.\path" to "path\path"
$cgidir =~ s,/\.$,,g; # change "path/." to "path"
$cgidir =~ s,\\\.$,,g; # change "path\." to "path"
$cgidir =~ s,//+$,/,g; # change "path///path" to "path/path"
$cgidir =~ s,\\\\+$,\\,g; # change "path\\\path" to "path\path"
}
return $cgidir;
}
#--------------------------------#
=item authenticate
Test the login information, if any. Currently no tests are performed
-- this is a no-op. Subclasses may override this method to test login
credentials. Even though it's currently trivial, subclass methods
should alway include the line:
lib/CAM/App.pm view on Meta::CPAN
just called from withing getTemplate() and related methods, but if you
build your own templates you may want to use this explicitly.
The following value are set (and the order is significant, since later
keys can override earlier ones):
- the configuration variables, including:
- myURL => URL of the current script
- fullURL => URL of the current page, including CGI parameters and target
- cgiurl => URL of the directory containing the current script
- cgidir => directory containing the current script
- many others...
- mod_perl => boolean indicating whether the script is in mod_perl mode
- anything passed as arguments to this method
Subclasses may override this to add more fields to the template. We
recommend implementing override methods like this:
sub prefillTemplate {
my $self = shift;
my $template = shift;
( run in 1.699 second using v1.01-cache-2.11-cpan-5735350b133 )