annotate Lib/IMPL/Web/QueryHandler/PageFormat.pm @ 154:eb478083f72b

Url support
author wizard
date Thu, 30 Sep 2010 02:13:05 +0400
parents 60fd224f3e3c
children 8638dd1374bf
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
62
c64bd1bf727d Web application
wizard
parents:
diff changeset
1 package IMPL::Web::QueryHandler::PageFormat;
64
259cd3df6e53 Doc generation
wizard
parents: 63
diff changeset
2 use base qw(IMPL::Web::QueryHandler IMPL::Object::Autofill);
136
f6af119ac741 url routines for templates
wizard
parents: 134
diff changeset
3 use strict;
62
c64bd1bf727d Web application
wizard
parents:
diff changeset
4
c64bd1bf727d Web application
wizard
parents:
diff changeset
5 __PACKAGE__->PassThroughArgs;
c64bd1bf727d Web application
wizard
parents:
diff changeset
6
140
fb896377389f to_json and escape_string functions for the templates
wizard
parents: 137
diff changeset
7 use JSON;
62
c64bd1bf727d Web application
wizard
parents:
diff changeset
8 use IMPL::Class::Property;
77
9d24db321029 Refactoring Web::TT
wizard
parents: 65
diff changeset
9 use IMPL::Web::TT::Document;
136
f6af119ac741 url routines for templates
wizard
parents: 134
diff changeset
10 use Template::Plugin::URL;
97
964587c5183c Added SecureCall to Web QueryHandlers stack
wizard
parents: 77
diff changeset
11 use IMPL::Security::Context;
65
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
12 use File::Spec;
146
60fd224f3e3c fixed cgi parameters processing
wizard
parents: 144
diff changeset
13 use HTML::TreeBuilder;
154
eb478083f72b Url support
wizard
parents: 146
diff changeset
14 use URI;
63
76b878ad6596 Added serialization support for the IMPL::Object::List
wizard
parents: 62
diff changeset
15 use Error qw(:try);
62
c64bd1bf727d Web application
wizard
parents:
diff changeset
16
136
f6af119ac741 url routines for templates
wizard
parents: 134
diff changeset
17 $Template::Plugin::URL::JOINT = '&';
f6af119ac741 url routines for templates
wizard
parents: 134
diff changeset
18
64
259cd3df6e53 Doc generation
wizard
parents: 63
diff changeset
19 BEGIN {
65
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
20 public property templatesCharset => prop_all;
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
21 public property templatesBase => prop_all;
97
964587c5183c Added SecureCall to Web QueryHandlers stack
wizard
parents: 77
diff changeset
22 public property defaultTarget => prop_all;
116
1722ca51537c minor changes.
wizard
parents: 107
diff changeset
23 public property pathinfoPrefix => prop_all;
134
44977efed303 Significant performance optimizations
wizard
parents: 129
diff changeset
24 public property cache => prop_all;
146
60fd224f3e3c fixed cgi parameters processing
wizard
parents: 144
diff changeset
25 public property preprocess => prop_all;
60fd224f3e3c fixed cgi parameters processing
wizard
parents: 144
diff changeset
26 public property formatOutput => prop_all;
64
259cd3df6e53 Doc generation
wizard
parents: 63
diff changeset
27 }
259cd3df6e53 Doc generation
wizard
parents: 63
diff changeset
28
259cd3df6e53 Doc generation
wizard
parents: 63
diff changeset
29 sub CTOR {
259cd3df6e53 Doc generation
wizard
parents: 63
diff changeset
30 my ($this) = @_;
259cd3df6e53 Doc generation
wizard
parents: 63
diff changeset
31
65
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
32 $this->templatesCharset('utf-8') unless $this->templatesCharset;
134
44977efed303 Significant performance optimizations
wizard
parents: 129
diff changeset
33 $this->cache(File::Spec->rel2abs($this->cache)) if $this->cache;
44977efed303 Significant performance optimizations
wizard
parents: 129
diff changeset
34 $this->templatesBase(File::Spec->rel2abs($this->templatesBase)) if $this->templatesBase;
64
259cd3df6e53 Doc generation
wizard
parents: 63
diff changeset
35 }
259cd3df6e53 Doc generation
wizard
parents: 63
diff changeset
36
62
c64bd1bf727d Web application
wizard
parents:
diff changeset
37 sub Process {
c64bd1bf727d Web application
wizard
parents:
diff changeset
38 my ($this,$action,$nextHandler) = @_;
c64bd1bf727d Web application
wizard
parents:
diff changeset
39
146
60fd224f3e3c fixed cgi parameters processing
wizard
parents: 144
diff changeset
40 my $doc = new IMPL::Web::TT::Document(cache => $this->cache, preprocess => $this->preprocess);
62
c64bd1bf727d Web application
wizard
parents:
diff changeset
41
63
76b878ad6596 Added serialization support for the IMPL::Object::List
wizard
parents: 62
diff changeset
42 try {
97
964587c5183c Added SecureCall to Web QueryHandlers stack
wizard
parents: 77
diff changeset
43
964587c5183c Added SecureCall to Web QueryHandlers stack
wizard
parents: 77
diff changeset
44 $this->templatesBase($ENV{DOCUMENT_ROOT}) unless $this->templatesBase;
964587c5183c Added SecureCall to Web QueryHandlers stack
wizard
parents: 77
diff changeset
45
136
f6af119ac741 url routines for templates
wizard
parents: 134
diff changeset
46 my ($requestUri) = split /\?/, $ENV{REQUEST_URI};
f6af119ac741 url routines for templates
wizard
parents: 134
diff changeset
47
f6af119ac741 url routines for templates
wizard
parents: 134
diff changeset
48 my $pathInfo;
f6af119ac741 url routines for templates
wizard
parents: 134
diff changeset
49
f6af119ac741 url routines for templates
wizard
parents: 134
diff changeset
50 if ( $requestUri eq $ENV{SCRIPT_NAME}.$ENV{PATH_INFO} ) {
f6af119ac741 url routines for templates
wizard
parents: 134
diff changeset
51 # CGI with path info
f6af119ac741 url routines for templates
wizard
parents: 134
diff changeset
52 $pathInfo = $ENV{PATH_INFO};
f6af119ac741 url routines for templates
wizard
parents: 134
diff changeset
53 } else {
137
6975cd4973d1 minor fix
wizard
parents: 136
diff changeset
54 die "REQUEST_URI: $requestUri\nPATH_INFO: $ENV{PATH_INFO}" unless $requestUri eq $ENV{PATH_INFO};
136
f6af119ac741 url routines for templates
wizard
parents: 134
diff changeset
55 }
f6af119ac741 url routines for templates
wizard
parents: 134
diff changeset
56
f6af119ac741 url routines for templates
wizard
parents: 134
diff changeset
57 my @root = ('');
f6af119ac741 url routines for templates
wizard
parents: 134
diff changeset
58 my @base;
f6af119ac741 url routines for templates
wizard
parents: 134
diff changeset
59
116
1722ca51537c minor changes.
wizard
parents: 107
diff changeset
60 if (my $rx = $this->pathinfoPrefix) {
136
f6af119ac741 url routines for templates
wizard
parents: 134
diff changeset
61 $requestUri =~ s/^($rx)//;
f6af119ac741 url routines for templates
wizard
parents: 134
diff changeset
62 push @root, grep $_, split /\//, $1 if $1;
116
1722ca51537c minor changes.
wizard
parents: 107
diff changeset
63 }
136
f6af119ac741 url routines for templates
wizard
parents: 134
diff changeset
64
f6af119ac741 url routines for templates
wizard
parents: 134
diff changeset
65 $pathInfo = $requestUri unless defined $pathInfo;
f6af119ac741 url routines for templates
wizard
parents: 134
diff changeset
66
f6af119ac741 url routines for templates
wizard
parents: 134
diff changeset
67 @base = grep $_, split /\//, ($pathInfo ? substr $requestUri,0, -length($pathInfo) : $requestUri);
f6af119ac741 url routines for templates
wizard
parents: 134
diff changeset
68
116
1722ca51537c minor changes.
wizard
parents: 107
diff changeset
69 local $ENV{PATH_INFO} = $pathInfo || $this->defaultTarget;
97
964587c5183c Added SecureCall to Web QueryHandlers stack
wizard
parents: 77
diff changeset
70
127
0dce0470a3d8 In the IMPL::Web::ControllerUnit added the ability to notify a form about a wrong data from a transaction
wizard
parents: 121
diff changeset
71 my @path = grep $_, split /\//, ($ENV{PATH_INFO} || '') or die new IMPL::Exception("PATH_INFO is empty and no defaultTarget specified" );
0dce0470a3d8 In the IMPL::Web::ControllerUnit added the ability to notify a form about a wrong data from a transaction
wizard
parents: 121
diff changeset
72
0dce0470a3d8 In the IMPL::Web::ControllerUnit added the ability to notify a form about a wrong data from a transaction
wizard
parents: 121
diff changeset
73 my @pathContainer = @path;
0dce0470a3d8 In the IMPL::Web::ControllerUnit added the ability to notify a form about a wrong data from a transaction
wizard
parents: 121
diff changeset
74 pop @pathContainer;
65
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
75
154
eb478083f72b Url support
wizard
parents: 146
diff changeset
76 $doc->LoadFile (
eb478083f72b Url support
wizard
parents: 146
diff changeset
77 File::Spec->catfile($this->templatesBase,@path),
eb478083f72b Url support
wizard
parents: 146
diff changeset
78 $this->templatesCharset,
eb478083f72b Url support
wizard
parents: 146
diff changeset
79 $this->templatesBase,
eb478083f72b Url support
wizard
parents: 146
diff changeset
80 {
eb478083f72b Url support
wizard
parents: 146
diff changeset
81 result => scalar($nextHandler->()),
eb478083f72b Url support
wizard
parents: 146
diff changeset
82 action => $action,
eb478083f72b Url support
wizard
parents: 146
diff changeset
83 app => $action->application,
140
fb896377389f to_json and escape_string functions for the templates
wizard
parents: 137
diff changeset
84
154
eb478083f72b Url support
wizard
parents: 146
diff changeset
85 absoluteUrl => sub { new URI(join ('/', @root, $_[0]) ) },
eb478083f72b Url support
wizard
parents: 146
diff changeset
86 baseUrl => sub { new URI (join ('/', @root, @base, $_[0]) ) },
eb478083f72b Url support
wizard
parents: 146
diff changeset
87 relativeUrl => sub { new URI(join ('/', @root, @base, @pathContainer,$_[0]) ) },
140
fb896377389f to_json and escape_string functions for the templates
wizard
parents: 137
diff changeset
88
154
eb478083f72b Url support
wizard
parents: 146
diff changeset
89 user => IMPL::Security::Context->current->principal,
eb478083f72b Url support
wizard
parents: 146
diff changeset
90 session => IMPL::Security::Context->current,
140
fb896377389f to_json and escape_string functions for the templates
wizard
parents: 137
diff changeset
91
154
eb478083f72b Url support
wizard
parents: 146
diff changeset
92 to_json => \&to_json,
eb478083f72b Url support
wizard
parents: 146
diff changeset
93 escape_string => sub { $_[0] =~ s/"/"/g; $_[0] },
eb478083f72b Url support
wizard
parents: 146
diff changeset
94 }
eb478083f72b Url support
wizard
parents: 146
diff changeset
95 );
63
76b878ad6596 Added serialization support for the IMPL::Object::List
wizard
parents: 62
diff changeset
96
76b878ad6596 Added serialization support for the IMPL::Object::List
wizard
parents: 62
diff changeset
97 $action->response->contentType('text/html');
76b878ad6596 Added serialization support for the IMPL::Object::List
wizard
parents: 62
diff changeset
98 my $hOut = $action->response->streamBody;
146
60fd224f3e3c fixed cgi parameters processing
wizard
parents: 144
diff changeset
99 if ($this->formatOutput == 1) {
60fd224f3e3c fixed cgi parameters processing
wizard
parents: 144
diff changeset
100 my $tree = new HTML::TreeBuilder();
60fd224f3e3c fixed cgi parameters processing
wizard
parents: 144
diff changeset
101 try {
60fd224f3e3c fixed cgi parameters processing
wizard
parents: 144
diff changeset
102 $tree->parse_content($doc->Render());
60fd224f3e3c fixed cgi parameters processing
wizard
parents: 144
diff changeset
103 print $hOut $tree->as_HTML('<>&'," ",{});
60fd224f3e3c fixed cgi parameters processing
wizard
parents: 144
diff changeset
104 } finally {
60fd224f3e3c fixed cgi parameters processing
wizard
parents: 144
diff changeset
105 $tree->delete;
60fd224f3e3c fixed cgi parameters processing
wizard
parents: 144
diff changeset
106 };
60fd224f3e3c fixed cgi parameters processing
wizard
parents: 144
diff changeset
107 } elsif ($this->formatOutput() == 2 ) {
60fd224f3e3c fixed cgi parameters processing
wizard
parents: 144
diff changeset
108 (my $data = $doc->Render()) =~ s/\s+/ /g;
60fd224f3e3c fixed cgi parameters processing
wizard
parents: 144
diff changeset
109 print $hOut $data;
60fd224f3e3c fixed cgi parameters processing
wizard
parents: 144
diff changeset
110 } else {
60fd224f3e3c fixed cgi parameters processing
wizard
parents: 144
diff changeset
111 print $hOut $doc->Render();
60fd224f3e3c fixed cgi parameters processing
wizard
parents: 144
diff changeset
112 }
63
76b878ad6596 Added serialization support for the IMPL::Object::List
wizard
parents: 62
diff changeset
113 } finally {
76b878ad6596 Added serialization support for the IMPL::Object::List
wizard
parents: 62
diff changeset
114 $doc->Dispose;
76b878ad6596 Added serialization support for the IMPL::Object::List
wizard
parents: 62
diff changeset
115 };
62
c64bd1bf727d Web application
wizard
parents:
diff changeset
116 }
c64bd1bf727d Web application
wizard
parents:
diff changeset
117
154
eb478083f72b Url support
wizard
parents: 146
diff changeset
118 sub URI::_query::new_params {
eb478083f72b Url support
wizard
parents: 146
diff changeset
119 my ($this,$params) = @_;
eb478083f72b Url support
wizard
parents: 146
diff changeset
120
eb478083f72b Url support
wizard
parents: 146
diff changeset
121 my $clone = $this->clone;
eb478083f72b Url support
wizard
parents: 146
diff changeset
122 if (ref $params eq 'HASH' ) {
eb478083f72b Url support
wizard
parents: 146
diff changeset
123 my %newParams = ($clone->query_form , %$params);
eb478083f72b Url support
wizard
parents: 146
diff changeset
124 $clone->query_form(map { $_, $newParams{$_} } sort keys %newParams );
eb478083f72b Url support
wizard
parents: 146
diff changeset
125 }
eb478083f72b Url support
wizard
parents: 146
diff changeset
126 return $clone;
eb478083f72b Url support
wizard
parents: 146
diff changeset
127 }
eb478083f72b Url support
wizard
parents: 146
diff changeset
128
65
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
129 1;
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
130
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
131 __END__
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
132
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
133 =pod
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
134
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
135 =head1 NAME
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
136
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
137 C<IMPL::Web::QueryHandler::PageFormat> - Выдача результатов в виде HTML страницы, построенной из шаблона.
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
138
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
139 =head1 SYNOPSIS
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
140
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
141 В файле конфигурации приложения
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
142
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
143 =begin code xml
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
144
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
145 <handlersQuery type="IMPL::Object::List">
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
146 <item type="IMPL::Web::QueryHandler::PageFormat">
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
147 <charsetTemplates>utf-8</charsetTemplates>
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
148 </item>
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
149 </handlersQuery>
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
150
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
151 =end code xml
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
152
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
153 Программно
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
154
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
155 =begin code
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
156
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
157 my $app = new IMPL::Web::Application();
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
158 $app->handlersQuery->Add(
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
159 new IMPL::Web::QueryHandler::PageFormat( charsetTemplates=> 'utf-8' );
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
160 );
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
161
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
162 =end
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
163
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
164 =head1 DESCRIPTION
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
165
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
166 Обработчик запроса для веб приложения. Загружает шаблон, путь к котрому берется
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
167 из C<ENV{PATH_INFO}> относительно пути из свойства C<templatesBase>.
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
168
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
169 Наследуется от C<IMPL::Web::QueryHandler> для реализации функционала
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
170 обработчика запроса и переопределяет метод C<Process>.
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
171
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
172 C<Serializable>
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
173
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
174 =head1 MEMBERS
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
175
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
176 =over
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
177
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
178 =item C<CTOR(%props)>
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
179
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
180 Создает новый экземпляр и заполняет свойства.
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
181
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
182 =item C<[get,set] templatesCharset>
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
183
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
184 Кодировка шаблонов. По умолчанию utf-8.
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
185
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
186 =item C<[get,set] templatesBase>
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
187
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
188 Каталог относительно которого ищется шаблон.
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
189
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
190 =item C<[override] Process($action,$nextHandler)>
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
191
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
192 Метод, переопределяющий C<IMPL::Web::QueryHandler->Process> и которому передается управление
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
193 для выполнения действий.
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
194
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
195 =back
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
196
2840c4c85db8 Application configuration improvements
wizard
parents: 64
diff changeset
197 =cut