use CGI;
our $VERSION = '0.02';
use Moops;
class Apache2::RequestData
{
has request_record =>
(
is => 'ro',
isa => Object,
);
has params =>
(
is => 'rw',
isa => HashRef,
default => sub { {} },
);
#########################################################################
#
# the constructor wrapper
#
# parameters:
# an Apache2::RequestRec or a query string
#
# returns:
# the hash ref with the constructor paramaters
#
#########################################################################
around BUILDARGS
{
return $self->$next(
@_ == 1 ?
ref($_[0]) eq 'HASH' ?
$_[0] :
ref($_[0]) ?
{ request_record => $_[0] } :
{ params => { split(/[=&]/, $_[0]) } } :
{ @_ }
);
}
#########################################################################
#
# the constructor
#
# parameters:
# an Apache::RequestRec or a query string
#
# returns:
# the new created object or undef
#
#########################################################################
method BUILD($args = {})
{
my $params = $self->params;
unless ($params && keys %$params)
{
my $post_params = '';
$self->request_record->read($post_params, $self->request_record->headers_in->{'Content-Length'})
if $self->request_record->headers_in->{'Content-Length'} > 0;
my $get_params = $self->request_record->args();
$params = $post_params;
$params .= '&' if $params && $get_params;
$params .= $get_params if $get_params;
# unescape the params if necessary
$params =~ s/\%([a-fA-F0-9][a-fA-F0-9])/pack('C',hex($1))/eg;
my $cgi = CGI->new($params);
$self->params({ $cgi->Vars() }); # CGI::Vars returns a tied hash
}
return $self;
}
#########################################################################
#
# retrieve all params as hash
#
# parameters:
# nothing
#
# returns:
# a reference to a hash with all params and their values
#
# note:
# alias for the inspector method params
#
#########################################################################
method param_hash
{
return $self->params;
}
#########################################################################
#
# the destructor
#
# parameters:
# none
#
# returns:
# nothing: or what do you expect
#
#########################################################################
sub DESTROY
{
}
}
__END__
=pod
=encoding UTF-8
=head1 NAME
Apache2::RequestData - collects all query and post parameters in a hash ref
=head1 VERSION
version 0.1
=head1 SYNOPSIS
Handle all Apache2 mod_perl parameters in one hash ref regardless if they
are query or post parameters.
=head1 USAGE
use Apache2::RequestData;
# initialize from Apache2::RequestRec or Apache2::Dummy::RequestRec
my $rd1 = Apache2::RequestData->new($r)
my $params1 = $rd1->params;
# access params
$params1->{bla}...
# initialize from query string
my $rd2 = Apache2::RequestData->new('bla=blu&bli=blo');
# access params
say $rd2->params->{bli}...
=head1 DESCRIPTION
B<Apache2::RequestData> just collects all query and post parameters of an Apache2 request rec into one hash ref.
=head1 AUTHOR
Jens Fischer <jeff@lipsia.de>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2021 by Jens Fischer.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut