package OpenILS::WWW::SuperCat;
use strict; use warnings;
use Apache2 ();
use Apache2::Log;
use Apache2::Const -compile => qw(OK REDIRECT DECLINED :log);
use APR::Const -compile => qw(:error SUCCESS);
use Apache2::RequestRec ();
use Apache2::RequestIO ();
use Apache2::RequestUtil;
use CGI;
use Data::Dumper;
use OpenSRF::EX qw(:try);
use OpenSRF::System;
use OpenSRF::AppSession;
use XML::LibXML;
use OpenILS::Utils::Fieldmapper;
# set the bootstrap config when this module is loaded
my ($bootstrap, $supercat);
sub import {
my $self = shift;
$bootstrap = shift;
}
sub child_init {
OpenSRF::System->bootstrap_client( config_file => $bootstrap );
$supercat = OpenSRF::AppSession->create('open-ils.supercat');
}
sub oisbn {
my $apache = shift;
return Apache2::Const::DECLINED if (-e $apache->filename);
(my $isbn = $apache->path_info) =~ s{^.*?([^/]+)$}{$1}o;
my $list = $supercat
->request("open-ils.supercat.oisbn", $isbn)
->gather(1);
print "Content-type: application/xml; charset=utf-8\n\n";
print "\n";
unless (exists $$list{metarecord}) {
print '';
return Apache2::Const::OK;
}
print "\n";
for ( keys %{ $$list{record_list} } ) {
(my $o = $$list{record_list}{$_}) =~s/^(\S+).*?$/$1/o;
print " $o\n"
}
print "";
return Apache2::Const::OK;
}
sub unapi {
my $apache = shift;
return Apache2::Const::DECLINED if (-e $apache->filename);
print "Content-type: application/xml; charset=utf-8\n";
my $cgi = new CGI;
my $uri = $cgi->param('uri') || '';
my $base = $cgi->url;
my $format = $cgi->param('format');
my ($id,$type,$command) = ('','','');
if (!$format) {
if ($uri =~ m{^info:oils/([^\/]+)/(\d+)}o) {
$id = $2;
$type = 'record';
$type = 'metarecord' if ($1 =~ /^m/o);
my $list = $supercat
->request("open-ils.supercat.$type.formats")
->gather(1);
print "\n";
my $body =
"
$uri
opac
text/html
".
join('',
map { "
$_
application/xml
"
} @$list
).
'';
$apache->custom_response( 300, $body);
return 300;
} else {
my $list = $supercat
->request("open-ils.supercat.record.formats")
->gather(1);
push @$list,
@{ $supercat
->request("open-ils.supercat.metarecord.formats")
->gather(1);
};
my %hash = map { ($_ => $_) } @$list;
$list = [ sort keys %hash ];
print "\n
opac
text/html
".
join('',
map {
"$_text/xml"
} @$list
).'';
return Apache2::Const::OK;
}
}
if ($uri =~ m{^info:oils/([^\/]+)/(\d+)}o) {
$id = $2;
$type = 'record';
$type = 'metarecord' if ($1 =~ /^m/o);
$command = 'retrieve';
}
if ($format eq 'opac') {
print "Location: $base/../../en-US/skin/default/xml/rresult.xml?m=$id\n\n"
if ($type eq 'metarecord');
print "Location: $base/../../en-US/skin/default/xml/rdetail.xml?r=$id\n\n"
if ($type eq 'record');
return 302;
}
print "\n" . $supercat->request("open-ils.supercat.$type.$format.$command",$id)->gather(1);
return Apache2::Const::OK;
}
sub supercat {
my $apache = shift;
return Apache2::Const::DECLINED if (-e $apache->filename);
my $path = $apache->path_info;
my ($id,$type,$format,$command) = reverse split '/', $path;
print "Content-type: application/xml; charset=utf-8\n";
if ( $path =~ m{^/formats(?:/([^\/]+))?$}o ) {
if ($1) {
my $list = $supercat
->request("open-ils.supercat.$1.formats")
->gather(1);
print "\n
opac
text/html".
join('',
map {
"$_text/xml"
} @$list
).'';
return Apache2::Const::OK;
}
my $list = $supercat
->request("open-ils.supercat.record.formats")
->gather(1);
push @$list,
@{ $supercat
->request("open-ils.supercat.metarecord.formats")
->gather(1);
};
my %hash = map { ($_ => $_) } @$list;
$list = [ sort keys %hash ];
print "\n
opac
text/html
".
join('',
map {
"$_text/xml"
} @$list
).'';
return Apache2::Const::OK;
}
print "\n" . $supercat->request("open-ils.supercat.$type.$format.$command",$id)->gather(1);
return Apache2::Const::OK;
}
1;