our
@ISA
=
qw(Apache2::Request)
;
sub
new {
my
(
$class
,
@args
) =
@_
;
return
bless
{
r
=> Apache2::Request->new(
@args
),
__cap_params
=> {},
__cap_deleted
=> 0,
},
$class
;
}
sub
param {
my
(
$self
,
@args
) =
@_
;
my
%params
= %{
$self
->{__cap_params}};
unless
(
%params
or
$self
->{__cap_deleted} ) {
foreach
my
$k
(
$self
->SUPER::param()) {
my
@values
=
$self
->SUPER::param(
$k
);
$params
{
$k
} =
@values
> 1 ? \
@values
:
$values
[0];
}
$self
->{__cap_params} = \
%params
;
}
if
(
@args
> 1) {
$params
{
$args
[0]} =
$args
[1];
return
$self
->args->{
$args
[0]} =
$args
[1];
}
elsif
(
@args
) {
my
@result
=
ref
$params
{
$args
[0]} ? @{
$params
{
$args
[0]}} :
$params
{
$args
[0]};
return
wantarray
?
@result
:
$result
[0];
}
else
{
return
keys
%params
;
}
}
sub
delete
{
my
(
$self
,
@args
) =
@_
;
delete
$self
->{__cap_params}->{
$_
}
foreach
(
@args
);
$self
->{__cap_deleted} = 1;
}
sub
delete_all {
my
$self
=
shift
;
$self
->{__cap_params} = {};
$self
->{__cap_deleted} = 1;
}
sub
cookie {
my
(
$self
,
@args
) =
@_
;
if
(
$#args
== 0) {
my
$cookies
= Apache2::Cookie->fetch();
if
(
$cookies
&&
$cookies
->{
$args
[0]} ) {
return
$cookies
->{
$args
[0]}->value;
}
else
{
return
;
}
}
else
{
return
Apache2::Cookie->new(
$self
,
@args
);
}
}
sub
Dump {
my
$self
=
shift
;
my
(
$param
,
$value
,
@result
);
return
'<ul></ul>'
unless
$self
->param;
push
(
@result
,
"<ul>"
);
foreach
$param
(
$self
->param) {
my
$name
=
$self
->escapeHTML(
$param
);
push
(
@result
,
"<li><strong>$name</strong></li>"
);
push
(
@result
,
"<ul>"
);
foreach
$value
(
$self
->param(
$param
)) {
$value
=
$self
->escapeHTML(
$value
);
push
(
@result
,
"<li>$value</li>"
);
}
push
(
@result
,
"</ul>"
);
}
push
(
@result
,
"</ul>"
);
return
join
(
"\n"
,
@result
);
}
sub
Vars {
my
$self
=
shift
;
my
%vars
= %{
$self
->{__cap_params}};
return
wantarray
?
%vars
: \
%vars
;
}
sub
escapeHTML {
my
(
$self
,
$value
) =
@_
;
$value
= HTML::GenerateUtil::escape_html(
$value
,
(
$HTML::GenerateUtil::EH_LFTOBR
|
$HTML::GenerateUtil::EH_SPTONBSP
|
$HTML::GenerateUtil::EH_LEAVEKNOWN
)
);
return
$value
;
}
sub
upload {
my
(
$self
,
$file
) =
@_
;
if
(
$file
) {
my
$upload
=
$self
->SUPER::upload(
$file
);
if
(
$upload
) {
return
$upload
->fh();
}
else
{
return
;
}
}
else
{
my
@files
=
$self
->SUPER::upload();
@files
=
map
{
$self
->SUPER::upload(
$_
)->fh() }
@files
;
return
@files
;
}
}
1;