Apache-PageKit
view release on metacpan or search on metacpan
lib/Apache/PageKit.pm view on Meta::CPAN
# get user and group as specified by User and Group directives
my $uid = $s->uid;
my $gid = $s->gid;
# include user defined classes (Model) in perl search path
unshift(@INC,"$pkit_root/Model");
my $config_dir = $pkit_root . '/Config';
my $config = Apache::PageKit::Config->new(config_dir => $config_dir,
server => $server);
$config->parse_xml;
die "No config data for your server '$server' maybe you mistyped something?"
unless exists $Apache::PageKit::Config::server_attr->{$config_dir}->{$server};
my $upload_tmp_dir = $config->get_global_attr('upload_tmp_dir');
if ( $upload_tmp_dir && !-d $upload_tmp_dir ) {
die "your upload_tmp_dir ($upload_tmp_dir) did not exists";
}
my $cache_dir = $config->get_global_attr('cache_dir');
my $view_cache_dir = $cache_dir ? $cache_dir . '/pkit_cache' :
$pkit_root . '/View/pkit_cache';
unless(-e "$view_cache_dir"){
mkdir $view_cache_dir, 0755;
}
# User defined base model class
my $model_base_class = $config->get_global_attr('model_base_class') || "MyPageKit::Common";
eval "require $model_base_class";
if($@){
die "Failed to load $model_base_class ($@)";
}
# User defined session class
for ( qw /session_class page_session_class/ ) {
my $user_session_class = $config->get_global_attr($_) || next;
eval "require $user_session_class";
$@ && die "Failed to load $user_session_class ($@)";
}
# User defined template toolkit class
my $template_class = $config->get_global_attr('template_class');
if ( $template_class ) {
eval "require $template_class";
$@ && die "Failed to load $template_class ($@)";
}
# delete all cache files, since some of them might be stale
# and might not be checked for freshness, if reload is off
# even if reload is on, PageKit might change, so it should be refreshed
my $unlink_sub = sub {
-f && unlink;
};
File::Find::find($unlink_sub,$view_cache_dir);
# init gettext
if (($config->get_global_attr('use_locale') || 'no') eq 'yes') {
eval { require Locale::gettext };
unless ($@) {
# check for broken locale settings
delete @ENV{qw/LANG LANGUAGE LC_ALL/};
$ENV{LC_MESSAGES} = $config->get_global_attr('default_lang') || 'en';
# ( my $textdomain ) = $config->get_global_attr('model_base_class') =~ m/^([^:]+)/;
my $textdomain = 'PageKit';
Locale::gettext::bindtextdomain($textdomain, $pkit_root . '/locale');
Locale::gettext::textdomain($textdomain);
}
else {
warn "Locale::gettext not installed ($@)";
}
}
$model_base_class->pkit_startup($pkit_root, $server, $config)
if $model_base_class->can('pkit_startup');
}
# object oriented method call, see Eagle p.65
sub handler ($$){
my $class = shift;
my ($pk, $model, $status_code);
binmode STDOUT;
$| = 1;
eval {
$pk = $class->new;
$model = $pk->{model};
my $apr = $pk->{apr};
my $view = $pk->{view};
my $config = $pk->{config};
$status_code = $pk->prepare_page;
my $use_template = $config->get_page_attr($pk->{page_id},'use_template') || 'yes' if ($status_code eq OK);
if ($status_code eq OK && $use_template ne 'no'){
COMPONENT: {
$pk->open_view;
# for my $component_id (@{$view->{record}->{component_ids}}){
# $pk->component_code($component_id);
local $pk->{component_params_hashref};
for my $component_id_params_ref (@{$view->{record}->{component_ids}}){
$pk->{component_params_hashref} = $component_id_params_ref->[1];
$pk->component_code($component_id_params_ref->[0]);
if ( defined $pk->{status_code} ) {
$status_code = $pk->{status_code};
last COMPONENT;
}
}
$model->pkit_post_common_code if $model->can('pkit_post_common_code');
$pk->set_session_cookie;
$pk->prepare_and_print_view;
}
}
};
if ( $pk ) {
$status_code = $pk->_fatal_error($@) if ( $@ );
# save changes
delete @$pk{qw/session page_session/};
}
# the session and page_session references can not be used
# inside pkit_cleanup_code -- they are already deleted
( run in 0.520 second using v1.01-cache-2.11-cpan-ceb78f64989 )