seperate modules for backend-specific code
[perl/plp/.git] / PLP / CGI.pm
1 package PLP::CGI;
2
3 use strict;
4
5 our $VERSION = '1.00';
6
7 # CGI initializer: parses PATH_TRANSLATED
8 sub init {
9         $PLP::print = 'print';
10         
11         my $path = $ENV{PATH_TRANSLATED};
12         $ENV{PLP_NAME} = $ENV{PATH_INFO};
13         my $path_info;
14         while (not -f $path) {
15                 if (not $path =~ s/(\/+[^\/]*)$//) {
16                         print STDERR "PLP: Not found: $ENV{PATH_TRANSLATED} ($ENV{REQUEST_URI})\n";
17                         PLP::error(undef, 404);
18                         exit;
19                 }
20                 my $pi = $1;
21                 $ENV{PLP_NAME} =~ s/\Q$pi\E$//;
22                 $path_info = $pi . $path_info;
23         }
24         
25         if (not -r $path) {
26                 print STDERR "PLP: Can't read: $ENV{PATH_TRANSLATED} ($ENV{REQUEST_URI})\n";
27                 PLP::error(undef, 403);
28                 exit;
29         }
30
31         delete @ENV{
32                 qw(PATH_TRANSLATED SCRIPT_NAME SCRIPT_FILENAME PATH_INFO),
33                 grep /^REDIRECT_/, keys %ENV
34         };
35
36         $ENV{PATH_INFO} = $path_info if defined $path_info;
37         $ENV{PLP_FILENAME} = $path;
38         my ($file, $dir) = File::Basename::fileparse($path);
39         chdir $dir;
40
41         $PLP::code = PLP::source($file, 0, undef, $path);
42 }
43
44 # This is run by the CGI script. (#!perl \n use PLP; PLP::everything;)
45 #sub everything {
46 #       clean();
47 #       cgi_init();
48 #       start();
49 #}
50
51 1;
52