Apache2-PageKit
view release on metacpan or search on metacpan
lib/Apache2/PageKit/View.pm view on Meta::CPAN
ignore_fields => $view->{ignore_fillinform_fields}
);
Encode::_utf8_on($output);
}
}
if($view->{can_edit} eq 'yes'){
$view->{pkit_pk}->{browser_cache} = 'no';
Apache2::PageKit::Edit::add_edit_links($view, $record, \$output);
}
return \$output;
}
# gets static gzipped file, creating it if necessary
sub get_static_gzip {
my ($view, $filename) = @_;
my ($gzip_mtime, $gzipped_content);
(my $relative_filename = $filename) =~ s!^$view->{view_dir}/!!;
my $gzipped_filename = "$view->{cache_dir}/$relative_filename.gz";
# is the cache entry valid or changed on disc?
if(-f "$gzipped_filename"){
open my $fh, "<$gzipped_filename" or return undef;
binmode $fh;
# read mtime from first line
chomp($gzip_mtime = <$fh>);
# read rest of gzipped content
local $/;
$gzipped_content = <$fh>;
close $fh;
if($view->{reload} ne 'no'){
# is the cache entry valid or changed on disc?
my $mtime = ( stat($filename) )[9];
if($mtime != $gzip_mtime){
$gzipped_content = $view->_create_static_zip($filename, $gzipped_filename);
}
}
} else {
$gzipped_content = $view->_create_static_zip($filename, $gzipped_filename);
}
return $gzipped_content;
}
# opens template, each
sub open_view {
my ($view, $page_id, $pkit_view, $lang) = @_;
return if exists $view->{already_loaded}->{$page_id};
my $record = $view->_fetch_from_file_cache($page_id, $pkit_view, $lang);
unless($record){
# template not cached, load now
$view->_load_page($page_id, $pkit_view);
$record = $view->_fetch_from_file_cache($page_id, $pkit_view, $lang);
die "Error loading record for page_id $page_id and view $pkit_view"
unless $record;
}
if($view->{reload} ne 'no'){
# check for updated files on disk
unless($view->_is_record_uptodate($record, $pkit_view, $page_id)){
# one of the included files changed on disk, reload
$view->_load_page($page_id, $pkit_view);
$record = $view->_fetch_from_file_cache($page_id, $pkit_view, $lang);
}
}
$view->{record} = $record;
$view->{already_loaded}->{$page_id} = 1;
}
sub preparse_templates {
my ($view) = @_;
my $view_dir = $view->{view_dir};
my $load_template_sub = sub {
return unless /\.tmpl$/;
my $template_file = "$File::Find::dir/$_";
my ($pkit_view, $page_id) =
($template_file =~ m!$view_dir/([^/]*)/Page/(.*?)\.(tmpl|tt)$!);
return unless $page_id;
$view->open_view($page_id, $pkit_view);
};
File::Find::find({wanted => $load_template_sub},
# follow => 1},
$view_dir);
}
sub template_file_exists {
my ($view, $page_id, $pkit_view) = @_;
return 1 if $view->_find_template($pkit_view,$page_id);
}
# private methods
# creates gzipped file
sub _create_static_zip {
my ($view, $filename, $gzipped_filename) = @_;
local $/;
open my $fh, "<$filename" or return undef;
binmode $fh;
my $content = <$fh>;
close $fh;
$view->_html_clean(\$content);
my $gzipped_content = Compress::Zlib::memGzip($content);
(my $gzipped_dir = $gzipped_filename) =~ s!(/)?[^/]*?$!!;
File::Path::mkpath("$gzipped_dir");
if ($gzipped_content) {
my $mtime = (stat($filename))[9];
if ( open my $gzip_fh, ">$gzipped_filename" ) {
binmode $gzip_fh;
print $gzip_fh "$mtime\n";
print $gzip_fh $gzipped_content;
( run in 0.431 second using v1.01-cache-2.11-cpan-39bf76dae61 )