############################################################################# sub getPage { my $session = shift; # The session object my $asset = shift; # The asset object my $page = shift; # The page subroutine my $paramsRef = shift; # A hashref of params my $optionsRef = shift; # A hashref of options # args => Array ref of args to the page sub # user => A user object to set # userId => A user ID to set, "user" takes # precedence #!!! GETTING COOKIES WITH WebGUI::PseudoRequest DOESNT WORK, SO WE USE # THIS AS A WORKAROUND $session->http->{_http}->{noHeader} = 1; # Open a buffer as a filehandle my $buffer = "";# = IO::String->new; open my $output, ">", \$buffer or die "Couldn't open memory buffer as filehandle: $@"; $session->output->setHandle($output); #$session->output->setHandle($buffer); # Set the appropriate user my $oldUser = $session->user; if ($optionsRef->{user}) { $session->user({ user => $optionsRef->{user} }); } elsif ($optionsRef->{userId}) { $session->user({ userId => $optionsRef->{userId} }); } $session->user->uncache; # Create a new request object my $oldRequest = $session->request; my $request = WebGUI::PseudoRequest->new; $request->setup_param($paramsRef); $session->{_request} = $request; # Fill the buffer my $returnedContent = $asset->$page(@{$optionsRef->{args}}); if ($returnedContent && $returnedContent ne "chunked") { print $output $returnedContent; } close $output; # Restore the former user and request $session->user({ user => $oldUser }); $session->{_request} = $oldRequest; #!!! RESTORE THE WORKAROUND delete $session->http->{_http}->{noHeader}; # Return the page's output return $buffer; }