CGI-Framework
view release on metacpan or search on metacpan
lib/CGI/Framework.pm view on Meta::CPAN
# And now some initialization
#
$self->{action} = $para{action};
$self->{valid_languages} = $para{valid_languages};
$self->{templates_dir} = $para{templates_dir};
$self->{initial_template} = $para{initial_template};
$self->{callbacks_namespace} = $para{callbacks_namespace};
$self->{log_filename} = $para{log_filename};
$self->{disable_back_button} = $para{disable_back_button};
$self->{output_filter} = $para{output_filter};
$self->{_cgi} = new CGI || die "Failed to create a new CGI instance: $! $@\n";
$cookie_value = $self->{_cgi}->cookie($para{cookie_name}) || undef;
if ($para{"maketext_class_name"}) {
undef $@;
eval { eval("require $para{'maketext_class_name'};") || die "Failed to require() $para{'maketext_class_name'}: $! $@"; };
if ($@) {
croak "Could not properly initialize maketext_class_name ($para{'maketext_class_name'}): $@";
}
else {
$self->{maketext_class_name} = $para{"maketext_class_name"};
}
}
#
# Initialize session object
#
if ($para{sessions_dir}) {
$sessions_driver = "File";
}
else {
$sessions_driver = "MySQL";
}
if ($para{sessions_serializer_storable}) {
$sessions_serializer = "Storable";
}
elsif ($para{sessions_serializer_freezethaw}) {
$sessions_serializer = "FreezeThaw";
}
else {
$sessions_serializer = "Default";
}
$self->{_session} = new CGI::Session(
"driver:$sessions_driver;serializer:$sessions_serializer",
$cookie_value,
{
Handle => $para{sessions_mysql_dbh},
Directory => $para{sessions_dir},
}
)
|| die "Failed to create new CGI::Session instance with $sessions_driver - based storage and $sessions_serializer - based serialization: $! $@\n";
if ($para{"import_form"}) {
$self->{_cgi}->import_names($para{"import_form"});
$self->{_import_form} = $para{"import_form"};
}
if (!$cookie_value || ($self->{_session}->id() ne $cookie_value)) {
# We just created a new session - send it to the user
print "Set-Cookie: $para{cookie_name}=", $self->{_session}->id(), ($para{cookie_domain} ? "; domain=" . $para{cookie_domain} : ""), "\n";
}
$expire = $para{"expire"} ? ($para{"expire"} =~ /[^0-9]/ ? $para{"expire"} : "+$para{expire}m") : "+15m";
$self->{_session}->expire($expire);
#
# Language handling
#
if ($self->{_cgi}->param("_lang") && scalar @{ $self->{valid_languages} }) {
if (grep { $self->{_cgi}->param("_lang") eq $_ } @{ $self->{valid_languages} }) {
#
# Override session language
#
$self->{_session}->param("_lang", scalar $self->{_cgi}->param("_lang"));
}
else {
print "Content-type: text/plain\n\n";
print "Unsupported language\n";
$self->finalize();
}
}
elsif (scalar @{ $self->{valid_languages} } && !$self->{_session}->param("_lang")) {
# Set default language
$self->{_session}->param("_lang", $self->{valid_languages}->[0]);
}
#
# We're done initializing !
#
$LASTINSTANCE = $self;
return ($self);
}
#
# Takes a scalar key
# Copies that key from the form to the session
#
sub remember {
my $self = _getself(\@_);
my $sourcekey = shift || croak "key not supplied";
my $destinationkey = shift || $sourcekey;
$self->session($destinationkey, $self->form($sourcekey));
}
#
# Takes a template name
# returns scalar output string containing parsed template, with lang and tags substitution
# In array mode also returns a second element which is the content-type
#
sub return_template {
my $self = _getself(\@_);
my $template_name = shift || croak "Template name not supplied";
my $template;
my $content_type;
my $filename;
my $output;
my ($key, $value);
my $temp;
my $header;
( run in 1.735 second using v1.01-cache-2.11-cpan-6aa56a78535 )