#!/usr/bin/perl -w use strict; use Cwd qw/abs_path/; use CGI::Carp qw(fatalsToBrowser); use CGI::Simple; use File::Slurp; use Data::Dumper; use Text::Iconv; use lib '../lib'; use WebPAC::DB; use WebPAC::Output::TT; my $abs_path = abs_path($0); $abs_path =~ s#/[^/]*$#/../#; my $db_path = $abs_path . '/db/'; my $template_path = "$abs_path/conf/output/tt"; opendir(my $dir, $template_path) || die "can't open template path $template_path: $!"; my @templates = grep { /\.tt$/i } readdir($dir); my $css_file = 'user.css'; my $iconv_utf8 = new Text::Iconv('ISO-8859-2', 'UTF-8'); my $iconv_loc = new Text::Iconv('UTF-8', 'ISO-8859-2'); my $db = new WebPAC::DB( path => $db_path, read_only => 1, debug => 1, ); my $out = new WebPAC::Output::TT( include_path => $template_path, filters => { foo => sub { shift } }, ); my $q = new CGI::Simple; my $self = $q->url( '-path_info'=>1, '-query'=>0, '-full'=>0 ); my $rec = $q->param('rec') || 1; my $template_filename = $q->param('template') || $templates[0]; print $q->header( -charset => 'utf-8' ); ##---- some handy subs sub update_file($$) { my ($path, $content) = @_; $content = $iconv_loc->convert( $content ) || die "no content?"; sub _conv_js { my $t = shift || return; return $iconv_loc->convert(chr(hex($t))); } $content =~ s/%u([a-fA-F0-9]{4})/_conv_js($1)/gex; $content =~ s/^[\n\r]+//s; $content =~ s/[\n\r]+$//s; write_file($path . '.new', $content) || die "can't save ${path}.new $!"; rename $path . '.new', $path || die "can't rename to $path: $!"; } sub get_file_in_html($) { my ($path) = @_; die "no path?" unless ($path); my $content = read_file($path) || die "can't read $path: $!"; $content = $q->escapeHTML($iconv_utf8->convert($content)); return $content; } sub template_list_html($) { my $current = shift || die; my $html = qq{ Template\n }; return $html; } ##---- if ($q->path_info =~ m#xml#) { my $ds = $db->load_ds($rec); if ($ds) { print qq{ }, $iconv_utf8->convert( $out->apply( template => $template_filename, data => $ds, ) ), qq{ }; exit; } else { print qq{ Record $rec not found! }; exit; } } elsif ($q->path_info =~ m#template_list#) { print qq{
} . template_list_html($template_filename) . qq{
}; exit; } elsif ($q->path_info =~ m#template#) { my $template_path = $out->{'include_path'} . '/' . $template_filename; if ($q->param('save_template')) { update_file($template_path, $q->param('tt_template')); print qq{ $template_filename saved }; exit; } my $tmpl = get_file_in_html($template_path); print qq{

  idle
}; exit; } elsif ($q->path_info =~ m#css#) { my $css_path = $abs_path . '/web/' . $css_file; if ($q->param('save_css')) { update_file($css_path, $q->param('user_css')); print qq{ $css_file saved }; exit; } my $user_css = get_file_in_html($css_path); print qq{

  idle
}; exit; } else { my $template_list_html = template_list_html($template_filename); print <<"_END_OF_HEAD_"; WebPAC simple browse interface
db_path = $db_path
css = $css_file
none
$template_list_html
Editor template css
no template loaded yet.
no record loaded yet.
_END_OF_HEAD_ }