v2.21 release
authorJuerd Waalboer <juerd@cpan.org>
Tue, 1 May 2001 08:00:24 +0000 (08:00 +0000)
committerMischa POSLAWSKY <perl@shiar.org>
Tue, 18 Mar 2008 08:13:33 +0000 (08:13 +0000)
plp.cgi
plpfields.pm
plpfunc.pm

diff --git a/plp.cgi b/plp.cgi
index c281fc0e17bc3965d14c5589f32a57fa462a6ec7..3bf77f9882d17b093afc6e4943ab31745105494a 100755 (executable)
--- a/plp.cgi
+++ b/plp.cgi
@@ -1,6 +1,9 @@
 #!/usr/bin/perl
+use strict;
+use vars qw($VERSION %INTERNAL %get %post %fields %header %cookie %BLOCK $DEBUG $output);
 
-$VERSION = '2.01';
+$VERSION = '2.21';
+$DEBUG = 1;
 
 $INTERNAL{file} = $ENV{PATH_TRANSLATED};
 unless (-e $INTERNAL{file}){
@@ -24,7 +27,7 @@ $INTERNAL{qq} = "\10"; #^P
 $INTERNAL{q}  = "\17"; #^Q
 
 $header{'content-type'} = 'text/html';
-$header{'status'} = '200 OK';
+$header{status} = '200 OK';
 
 $INTERNAL{code} = ReadFile($INTERNAL{file});
 
@@ -56,7 +59,13 @@ $INTERNAL{code} =~ s{print q$INTERNAL{q}$INTERNAL{q};}[]g;
 
 while ($INTERNAL{code} =~ s/<_(.*?)_>//s){
     $INTERNAL{pre} = $1;    
-    eval $INTERNAL{pre};
+    {
+       no strict;
+       eval $INTERNAL{pre};
+       if ($@ && $DEBUG){
+           print "\nDebug:\n $@";
+       }
+    }
 }
 
 for (keys %header){
@@ -64,11 +73,10 @@ for (keys %header){
 }
 print "\n";
 
-eval $INTERNAL{code};
-if ($@){
-    print "<hr><b>Debug</b><br>", Entity($@);
-}
-
-if ($Debug){
-    print "<hr>Debug:<pre>$INTERNAL{code}<hr>$output";
+{
+    no strict;
+    eval $INTERNAL{code};
+    if ($@ && $DEBUG){
+       print "<hr><b>Debug</b><br>", Entity($@);
+    }
 }
index 2babb6e14b556a0e7b19cbaae679158f8a473f33..8f566a28dfdbb8089af7d4cbfafc20626ec353c3 100644 (file)
@@ -1,10 +1,13 @@
+#!/usr/bin/perl
+# shebang only for color coding, just ignore it m'kay?
+use strict;
+use vars qw(%get %post %fields %cookie %INTERNAL);
+
 if ($ENV{QUERY_STRING} ne ''){
     for (split /&/, $ENV{QUERY_STRING}) {
-       split /=/;
-       for (@_) {
-           $_ = DecodeURI($_);
-       }
-       $get{$_[0]} = $_[1];
+       my @keyval = split /=/;
+       DecodeURI(@keyval);
+       $get{$keyval[0]} = $keyval[1];
     }
 }
 
@@ -12,23 +15,20 @@ if ($ENV{QUERY_STRING} ne ''){
 $INTERNAL{post} = <STDIN>;
 if ($INTERNAL{post} ne ''){
     for (split /&/, $INTERNAL{post}) {
-       split /=/;
-       for (@_) {
-           $_ = DecodeURI($_);
-       }
-       $post{$_[0]} = $_[1];
+       my @keyval = split /=/;
+       DecodeURI(@keyval);
+       $post{$keyval[0]} = $keyval[1];
     }
 }
-%fields=(%get, %post);
 
-$INTERNAL{koek} = $ENV{HTTP_COOKIE};
-if ($INTERNAL{koek} ne ''){
-    for (split /; ?/, $INTERNAL{koek}) {
-       split /=/;
-       #for (@_) {
-       #    $_ = DecodeURI($_);
-       #}
-       $cookie{$_[0]} ||= $_[1];
+%fields = %get;
+@fields{keys %post} = values %post;
+#%fields = (%get, %post);
+
+if ($ENV{HTTP_COOKIE} ne ''){
+    for (split /; ?/, $ENV{HTTP_COOKIE}) {
+       my @keyval = split /=/;
+       $cookie{$keyval[0]} ||= $keyval[1];
     }
 }
 
index ae3dd4f728529baebeda152c0c9a4f7f9effd701..49bb63cd8922b5bb44ea7013059b304ee75e4e27 100644 (file)
@@ -1,51 +1,72 @@
+#!/usr/bin/perl
+# The shebang is only there for mcedit syntax highlights, as I'm too lazy to 
+# change the configfile. It won't hurt performance
+use URI::Escape;
+use strict;
+use vars qw(%header);
+
 sub HiddenFields($@){
-    $INTERNAL{hash} = shift;
-    $INTERNAL{saves} = $INTERNAL{q} . (join $INTERNAL{q}, @_) . $INTERNAL{q};
-#    $INTERNAL{human} = join ',', @_;
-#    print "<!-- $INTERNAL{hash}: $INTERNAL{human} -->";
-    for (keys %{$INTERNAL{hash}}){
-       print qq{<input type=hidden name="$_" value="${$INTERNAL{hash}}{$_}">}
-           unless $INTERNAL{saves} =~ /$INTERNAL{q}$_$INTERNAL{q}/;
+    my $hash = shift;
+    my %saves;
+    $saves{@_} = ();
+    for (keys %$hash){
+       print qq{<input type=hidden name="$_" value="$hash->{$_}">}
+           unless exists $saves{$_};
     }
 }
 
-sub NoHeaders($){
-    $_[0] =~ s/^.*?\n\n//;
-    return $_[0]
-}
-
-sub Entity($;$$$$){
-    $_[4] ||= 4;
-    $_[0] =~ s/&/&amp;/g;
-    $_[0] =~ s/\"/&quot;/g;
-    $_[0] =~ s/</&lt;/g;
-    $_[0] =~ s/>/&gt;/g;
-    if ($_[1]){
-       $_[0] =~ s/\n/<br>\n/g;
-    }
-    if ($_[2]){
-       $_[0] =~ s/\t/' ' x $_[4]/eg;
+sub Entity(@){
+    my $ref;
+    my @copy;    
+    if (defined wantarray){
+       @copy = @_;
+       $ref = \@copy;
+    }else{
+       $ref = \@_;
     }
-    if ($_[3]){
-       $_[0] =~ s/  /&nbsp;&nbsp;/g;
+    for (@$ref){
+       eval {
+           s/&/&amp;/g;
+           s/\"/&quot;/g;
+           s/</&lt;/g;
+           s/>/&gt;/g;
+           s/\n/<br>\n/g;
+           s/\t/    /eg;
+           s/  /&nbsp;&nbsp;/g;
+       };
+       if ($@){ return defined wantarray ? @_ : undef }
     }
-    return $_[0]
+    return defined wantarray ? (wantarray ? @$ref : "@$ref") : undef;
 }
 
-sub DecodeURI($;$){
-    my $t = $_[0];
-    $t =~ tr{+} { } unless ($_[1] == 1);
-    $t =~ s{%([0-9A-Fa-f]{2})}
-          {pack('c',hex($1))}ge;
-    return $t;
+# Browsers do s/ /+/ - I don't care about RFC's, but I do care about real-life
+# situations.
+sub DecodeURI(@){
+    my @r;    
+    for (@_){
+       s/\+/%20/g;
+       my $dec = uri_unescape($_);
+       if (defined wantarray){
+           push @r, $dec;
+       }else{
+           eval {$_ = $dec}; 
+           return undef if $@; # ;DecodeURI("foo");
+       }
+    }
+    return defined wantarray ? (wantarray ? @r : "@r") : undef;
 }
-
-sub EncodeURI($;$){
-    my $t = $_[0];
-    $t =~ s{([^a-zA-Z0-9_\-.])}
-           {uc sprintf("%%%02x",ord($1))}ge;
-    $t =~ s{%20}{+}g if ($_[1] == 1);
-    return $t;
+sub EncodeURI(@){
+    my @r;
+    for (@_){
+        my $esc = uri_escape($_, '^;\/?:@&=\$,A-Za-z0-9\-_.!~*\'()');
+        if (defined wantarray){
+            push @r, $esc;
+        }else{
+           eval {$_ = $esc};
+           return undef if $@; # ;EncodeURI("foo");
+       }
+    }
+    return defined wantarray ? (wantarray ? @r : "@r") : undef;
 }
 
 sub AddCookie($){
@@ -71,4 +92,47 @@ sub WriteFile($$){
     print WRITEFILE $_[1];
     close WRITEFILE;
 }
+
+sub Counter($){
+    my $o = $/; undef $/;
+    open           COUNTER, "+<$_[0]";
+    flock          COUNTER, 2;
+    seek           COUNTER, 0, 0;
+    my $counter = <COUNTER>;
+    seek           COUNTER, 0, 0;
+    truncate       COUNTER, 0;
+    print          COUNTER ++$counter;
+    close          COUNTER;
+    $/ = $o;
+    return $counter;
+}
+
+sub AutoURL($){
+    my $ref;    
+    if (defined wantarray){
+       $ref = \(my $copy = $_[0]);
+    }else{
+       $ref = \$_[0];
+    }
+    eval {
+       my ($p, $b, $c);
+       $$ref =~ s/&quot;/"\cC"/g;
+       $$ref =~ s/&gt;/>\cC>/g;
+       $$ref =~ s/&lt;/<\cC</g;
+       # Now this is a big, ugly regex! But hey - it works :)    
+       $$ref =~ s{((\w+://|www\.|WWW\.)[a-zA-Z0-9\.\@:-]+[^\"\'>< \r\t\n]*)}{
+           local $_ = $1, $p = $2, ((($b) = /([\.,!\?\(\)\[\]]+$)/) ? s/// :
+           undef), s/&(?!\x23?\w+;)/&amp;/g, s/\"/&quot;/g, $c = 
+           ($p eq 'www.' || $p eq 'WWW.' ? "http://$_" : $_),
+           qq{<a href="$c" target="_blank">$_</a>$b}
+       }eg;
+
+
+       $$ref =~ s/"\cC"/&quot;/g;
+       $$ref =~ s/>\cC>/&gt;/g;
+       $$ref =~ s/<\cC</&lt;/g;
+    };
+    if ($@){ return defined wantarray ? @_ : undef }
+    return defined wantarray ? $$ref : undef;
+}
 1;
\ No newline at end of file