From f4058c42356f3027c6aff310482b4246560b031e Mon Sep 17 00:00:00 2001 From: dbs Date: Thu, 3 Mar 2011 05:43:25 +0000 Subject: [PATCH] Whitespace consistency for O:WWW:SuperCat.pm git-svn-id: svn://svn.open-ils.org/ILS/trunk@19563 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- .../src/perlmods/lib/OpenILS/WWW/SuperCat.pm | 2970 ++++++++--------- 1 file changed, 1485 insertions(+), 1485 deletions(-) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/WWW/SuperCat.pm b/Open-ILS/src/perlmods/lib/OpenILS/WWW/SuperCat.pm index ae202087a0..f473ee82eb 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/WWW/SuperCat.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/WWW/SuperCat.pm @@ -37,115 +37,115 @@ my $U = 'OpenILS::Application::AppUtils'; my ($bootstrap, $supercat, $actor, $parser, $search, $xslt, $cn_browse_xslt, %browse_types); $browse_types{call_number}{xml} = sub { - my $tree = shift; + my $tree = shift; - my $year = (gmtime())[5] + 1900; - my $content = ''; + my $year = (gmtime())[5] + 1900; + my $content = ''; - $content .= "\n"; + $content .= "\n"; - for my $cn (@$tree) { - (my $cn_class = $cn->class_name) =~ s/::/-/gso; - $cn_class =~ s/Fieldmapper-//gso; + for my $cn (@$tree) { + (my $cn_class = $cn->class_name) =~ s/::/-/gso; + $cn_class =~ s/Fieldmapper-//gso; - my $cn_tag = "tag:open-ils.org,$year:$cn_class/".$cn->id; - my $cn_lib = $cn->owning_lib->shortname; - my $cn_label = $cn->label; + my $cn_tag = "tag:open-ils.org,$year:$cn_class/".$cn->id; + my $cn_lib = $cn->owning_lib->shortname; + my $cn_label = $cn->label; - $cn_label =~ s/\n//gos; - $cn_label =~ s/&/&/go; - $cn_label =~ s/'/'/go; - $cn_label =~ s//>/go; + $cn_label =~ s/\n//gos; + $cn_label =~ s/&/&/go; + $cn_label =~ s/'/'/go; + $cn_label =~ s//>/go; - (my $ou_class = $cn->owning_lib->class_name) =~ s/::/-/gso; - $ou_class =~ s/Fieldmapper-//gso; + (my $ou_class = $cn->owning_lib->class_name) =~ s/::/-/gso; + $ou_class =~ s/Fieldmapper-//gso; - my $ou_tag = "tag:open-ils.org,$year:$ou_class/".$cn->owning_lib->id; - my $ou_name = $cn->owning_lib->name; + my $ou_tag = "tag:open-ils.org,$year:$ou_class/".$cn->owning_lib->id; + my $ou_name = $cn->owning_lib->name; - $ou_name =~ s/\n//gos; - $ou_name =~ s/'/'/go; + $ou_name =~ s/\n//gos; + $ou_name =~ s/'/'/go; - (my $rec_class = $cn->record->class_name) =~ s/::/-/gso; - $rec_class =~ s/Fieldmapper-//gso; + (my $rec_class = $cn->record->class_name) =~ s/::/-/gso; + $rec_class =~ s/Fieldmapper-//gso; - my $rec_tag = "tag:open-ils.org,$year:$rec_class/".$cn->record->id.'/'.$cn->owning_lib->shortname; + my $rec_tag = "tag:open-ils.org,$year:$rec_class/".$cn->record->id.'/'.$cn->owning_lib->shortname; - $content .= "\n"; - $content .= "\n"; + $content .= "\n"; + $content .= "\n"; - my $r_doc = $parser->parse_string($cn->record->marc); - $r_doc->documentElement->setAttribute( id => $rec_tag ); - $content .= $U->entityize($r_doc->documentElement->toString); + my $r_doc = $parser->parse_string($cn->record->marc); + $r_doc->documentElement->setAttribute( id => $rec_tag ); + $content .= $U->entityize($r_doc->documentElement->toString); - $content .= "\n"; - } + $content .= "\n"; + } - $content .= "\n"; - return ("Content-type: application/xml\n\n",$content); + $content .= "\n"; + return ("Content-type: application/xml\n\n",$content); }; $browse_types{call_number}{html} = sub { - my $tree = shift; - my $p = shift; - my $n = shift; - - if (!$cn_browse_xslt) { - $cn_browse_xslt = $parser->parse_file( - OpenSRF::Utils::SettingsClient - ->new - ->config_value( dirs => 'xsl' ). - "/CNBrowse2HTML.xsl" - ); - $cn_browse_xslt = $xslt->parse_stylesheet( $cn_browse_xslt ); - } - - my (undef,$xml) = $browse_types{call_number}{xml}->($tree); - - return ( - "Content-type: text/html\n\n", - $U->entityize( - $cn_browse_xslt->transform( - $parser->parse_string( $xml ), - 'prev' => "'$p'", - 'next' => "'$n'" - )->toString(1) - ) - ); -}; - -sub import { - my $self = shift; - $bootstrap = shift; -} - - -sub child_init { - OpenSRF::System->bootstrap_client( config_file => $bootstrap ); - - my $idl = OpenSRF::Utils::SettingsClient->new->config_value("IDL"); - Fieldmapper->import(IDL => $idl); - - $supercat = OpenSRF::AppSession->create('open-ils.supercat'); - $actor = OpenSRF::AppSession->create('open-ils.actor'); - $search = OpenSRF::AppSession->create('open-ils.search'); - $parser = new XML::LibXML; - $xslt = new XML::LibXSLT; + my $tree = shift; + my $p = shift; + my $n = shift; + if (!$cn_browse_xslt) { $cn_browse_xslt = $parser->parse_file( OpenSRF::Utils::SettingsClient ->new ->config_value( dirs => 'xsl' ). "/CNBrowse2HTML.xsl" ); + $cn_browse_xslt = $xslt->parse_stylesheet( $cn_browse_xslt ); + } + + my (undef,$xml) = $browse_types{call_number}{xml}->($tree); + + return ( + "Content-type: text/html\n\n", + $U->entityize( + $cn_browse_xslt->transform( + $parser->parse_string( $xml ), + 'prev' => "'$p'", + 'next' => "'$n'" + )->toString(1) + ) + ); +}; + +sub import { + my $self = shift; + $bootstrap = shift; +} + + +sub child_init { + OpenSRF::System->bootstrap_client( config_file => $bootstrap ); + + my $idl = OpenSRF::Utils::SettingsClient->new->config_value("IDL"); + Fieldmapper->import(IDL => $idl); + + $supercat = OpenSRF::AppSession->create('open-ils.supercat'); + $actor = OpenSRF::AppSession->create('open-ils.actor'); + $search = OpenSRF::AppSession->create('open-ils.search'); + $parser = new XML::LibXML; + $xslt = new XML::LibXSLT; + + $cn_browse_xslt = $parser->parse_file( + OpenSRF::Utils::SettingsClient + ->new + ->config_value( dirs => 'xsl' ). + "/CNBrowse2HTML.xsl" + ); - $cn_browse_xslt = $xslt->parse_stylesheet( $cn_browse_xslt ); + $cn_browse_xslt = $xslt->parse_stylesheet( $cn_browse_xslt ); - my $list = $supercat - ->request("open-ils.supercat.record.formats") - ->gather(1); + my $list = $supercat + ->request("open-ils.supercat.record.formats") + ->gather(1); $list = [ map { (keys %$_)[0] } @$list ]; push @$list, 'htmlholdings','html', 'marctxt', 'ris'; @@ -157,22 +157,22 @@ sub child_init { my $__a = $browse_axis; $browse_types{$__a}{$__f} = sub { - my $record_list = shift; - my $prev = shift; - my $next = shift; - my $real_format = shift || $__f; - my $unapi = shift; - my $base = shift; - my $site = shift; - - $log->info("Creating record feed with params [$real_format, $record_list, $unapi, $site]"); - my $feed = create_record_feed( 'record', $real_format, $record_list, $unapi, $site, undef, $real_format =~ /(-full|-uris)$/o ? 1 : 0 ); - $feed->root( "$base/../" ); - $feed->lib( $site ); - $feed->link( next => $next => $feed->type ); - $feed->link( previous => $prev => $feed->type ); - - return ( + my $record_list = shift; + my $prev = shift; + my $next = shift; + my $real_format = shift || $__f; + my $unapi = shift; + my $base = shift; + my $site = shift; + + $log->info("Creating record feed with params [$real_format, $record_list, $unapi, $site]"); + my $feed = create_record_feed( 'record', $real_format, $record_list, $unapi, $site, undef, $real_format =~ /(-full|-uris)$/o ? 1 : 0 ); + $feed->root( "$base/../" ); + $feed->lib( $site ); + $feed->link( next => $next => $feed->type ); + $feed->link( previous => $prev => $feed->type ); + + return ( "Content-type: ". $feed->type ."; charset=utf-8\n\n", $feed->toString ); @@ -188,21 +188,21 @@ sub child_init { my $__a = $browse_axis; $browse_types{$__a}{$__f} = sub { - my $record_list = shift; - my $prev = shift; - my $next = shift; - my $real_format = shift || $__f; - my $unapi = shift; - my $base = shift; - my $site = shift; - - $log->info("Creating record feed with params [$real_format, $record_list, $unapi, $site]"); - my $feed = create_record_feed( 'authority', $real_format, $record_list, $unapi, $site, undef, $real_format =~ /-full$/o ? -1 : 0 ); - $feed->root( "$base/../" ); - $feed->link( next => $next => $feed->type ); - $feed->link( previous => $prev => $feed->type ); - - return ( + my $record_list = shift; + my $prev = shift; + my $next = shift; + my $real_format = shift || $__f; + my $unapi = shift; + my $base = shift; + my $site = shift; + + $log->info("Creating record feed with params [$real_format, $record_list, $unapi, $site]"); + my $feed = create_record_feed( 'authority', $real_format, $record_list, $unapi, $site, undef, $real_format =~ /-full$/o ? -1 : 0 ); + $feed->root( "$base/../" ); + $feed->link( next => $next => $feed->type ); + $feed->link( previous => $prev => $feed->type ); + + return ( "Content-type: ". $feed->type ."; charset=utf-8\n\n", $feed->toString ); @@ -228,18 +228,18 @@ Otherwise, we won't return any holdings. =cut sub parse_feed_type { - my $type = shift; + my $type = shift; - if ($type =~ /-full$/o) { - return 1; - } + if ($type =~ /-full$/o) { + return 1; + } - if ($type =~ /-uris$/o) { - return "uris"; - } + if ($type =~ /-uris$/o) { + return "uris"; + } - # Otherwise, we'll return just the facts, ma'am - return 0; + # Otherwise, we'll return just the facts, ma'am + return 0; } =head2 supercat_format($format_hashref, $format_type) @@ -254,21 +254,21 @@ have to populate the hash with redundant information. =cut sub supercat_format { - my $h = shift; - my $type = shift; + my $h = shift; + my $type = shift; - (my $base_type = $type) =~ s/(-full|-uris)$//o; + (my $base_type = $type) =~ s/(-full|-uris)$//o; - my $format = "$typeapplication/xml"; + my $format = "$typeapplication/xml"; - for my $part ( qw/namespace_uri docs schema_location/ ) { - $format .= "<$part>$$h{$base_type}{$part}" - if ($$h{$base_type}{$part}); - } + for my $part ( qw/namespace_uri docs schema_location/ ) { + $format .= "<$part>$$h{$base_type}{$part}" + if ($$h{$base_type}{$part}); + } - $format .= ''; + $format .= ''; - return $format; + return $format; } =head2 unapi_format($format_hashref, $format_type) @@ -283,199 +283,199 @@ have to populate the hash with redundant information. =cut sub unapi_format { - my $h = shift; - my $type = shift; + my $h = shift; + my $type = shift; - (my $base_type = $type) =~ s/(-full|-uris)$//o; + (my $base_type = $type) =~ s/(-full|-uris)$//o; - my $format = "filename); + my $apache = shift; + return Apache2::Const::DECLINED if (-e $apache->filename); - (my $isbn = $apache->path_info) =~ s{^.*?([^/]+)$}{$1}o; + (my $isbn = $apache->path_info) =~ s{^.*?([^/]+)$}{$1}o; - my $list = $supercat - ->request("open-ils.supercat.oisbn", $isbn) - ->gather(1); + my $list = $supercat + ->request("open-ils.supercat.oisbn", $isbn) + ->gather(1); - print "Content-type: application/xml; charset=utf-8\n\n"; - print "\n"; + print "Content-type: application/xml; charset=utf-8\n\n"; + print "\n"; - unless (exists $$list{metarecord}) { - print ''; - return Apache2::Const::OK; - } + unless (exists $$list{metarecord}) { + print ''; + return Apache2::Const::OK; + } - print "\n"; + print "\n"; - for ( keys %{ $$list{record_list} } ) { - (my $o = $$list{record_list}{$_}) =~s/^(\S+).*?$/$1/o; - print " $o\n" - } + for ( keys %{ $$list{record_list} } ) { + (my $o = $$list{record_list}{$_}) =~s/^(\S+).*?$/$1/o; + print " $o\n" + } - print "\n"; + print "\n"; - return Apache2::Const::OK; + return Apache2::Const::OK; } sub unapi { - my $apache = shift; - return Apache2::Const::DECLINED if (-e $apache->filename); + my $apache = shift; + return Apache2::Const::DECLINED if (-e $apache->filename); - my $cgi = new CGI; + my $cgi = new CGI; - my $add_path = 0; - if ( $cgi->server_software !~ m|^Apache/2.2| ) { - my $rel_name = $cgi->url(-relative=>1); - $add_path = 1 if ($cgi->url(-path_info=>1) !~ /$rel_name$/); - } + my $add_path = 0; + if ( $cgi->server_software !~ m|^Apache/2.2| ) { + my $rel_name = $cgi->url(-relative=>1); + $add_path = 1 if ($cgi->url(-path_info=>1) !~ /$rel_name$/); + } - my $url = $cgi->url(-path_info=>$add_path); - my $root = (split 'unapi', $url)[0]; - my $base = (split 'unapi', $url)[0] . 'unapi'; + my $url = $cgi->url(-path_info=>$add_path); + my $root = (split 'unapi', $url)[0]; + my $base = (split 'unapi', $url)[0] . 'unapi'; - my $uri = $cgi->param('id') || ''; - my $host = $cgi->virtual_host || $cgi->server_name; + my $uri = $cgi->param('id') || ''; + my $host = $cgi->virtual_host || $cgi->server_name; - my $skin = $cgi->param('skin') || 'default'; - my $locale = $cgi->param('locale') || 'en-US'; + my $skin = $cgi->param('skin') || 'default'; + my $locale = $cgi->param('locale') || 'en-US'; + + # Enable localized results of copy status, etc + $supercat->session_locale($locale); + + my $format = $cgi->param('format'); + my $flesh_feed = parse_feed_type($format); + (my $base_format = $format) =~ s/(-full|-uris)$//o; + my ($id,$type,$command,$lib,$depth,$paging) = ('','',''); + + if (!$format) { + my $body = "Content-type: application/xml; charset=utf-8\n\n"; + + if ($uri =~ m{^tag:[^:]+:([^\/]+)/([^\/[]+)(?:\[([0-9,]+)\])?(?:/(.+))?}o) { + $id = $2; + $paging = $3; + ($lib,$depth) = split('/', $4); + $type = 'record'; + $type = 'metarecord' if ($1 =~ /^m/o); + $type = 'authority' if ($1 =~ /^authority/o); + + my $list = $supercat + ->request("open-ils.supercat.$type.formats") + ->gather(1); + + if ($type eq 'record' or $type eq 'isbn') { + $body .= <<" FORMATS"; + + + + + + + + + + + FORMATS + } elsif ($type eq 'metarecord') { + $body .= <<" FORMATS"; + + + FORMATS + } else { + $body .= <<" FORMATS"; + + FORMATS + } - # Enable localized results of copy status, etc - $supercat->session_locale($locale); + for my $h (@$list) { + my ($type) = keys %$h; + $body .= unapi_format($h, $type); - my $format = $cgi->param('format'); - my $flesh_feed = parse_feed_type($format); - (my $base_format = $format) =~ s/(-full|-uris)$//o; - my ($id,$type,$command,$lib,$depth,$paging) = ('','',''); + if (OpenILS::WWW::SuperCat::Feed->exists($type)) { + $body .= unapi_format($h, "$type-full"); + $body .= unapi_format($h, "$type-uris"); + } + } - if (!$format) { - my $body = "Content-type: application/xml; charset=utf-8\n\n"; - - if ($uri =~ m{^tag:[^:]+:([^\/]+)/([^\/[]+)(?:\[([0-9,]+)\])?(?:/(.+))?}o) { - $id = $2; - $paging = $3; - ($lib,$depth) = split('/', $4); - $type = 'record'; - $type = 'metarecord' if ($1 =~ /^m/o); - $type = 'authority' if ($1 =~ /^authority/o); + $body .= "\n"; - my $list = $supercat - ->request("open-ils.supercat.$type.formats") - ->gather(1); + } else { + my $list = $supercat + ->request("open-ils.supercat.$type.formats") + ->gather(1); + + push @$list, + @{ $supercat + ->request("open-ils.supercat.metarecord.formats") + ->gather(1); + }; - if ($type eq 'record' or $type eq 'isbn') { - $body .= <<" FORMATS"; - - - - - - - - - - - FORMATS - } elsif ($type eq 'metarecord') { - $body .= <<" FORMATS"; - - - FORMATS - } else { - $body .= <<" FORMATS"; - - FORMATS - } - - for my $h (@$list) { - my ($type) = keys %$h; - $body .= unapi_format($h, $type); - - if (OpenILS::WWW::SuperCat::Feed->exists($type)) { - $body .= unapi_format($h, "$type-full"); - $body .= unapi_format($h, "$type-uris"); - } - } - - $body .= "\n"; - - } else { - my $list = $supercat - ->request("open-ils.supercat.$type.formats") - ->gather(1); - - push @$list, - @{ $supercat - ->request("open-ils.supercat.metarecord.formats") - ->gather(1); - }; - - my %hash = map { ( (keys %$_)[0] => (values %$_)[0] ) } @$list; - $list = [ map { { $_ => $hash{$_} } } sort keys %hash ]; - - $body .= <<" FORMATS"; + my %hash = map { ( (keys %$_)[0] => (values %$_)[0] ) } @$list; + $list = [ map { { $_ => $hash{$_} } } sort keys %hash ]; + + $body .= <<" FORMATS"; - - - - - - - - - - FORMATS - - - for my $h (@$list) { - my ($type) = keys %$h; - $body .= "\t" . unapi_format($h, $type); - - if (OpenILS::WWW::SuperCat::Feed->exists($type)) { - $body .= "\t" . unapi_format($h, "$type-full"); - $body .= "\t" . unapi_format($h, "$type-uris"); - } - } - - $body .= "\n"; - - } - print $body; - return Apache2::Const::OK; - } - - my $scheme; - if ($uri =~ m{^tag:[^:]+:([^\/]+)/([^\/[]+)(?:\[([0-9,]+)\])?(?:/(.+))?}o) { - $scheme = $1; - $id = $2; - $paging = $3; - ($lib,$depth) = split('/', $4); - $type = 'record'; - $type = 'metarecord' if ($scheme =~ /^metabib/o); - $type = 'isbn' if ($scheme =~ /^isbn/o); - $type = 'acp' if ($scheme =~ /^asset-copy/o); - $type = 'acn' if ($scheme =~ /^asset-call_number/o); - $type = 'auri' if ($scheme =~ /^asset-uri/o); - $type = 'authority' if ($scheme =~ /^authority/o); - $command = 'retrieve'; - $command = 'browse' if (grep { $scheme eq $_ } qw/call_number title author subject topic authority.title authority.author authority.subject authority.topic series item-age/); - } + + + + + + + + + + FORMATS + + + for my $h (@$list) { + my ($type) = keys %$h; + $body .= "\t" . unapi_format($h, $type); + + if (OpenILS::WWW::SuperCat::Feed->exists($type)) { + $body .= "\t" . unapi_format($h, "$type-full"); + $body .= "\t" . unapi_format($h, "$type-uris"); + } + } + + $body .= "\n"; + + } + print $body; + return Apache2::Const::OK; + } + + my $scheme; + if ($uri =~ m{^tag:[^:]+:([^\/]+)/([^\/[]+)(?:\[([0-9,]+)\])?(?:/(.+))?}o) { + $scheme = $1; + $id = $2; + $paging = $3; + ($lib,$depth) = split('/', $4); + $type = 'record'; + $type = 'metarecord' if ($scheme =~ /^metabib/o); + $type = 'isbn' if ($scheme =~ /^isbn/o); + $type = 'acp' if ($scheme =~ /^asset-copy/o); + $type = 'acn' if ($scheme =~ /^asset-call_number/o); + $type = 'auri' if ($scheme =~ /^asset-uri/o); + $type = 'authority' if ($scheme =~ /^authority/o); + $command = 'retrieve'; + $command = 'browse' if (grep { $scheme eq $_ } qw/call_number title author subject topic authority.title authority.author authority.subject authority.topic series item-age/); + } if ($paging) { $paging = [split ',', $paging]; @@ -483,563 +483,563 @@ sub unapi { $paging = []; } - if (!$lib || $lib eq '-') { - $lib = $actor->request( - 'open-ils.actor.org_unit_list.search' => parent_ou => undef - )->gather(1)->[0]->shortname; - } - - my ($lib_object,$lib_id,$ou_types,$lib_depth); - if ($type ne 'acn' && $type ne 'acp' && $type ne 'auri') { - $lib_object = $actor->request( - 'open-ils.actor.org_unit_list.search' => shortname => $lib - )->gather(1)->[0]; - $lib_id = $lib_object->id; - - $ou_types = $actor->request( 'open-ils.actor.org_types.retrieve' )->gather(1); - $lib_depth = $depth || (grep { $_->id == $lib_object->ou_type } @$ou_types)[0]->depth; - } - - if ($command eq 'browse') { - print "Location: $root/browse/$base_format/$scheme/$lib/$id\n\n"; - return 302; - } - - if ($type eq 'isbn') { - my $rec = $supercat->request('open-ils.supercat.isbn.object.retrieve',$id)->gather(1); - if (!@$rec) { - print "Content-type: text/html; charset=utf-8\n\n"; - $apache->custom_response( 404, <<" HTML"); - - - Type [$type] with id [$id] not found! - - -
-
Sorry, we couldn't $command a $type with the id of $id in format $format.
- - - HTML - return 404; - } - $id = $rec->[0]->id; - $type = 'record'; - } - - if ( !grep - { (keys(%$_))[0] eq $base_format } - @{ $supercat->request("open-ils.supercat.$type.formats")->gather(1) } - and !grep - { $_ eq $base_format } - qw/opac html htmlholdings marctxt ris holdings_xml/ - ) { - print "Content-type: text/html; charset=utf-8\n\n"; - $apache->custom_response( 406, <<" HTML"); - - - Invalid format [$format] for type [$type]! - - -
-
Sorry, format $format is not valid for type $type.
- - - HTML - return 406; - } - - if ($format eq 'opac') { - print "Location: $root/../../$locale/skin/$skin/xml/rresult.xml?m=$id&l=$lib_id&d=$lib_depth\n\n" - if ($type eq 'metarecord'); - print "Location: $root/../../$locale/skin/$skin/xml/rdetail.xml?r=$id&l=$lib_id&d=$lib_depth\n\n" - if ($type eq 'record'); - return 302; - } elsif (OpenILS::WWW::SuperCat::Feed->exists($base_format) && ($type ne 'acn' && $type ne 'acp' && $type ne 'auri')) { - my $feed = create_record_feed( - $type, - $format => [ $id ], - $base, - $lib, - $depth, - $flesh_feed, + if (!$lib || $lib eq '-') { + $lib = $actor->request( + 'open-ils.actor.org_unit_list.search' => parent_ou => undef + )->gather(1)->[0]->shortname; + } + + my ($lib_object,$lib_id,$ou_types,$lib_depth); + if ($type ne 'acn' && $type ne 'acp' && $type ne 'auri') { + $lib_object = $actor->request( + 'open-ils.actor.org_unit_list.search' => shortname => $lib + )->gather(1)->[0]; + $lib_id = $lib_object->id; + + $ou_types = $actor->request( 'open-ils.actor.org_types.retrieve' )->gather(1); + $lib_depth = $depth || (grep { $_->id == $lib_object->ou_type } @$ou_types)[0]->depth; + } + + if ($command eq 'browse') { + print "Location: $root/browse/$base_format/$scheme/$lib/$id\n\n"; + return 302; + } + + if ($type eq 'isbn') { + my $rec = $supercat->request('open-ils.supercat.isbn.object.retrieve',$id)->gather(1); + if (!@$rec) { + print "Content-type: text/html; charset=utf-8\n\n"; + $apache->custom_response( 404, <<" HTML"); + + + Type [$type] with id [$id] not found! + + +
+
Sorry, we couldn't $command a $type with the id of $id in format $format.
+ + + HTML + return 404; + } + $id = $rec->[0]->id; + $type = 'record'; + } + + if ( !grep + { (keys(%$_))[0] eq $base_format } + @{ $supercat->request("open-ils.supercat.$type.formats")->gather(1) } + and !grep + { $_ eq $base_format } + qw/opac html htmlholdings marctxt ris holdings_xml/ + ) { + print "Content-type: text/html; charset=utf-8\n\n"; + $apache->custom_response( 406, <<" HTML"); + + + Invalid format [$format] for type [$type]! + + +
+
Sorry, format $format is not valid for type $type.
+ + + HTML + return 406; + } + + if ($format eq 'opac') { + print "Location: $root/../../$locale/skin/$skin/xml/rresult.xml?m=$id&l=$lib_id&d=$lib_depth\n\n" + if ($type eq 'metarecord'); + print "Location: $root/../../$locale/skin/$skin/xml/rdetail.xml?r=$id&l=$lib_id&d=$lib_depth\n\n" + if ($type eq 'record'); + return 302; + } elsif (OpenILS::WWW::SuperCat::Feed->exists($base_format) && ($type ne 'acn' && $type ne 'acp' && $type ne 'auri')) { + my $feed = create_record_feed( + $type, + $format => [ $id ], + $base, + $lib, + $depth, + $flesh_feed, $paging - ); - - if (!$feed->count) { - print "Content-type: text/html; charset=utf-8\n\n"; - $apache->custom_response( 404, <<" HTML"); - - - Type [$type] with id [$id] not found! - - -
-
Sorry, we couldn't $command a $type with the id of $id in format $format.
- - - HTML - return 404; - } - - $feed->root($root); - $feed->creator($host); - $feed->update_ts(); - $feed->link( unapi => $base) if ($flesh_feed); - - print "Content-type: ". $feed->type ."; charset=utf-8\n\n"; - print $U->entityize($feed->toString) . "\n"; - - return Apache2::Const::OK; - } - - my $method = "open-ils.supercat.$type.$base_format.$command"; - my @params = ($id); - push @params, $lib, $lib_depth, $flesh_feed, $paging if ($base_format eq 'holdings_xml'); - - # for acn, acp, etc, the "lib" pathinfo position isn't useful. - # however, we can have it carry extra options like no_record! (comma separated) - push @params, { map { ( $_ => 1 ) } split(',', $lib) } if ( grep { $type eq $_} qw/acn acp auri/); - - my $req = $supercat->request($method,@params); - my $data = $req->gather(); - - if ($req->failed || !$data) { - print "Content-type: text/html; charset=utf-8\n\n"; - $apache->custom_response( 404, <<" HTML"); - - - $type $id not found! - - -
-
Sorry, we couldn't $command a $type with the id of $id in format $format.
- - - HTML - return 404; - } - - print "Content-type: application/xml; charset=utf-8\n\n$data"; - - if ($base_format eq 'holdings_xml') { - while (my $c = $req->recv) { - print $c->content; - } - } - - return Apache2::Const::OK; + ); + + if (!$feed->count) { + print "Content-type: text/html; charset=utf-8\n\n"; + $apache->custom_response( 404, <<" HTML"); + + + Type [$type] with id [$id] not found! + + +
+
Sorry, we couldn't $command a $type with the id of $id in format $format.
+ + + HTML + return 404; + } + + $feed->root($root); + $feed->creator($host); + $feed->update_ts(); + $feed->link( unapi => $base) if ($flesh_feed); + + print "Content-type: ". $feed->type ."; charset=utf-8\n\n"; + print $U->entityize($feed->toString) . "\n"; + + return Apache2::Const::OK; + } + + my $method = "open-ils.supercat.$type.$base_format.$command"; + my @params = ($id); + push @params, $lib, $lib_depth, $flesh_feed, $paging if ($base_format eq 'holdings_xml'); + + # for acn, acp, etc, the "lib" pathinfo position isn't useful. + # however, we can have it carry extra options like no_record! (comma separated) + push @params, { map { ( $_ => 1 ) } split(',', $lib) } if ( grep { $type eq $_} qw/acn acp auri/); + + my $req = $supercat->request($method,@params); + my $data = $req->gather(); + + if ($req->failed || !$data) { + print "Content-type: text/html; charset=utf-8\n\n"; + $apache->custom_response( 404, <<" HTML"); + + + $type $id not found! + + +
+
Sorry, we couldn't $command a $type with the id of $id in format $format.
+ + + HTML + return 404; + } + + print "Content-type: application/xml; charset=utf-8\n\n$data"; + + if ($base_format eq 'holdings_xml') { + while (my $c = $req->recv) { + print $c->content; + } + } + + return Apache2::Const::OK; } sub supercat { - my $apache = shift; - return Apache2::Const::DECLINED if (-e $apache->filename); - - my $cgi = new CGI; - - my $add_path = 0; - if ( $cgi->server_software !~ m|^Apache/2.2| ) { - my $rel_name = $cgi->url(-relative=>1); - $add_path = 1 if ($cgi->url(-path_info=>1) !~ /$rel_name$/); - } - - my $url = $cgi->url(-path_info=>$add_path); - my $root = (split 'supercat', $url)[0]; - my $base = (split 'supercat', $url)[0] . 'supercat'; - my $unapi = (split 'supercat', $url)[0] . 'unapi'; - - my $host = $cgi->virtual_host || $cgi->server_name; - - my $path = $cgi->path_info; - my ($id,$type,$format,$command) = reverse split '/', $path; - my $flesh_feed = parse_feed_type($format); - (my $base_format = $format) =~ s/(-full|-uris)$//o; - - my $skin = $cgi->param('skin') || 'default'; - my $locale = $cgi->param('locale') || 'en-US'; - - # Enable localized results of copy status, etc - $supercat->session_locale($locale); - - if ( $path =~ m{^/formats(?:/([^\/]+))?$}o ) { - print "Content-type: application/xml; charset=utf-8\n"; - if ($1) { - my $list = $supercat - ->request("open-ils.supercat.$1.formats") - ->gather(1); - - print "\n"; - - print " - - opac - text/html - "; - - if ($1 eq 'record' or $1 eq 'isbn') { - print " - htmlholdings - text/html - - - html - text/html - - - htmlholdings-full - text/html - - - html-full - text/html - - - marctxt - text/plain - - - ris - text/plain - "; - } - - for my $h (@$list) { - my ($type) = keys %$h; - print supercat_format($h, $type); - - if (OpenILS::WWW::SuperCat::Feed->exists($type)) { - print supercat_format($h, "$type-full"); - print supercat_format($h, "$type-uris"); - } - - } - - print "\n"; - - 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 { ( (keys %$_)[0] => (values %$_)[0] ) } @$list; - $list = [ map { { $_ => $hash{$_} } } sort keys %hash ]; - - print "\n - - opac - text/html - - - htmlholdings - text/html - - - html - text/html - - - htmlholdings-full - text/html - - - html-full - text/html - - - marctxt - text/plain - - - ris - text/plain - "; - - for my $h (@$list) { - my ($type) = keys %$h; - print supercat_format($h, $type); - - if (OpenILS::WWW::SuperCat::Feed->exists($type)) { - print supercat_format($h, "$type-full"); - print supercat_format($h, "$type-uris"); - } - - } - - print "\n"; - - - return Apache2::Const::OK; - } - - if ($format eq 'opac') { - print "Location: $root/../../$locale/skin/$skin/xml/rresult.xml?m=$id\n\n" - if ($type eq 'metarecord'); - print "Location: $root/../../$locale/skin/$skin/xml/rdetail.xml?r=$id\n\n" - if ($type eq 'record'); - return 302; - - } elsif ($base_format eq 'marc21') { - - my $ret = 200; - try { - my $bib = $supercat->request( "open-ils.supercat.record.object.retrieve", $id )->gather(1)->[0]; + my $apache = shift; + return Apache2::Const::DECLINED if (-e $apache->filename); + + my $cgi = new CGI; + + my $add_path = 0; + if ( $cgi->server_software !~ m|^Apache/2.2| ) { + my $rel_name = $cgi->url(-relative=>1); + $add_path = 1 if ($cgi->url(-path_info=>1) !~ /$rel_name$/); + } + + my $url = $cgi->url(-path_info=>$add_path); + my $root = (split 'supercat', $url)[0]; + my $base = (split 'supercat', $url)[0] . 'supercat'; + my $unapi = (split 'supercat', $url)[0] . 'unapi'; + + my $host = $cgi->virtual_host || $cgi->server_name; + + my $path = $cgi->path_info; + my ($id,$type,$format,$command) = reverse split '/', $path; + my $flesh_feed = parse_feed_type($format); + (my $base_format = $format) =~ s/(-full|-uris)$//o; + + my $skin = $cgi->param('skin') || 'default'; + my $locale = $cgi->param('locale') || 'en-US'; + + # Enable localized results of copy status, etc + $supercat->session_locale($locale); + + if ( $path =~ m{^/formats(?:/([^\/]+))?$}o ) { + print "Content-type: application/xml; charset=utf-8\n"; + if ($1) { + my $list = $supercat + ->request("open-ils.supercat.$1.formats") + ->gather(1); + + print "\n"; + + print " + + opac + text/html + "; + + if ($1 eq 'record' or $1 eq 'isbn') { + print " + htmlholdings + text/html + + + html + text/html + + + htmlholdings-full + text/html + + + html-full + text/html + + + marctxt + text/plain + + + ris + text/plain + "; + } + + for my $h (@$list) { + my ($type) = keys %$h; + print supercat_format($h, $type); + + if (OpenILS::WWW::SuperCat::Feed->exists($type)) { + print supercat_format($h, "$type-full"); + print supercat_format($h, "$type-uris"); + } + + } + + print "\n"; + + 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 { ( (keys %$_)[0] => (values %$_)[0] ) } @$list; + $list = [ map { { $_ => $hash{$_} } } sort keys %hash ]; + + print "\n + + opac + text/html + + + htmlholdings + text/html + + + html + text/html + + + htmlholdings-full + text/html + + + html-full + text/html + + + marctxt + text/plain + + + ris + text/plain + "; + + for my $h (@$list) { + my ($type) = keys %$h; + print supercat_format($h, $type); + + if (OpenILS::WWW::SuperCat::Feed->exists($type)) { + print supercat_format($h, "$type-full"); + print supercat_format($h, "$type-uris"); + } + + } + + print "\n"; + + + return Apache2::Const::OK; + } + + if ($format eq 'opac') { + print "Location: $root/../../$locale/skin/$skin/xml/rresult.xml?m=$id\n\n" + if ($type eq 'metarecord'); + print "Location: $root/../../$locale/skin/$skin/xml/rdetail.xml?r=$id\n\n" + if ($type eq 'record'); + return 302; + + } elsif ($base_format eq 'marc21') { + + my $ret = 200; + try { + my $bib = $supercat->request( "open-ils.supercat.record.object.retrieve", $id )->gather(1)->[0]; - print "Content-type: application/octet-stream\n\n" . MARC::Record->new_from_xml( $bib->marc, 'UTF-8', 'USMARC' )->as_usmarc; - - } otherwise { - warn shift(); - - print "Content-type: text/html; charset=utf-8\n\n"; - $apache->custom_response( 404, <<" HTML"); - - - ERROR - - -
-
Couldn't fetch $id as MARC21.
- - - HTML - $ret = 404; - }; - - return Apache2::Const::OK; - - } elsif (OpenILS::WWW::SuperCat::Feed->exists($base_format)) { - my $feed = create_record_feed( - $type, - $format => [ $id ], - undef, undef, undef, - $flesh_feed - ); - - $feed->root($root); - $feed->creator($host); - - $feed->update_ts(); - - $feed->link( unapi => $base) if ($flesh_feed); - - print "Content-type: ". $feed->type ."; charset=utf-8\n\n"; - print $U->entityize($feed->toString) . "\n"; - - return Apache2::Const::OK; - } - - my $req = $supercat->request("open-ils.supercat.$type.$format.$command",$id); - $req->wait_complete; - - if ($req->failed) { - print "Content-type: text/html; charset=utf-8\n\n"; - $apache->custom_response( 404, <<" HTML"); - - - $type $id not found! - - -
-
Sorry, we couldn't $command a $type with the id of $id in format $format.
- - - HTML - return 404; - } - - print "Content-type: application/xml; charset=utf-8\n\n"; - print $U->entityize( $parser->parse_string( $req->gather(1) )->documentElement->toString ); - - return Apache2::Const::OK; + print "Content-type: application/octet-stream\n\n" . MARC::Record->new_from_xml( $bib->marc, 'UTF-8', 'USMARC' )->as_usmarc; + + } otherwise { + warn shift(); + + print "Content-type: text/html; charset=utf-8\n\n"; + $apache->custom_response( 404, <<" HTML"); + + + ERROR + + +
+
Couldn't fetch $id as MARC21.
+ + + HTML + $ret = 404; + }; + + return Apache2::Const::OK; + + } elsif (OpenILS::WWW::SuperCat::Feed->exists($base_format)) { + my $feed = create_record_feed( + $type, + $format => [ $id ], + undef, undef, undef, + $flesh_feed + ); + + $feed->root($root); + $feed->creator($host); + + $feed->update_ts(); + + $feed->link( unapi => $base) if ($flesh_feed); + + print "Content-type: ". $feed->type ."; charset=utf-8\n\n"; + print $U->entityize($feed->toString) . "\n"; + + return Apache2::Const::OK; + } + + my $req = $supercat->request("open-ils.supercat.$type.$format.$command",$id); + $req->wait_complete; + + if ($req->failed) { + print "Content-type: text/html; charset=utf-8\n\n"; + $apache->custom_response( 404, <<" HTML"); + + + $type $id not found! + + +
+
Sorry, we couldn't $command a $type with the id of $id in format $format.
+ + + HTML + return 404; + } + + print "Content-type: application/xml; charset=utf-8\n\n"; + print $U->entityize( $parser->parse_string( $req->gather(1) )->documentElement->toString ); + + return Apache2::Const::OK; } sub bookbag_feed { - my $apache = shift; - return Apache2::Const::DECLINED if (-e $apache->filename); - - my $cgi = new CGI; - - my $year = (gmtime())[5] + 1900; - my $host = $cgi->virtual_host || $cgi->server_name; - - my $add_path = 0; - if ( $cgi->server_software !~ m|^Apache/2.2| ) { - my $rel_name = $cgi->url(-relative=>1); - $add_path = 1 if ($cgi->url(-path_info=>1) !~ /$rel_name$/); - } - - my $url = $cgi->url(-path_info=>$add_path); - my $root = (split 'feed', $url)[0] . '/'; - my $base = (split 'bookbag', $url)[0] . '/bookbag'; - my $unapi = (split 'feed', $url)[0] . '/unapi'; - - my $skin = $cgi->param('skin') || 'default'; - my $locale = $cgi->param('locale') || 'en-US'; - my $org = $cgi->param('searchOrg'); - - # Enable localized results of copy status, etc - $supercat->session_locale($locale); - - my $org_unit = get_ou($org); - my $scope = "l=" . $org_unit->[0]->id . "&"; - - $root =~ s{(?path_info; - #warn "URL breakdown: $url -> $root -> $base -> $path -> $unapi"; - - my ($id,$type) = reverse split '/', $path; - my $flesh_feed = parse_feed_type($type); - - my $bucket = $actor->request("open-ils.actor.container.public.flesh", 'biblio', $id)->gather(1); - return Apache2::Const::NOT_FOUND unless($bucket); - - my $bucket_tag = "tag:$host,$year:record_bucket/$id"; - if ($type eq 'opac') { - print "Location: $root/../../$locale/skin/$skin/xml/rresult.xml?$scope" . "rt=list&" . - join('&', map { "rl=" . $_->target_biblio_record_entry } @{ $bucket->items }) . - "\n\n"; - return 302; - } - - my $feed = create_record_feed( - 'record', - $type, - [ map { $_->target_biblio_record_entry } @{ $bucket->items } ], - $unapi, - $org_unit->[0]->shortname, - undef, - $flesh_feed - ); - $feed->root($root); - $feed->id($bucket_tag); - - $feed->title("Items in Book Bag [".$bucket->name."]"); - $feed->creator($host); - $feed->update_ts(); - - $feed->link(alternate => $base . "/rss2-full/$id" => 'application/rss+xml'); - $feed->link(atom => $base . "/atom-full/$id" => 'application/atom+xml'); - $feed->link(html => $base . "/html-full/$id" => 'text/html'); - $feed->link(unapi => $unapi); - - $feed->link( - OPAC => - "http://$host/opac/$locale/skin/$skin/xml/rresult.xml?$scope" . "rt=list&" . - join('&', map { 'rl=' . $_->target_biblio_record_entry } @{$bucket->items} ), - 'text/html' - ); - - - print "Content-type: ". $feed->type ."; charset=utf-8\n\n"; - print $U->entityize($feed->toString) . "\n"; - - return Apache2::Const::OK; + my $apache = shift; + return Apache2::Const::DECLINED if (-e $apache->filename); + + my $cgi = new CGI; + + my $year = (gmtime())[5] + 1900; + my $host = $cgi->virtual_host || $cgi->server_name; + + my $add_path = 0; + if ( $cgi->server_software !~ m|^Apache/2.2| ) { + my $rel_name = $cgi->url(-relative=>1); + $add_path = 1 if ($cgi->url(-path_info=>1) !~ /$rel_name$/); + } + + my $url = $cgi->url(-path_info=>$add_path); + my $root = (split 'feed', $url)[0] . '/'; + my $base = (split 'bookbag', $url)[0] . '/bookbag'; + my $unapi = (split 'feed', $url)[0] . '/unapi'; + + my $skin = $cgi->param('skin') || 'default'; + my $locale = $cgi->param('locale') || 'en-US'; + my $org = $cgi->param('searchOrg'); + + # Enable localized results of copy status, etc + $supercat->session_locale($locale); + + my $org_unit = get_ou($org); + my $scope = "l=" . $org_unit->[0]->id . "&"; + + $root =~ s{(?path_info; + #warn "URL breakdown: $url -> $root -> $base -> $path -> $unapi"; + + my ($id,$type) = reverse split '/', $path; + my $flesh_feed = parse_feed_type($type); + + my $bucket = $actor->request("open-ils.actor.container.public.flesh", 'biblio', $id)->gather(1); + return Apache2::Const::NOT_FOUND unless($bucket); + + my $bucket_tag = "tag:$host,$year:record_bucket/$id"; + if ($type eq 'opac') { + print "Location: $root/../../$locale/skin/$skin/xml/rresult.xml?$scope" . "rt=list&" . + join('&', map { "rl=" . $_->target_biblio_record_entry } @{ $bucket->items }) . + "\n\n"; + return 302; + } + + my $feed = create_record_feed( + 'record', + $type, + [ map { $_->target_biblio_record_entry } @{ $bucket->items } ], + $unapi, + $org_unit->[0]->shortname, + undef, + $flesh_feed + ); + $feed->root($root); + $feed->id($bucket_tag); + + $feed->title("Items in Book Bag [".$bucket->name."]"); + $feed->creator($host); + $feed->update_ts(); + + $feed->link(alternate => $base . "/rss2-full/$id" => 'application/rss+xml'); + $feed->link(atom => $base . "/atom-full/$id" => 'application/atom+xml'); + $feed->link(html => $base . "/html-full/$id" => 'text/html'); + $feed->link(unapi => $unapi); + + $feed->link( + OPAC => + "http://$host/opac/$locale/skin/$skin/xml/rresult.xml?$scope" . "rt=list&" . + join('&', map { 'rl=' . $_->target_biblio_record_entry } @{$bucket->items} ), + 'text/html' + ); + + + print "Content-type: ". $feed->type ."; charset=utf-8\n\n"; + print $U->entityize($feed->toString) . "\n"; + + return Apache2::Const::OK; } sub changes_feed { - my $apache = shift; - return Apache2::Const::DECLINED if (-e $apache->filename); + my $apache = shift; + return Apache2::Const::DECLINED if (-e $apache->filename); - my $cgi = new CGI; + my $cgi = new CGI; - my $year = (gmtime())[5] + 1900; - my $host = $cgi->virtual_host || $cgi->server_name; + my $year = (gmtime())[5] + 1900; + my $host = $cgi->virtual_host || $cgi->server_name; - my $add_path = 0; - if ( $cgi->server_software !~ m|^Apache/2.2| ) { - my $rel_name = $cgi->url(-relative=>1); - $add_path = 1 if ($cgi->url(-path_info=>1) !~ /$rel_name$/); - } + my $add_path = 0; + if ( $cgi->server_software !~ m|^Apache/2.2| ) { + my $rel_name = $cgi->url(-relative=>1); + $add_path = 1 if ($cgi->url(-path_info=>1) !~ /$rel_name$/); + } - my $url = $cgi->url(-path_info=>$add_path); - my $root = (split 'feed', $url)[0]; - my $base = (split 'freshmeat', $url)[0] . '/freshmeat'; - my $unapi = (split 'feed', $url)[0] . 'unapi'; + my $url = $cgi->url(-path_info=>$add_path); + my $root = (split 'feed', $url)[0]; + my $base = (split 'freshmeat', $url)[0] . '/freshmeat'; + my $unapi = (split 'feed', $url)[0] . 'unapi'; - my $skin = $cgi->param('skin') || 'default'; - my $locale = $cgi->param('locale') || 'en-US'; - my $org = $cgi->param('searchOrg'); + my $skin = $cgi->param('skin') || 'default'; + my $locale = $cgi->param('locale') || 'en-US'; + my $org = $cgi->param('searchOrg'); - # Enable localized results of copy status, etc - $supercat->session_locale($locale); + # Enable localized results of copy status, etc + $supercat->session_locale($locale); - my $org_unit = get_ou($org); - my $scope = "l=" . $org_unit->[0]->id . "&"; + my $org_unit = get_ou($org); + my $scope = "l=" . $org_unit->[0]->id . "&"; - my $path = $cgi->path_info; - #warn "URL breakdown: $url ($rel_name) -> $root -> $base -> $path -> $unapi"; + my $path = $cgi->path_info; + #warn "URL breakdown: $url ($rel_name) -> $root -> $base -> $path -> $unapi"; - $path =~ s/^\/(?:feed\/)?freshmeat\///og; - - my ($type,$rtype,$axis,$limit,$date) = split '/', $path; - my $flesh_feed = parse_feed_type($type); + $path =~ s/^\/(?:feed\/)?freshmeat\///og; + + my ($type,$rtype,$axis,$limit,$date) = split '/', $path; + my $flesh_feed = parse_feed_type($type); - $limit ||= 10; - $limit = 10 if $limit !~ /^\d+$/; + $limit ||= 10; + $limit = 10 if $limit !~ /^\d+$/; - my $list = $supercat->request("open-ils.supercat.$rtype.record.$axis.recent", $date, $limit)->gather(1); + my $list = $supercat->request("open-ils.supercat.$rtype.record.$axis.recent", $date, $limit)->gather(1); - #if ($type eq 'opac') { - # print "Location: $root/../../en-US/skin/default/xml/rresult.xml?rt=list&" . - # join('&', map { "rl=" . $_ } @$list) . - # "\n\n"; - # return 302; - #} + #if ($type eq 'opac') { + # print "Location: $root/../../en-US/skin/default/xml/rresult.xml?rt=list&" . + # join('&', map { "rl=" . $_ } @$list) . + # "\n\n"; + # return 302; + #} - my $search = 'record'; - if ($rtype eq 'authority') { - $search = 'authority'; - } - my $feed = create_record_feed( $search, $type, $list, $unapi, $org_unit->[0]->shortname, undef, $flesh_feed); - $feed->root($root); + my $search = 'record'; + if ($rtype eq 'authority') { + $search = 'authority'; + } + my $feed = create_record_feed( $search, $type, $list, $unapi, $org_unit->[0]->shortname, undef, $flesh_feed); + $feed->root($root); - if ($date) { - $feed->title("Up to $limit recent $rtype ${axis}s from $date forward"); - } else { - $feed->title("$limit most recent $rtype ${axis}s"); - } + if ($date) { + $feed->title("Up to $limit recent $rtype ${axis}s from $date forward"); + } else { + $feed->title("$limit most recent $rtype ${axis}s"); + } - $feed->creator($host); - $feed->update_ts(); + $feed->creator($host); + $feed->update_ts(); - $feed->link(alternate => $base . "/rss2-full/$rtype/$axis/$limit/$date" => 'application/rss+xml'); - $feed->link(atom => $base . "/atom-full/$rtype/$axis/$limit/$date" => 'application/atom+xml'); - $feed->link(html => $base . "/html-full/$rtype/$axis/$limit/$date" => 'text/html'); - $feed->link(unapi => $unapi); + $feed->link(alternate => $base . "/rss2-full/$rtype/$axis/$limit/$date" => 'application/rss+xml'); + $feed->link(atom => $base . "/atom-full/$rtype/$axis/$limit/$date" => 'application/atom+xml'); + $feed->link(html => $base . "/html-full/$rtype/$axis/$limit/$date" => 'text/html'); + $feed->link(unapi => $unapi); - $feed->link( - OPAC => - "http://$host/opac/$locale/skin/$skin/xml/rresult.xml?$scope" . "rt=list&" . - join('&', map { 'rl=' . $_} @$list ), - 'text/html' - ); + $feed->link( + OPAC => + "http://$host/opac/$locale/skin/$skin/xml/rresult.xml?$scope" . "rt=list&" . + join('&', map { 'rl=' . $_} @$list ), + 'text/html' + ); - print "Content-type: ". $feed->type ."; charset=utf-8\n\n"; - print $U->entityize($feed->toString) . "\n"; + print "Content-type: ". $feed->type ."; charset=utf-8\n\n"; + print $U->entityize($feed->toString) . "\n"; - return Apache2::Const::OK; + return Apache2::Const::OK; } sub opensearch_osd { - my $version = shift; - my $lib = shift; - my $class = shift; - my $base = shift; + my $version = shift; + my $lib = shift; + my $class = shift; + my $base = shift; - if ($version eq '1.0') { - print < @@ -1057,8 +1057,8 @@ Content-type: application/opensearchdescription+xml; charset=utf-8 false OSD - } else { - print < @@ -1089,262 +1089,262 @@ Content-type: application/opensearchdescription+xml; charset=utf-8 UTF-8 OSD - } + } - return Apache2::Const::OK; + return Apache2::Const::OK; } sub opensearch_feed { - my $apache = shift; - return Apache2::Const::DECLINED if (-e $apache->filename); - - my $cgi = new CGI; - my $year = (gmtime())[5] + 1900; - - my $host = $cgi->virtual_host || $cgi->server_name; - - my $add_path = 0; - if ( $cgi->server_software !~ m|^Apache/2.2| ) { - my $rel_name = $cgi->url(-relative=>1); - $add_path = 1 if ($cgi->url(-path_info=>1) !~ /$rel_name$/); - } + my $apache = shift; + return Apache2::Const::DECLINED if (-e $apache->filename); - my $url = $cgi->url(-path_info=>$add_path); - my $root = (split 'opensearch', $url)[0]; - my $base = (split 'opensearch', $url)[0] . 'opensearch'; - my $unapi = (split 'opensearch', $url)[0] . 'unapi'; + my $cgi = new CGI; + my $year = (gmtime())[5] + 1900; - my $path = $cgi->path_info; - #warn "URL breakdown: $url ($rel_name) -> $root -> $base -> $path -> $unapi"; - - if ($path =~ m{^/?(1\.\d{1})/(?:([^/]+)/)?([^/]+)/osd.xml}o) { - - my $version = $1; - my $lib = uc($2); - my $class = $3; - - if (!$lib || $lib eq '-') { - $lib = $actor->request( - 'open-ils.actor.org_unit_list.search' => parent_ou => undef - )->gather(1)->[0]->shortname; - } - - if ($class eq '-') { - $class = 'keyword'; - } - - return opensearch_osd($version, $lib, $class, $base); - } - - - my $page = $cgi->param('startPage') || 1; - my $offset = $cgi->param('startIndex') || 1; - my $limit = $cgi->param('count') || 10; - - $page = 1 if ($page !~ /^\d+$/); - $offset = 1 if ($offset !~ /^\d+$/); - $limit = 10 if ($limit !~ /^\d+$/); $limit = 25 if ($limit > 25); - - if ($page > 1) { - $offset = ($page - 1) * $limit; - } else { - $offset -= 1; - } - - my ($version,$org,$type,$class,$terms,$sort,$sortdir,$lang) = ('','','','','','','',''); - (undef,$version,$org,$type,$class,$terms,$sort,$sortdir,$lang) = split '/', $path; - - $lang = $cgi->param('searchLang') if $cgi->param('searchLang'); - $lang = '' if ($lang eq '*'); - - $sort = $cgi->param('searchSort') if $cgi->param('searchSort'); - $sort ||= ''; - $sortdir = $cgi->param('searchSortDir') if $cgi->param('searchSortDir'); - $sortdir ||= ''; - - $terms .= " " if ($terms && $cgi->param('searchTerms')); - $terms .= $cgi->param('searchTerms') if $cgi->param('searchTerms'); - - $class = $cgi->param('searchClass') if $cgi->param('searchClass'); - $class ||= '-'; - - $type = $cgi->param('responseType') if $cgi->param('responseType'); - $type ||= '-'; - - $org = $cgi->param('searchOrg') if $cgi->param('searchOrg'); - $org ||= '-'; - - - my $kwt = $cgi->param('kw'); - my $tit = $cgi->param('ti'); - my $aut = $cgi->param('au'); - my $sut = $cgi->param('su'); - my $set = $cgi->param('se'); - - $terms .= " " if ($terms && $kwt); - $terms .= "keyword: $kwt" if ($kwt); - $terms .= " " if ($terms && $tit); - $terms .= "title: $tit" if ($tit); - $terms .= " " if ($terms && $aut); - $terms .= "author: $aut" if ($aut); - $terms .= " " if ($terms && $sut); - $terms .= "subject: $sut" if ($sut); - $terms .= " " if ($terms && $set); - $terms .= "series: $set" if ($set); - - if ($version eq '1.0') { - $type = 'rss2'; - } elsif ($type eq '-') { - $type = 'atom'; - } - my $flesh_feed = parse_feed_type($type); - - $terms = decode_utf8($terms); - $lang = 'eng' if ($lang eq 'en-US'); - - $log->debug("OpenSearch terms: $terms"); - - my $org_unit = get_ou($org); - - # Apostrophes break search and get indexed as spaces anyway - my $safe_terms = $terms; - $safe_terms =~ s{'}{ }go; - - my $recs = $search->request( - 'open-ils.search.biblio.multiclass.query' => { - org_unit => $org_unit->[0]->id, - offset => $offset, - limit => $limit, - sort => $sort, - sort_dir => $sortdir, + my $host = $cgi->virtual_host || $cgi->server_name; + + my $add_path = 0; + if ( $cgi->server_software !~ m|^Apache/2.2| ) { + my $rel_name = $cgi->url(-relative=>1); + $add_path = 1 if ($cgi->url(-path_info=>1) !~ /$rel_name$/); + } + + my $url = $cgi->url(-path_info=>$add_path); + my $root = (split 'opensearch', $url)[0]; + my $base = (split 'opensearch', $url)[0] . 'opensearch'; + my $unapi = (split 'opensearch', $url)[0] . 'unapi'; + + my $path = $cgi->path_info; + #warn "URL breakdown: $url ($rel_name) -> $root -> $base -> $path -> $unapi"; + + if ($path =~ m{^/?(1\.\d{1})/(?:([^/]+)/)?([^/]+)/osd.xml}o) { + + my $version = $1; + my $lib = uc($2); + my $class = $3; + + if (!$lib || $lib eq '-') { + $lib = $actor->request( + 'open-ils.actor.org_unit_list.search' => parent_ou => undef + )->gather(1)->[0]->shortname; + } + + if ($class eq '-') { + $class = 'keyword'; + } + + return opensearch_osd($version, $lib, $class, $base); + } + + + my $page = $cgi->param('startPage') || 1; + my $offset = $cgi->param('startIndex') || 1; + my $limit = $cgi->param('count') || 10; + + $page = 1 if ($page !~ /^\d+$/); + $offset = 1 if ($offset !~ /^\d+$/); + $limit = 10 if ($limit !~ /^\d+$/); $limit = 25 if ($limit > 25); + + if ($page > 1) { + $offset = ($page - 1) * $limit; + } else { + $offset -= 1; + } + + my ($version,$org,$type,$class,$terms,$sort,$sortdir,$lang) = ('','','','','','','',''); + (undef,$version,$org,$type,$class,$terms,$sort,$sortdir,$lang) = split '/', $path; + + $lang = $cgi->param('searchLang') if $cgi->param('searchLang'); + $lang = '' if ($lang eq '*'); + + $sort = $cgi->param('searchSort') if $cgi->param('searchSort'); + $sort ||= ''; + $sortdir = $cgi->param('searchSortDir') if $cgi->param('searchSortDir'); + $sortdir ||= ''; + + $terms .= " " if ($terms && $cgi->param('searchTerms')); + $terms .= $cgi->param('searchTerms') if $cgi->param('searchTerms'); + + $class = $cgi->param('searchClass') if $cgi->param('searchClass'); + $class ||= '-'; + + $type = $cgi->param('responseType') if $cgi->param('responseType'); + $type ||= '-'; + + $org = $cgi->param('searchOrg') if $cgi->param('searchOrg'); + $org ||= '-'; + + + my $kwt = $cgi->param('kw'); + my $tit = $cgi->param('ti'); + my $aut = $cgi->param('au'); + my $sut = $cgi->param('su'); + my $set = $cgi->param('se'); + + $terms .= " " if ($terms && $kwt); + $terms .= "keyword: $kwt" if ($kwt); + $terms .= " " if ($terms && $tit); + $terms .= "title: $tit" if ($tit); + $terms .= " " if ($terms && $aut); + $terms .= "author: $aut" if ($aut); + $terms .= " " if ($terms && $sut); + $terms .= "subject: $sut" if ($sut); + $terms .= " " if ($terms && $set); + $terms .= "series: $set" if ($set); + + if ($version eq '1.0') { + $type = 'rss2'; + } elsif ($type eq '-') { + $type = 'atom'; + } + my $flesh_feed = parse_feed_type($type); + + $terms = decode_utf8($terms); + $lang = 'eng' if ($lang eq 'en-US'); + + $log->debug("OpenSearch terms: $terms"); + + my $org_unit = get_ou($org); + + # Apostrophes break search and get indexed as spaces anyway + my $safe_terms = $terms; + $safe_terms =~ s{'}{ }go; + + my $recs = $search->request( + 'open-ils.search.biblio.multiclass.query' => { + org_unit => $org_unit->[0]->id, + offset => $offset, + limit => $limit, + sort => $sort, + sort_dir => $sortdir, default_class => $class, - ($lang ? ( 'language' => $lang ) : ()), - } => $safe_terms => 1 - )->gather(1); - - $log->debug("Hits for [$terms]: $recs->{count}"); - - my $feed = create_record_feed( - 'record', - $type, - [ map { $_->[0] } @{$recs->{ids}} ], - $unapi, - $org, - undef, - $flesh_feed - ); - - $log->debug("Feed created..."); - - $feed->root($root); - $feed->lib($org); - $feed->search($safe_terms); - $feed->class($class); - - $feed->title("Search results for [$terms] at ".$org_unit->[0]->name); - - $feed->creator($host); - $feed->update_ts(); - - $feed->_create_node( - $feed->{item_xpath}, - 'http://a9.com/-/spec/opensearch/1.1/', - 'totalResults', - $recs->{count}, - ); - - $feed->_create_node( - $feed->{item_xpath}, - 'http://a9.com/-/spec/opensearch/1.1/', - 'startIndex', - $offset + 1, - ); - - $feed->_create_node( - $feed->{item_xpath}, - 'http://a9.com/-/spec/opensearch/1.1/', - 'itemsPerPage', - $limit, - ); - - $log->debug("...basic feed data added..."); - - $feed->link( - next => - $base . "/$version/$org/$type/$class?searchTerms=$terms&searchSort=$sort&searchSortDir=$sortdir&searchLang=$lang&startIndex=" . int($offset + $limit + 1) . "&count=" . $limit => - 'application/opensearch+xml' - ) if ($offset + $limit < $recs->{count}); - - $feed->link( - previous => - $base . "/$version/$org/$type/$class?searchTerms=$terms&searchSort=$sort&searchSortDir=$sortdir&searchLang=$lang&startIndex=" . int(($offset - $limit) + 1) . "&count=" . $limit => - 'application/opensearch+xml' - ) if ($offset); - - $feed->link( - self => - $base . "/$version/$org/$type/$class?searchTerms=$terms&searchSort=$sort&searchSortDir=$sortdir&searchLang=$lang" => - 'application/opensearch+xml' - ); - - $feed->link( - alternate => - $base . "/$version/$org/rss2-full/$class?searchTerms=$terms&searchSort=$sort&searchSortDir=$sortdir&searchLang=$lang" => - 'application/rss+xml' - ); - - $feed->link( - atom => - $base . "/$version/$org/atom-full/$class?searchTerms=$terms&searchSort=$sort&searchSortDir=$sortdir&searchLang=$lang" => - 'application/atom+xml' - ); - - $feed->link( - 'html' => - $base . "/$version/$org/html/$class?searchTerms=$terms&searchSort=$sort&searchSortDir=$sortdir&searchLang=$lang" => - 'text/html' - ); - - $feed->link( - 'html-full' => - $base . "/$version/$org/html-full/$class?searchTerms=$terms&searchSort=$sort&searchSortDir=$sortdir&searchLang=$lang" => - 'text/html' - ); - - $feed->link( 'unapi-server' => $unapi); - - $log->debug("...feed links added..."); - -# $feed->link( -# opac => -# $root . "../$lang/skin/default/xml/rresult.xml?rt=list&" . -# join('&', map { 'rl=' . $_->[0] } grep { ref $_ && defined $_->[0] } @{$recs->{ids}} ), -# 'text/html' -# ); - - #print $cgi->header( -type => $feed->type, -charset => 'UTF-8') . entityize($feed->toString) . "\n"; - print $cgi->header( -type => $feed->type, -charset => 'UTF-8') . $feed->toString . "\n"; - - $log->debug("...and feed returned."); - - return Apache2::Const::OK; + ($lang ? ( 'language' => $lang ) : ()), + } => $safe_terms => 1 + )->gather(1); + + $log->debug("Hits for [$terms]: $recs->{count}"); + + my $feed = create_record_feed( + 'record', + $type, + [ map { $_->[0] } @{$recs->{ids}} ], + $unapi, + $org, + undef, + $flesh_feed + ); + + $log->debug("Feed created..."); + + $feed->root($root); + $feed->lib($org); + $feed->search($safe_terms); + $feed->class($class); + + $feed->title("Search results for [$terms] at ".$org_unit->[0]->name); + + $feed->creator($host); + $feed->update_ts(); + + $feed->_create_node( + $feed->{item_xpath}, + 'http://a9.com/-/spec/opensearch/1.1/', + 'totalResults', + $recs->{count}, + ); + + $feed->_create_node( + $feed->{item_xpath}, + 'http://a9.com/-/spec/opensearch/1.1/', + 'startIndex', + $offset + 1, + ); + + $feed->_create_node( + $feed->{item_xpath}, + 'http://a9.com/-/spec/opensearch/1.1/', + 'itemsPerPage', + $limit, + ); + + $log->debug("...basic feed data added..."); + + $feed->link( + next => + $base . "/$version/$org/$type/$class?searchTerms=$terms&searchSort=$sort&searchSortDir=$sortdir&searchLang=$lang&startIndex=" . int($offset + $limit + 1) . "&count=" . $limit => + 'application/opensearch+xml' + ) if ($offset + $limit < $recs->{count}); + + $feed->link( + previous => + $base . "/$version/$org/$type/$class?searchTerms=$terms&searchSort=$sort&searchSortDir=$sortdir&searchLang=$lang&startIndex=" . int(($offset - $limit) + 1) . "&count=" . $limit => + 'application/opensearch+xml' + ) if ($offset); + + $feed->link( + self => + $base . "/$version/$org/$type/$class?searchTerms=$terms&searchSort=$sort&searchSortDir=$sortdir&searchLang=$lang" => + 'application/opensearch+xml' + ); + + $feed->link( + alternate => + $base . "/$version/$org/rss2-full/$class?searchTerms=$terms&searchSort=$sort&searchSortDir=$sortdir&searchLang=$lang" => + 'application/rss+xml' + ); + + $feed->link( + atom => + $base . "/$version/$org/atom-full/$class?searchTerms=$terms&searchSort=$sort&searchSortDir=$sortdir&searchLang=$lang" => + 'application/atom+xml' + ); + + $feed->link( + 'html' => + $base . "/$version/$org/html/$class?searchTerms=$terms&searchSort=$sort&searchSortDir=$sortdir&searchLang=$lang" => + 'text/html' + ); + + $feed->link( + 'html-full' => + $base . "/$version/$org/html-full/$class?searchTerms=$terms&searchSort=$sort&searchSortDir=$sortdir&searchLang=$lang" => + 'text/html' + ); + + $feed->link( 'unapi-server' => $unapi); + + $log->debug("...feed links added..."); + +# $feed->link( +# opac => +# $root . "../$lang/skin/default/xml/rresult.xml?rt=list&" . +# join('&', map { 'rl=' . $_->[0] } grep { ref $_ && defined $_->[0] } @{$recs->{ids}} ), +# 'text/html' +# ); + + #print $cgi->header( -type => $feed->type, -charset => 'UTF-8') . entityize($feed->toString) . "\n"; + print $cgi->header( -type => $feed->type, -charset => 'UTF-8') . $feed->toString . "\n"; + + $log->debug("...and feed returned."); + + return Apache2::Const::OK; } sub create_record_feed { - my $search = shift; - my $type = shift; - my $records = shift; - my $unapi = shift; + my $search = shift; + my $type = shift; + my $records = shift; + my $unapi = shift; - my $lib = uc(shift()) || '-'; - my $depth = shift; - my $flesh = shift; + my $lib = uc(shift()) || '-'; + my $depth = shift; + my $flesh = shift; - my $paging = shift; + my $paging = shift; - my $cgi = new CGI; - my $base = $cgi->url; - my $host = $cgi->virtual_host || $cgi->server_name; + my $cgi = new CGI; + my $base = $cgi->url; + my $host = $cgi->virtual_host || $cgi->server_name; my ($year,$month,$day) = reverse( (localtime)[3,4,5] ); $year += 1900; @@ -1352,253 +1352,253 @@ sub create_record_feed { my $tag_prefix = sprintf("tag:open-ils.org,$year-\%0.2d-\%0.2d", $month, $day); - my $flesh_feed = defined($flesh) ? $flesh : parse_feed_type($type); + my $flesh_feed = defined($flesh) ? $flesh : parse_feed_type($type); - $type =~ s/(-full|-uris)$//o; + $type =~ s/(-full|-uris)$//o; - my $feed = new OpenILS::WWW::SuperCat::Feed ($type); - $feed->base($base) if ($flesh); - $feed->unapi($unapi) if ($flesh); + my $feed = new OpenILS::WWW::SuperCat::Feed ($type); + $feed->base($base) if ($flesh); + $feed->unapi($unapi) if ($flesh); - $type = 'atom' if ($type eq 'html'); - $type = 'marcxml' if (($type eq 'htmlholdings') || ($type eq 'marctxt') || ($type eq 'ris')); + $type = 'atom' if ($type eq 'html'); + $type = 'marcxml' if (($type eq 'htmlholdings') || ($type eq 'marctxt') || ($type eq 'ris')); - #$records = $supercat->request( "open-ils.supercat.record.object.retrieve", $records )->gather(1); + #$records = $supercat->request( "open-ils.supercat.record.object.retrieve", $records )->gather(1); - my $count = 0; - for my $record (@$records) { - next unless($record); + my $count = 0; + for my $record (@$records) { + next unless($record); - #my $rec = $record->id; - my $rec = $record; + #my $rec = $record->id; + my $rec = $record; - my $item_tag = "$tag_prefix:biblio-record_entry/$rec/$lib"; - $item_tag = "$tag_prefix:metabib-metarecord/$rec/$lib" if ($search eq 'metarecord'); - $item_tag = "$tag_prefix:isbn/$rec/$lib" if ($search eq 'isbn'); - $item_tag .= "/$depth" if (defined($depth)); + my $item_tag = "$tag_prefix:biblio-record_entry/$rec/$lib"; + $item_tag = "$tag_prefix:metabib-metarecord/$rec/$lib" if ($search eq 'metarecord'); + $item_tag = "$tag_prefix:isbn/$rec/$lib" if ($search eq 'isbn'); + $item_tag .= "/$depth" if (defined($depth)); - $item_tag = "$tag_prefix:authority-record_entry/$rec" if ($search eq 'authority'); + $item_tag = "$tag_prefix:authority-record_entry/$rec" if ($search eq 'authority'); - my $xml = $supercat->request( - "open-ils.supercat.$search.$type.retrieve", - $rec - )->gather(1); - next unless $xml; + my $xml = $supercat->request( + "open-ils.supercat.$search.$type.retrieve", + $rec + )->gather(1); + next unless $xml; - my $node = $feed->add_item($xml); - next unless $node; + my $node = $feed->add_item($xml); + next unless $node; - $xml = ''; - if ($lib && ($type eq 'marcxml' || $type eq 'atom') && $flesh > 0) { - my $r = $supercat->request( "open-ils.supercat.$search.holdings_xml.retrieve", $rec, $lib, $depth, $flesh_feed, $paging ); - while ( !$r->complete ) { - $xml .= join('', map {$_->content} $r->recv); - } - $xml .= join('', map {$_->content} $r->recv); - $node->add_holdings($xml); - } + $xml = ''; + if ($lib && ($type eq 'marcxml' || $type eq 'atom') && $flesh > 0) { + my $r = $supercat->request( "open-ils.supercat.$search.holdings_xml.retrieve", $rec, $lib, $depth, $flesh_feed, $paging ); + while ( !$r->complete ) { + $xml .= join('', map {$_->content} $r->recv); + } + $xml .= join('', map {$_->content} $r->recv); + $node->add_holdings($xml); + } - $node->id($item_tag); - #$node->update_ts(cleanse_ISO8601($record->edit_date)); - $node->link(alternate => $feed->unapi . "?id=$item_tag&format=htmlholdings-full" => 'text/html') if ($flesh > 0); - $node->link(opac => $feed->unapi . "?id=$item_tag&format=opac") if ($flesh > 0); - $node->link(unapi => $feed->unapi . "?id=$item_tag") if ($flesh); - $node->link('unapi-id' => $item_tag) if ($flesh); - } + $node->id($item_tag); + #$node->update_ts(cleanse_ISO8601($record->edit_date)); + $node->link(alternate => $feed->unapi . "?id=$item_tag&format=htmlholdings-full" => 'text/html') if ($flesh > 0); + $node->link(opac => $feed->unapi . "?id=$item_tag&format=opac") if ($flesh > 0); + $node->link(unapi => $feed->unapi . "?id=$item_tag") if ($flesh); + $node->link('unapi-id' => $item_tag) if ($flesh); + } - return $feed; + return $feed; } sub string_browse { - my $apache = shift; - return Apache2::Const::DECLINED if (-e $apache->filename); + my $apache = shift; + return Apache2::Const::DECLINED if (-e $apache->filename); - my $cgi = new CGI; - my $year = (gmtime())[5] + 1900; + my $cgi = new CGI; + my $year = (gmtime())[5] + 1900; - my $host = $cgi->virtual_host || $cgi->server_name; + my $host = $cgi->virtual_host || $cgi->server_name; - my $add_path = 0; - if ( $cgi->server_software !~ m|^Apache/2.2| ) { - my $rel_name = $cgi->url(-relative=>1); - $add_path = 1 if ($cgi->url(-path_info=>1) !~ /$rel_name$/); - } + my $add_path = 0; + if ( $cgi->server_software !~ m|^Apache/2.2| ) { + my $rel_name = $cgi->url(-relative=>1); + $add_path = 1 if ($cgi->url(-path_info=>1) !~ /$rel_name$/); + } - my $url = $cgi->url(-path_info=>$add_path); - my $root = (split 'browse', $url)[0]; - my $base = (split 'browse', $url)[0] . 'browse'; - my $unapi = (split 'browse', $url)[0] . 'unapi'; + my $url = $cgi->url(-path_info=>$add_path); + my $root = (split 'browse', $url)[0]; + my $base = (split 'browse', $url)[0] . 'browse'; + my $unapi = (split 'browse', $url)[0] . 'unapi'; - my $path = $cgi->path_info; - $path =~ s/^\///og; + my $path = $cgi->path_info; + $path =~ s/^\///og; - my ($format,$axis,$site,$string,$page,$page_size) = split '/', $path; - #warn " >>> $format -> $axis -> $site -> $string -> $page -> $page_size "; + my ($format,$axis,$site,$string,$page,$page_size) = split '/', $path; + #warn " >>> $format -> $axis -> $site -> $string -> $page -> $page_size "; return item_age_browse($apache) if ($axis eq 'item-age'); # short-circut to the item-age sub - my $status = [$cgi->param('status')]; - my $cpLoc = [$cgi->param('copyLocation')]; - $site ||= $cgi->param('searchOrg'); - $page ||= $cgi->param('startPage') || 0; - $page_size ||= $cgi->param('count') || 9; - - $page = 0 if ($page !~ /^-?\d+$/); - $page_size = 9 if $page_size !~ /^\d+$/; - - my $prev = join('/', $base,$format,$axis,$site,$string,$page - 1,$page_size); - my $next = join('/', $base,$format,$axis,$site,$string,$page + 1,$page_size); - - unless ($string and $axis and grep { $axis eq $_ } keys %browse_types) { - warn "something's wrong..."; - warn " >>> format: $format -> axis: $axis -> site: $site -> string: $string -> page: $page -> page_size: $page_size "; - return undef; - } - - $string = decode_utf8($string); - $string =~ s/\+/ /go; - $string =~ s/'//go; - - my $tree = $supercat->request( - "open-ils.supercat.$axis.browse", - $string, - (($axis =~ /^authority/) ? () : ($site)), - $page_size, - $page, - $status, - $cpLoc - )->gather(1); + my $status = [$cgi->param('status')]; + my $cpLoc = [$cgi->param('copyLocation')]; + $site ||= $cgi->param('searchOrg'); + $page ||= $cgi->param('startPage') || 0; + $page_size ||= $cgi->param('count') || 9; + + $page = 0 if ($page !~ /^-?\d+$/); + $page_size = 9 if $page_size !~ /^\d+$/; + + my $prev = join('/', $base,$format,$axis,$site,$string,$page - 1,$page_size); + my $next = join('/', $base,$format,$axis,$site,$string,$page + 1,$page_size); + + unless ($string and $axis and grep { $axis eq $_ } keys %browse_types) { + warn "something's wrong..."; + warn " >>> format: $format -> axis: $axis -> site: $site -> string: $string -> page: $page -> page_size: $page_size "; + return undef; + } + + $string = decode_utf8($string); + $string =~ s/\+/ /go; + $string =~ s/'//go; + + my $tree = $supercat->request( + "open-ils.supercat.$axis.browse", + $string, + (($axis =~ /^authority/) ? () : ($site)), + $page_size, + $page, + $status, + $cpLoc + )->gather(1); (my $norm_format = $format) =~ s/(-full|-uris)$//o; - my ($header,$content) = $browse_types{$axis}{$norm_format}->($tree,$prev,$next,$format,$unapi,$base,$site); - print $header.$content; - return Apache2::Const::OK; + my ($header,$content) = $browse_types{$axis}{$norm_format}->($tree,$prev,$next,$format,$unapi,$base,$site); + print $header.$content; + return Apache2::Const::OK; } sub string_startwith { - my $apache = shift; - return Apache2::Const::DECLINED if (-e $apache->filename); - - my $cgi = new CGI; - my $year = (gmtime())[5] + 1900; - - my $host = $cgi->virtual_host || $cgi->server_name; - - my $add_path = 0; - if ( $cgi->server_software !~ m|^Apache/2.2| ) { - my $rel_name = $cgi->url(-relative=>1); - $add_path = 1 if ($cgi->url(-path_info=>1) !~ /$rel_name$/); - } - - my $url = $cgi->url(-path_info=>$add_path); - my $root = (split 'startwith', $url)[0]; - my $base = (split 'startwith', $url)[0] . 'startwith'; - my $unapi = (split 'startwith', $url)[0] . 'unapi'; - - my $path = $cgi->path_info; - $path =~ s/^\///og; - - my ($format,$axis,$site,$string,$page,$page_size) = split '/', $path; - #warn " >>> $format -> $axis -> $site -> $string -> $page -> $page_size "; - - my $status = [$cgi->param('status')]; - my $cpLoc = [$cgi->param('copyLocation')]; - $site ||= $cgi->param('searchOrg'); - $page ||= $cgi->param('startPage') || 0; - $page_size ||= $cgi->param('count') || 9; - - $page = 0 if ($page !~ /^-?\d+$/); - $page_size = 9 if $page_size !~ /^\d+$/; - - my $prev = join('/', $base,$format,$axis,$site,$string,$page - 1,$page_size); - my $next = join('/', $base,$format,$axis,$site,$string,$page + 1,$page_size); - - unless ($string and $axis and grep { $axis eq $_ } keys %browse_types) { - warn "something's wrong..."; - warn " >>> format: $format -> axis: $axis -> site: $site -> string: $string -> page: $page -> page_size: $page_size "; - return undef; - } - - $string = decode_utf8($string); - $string =~ s/\+/ /go; - $string =~ s/'//go; - - my $tree = $supercat->request( - "open-ils.supercat.$axis.startwith", - $string, - (($axis =~ /^authority/) ? () : ($site)), - $page_size, - $page, - $status, - $cpLoc - )->gather(1); + my $apache = shift; + return Apache2::Const::DECLINED if (-e $apache->filename); + + my $cgi = new CGI; + my $year = (gmtime())[5] + 1900; + + my $host = $cgi->virtual_host || $cgi->server_name; + + my $add_path = 0; + if ( $cgi->server_software !~ m|^Apache/2.2| ) { + my $rel_name = $cgi->url(-relative=>1); + $add_path = 1 if ($cgi->url(-path_info=>1) !~ /$rel_name$/); + } + + my $url = $cgi->url(-path_info=>$add_path); + my $root = (split 'startwith', $url)[0]; + my $base = (split 'startwith', $url)[0] . 'startwith'; + my $unapi = (split 'startwith', $url)[0] . 'unapi'; + + my $path = $cgi->path_info; + $path =~ s/^\///og; + + my ($format,$axis,$site,$string,$page,$page_size) = split '/', $path; + #warn " >>> $format -> $axis -> $site -> $string -> $page -> $page_size "; + + my $status = [$cgi->param('status')]; + my $cpLoc = [$cgi->param('copyLocation')]; + $site ||= $cgi->param('searchOrg'); + $page ||= $cgi->param('startPage') || 0; + $page_size ||= $cgi->param('count') || 9; + + $page = 0 if ($page !~ /^-?\d+$/); + $page_size = 9 if $page_size !~ /^\d+$/; + + my $prev = join('/', $base,$format,$axis,$site,$string,$page - 1,$page_size); + my $next = join('/', $base,$format,$axis,$site,$string,$page + 1,$page_size); + + unless ($string and $axis and grep { $axis eq $_ } keys %browse_types) { + warn "something's wrong..."; + warn " >>> format: $format -> axis: $axis -> site: $site -> string: $string -> page: $page -> page_size: $page_size "; + return undef; + } + + $string = decode_utf8($string); + $string =~ s/\+/ /go; + $string =~ s/'//go; + + my $tree = $supercat->request( + "open-ils.supercat.$axis.startwith", + $string, + (($axis =~ /^authority/) ? () : ($site)), + $page_size, + $page, + $status, + $cpLoc + )->gather(1); (my $norm_format = $format) =~ s/(-full|-uris)$//o; - my ($header,$content) = $browse_types{$axis}{$norm_format}->($tree,$prev,$next,$format,$unapi,$base,$site); - print $header.$content; - return Apache2::Const::OK; + my ($header,$content) = $browse_types{$axis}{$norm_format}->($tree,$prev,$next,$format,$unapi,$base,$site); + print $header.$content; + return Apache2::Const::OK; } sub item_age_browse { - my $apache = shift; - return Apache2::Const::DECLINED if (-e $apache->filename); - - my $cgi = new CGI; - my $year = (gmtime())[5] + 1900; - - my $host = $cgi->virtual_host || $cgi->server_name; - - my $add_path = 0; - if ( $cgi->server_software !~ m|^Apache/2.2| ) { - my $rel_name = $cgi->url(-relative=>1); - $add_path = 1 if ($cgi->url(-path_info=>1) !~ /$rel_name$/); - } - - my $url = $cgi->url(-path_info=>$add_path); - my $root = (split 'browse', $url)[0]; - my $base = (split 'browse', $url)[0] . 'browse'; - my $unapi = (split 'browse', $url)[0] . 'unapi'; - - my $path = $cgi->path_info; - $path =~ s/^\///og; - - my ($format,$axis,$site,$page,$page_size) = split '/', $path; - #warn " >>> $format -> $axis -> $site -> $page -> $page_size "; - - unless ($axis eq 'item-age') { - warn "something's wrong..."; - warn " >>> $format -> $axis -> $site -> $page -> $page_size "; - return undef; - } - - my $status = [$cgi->param('status')]; - my $cpLoc = [$cgi->param('copyLocation')]; - $site ||= $cgi->param('searchOrg') || '-'; - $page ||= $cgi->param('startPage') || 1; - $page_size ||= $cgi->param('count') || 10; - - $page = 1 if ($page !~ /^-?\d+$/ || $page < 1); - $page_size = 10 if $page_size !~ /^\d+$/; - - my $prev = join('/', $base,$format,$axis,$site,$page - 1,$page_size); - my $next = join('/', $base,$format,$axis,$site,$page + 1,$page_size); - - my $recs = $supercat->request( - "open-ils.supercat.new_book_list", - $site, - $page_size, - $page, - $status, - $cpLoc - )->gather(1); + my $apache = shift; + return Apache2::Const::DECLINED if (-e $apache->filename); + + my $cgi = new CGI; + my $year = (gmtime())[5] + 1900; + + my $host = $cgi->virtual_host || $cgi->server_name; + + my $add_path = 0; + if ( $cgi->server_software !~ m|^Apache/2.2| ) { + my $rel_name = $cgi->url(-relative=>1); + $add_path = 1 if ($cgi->url(-path_info=>1) !~ /$rel_name$/); + } + + my $url = $cgi->url(-path_info=>$add_path); + my $root = (split 'browse', $url)[0]; + my $base = (split 'browse', $url)[0] . 'browse'; + my $unapi = (split 'browse', $url)[0] . 'unapi'; + + my $path = $cgi->path_info; + $path =~ s/^\///og; + + my ($format,$axis,$site,$page,$page_size) = split '/', $path; + #warn " >>> $format -> $axis -> $site -> $page -> $page_size "; + + unless ($axis eq 'item-age') { + warn "something's wrong..."; + warn " >>> $format -> $axis -> $site -> $page -> $page_size "; + return undef; + } + + my $status = [$cgi->param('status')]; + my $cpLoc = [$cgi->param('copyLocation')]; + $site ||= $cgi->param('searchOrg') || '-'; + $page ||= $cgi->param('startPage') || 1; + $page_size ||= $cgi->param('count') || 10; + + $page = 1 if ($page !~ /^-?\d+$/ || $page < 1); + $page_size = 10 if $page_size !~ /^\d+$/; + + my $prev = join('/', $base,$format,$axis,$site,$page - 1,$page_size); + my $next = join('/', $base,$format,$axis,$site,$page + 1,$page_size); + + my $recs = $supercat->request( + "open-ils.supercat.new_book_list", + $site, + $page_size, + $page, + $status, + $cpLoc + )->gather(1); (my $norm_format = $format) =~ s/(-full|-uris)$//o; - my ($header,$content) = $browse_types{$axis}{$norm_format}->($recs,$prev,$next,$format,$unapi,$base,$site); - print $header.$content; - return Apache2::Const::OK; + my ($header,$content) = $browse_types{$axis}{$norm_format}->($recs,$prev,$next,$format,$unapi,$base,$site); + print $header.$content; + return Apache2::Const::OK; } our %qualifier_map = ( @@ -1687,91 +1687,91 @@ our %qualifier_map = ( ); our %qualifier_ids = ( - eg => 'http://open-ils.org/spec/SRU/context-set/evergreen/v1', - dc => 'info:srw/cql-context-set/1/dc-v1.1', - bib => 'info:srw/cql-context-set/1/bib-v1.0', - srw => '' + eg => 'http://open-ils.org/spec/SRU/context-set/evergreen/v1', + dc => 'info:srw/cql-context-set/1/dc-v1.1', + bib => 'info:srw/cql-context-set/1/bib-v1.0', + srw => '' ); our %nested_qualifier_map = ( - eg => { - site => ['site','Evergreen Site Code (shortname)'], - sort => ['sort','Sort on relevance, title, author, pubdate, create_date or edit_date'], - direction => ['dir','Sort direction (asc|desc)'], - available => ['available','Filter to available (true|false)'], - title => ['title'], - author => ['author'], - name => ['author'], - subject => ['subject'], - keyword => ['keyword'], - series => ['series'], - }, - dc => { - title => ['title'], - creator => ['author'], - contributor => ['author'], - publisher => ['keyword'], - subject => ['subject'], - identifier => ['keyword'], - type => [undef], - format => [undef], - language => ['lang'], - }, - bib => { - # Title class: - titleAbbreviated => ['title'], - titleUniform => ['title'], - titleTranslated => ['title'], - titleAlternative => ['title'], - titleSeries => ['series'], + eg => { + site => ['site','Evergreen Site Code (shortname)'], + sort => ['sort','Sort on relevance, title, author, pubdate, create_date or edit_date'], + direction => ['dir','Sort direction (asc|desc)'], + available => ['available','Filter to available (true|false)'], + title => ['title'], + author => ['author'], + name => ['author'], + subject => ['subject'], + keyword => ['keyword'], + series => ['series'], + }, + dc => { + title => ['title'], + creator => ['author'], + contributor => ['author'], + publisher => ['keyword'], + subject => ['subject'], + identifier => ['keyword'], + type => [undef], + format => [undef], + language => ['lang'], + }, + bib => { + # Title class: + titleAbbreviated => ['title'], + titleUniform => ['title'], + titleTranslated => ['title'], + titleAlternative => ['title'], + titleSeries => ['series'], # Author/Name class: - name => ['author'], - namePersonal => ['author'], - namePersonalFamily => ['author'], - namePersonalGiven => ['author'], - nameCorporate => ['author'], - nameConference => ['author'], - - # Subject class: - subjectPlace => ['subject'], - subjectTitle => ['keyword'], - subjectName => ['subject|name'], - subjectOccupation => ['keyword'], + name => ['author'], + namePersonal => ['author'], + namePersonalFamily => ['author'], + namePersonalGiven => ['author'], + nameCorporate => ['author'], + nameConference => ['author'], + + # Subject class: + subjectPlace => ['subject'], + subjectTitle => ['keyword'], + subjectName => ['subject|name'], + subjectOccupation => ['keyword'], # Keyword class: # Dates: - dateIssued => [undef], - dateCreated => [undef], - dateValid => [undef], - dateModified => [undef], - dateCopyright => [undef], + dateIssued => [undef], + dateCreated => [undef], + dateValid => [undef], + dateModified => [undef], + dateCopyright => [undef], # Genre: - genre => ['keyword'], + genre => ['keyword'], # Target Audience: - audience => [undef], + audience => [undef], # Place of Origin: - originPlace => [undef], + originPlace => [undef], # Edition - edition => ['keyword'], + edition => ['keyword'], # Part: - volume => ['keyword'], - issue => ['keyword'], - startPage => ['keyword'], - endPage => ['keyword'], + volume => ['keyword'], + issue => ['keyword'], + startPage => ['keyword'], + endPage => ['keyword'], # Issuance: - issuance => ['keyword'], - }, - srw => { - serverChoice => ['keyword'], - }, + issuance => ['keyword'], + }, + srw => { + serverChoice => ['keyword'], + }, ); # Our authority search options are currently pretty impoverished; @@ -1789,49 +1789,49 @@ our %nested_auth_qualifier_map = ( my $base_explain = < - - - - - - - - - <description primary="true"/> - </databaseInfo> - - <indexInfo> - <set identifier="info:srw/cql-context-set/1/cql-v1.2" name="cql"/> - </indexInfo> - - <schemaInfo> - <schema - identifier="info:srw/schema/1/marcxml-v1.1" - location="http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd" - sort="true" - retrieve="true" - name="marcxml"> - <title>MARC21Slim (marcxml) - - - - - 10 - eg - keyword - all - marcxml - marcxml - 50 - relevant - stem - fuzzy - word - + id="evergreen-sru-explain-full" + authoritative="true" + xmlns:z="http://explain.z3950.org/dtd/2.0/" + xmlns="http://explain.z3950.org/dtd/2.0/"> + + + + + + + + + <description primary="true"/> + </databaseInfo> + + <indexInfo> + <set identifier="info:srw/cql-context-set/1/cql-v1.2" name="cql"/> + </indexInfo> + + <schemaInfo> + <schema + identifier="info:srw/schema/1/marcxml-v1.1" + location="http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd" + sort="true" + retrieve="true" + name="marcxml"> + <title>MARC21Slim (marcxml) + + + + + 10 + eg + keyword + all + marcxml + marcxml + 50 + relevant + stem + fuzzy + word + XML @@ -1839,29 +1839,29 @@ XML my $ex_doc; sub sru_search { - my $cgi = new CGI; + my $cgi = new CGI; - my $req = SRU::Request->newFromCGI( $cgi ); - my $resp = SRU::Response->newFromRequest( $req ); + my $req = SRU::Request->newFromCGI( $cgi ); + my $resp = SRU::Response->newFromRequest( $req ); - # Find the org_unit shortname, if passed as part of the URL - # http://example.com/opac/extras/sru/SHORTNAME - my $url = $cgi->path_info; - my ($shortname, $holdings) = $url =~ m#/?([^/]*)(/holdings)?#; + # Find the org_unit shortname, if passed as part of the URL + # http://example.com/opac/extras/sru/SHORTNAME + my $url = $cgi->path_info; + my ($shortname, $holdings) = $url =~ m#/?([^/]*)(/holdings)?#; - if ( $resp->type eq 'searchRetrieve' ) { + if ( $resp->type eq 'searchRetrieve' ) { - # Older versions of Debian packages returned terms to us double-encoded, - # so we had to forcefully double-decode them a second time with - # an outer decode('utf8', $string) call; this seems to be resolved with - # Debian Lenny packages sometime between 2009-07-27 and 2010-02-15 - my $cql_query = decode_utf8($req->query); - my $search_string = decode_utf8($req->cql->toEvergreen); + # Older versions of Debian packages returned terms to us double-encoded, + # so we had to forcefully double-decode them a second time with + # an outer decode('utf8', $string) call; this seems to be resolved with + # Debian Lenny packages sometime between 2009-07-27 and 2010-02-15 + my $cql_query = decode_utf8($req->query); + my $search_string = decode_utf8($req->cql->toEvergreen); - # Ensure the search string overrides the default site - if ($shortname and $search_string !~ m#site:#) { - $search_string .= " site:$shortname"; - } + # Ensure the search string overrides the default site + if ($shortname and $search_string !~ m#site:#) { + $search_string .= " site:$shortname"; + } my $offset = $req->startRecord; $offset-- if ($offset); @@ -1872,85 +1872,85 @@ sub sru_search { $log->info("SRU search string [$cql_query] converted to [$search_string]\n"); - my $recs = $search->request( - 'open-ils.search.biblio.multiclass.query' => {offset => $offset, limit => $limit} => $search_string => 1 - )->gather(1); - - my $bre = $supercat->request( 'open-ils.supercat.record.object.retrieve' => [ map { $_->[0] } @{$recs->{ids}} ] )->gather(1); - - foreach my $record (@$bre) { - my $marcxml = $record->marc; - # Make the beast conform to a VDX-supported format - # See http://vdxipedia.oclc.org/index.php/Holdings_Parsing - # Trying to implement LIBSOL_852_A format; so much for standards - if ($holdings) { - my $bib_holdings = $supercat->request('open-ils.supercat.record.basic_holdings.retrieve', $record->id, $shortname || '-')->gather(1); - my $marc = MARC::Record->new_from_xml($marcxml, 'UTF8', 'XML'); - - # Force record leader to 'a' as our data is always UTF8 - # Avoids marc8_to_utf8 from being invoked with horrible results - # on the off-chance the record leader isn't correct - my $ldr = $marc->leader; - substr($ldr, 9, 1, 'a'); - $marc->leader($ldr); - - # Expects the record ID in the 001 - $marc->delete_field($_) for ($marc->field('001')); - if (!$marc->field('001')) { - $marc->insert_fields_ordered( - MARC::Field->new( '001', $record->id ) - ); - } - $marc->delete_field($_) for ($marc->field('852')); # remove any legacy 852s - foreach my $cn (keys %$bib_holdings) { - foreach my $cp (@{$bib_holdings->{$cn}->{'copies'}}) { - $marc->insert_fields_ordered( - MARC::Field->new( - '852', '4', '', - a => $cp->{'location'}, - b => $bib_holdings->{$cn}->{'owning_lib'}, - c => $cn, - d => $cp->{'circlib'}, - g => $cp->{'barcode'}, - n => $cp->{'status'}, - ) - ); - } - } - - # Ensure the data is encoded as UTF8 before we hand it off - $marcxml = encode_utf8($marc->as_xml_record()); - $marcxml =~ s/^<\?xml version="1.0" encoding="UTF-8"\?>//o; - - } - $resp->addRecord( - SRU::Response::Record->new( - recordSchema => 'info:srw/schema/1/marcxml-v1.1', - recordData => $marcxml, - recordPosition => ++$offset - ) - ); - } - - $resp->numberOfRecords($recs->{count}); - - } elsif ( $resp->type eq 'explain' ) { - return_sru_explain($cgi, $req, $resp, \$ex_doc, - \%OpenILS::WWW::SuperCat::nested_qualifier_map, - \%OpenILS::WWW::SuperCat::qualifier_ids - ); - - $resp->record( - SRU::Response::Record->new( - recordSchema => 'info:srw/cql-context-set/2/zeerex-1.1', - recordData => $ex_doc - ) - ); - } - - print $cgi->header( -type => 'application/xml' ); - print $U->entityize($resp->asXML) . "\n"; - return Apache2::Const::OK; + my $recs = $search->request( + 'open-ils.search.biblio.multiclass.query' => {offset => $offset, limit => $limit} => $search_string => 1 + )->gather(1); + + my $bre = $supercat->request( 'open-ils.supercat.record.object.retrieve' => [ map { $_->[0] } @{$recs->{ids}} ] )->gather(1); + + foreach my $record (@$bre) { + my $marcxml = $record->marc; + # Make the beast conform to a VDX-supported format + # See http://vdxipedia.oclc.org/index.php/Holdings_Parsing + # Trying to implement LIBSOL_852_A format; so much for standards + if ($holdings) { + my $bib_holdings = $supercat->request('open-ils.supercat.record.basic_holdings.retrieve', $record->id, $shortname || '-')->gather(1); + my $marc = MARC::Record->new_from_xml($marcxml, 'UTF8', 'XML'); + + # Force record leader to 'a' as our data is always UTF8 + # Avoids marc8_to_utf8 from being invoked with horrible results + # on the off-chance the record leader isn't correct + my $ldr = $marc->leader; + substr($ldr, 9, 1, 'a'); + $marc->leader($ldr); + + # Expects the record ID in the 001 + $marc->delete_field($_) for ($marc->field('001')); + if (!$marc->field('001')) { + $marc->insert_fields_ordered( + MARC::Field->new( '001', $record->id ) + ); + } + $marc->delete_field($_) for ($marc->field('852')); # remove any legacy 852s + foreach my $cn (keys %$bib_holdings) { + foreach my $cp (@{$bib_holdings->{$cn}->{'copies'}}) { + $marc->insert_fields_ordered( + MARC::Field->new( + '852', '4', '', + a => $cp->{'location'}, + b => $bib_holdings->{$cn}->{'owning_lib'}, + c => $cn, + d => $cp->{'circlib'}, + g => $cp->{'barcode'}, + n => $cp->{'status'}, + ) + ); + } + } + + # Ensure the data is encoded as UTF8 before we hand it off + $marcxml = encode_utf8($marc->as_xml_record()); + $marcxml =~ s/^<\?xml version="1.0" encoding="UTF-8"\?>//o; + + } + $resp->addRecord( + SRU::Response::Record->new( + recordSchema => 'info:srw/schema/1/marcxml-v1.1', + recordData => $marcxml, + recordPosition => ++$offset + ) + ); + } + + $resp->numberOfRecords($recs->{count}); + + } elsif ( $resp->type eq 'explain' ) { + return_sru_explain($cgi, $req, $resp, \$ex_doc, + \%OpenILS::WWW::SuperCat::nested_qualifier_map, + \%OpenILS::WWW::SuperCat::qualifier_ids + ); + + $resp->record( + SRU::Response::Record->new( + recordSchema => 'info:srw/cql-context-set/2/zeerex-1.1', + recordData => $ex_doc + ) + ); + } + + print $cgi->header( -type => 'application/xml' ); + print $U->entityize($resp->asXML) . "\n"; + return Apache2::Const::OK; } @@ -2189,24 +2189,24 @@ Returns an aou object for a given actor.org_unit shortname or ID. =cut sub get_ou { - my $org = shift || '-'; - my $org_unit; - - if ($org eq '-') { - $org_unit = $actor->request( - 'open-ils.actor.org_unit_list.search' => parent_ou => undef - )->gather(1); - } elsif ($org !~ /^\d+$/o) { - $org_unit = $actor->request( - 'open-ils.actor.org_unit_list.search' => shortname => uc($org) - )->gather(1); - } else { - $org_unit = $actor->request( - 'open-ils.actor.org_unit_list.search' => id => $org - )->gather(1); - } - - return $org_unit; + my $org = shift || '-'; + my $org_unit; + + if ($org eq '-') { + $org_unit = $actor->request( + 'open-ils.actor.org_unit_list.search' => parent_ou => undef + )->gather(1); + } elsif ($org !~ /^\d+$/o) { + $org_unit = $actor->request( + 'open-ils.actor.org_unit_list.search' => shortname => uc($org) + )->gather(1); + } else { + $org_unit = $actor->request( + 'open-ils.actor.org_unit_list.search' => id => $org + )->gather(1); + } + + return $org_unit; } 1; -- 2.43.2