v3.00 release
[perl/plp/.git] / PLP / Fields.pm
diff --git a/PLP/Fields.pm b/PLP/Fields.pm
new file mode 100644 (file)
index 0000000..9945511
--- /dev/null
@@ -0,0 +1,59 @@
+#----------------------#
+  package PLP::Fields;
+#----------------------#
+use strict;
+
+=head1 PLP::Fields
+
+Has only one function: doit(), which ties the hashes %get, %post, %fields and %header in
+PLP::Script. Also generates %cookie immediately.
+
+    PLP::Fields::doit();
+
+=cut
+
+sub doit {
+    tie %PLP::Script::get, 'PLP::Tie::Delay', 'PLP::Script::get', sub {
+       my %get;
+       if ($ENV{QUERY_STRING} ne ''){
+           for (split /[&;]/, $ENV{QUERY_STRING}) {
+               my @keyval = split /=/;
+               PLP::Functions::DecodeURI(@keyval);
+               $get{$keyval[0]} = $keyval[1] unless $keyval[0] =~ /^\@/;
+               push @{ $get{'@' . $keyval[0]} }, $keyval[1];
+           }
+       }
+       return \%get;
+    };
+
+    tie %PLP::Script::post, 'PLP::Tie::Delay', 'PLP::Script::post', sub {
+       my %post;
+       our $post = <STDIN>;
+       if (defined($post) && $post ne '' &&
+           ($ENV{CONTENT_TYPE} eq '' || $ENV{CONTENT_TYPE} eq 'application/x-www-form-urlencoded')){
+           for (split /[&;]/, $post) {
+               my @keyval = split /=/;
+               PLP::Functions::DecodeURI(@keyval);
+               $post{$keyval[0]} = $keyval[1] unless $keyval[0] =~ /^\@/;
+               push @{ $post{'@' . $keyval[0]} }, $keyval[1];
+           }
+       }
+       return \%post;
+    };
+
+    tie %PLP::Script::fields, 'PLP::Tie::Delay', 'PLP::Script::fields', sub {
+       $PLP::Script::get{PLPdummy}, $PLP::Script::post{PLPdummy}; # Trigger creation
+       return {%PLP::Script::get, %PLP::Script::post}
+    };
+
+    tie %PLP::Script::header, 'PLP::Tie::Headers';
+
+    if (defined($ENV{HTTP_COOKIE}) && $ENV{HTTP_COOKIE} ne ''){
+       for (split /; ?/, $ENV{HTTP_COOKIE}) {
+           my @keyval = split /=/;
+           $PLP::Script::cookie{$keyval[0]} ||= $keyval[1];
+       }
+    }
+
+}
+1;