| 49 | 1 package Configuration; | 
|  | 2 our $HtDocsDir; | 
|  | 3 | 
|  | 4 package Engine; | 
|  | 5 our $Encoding; | 
|  | 6 | 
|  | 7 package Engine::Output::JSON; | 
|  | 8 use strict; | 
|  | 9 use warnings; | 
|  | 10 | 
|  | 11 use Encode; | 
|  | 12 use PerlIO; | 
|  | 13 use IMPL::Exception; | 
|  | 14 use JSON; | 
|  | 15 | 
|  | 16 sub CTX_TEMPLATE()  { 1 } | 
|  | 17 sub CTX_DATA()      { 2 } | 
|  | 18 | 
|  | 19 my $context = CTX_DATA; | 
|  | 20 our $Data; | 
|  | 21 | 
|  | 22 sub template() { $context = CTX_TEMPLATE } | 
|  | 23 sub data() { $context = CTX_DATA } | 
|  | 24 | 
|  | 25 sub Print { | 
|  | 26     my ($class,$query,$action) = @_; | 
|  | 27 | 
|  | 28     my @path = $action->RequestURI->path_segments; | 
|  | 29     shift @path; | 
|  | 30 | 
|  | 31     my $result; | 
|  | 32 | 
|  | 33     undef $@; | 
|  | 34     $Data = $action->Result; | 
|  | 35     eval { | 
|  | 36         my $fname = $HtDocsDir . join '/', @path; | 
|  | 37         if ($context == CTX_DATA) { | 
|  | 38             my $dummy = ''; | 
|  | 39             open my $hstd, ">>", \$dummy or die new IMPL::Exception('Failed to create inmemory stream'); | 
|  | 40             local (*STDIN,*STDOUT) = ($hstd,$hstd); | 
|  | 41             local ${^ENCODING}; | 
|  | 42             $result = do $fname or die new IMPL::Exception('Failed to evalute the file', $@, $!,$fname); | 
|  | 43         } else { | 
|  | 44             die new IMPL::Exception('JSON templates not implemented'); | 
|  | 45         } | 
|  | 46     }; | 
|  | 47     if ($@) { | 
|  | 48         $result = { errorCode => 1, errorMessage => "$@"}; | 
|  | 49     } | 
|  | 50 | 
|  | 51     print $query->header(-status => 200, -type => 'text/javascript'); | 
|  | 52     print to_json({ errorCode => 0, result => $result }); | 
|  | 53 } | 
|  | 54 | 
|  | 55 | 
|  | 56 1; |