Merge branch 'bug_7241' into 3.12-master
[koha.git] / C4 / External / BakerTaylor.pm
index ce77e6f..d49aa8d 100644 (file)
@@ -13,13 +13,13 @@ package C4::External::BakerTaylor;
 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 #
-# You should have received a copy of the GNU General Public License along with
-# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
-# Suite 330, Boston, MA  02111-1307 USA
+# You should have received a copy of the GNU General Public License along
+# with Koha; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 use XML::Simple;
 use LWP::Simple;
-use LWP::UserAgent;
+use LWP::UserAgent;
 use HTTP::Request::Common;
 use C4::Context;
 use C4::Debug;
@@ -32,7 +32,7 @@ use vars qw($user $pass $agent $image_url $link_url);
 
 BEGIN {
        require Exporter;
-       $VERSION = 0.01;
+    $VERSION = 3.07.00.049;
        @ISA = qw(Exporter);
        @EXPORT_OK = qw(&availability &content_cafe &image_url &link_url &http_jacket_link);
        %EXPORT_TAGS = (all=>\@EXPORT_OK);
@@ -45,33 +45,43 @@ sub initialize {
        $user     = (@_ ? shift : C4::Context->preference('BakerTaylorUsername')    ) || ''; # LL17984
        $pass     = (@_ ? shift : C4::Context->preference('BakerTaylorPassword')    ) || ''; # CC82349
        $link_url = (@_ ? shift : C4::Context->preference('BakerTaylorBookstoreURL'));
-       # https://ocls.mylibrarybookstore.com/MLB/actions/searchHandler.do?nextPage=bookDetails&parentNum=10923&key=
-       $image_url = "http://contentcafe2.btol.com/buynow/Jacket.aspx?UserID=$user&Password=$pass&Product=";
+        $image_url = "http://contentcafe2.btol.com/ContentCafe/Jacket.aspx?UserID=$user&Password=$pass&Options=Y&Return=T&Type=S&Value=";
        $agent = "Koha/$VERSION [en] (Linux)";
                        #"Mozilla/4.76 [en] (Win98; U)",        #  if for some reason you want to go stealth, you might prefer this
 }
 
-sub image_url ($) {
-       ($user and $pass) or return undef;
-       return $image_url . (@_ ? shift : '');
+sub image_url {
+       ($user and $pass) or return;
+       my $isbn = (@_ ? shift : '');
+       $isbn =~ s/(p|-)//g;    # sanitize
+       return $image_url . $isbn;
+}
+sub link_url {
+       my $isbn = (@_ ? shift : '');
+       $isbn =~ s/(p|-)//g;    # sanitize
+       $link_url or return;
+       return $link_url . $isbn;
 }
-sub link_url ($) {
-       $link_url or return undef;
-       return $link_url  . (@_ ? shift : '');
+sub content_cafe_url {
+       ($user and $pass) or return;
+       my $isbn = (@_ ? shift : '');
+       $isbn =~ s/(p|-)//g;    # sanitize
+       return "http://contentcafe2.btol.com/ContentCafeClient/ContentCafe.aspx?UserID=$user&Password=$pass&Options=Y&ItemKey=$isbn";
 }
-sub http_jacket_link ($) {
-       my $isbn = shift or return undef;
+sub http_jacket_link {
+       my $isbn = shift or return;
+       $isbn =~ s/(p|-)//g;    # sanitize
        my $image = availability($isbn);
        my $alt = "Buy this book";
-       $image and $image = qq(<img class="btjacket" alt="Buy this book" src="$image" />);
+       $image and $image = qq(<img class="btjacket" alt="$alt" src="$image" />);
        my $link = &link_url($isbn);
        unless ($link) {return $image || '';}
        return sprintf qq(<a class="btlink" href="%s">%s</a>),$link,($image||$alt);
 }
 
-sub availability ($) {
-       my $isbn = shift or return undef;
-       ($user and $pass) or return undef;
+sub availability {
+       my $isbn = shift or return;
+       ($user and $pass) or return;
        $isbn =~ s/(p|-)//g;    # sanitize
        my $url = "http://contentcafe2.btol.com/ContentCafe/InventoryAvailability.asmx/CheckInventory?UserID=$user&Password=$pass&Value=$isbn";
        $debug and warn __PACKAGE__ . " request:\n$url\n";
@@ -87,61 +97,43 @@ sub availability ($) {
        return ($avail and $avail !~ /^false$/i) ? &image_url($isbn) : 0;
 }
 
-sub content_cafe ($) {
-       my $isbn = shift or return undef;
-       my $ua = LWP::UserAgent->new(
-               agent => $agent,
-               keep_alive => 1,
-               env_proxy  => 1,
-       );
-       my $available = 1;
-       my $uri = "http://contentcafe2.btol.com/ContentCafe/InventoryAvailability.asmx/CheckInventory?UserID=$user&Password=$pass&Value=$isbn";
-       my $req = HTTP::Request->new(GET => $uri);
-       $req->header (
-               'Accept' => 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*',
-               'Accept-Charset' => 'iso-8859-1,*,utf-8',
-               'Accept-Language' => 'en-US' );
-       my $res = $ua->request($req);
-       my $content = $res->content();
-       if ($content =~ /This book is temporarily unavailable/) {
-               return undef;
-       }
-       return $available;
-}
-
 1;
 
 __END__
 
 =head1 NAME
 
-C4::External::BakerTaylor - Functions for retrieving content from Baker and Taylor, inventory availability and "Content Cafe".
+C4::External::BakerTaylor
+
+=head1 DESCRIPTION
+
+Functions for retrieving content from Baker and Taylor, inventory availability and "Content Cafe".
+
 The settings for this module are controlled by System Preferences:
 
 These can be overridden for testing purposes using the initialize function.
 
 =head1 FUNCTIONS
 
-=head1 availability($isbn);
+=head2 availability($isbn);
 
-=head2 $isbn is a isbn string
+$isbn is a isbn string
 
 =head1 NOTES
 
 A request with failed authentication might see this back from Baker + Taylor: 
 
-<?xml version="1.0" encoding="utf-8"?>
-<InventoryAvailability xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" DateTime="2008-03-07T22:01:25.6520429-05:00" xmlns="http://ContentCafe2.btol.com">
-  <Key Type="Undefined">string</Key>
-  <Availability>false</Availability>
-  <Error>Invalid UserID</Error>
-</InventoryAvailability>
+ <?xml version="1.0" encoding="utf-8"?>
+ <InventoryAvailability xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" DateTime="2008-03-07T22:01:25.6520429-05:00" xmlns="http://ContentCafe2.btol.com">
+   <Key Type="Undefined">string</Key>
+   <Availability>false</Availability>
+   <Error>Invalid UserID</Error>
+ </InventoryAvailability>
 
 Such response will trigger a warning for each request (potentially many).  Point being, do not leave this module configured with incorrect username and password in production.
 
 =head1 SEE ALSO
 
-C4::Amazon
 LWP::UserAgent
 
 =head1 AUTHOR