v2.40 release
[perl/plp/.git] / plpfields.pm
index 8f566a28dfdbb8089af7d4cbfafc20626ec353c3..5325d695f22a3bcaafa150b4276464fd37b3bdbb 100644 (file)
@@ -3,29 +3,44 @@
 use strict;
 use vars qw(%get %post %fields %cookie %INTERNAL);
 
-if ($ENV{QUERY_STRING} ne ''){
-    for (split /&/, $ENV{QUERY_STRING}) {
-       my @keyval = split /=/;
-       DecodeURI(@keyval);
-       $get{$keyval[0]} = $keyval[1];
+$INTERNAL{getsub} = sub {
+    my %get;
+    if ($ENV{QUERY_STRING} ne ''){
+       for (split /&/, $ENV{QUERY_STRING}) {
+           my @keyval = split /=/;
+           DecodeURI(@keyval);
+           $get{$keyval[0]} = $keyval[1];
+       }
     }
-}
+    return \%get;
+};
 
-
-$INTERNAL{post} = <STDIN>;
-if ($INTERNAL{post} ne ''){
-    for (split /&/, $INTERNAL{post}) {
-       my @keyval = split /=/;
-       DecodeURI(@keyval);
-       $post{$keyval[0]} = $keyval[1];
+$INTERNAL{postsub} = sub {
+    my %post;
+    $INTERNAL{post} = <STDIN>;
+    if (defined($INTERNAL{post}) && $INTERNAL{post} ne '' &&
+       ($ENV{CONTENT_TYPE} eq '' || $ENV{CONTENT_TYPE} eq 'application/x-www-form-urlencoded')){
+        for (split /&/, $INTERNAL{post}) {
+           my @keyval = split /=/;
+           DecodeURI(@keyval);
+           $post{$keyval[0]} = $keyval[1];
+       }
     }
-}
+    return \%post;
+};
+
+$INTERNAL{fieldssub} = sub {
+    $get{PLPdummy}, $post{PLPdummy}; # Trigger creation
+    return {%get, %post}
+};
+
+tie %get, 'PLP::Delay', 'main::get', $INTERNAL{getsub};
+tie %post, 'PLP::Delay', 'main::post', $INTERNAL{postsub};
+tie %fields, 'PLP::Delay', 'main::fields', $INTERNAL{fieldssub};
 
-%fields = %get;
-@fields{keys %post} = values %post;
 #%fields = (%get, %post);
 
-if ($ENV{HTTP_COOKIE} ne ''){
+if (defined($ENV{HTTP_COOKIE}) && $ENV{HTTP_COOKIE} ne ''){
     for (split /; ?/, $ENV{HTTP_COOKIE}) {
        my @keyval = split /=/;
        $cookie{$keyval[0]} ||= $keyval[1];