ASP4

 view release on metacpan or  search on metacpan

lib/ASP4/Response.pm  view on Meta::CPAN

}# end AddHeader()


sub SetHeader
{
  my ($s, $name, $value) = @_;
  
  $s->context->headers_out->header( $name => $value );
}# end AddHeader()


sub Headers
{
  my $s = shift;
  
  my $out = $s->context->headers_out;
  map {{
    $_ => $out->{$_}
  }} keys %$out;
}# end Headers()


sub Redirect
{
  my ($s, $url) = @_;
  
  $s->Clear;
  $s->Status( 301 );
  $s->Expires( "-24H" )
    unless $s->Expires;
  $s->SetHeader( Location => $url );
  $s->End;
  return $s->Status;
}# end Redirect()


sub Declined { -1 }


sub Include
{
  my ($s, $file, $args) = @_;
  
  $s->Write( $s->_subrequest( $file, $args ) );
}# end Include()


sub TrapInclude
{
  my ($s, $file, $args) = @_;
  
  return $s->_subrequest( $file, $args );
}# end TrapInclude()


sub _subrequest
{
  my ($s, $file, $args) = @_;
  
  my $context = ASP4::HTTPContext->new( is_subrequest => 1 );
  my $original_r = $s->context->r;
  my $root = $s->context->config->web->www_root;
  my $cgi = $s->context->cgi;
  (my $uri = $file) =~ s/^\Q$root\E//;
  my $r = ASP4::Mock::RequestRec->new(
    uri   => $uri,
    args  => $original_r->args,
  );
  SCOPE: {
    local $ASP4::HTTPContext::_instance = $context;
    local $ENV{SCRIPT_NAME} = $uri;
    local $ENV{SCRIPT_FILENAME} = $file;
    $context->setup_request( $r, $cgi );
    $context->execute( $args, 1 );
  };
  
  return $context->r->buffer;
}# end _subrequest()


#sub _subrequest
#{
#  my ($s, $file, $args) = @_;
#  
#  $s->context->add_buffer();
#  my $original_r = $s->context->r;
#  my $root = $s->context->config->web->www_root;
#  (my $uri = $file) =~ s/^\Q$root\E//;
#  my $r = ASP4::Mock::RequestRec->new(
#    uri   => $uri,
#    args  => $original_r->args,
#  );
#  local $ENV{SCRIPT_NAME} = $uri;
#  local $ENV{SCRIPT_FILENAME} = $file;
#  my $original_status = $s->Status();
#  $s->context->setup_request( $r, $s->context->cgi );
#  $s->context->execute( $args, 1 );
#  $s->Flush;
#  $s->Status( $original_status );
#  my $buffer = $s->context->purge_buffer();
#  $s->context->{r} = $original_r;
#  $s->context->did_end( 0 );
#  return $r->buffer;
#}# end _subrequest()


sub DESTROY
{
  my $s = shift;
  undef(%$s);
}# end DESTROY()

1;# return true:

=pod

=head1 NAME

ASP4::Response - Interface to the outgoing HTTP response

=head1 SYNOPSIS

  $Response->ContentType("text/html");
  
  $Response->Status( 200 );
  
  $Response->Clear();
  
  $Response->Flush();

  $Response->Write("Hello, World!");
  
  $Response->AddHeader( 'x-awesomeness' => '100%' );
  
  $Response->SetHeader( 'x-velocity'  => '100MPH' );
  
  # Expires in the future:
  $Response->Expires( '30M' );  # 30 minutes from now
  $Response->Expires( '30H' );  # 30 hours from  now
  $Response->Expires( '30D' );  # 30 days from now
  
  # Expires in the past:
  $Response->Expires( '-30M' ); # 30 minutes ago
  $Response->Expires( '-30H' ); # 30 hours ago
  $Response->Expires( '-30D' ); # 30 days ago
  
  $Response->SetCookie(
    # Required parameters:
    name    => "customer-email",
    value   => $Form->{email},
    
    # The rest are optional:
    expires => '30D', # 30 days
    path    => '/',
    domain  => '.mysite.com',
  );
  
  $Response->Redirect( "/path/to/page.asp" );
  
  $Response->Include( $Server->MapPath("/my/include.asp") );
  $Response->Include( $Server->MapPath("/my/include.asp"), \%args );



( run in 1.710 second using v1.01-cache-2.11-cpan-39bf76dae61 )