X-Git-Url: http://git.jankratochvil.net/?a=blobdiff_plain;f=Web.pm;h=41aaef2921ac668a08ac37e020466b334fd973db;hb=a8f5baca6ea81b99e9389f2918c75fd6f514b809;hp=b166e7611777113a0d4620d607c1fdcfeb55e52e;hpb=d283af4f7bd7659deae058ab1e07ee06ffd114b8;p=MyWeb.git diff --git a/Web.pm b/Web.pm index b166e76..41aaef2 100644 --- a/Web.pm +++ b/Web.pm @@ -23,13 +23,45 @@ our $CVS_ID=q$Id$; use strict; use warnings; -use lib qw(/home/short/lib/perl5/site_perl/5.6.0/i386-linux /home/short/lib/perl5/site_perl/5.6.0 /home/short/lib/perl5/site_perl/i386-linux /home/short/lib/perl5/site_perl /home/short/lib/perl5/5.6.0/i386-linux /home/short/lib/perl5/5.6.0 /home/short/lib/perl5/i386-linux /home/short/lib/perl5); - use Exporter; -our @EXPORT=qw(&require &a_href &a_href_cz &vskip &img $W); +sub Wrequire ($); +sub Wuse ($@); +our $W; +our @EXPORT=qw(&Wrequire &Wuse &a_href &a_href_cz &vskip &img $W &top_dir); our @ISA=qw(Exporter); -use WebConfig; # for %WebConfig +BEGIN +{ + sub Wrequire ($) + { + my($file)=@_; + +# print STDERR "Wrequire $file\n"; + $file=~s#/#::#g; + $file=~s/[.]pm$//; + my $class=$file; + $file=~s#::#/#g; + $file.=".pm"; + my $aref=($W->{"packages_used"}{$Apache::Registry::curstash}||=[]); + push @$aref,$class + if !{ map(($_=>1),@$aref) }->{$class}; # Prevent duplicated entries. + CORE::require $file; + 1; # Otherwise 'require' would already file above. + } + + sub Wuse ($@) + { + my($file,@list)=@_; + +# print STDERR "Wuse $file\n"; + Wrequire $file; + local $Exporter::ExportLevel=$Exporter::ExportLevel+1; + $file->import(@list); + 1; + } +} + +BEGIN { Wuse 'WebConfig'; } # for %WebConfig require CGI; # for &escapeHTML require Image::Size; # for &imgsize use File::Basename; # &basename @@ -38,6 +70,7 @@ use URI::Escape; require HTTP::BrowserDetect; require HTTP::Negotiate; require Geo::IP; +require CGI; # Undo 'www/engine/httpd-restart' as it may use obsolete Perl for 'mod_perl' @@ -45,7 +78,7 @@ delete $ENV{"PERLLIB"}; delete $ENV{"LD_LIBRARY_PATH"}; -our $W; +#our $W; # $W->{"title"} # $W->{"head"} # $W->{"head_css"} @@ -62,7 +95,9 @@ sub init ($%) { my($class,%args)=@_; + my $packages_used_save=$W->{"packages_used"}; $W={ %WebConfig,%args }; # override %WebConfig settings + $W->{"packages_used"}=$packages_used_save; $W->{"__PACKAGE__"}||="Apache::ROOT".$Apache::Registry::curstash; @@ -71,12 +106,23 @@ my($class,%args)=@_; do { $W->{$_}=0 if !defined $W->{$_}; } for ("detect_ent"); do { $W->{$_}=0 if !defined $W->{$_}; } for ("detect_js"); do { $W->{$_}=1 if !defined $W->{$_}; } for ("have_css"); # AFAIK it does not hurt anyone. + do { $W->{$_}=1 if !defined $W->{$_}; } for ("heading"); + do { $W->{$_}=1 if !defined $W->{$_}; } for ("footer"); do { $W->{$_}=1 if !defined $W->{$_}; } for ("footer_delimit"); + do { $W->{$_}=1 if !defined $W->{$_}; } for ("footer_mailme"); do { $W->{$_}=1 if !defined $W->{$_}; } for ("footer_ids"); do { $W->{$_}=1 if !defined $W->{$_}; } for ("indexme"); do { $W->{$_}="" if !defined $W->{$_}; } for ("head"); do { $W->{$_}="" if !defined $W->{$_}; } for ("head_css"); + my $footer_any=0; + for (qw(footer_mailme footer_ids)) { + $W->{$_}=0 if !$W->{"footer"}; + $footer_any=1 if $W->{$_}; + } + $W->{"footer"}=0 if !$footer_any; + $W->{"footer_delimit"}=0 if !$W->{"footer"}; + $W->{"r"}=Apache->request(); $W->{"QUERY_STRING"}=$W->{"r"}->args() || ""; @@ -94,7 +140,10 @@ my($class,%args)=@_; } $W->{"QUERY_STRING"}=~s/([&])amp;/$1/g; $W->{"r"}->args($W->{"QUERY_STRING"}); - $W->{"args"}={ $W->{"r"}->args() }; + $ENV{"QUERY_STRING"}=$W->{"QUERY_STRING"}; + # Do not: $W->{"r"}->args() + # as it parses only QUERY_STRING (not POST data). + $W->{"args"}={ CGI->new()->Vars() }; do { $W->{$_}=$ENV{"HTTP_ACCEPT"} if !defined $W->{$_}; } for ("accept"); do { $W->{$_}=$ENV{"HTTP_USER_AGENT"} if !defined $W->{$_}; } for ("user_agent"); @@ -107,7 +156,7 @@ my($class,%args)=@_; $W->{"have_js"}=($W->{"args"}{"have_js"} ? 1 : 0); if ($W->{"detect_js"} && !$W->{"have_js"}) { - $W->{"head"}.=''."\n"; + $W->{"head"}.=''."\n"; } do { args_check(%$_) if $_; } for ($W->{"args_check"}); @@ -115,20 +164,10 @@ my($class,%args)=@_; return $W; } -sub require ($) +sub top_dir () { -my($file)=@_; - - $file=~s#/#::#g; - $file=~s/[.]pm$//; - my $class=$file; - $file=~s#::#/#g; - $file.=".pm"; - my $aref=($W->{"packages_used"}{$Apache::Registry::curstash}||=[]); - push @$aref,$class - if !{ map(($_=>1),@$aref) }->{$class}; # Prevent duplicated entries. - CORE::require $file; - 1; # Otherwise 'require' would already file above. + do { return $_ if $_; } for ($W->{"top_dir"}); + return $INC[0]; # fallback } sub fatal (;$); @@ -140,7 +179,8 @@ my(%tmpl)=@_; while (my($name,$regex)=each(%tmpl)) { my $name_html="Parametr ".CGI::escapeHTML($name).""; my $val=$W->{"args"}{$name}; - fatal "$name_html does not match required regex ".CGI::escapeHTML($regex)."" + fatal "$name_html ".CGI::escapeHTML($val)."" + ." does not match required regex ".CGI::escapeHTML($regex)."" if defined $val && $val!~/$regex/; fatal "$name_html is required" if !defined $val; @@ -171,10 +211,26 @@ sub footer (;$) { exit 1 if $W->{"footer_passed"}++; # deadlock prevention: - if ($W->{"footer_ids"}) { - print vskip if $W->{"footer_delimit"}; - print '
'; + print vskip if $W->{"footer_delimit"}; + + print "
';
print join("
\n",map({ my $package=$_;
my $cvs_id=(eval('$'.$package."::CVS_ID")
# || $package # debug
@@ -191,7 +247,7 @@ sub footer (;$)
my $ext;
for (qw(.html.pl .pl .pm),"") {
$ext=$_;
- last if -r $W->{"top_dir"}."/$file$ext";
+ last if -r top_dir()."/$file$ext";
cluck "Class file $file not found" if !$ext;
}
$file.=$ext;
@@ -211,6 +267,11 @@ sub footer (;$)
)));
print "