use CGI qw ( -utf8 );
use C4::Auth qw( check_api_auth );
-use C4::Output qw( :ajax );
+use C4::Output qw( output_with_http_headers );
use C4::Output::JSONStream;
use JSON;
-our $debug;
+our ( $query, $cookie );
-BEGIN {
- $debug = $ENV{DEBUG} || 0;
-}
+sub _output {
+ my ( $response, $status ) = @_;
+ binmode STDOUT, ':encoding(UTF-8)';
-our ( $query, $cookie );
+ if ( $query->param( 'callback' ) ) {
+ output_with_http_headers $query, $cookie, $query->param( 'callback' ) . '(' . $response->output . ');', 'js';
+ } else {
+ output_with_http_headers $query, $cookie, $response->output, 'json', $status;
+ }
+}
=head1 METHODS
sub init {
my ( $class, %needed_flags ) = @_;
- our $query = new CGI;
+ our $query = CGI->new;
my ( $status, $cookie_, $sessionID ) = check_api_auth( $query, \%needed_flags );
$class->return_error( 'auth', $status ) if ( $status ne 'ok' );
- return ( $query, new C4::Output::JSONStream );
+ return ( $query, C4::Output::JSONStream->new );
}
=head2 return_error
sub return_error {
my ( $class, $type, $error, %flags ) = @_;
- my $response = new C4::Output::JSONStream;
+ my $response = C4::Output::JSONStream->new;
$response->param( message => $error ) if ( $error );
$response->param( type => $type, %flags );
- output_with_http_headers $query, $cookie, $response->output, 'json', '400 Bad Request';
+ _output( $response, '400 Bad Request' );
exit;
}
sub return_multi {
my ( $class, $responses, @flags ) = @_;
- my $response = new C4::Output::JSONStream;
+ my $response = C4::Output::JSONStream->new;
if ( !@$responses ) {
$class->return_success( $response );
}
$response->param( 'multi' => JSON::true, responses => \@responses_formatted, @flags );
- output_with_http_headers $query, $cookie, $response->output, 'json', '207 Multi-Status';
+ _output( $response, '207 Multi-Status' );
}
exit;
sub return_success {
my ( $class, $response ) = @_;
- output_with_http_headers $query, $cookie, $response->output, 'json';
+ _output( $response );
}
=head2 require_params
for my $param ( @params ) {
$class->return_error( 'params', "Missing '$param'" ) if ( !defined( $query->param( $param ) ) );
- push @values, $query->param( $param );
+ push @values, scalar $query->param( $param ); # will we ever need multi_param here?
}
return @values;
next ROUTE if ( !defined( $query->param ( $param ) ) );
}
- $debug and warn "Using $path";
$handler->( @match );
return;
}