#!/usr/bin/perl
package RVL::Request;
##LICENSE##
=head1 NAME
RVL::Request - Loads Request driver, provides a number of filtering methods.
=head1 SYNOPSIS
=head1 DESCRIPTION
=head1 METHODS
=cut
use strict 'vars';
use warnings;
use IO::Interactive qw(is_interactive interactive busy);
use CGI ':standard';
use Class::Std::Utils;
{
# class attribute
my ($props);
my ($type);
sub new {
my ($class, $opt) = @_;
my ($this) = bless anon_scalar(), $class;
# ตรวจหา Request driver
if ($this->isEmpty()) {
my ($ident) = ident($this);
$type->{$ident} = $this->getRequestType();
require "RVL/Request/$type->{$ident}.pm";
my ($class) = "RVL::Request::$type->{$ident}";
$this = $class->new();
}
return $this;
}
=head2 singleton()
Returns a singleton Request instance.
=cut
sub singleton {
my ($class) = __PACKAGE__;
if (!defined $RVL::INSTANCE{$class}) {
$RVL::INSTANCE{$class} = $class->new();
}
return $RVL::INSTANCE{$class}
}
=head2 get($key, $allowTags, $notRemoveTag)
Retrieves values from Request object.
=item *
$key <Srting> ชื่อคีย์ของข้อมูลที่เข้ามา
=item *
$allowTags <0|1> ต้องการลบ HTML ในข้อมูลที่เข้ามาหรือไม่ มีค่าเป็น 0 หรือ 1 ค่าเบื้องต้นเป็น 0
=item *
$notRemoveTag <Srting> กำหนดหากไม่ต้องการลบ HTML Tag
simple 1: get request key 'name' and not allow HTML Tag
$req->get('name');
simple 2: get request key 'name' and allow HTML Tag
$req->get('name', 1);
simple 3: get request key 'name' and allow HTML Tag <b> <p> only
$req->get('name', 0, '<b><p>');
=cut
sub get {
my ($this) = shift;
my ($key, $allowTags, $notRemoveTags) = @_;
my ($copy);
if (defined $this->{append}->{$key}) {
$copy = $this->{append}->{$key};
} else {
#$copy = param($key);
my @read = param($key);
my $num = scalar @read;
if($num > 1){
$copy = \@read;
}else{
$copy = (defined $read[0])? $read[0] : param($key);
}
}
return undef if (!$copy);
if (!$allowTags) {
$copy = RVL::String::cleanHTMLTag($copy, $notRemoveTags);
}
return $copy;
}
sub set{
my ($this) = shift;
my ($key, $value) = @_;
append(-name => $key, -value => $value);
$this->{append}->{$key} = $value;
RVL::logMessage("Set append $key = $value", __CONSTANT__::RVL_LOG_DEBUG);
}
=help
Used internally to determine request type before Request strategy instantiated.
=cut
sub getRequestType {
my ($this) = shift;
if ($this->_isAjax()) {
return 'Ajax';
} elsif ($this->_isBrowser()) {
return 'Browser';
} else {
return 'Cli';
}
}
sub _isAjax {
my ($this) = shift;
return (defined $ENV{'HTTP_X_REQUESTED_WITH'} && $ENV{'HTTP_X_REQUESTED_WITH'} eq 'XMLHttpRequest')
? 1
: 0;
}
sub _isBrowser {
my ($this) = shift;
#my $rvlScriptPath = __CONSTANT__::RVL_WWW_PATH . '/index.pl';
my $isBrowser = 0;
return (defined $ENV{'HTTP_USER_AGENT'}) ? 1 : 0;
# if (defined($ENV{'HTTP_USER_AGENT'}) && ($ENV{'SCRIPT_FILENAME'} =~ m/$rvlScriptPath/) ) {
# #call from RVLFramework
# $isBrowser = 1;
# }
# return $isBrowser;
}
sub isEmpty {
my ($this) = shift;
my ($ident) = ident($this);
if (!defined $props) {
return 1;
} else {
return 0;
}
}
sub getModuleName {
my ($this) = shift;
my ($ret);
if (defined $this->get('moduleName')) {
$ret = $this->get('moduleName');
} else {
$ret = 'default';
}
return $ret;
}
sub getManagerName {
my ($this) = shift;
my ($ret);
if (defined $this->get('managerName')) {
$ret = $this->get('managerName');
} else {
$ret = 'default';
}
return $ret;
}
sub getActionName {
my ($this) = shift;
my ($ret);
if ( defined $this->get('action')) {
$ret = $this->get('action');
} else {
$ret = 'default';
}
return $ret;
}
}
1;
Copyright 2K16 - 2K18 Indonesian Hacker Rulez