Adds Syndetics Reviews
authorJoshua Ferraro <jmf@liblime.com>
Sun, 8 Feb 2009 18:59:21 +0000 (12:59 -0600)
committerHenri-Damien LAURENT <henridamien.laurent@biblibre.com>
Thu, 16 Apr 2009 15:45:50 +0000 (17:45 +0200)
Signed-off-by: Galen Charlton <galen.charlton@liblime.com>
C4/Auth.pm
C4/External/Syndetics.pm
admin/systempreferences.pl
installer/data/mysql/updatedatabase.pl
koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl
opac/opac-detail.pl

index b0330c4..cfb65b1 100644 (file)
@@ -276,6 +276,7 @@ sub get_template_and_user {
                        SyndeticsSummary                         => C4::Context->preference("SyndeticsSummary"),
                        SyndeticsEditions                => C4::Context->preference("SyndeticsEditions"),
                        SyndeticsExcerpt                     => C4::Context->preference("SyndeticsExcerpt"),
+                       SyndeticsReviews                         => C4::Context->preference("SyndeticsReviews"),
                  );
 
     if ( $in->{'type'} eq "intranet" ) {
index f10fa3b..b9f480b 100644 (file)
@@ -36,6 +36,7 @@ BEGIN {
         &get_syndetics_toc
                &get_syndetics_editions
                &get_syndetics_excerpt
+               &get_syndetics_reviews
     );
 }
 
@@ -69,11 +70,19 @@ sub get_syndetics_summary {
     my $syndetics_client_code = C4::Context->preference('SyndeticsClientCode');
 
     my $url = "http://syndetics.com/index.aspx?isbn=$isbn/SUMMARY.XML&client=$syndetics_client_code&type=xw10";
-    # warn $url;
-    my $content = get($url);
+       my $ua = LWP::UserAgent->new;
+    $ua->timeout(10);
+    $ua->env_proxy;
+       my $response = $ua->get($url);
+       unless ($response->content_type =~ /xml/) {
+               return;
+    }  
+
+    my $content = $response->content;
+
     warn "could not retrieve $url" unless $content;
     my $xmlsimple = XML::Simple->new();
-    my $response = $xmlsimple->XMLin(
+    $response = $xmlsimple->XMLin(
         $content,
         forcearray => [ qw(Fld520) ],
     ) unless !$content;
@@ -93,11 +102,19 @@ sub get_syndetics_toc {
     my $syndetics_client_code = C4::Context->preference('SyndeticsClientCode');
 
     my $url = "http://syndetics.com/index.aspx?isbn=$isbn/TOC.XML&client=$syndetics_client_code&type=xw10";
-    #warn $url;
-    my $content = get($url);
+       my $ua = LWP::UserAgent->new;
+    $ua->timeout(10);
+    $ua->env_proxy;
+        
+       my $response = $ua->get($url);
+       unless ($response->content_type =~ /xml/) {
+               return;
+       }  
+
+       my $content = $response->content;
     warn "could not retrieve $url" unless $content;
     my $xmlsimple = XML::Simple->new();
-    my $response = $xmlsimple->XMLin(
+    $response = $xmlsimple->XMLin(
         $content,
         forcearray => [ qw(Fld970) ],
     ) unless !$content;
@@ -117,11 +134,18 @@ sub get_syndetics_excerpt {
     my $syndetics_client_code = C4::Context->preference('SyndeticsClientCode');
 
     my $url = "http://syndetics.com/index.aspx?isbn=$isbn/DBCHAPTER.XML&client=$syndetics_client_code&type=xw10";
-    #warn $url;
-    my $content = get($url);
+       my $ua = LWP::UserAgent->new;
+    $ua->timeout(10);
+    $ua->env_proxy;
+    my $response = $ua->get($url);
+    unless ($response->content_type =~ /xml/) {
+               return;
+       }  
+        
+       my $content = $response->content;
     warn "could not retrieve $url" unless $content;
     my $xmlsimple = XML::Simple->new();
-    my $response = $xmlsimple->XMLin(
+    $response = $xmlsimple->XMLin(
         $content,
         forcearray => [ qw(Fld520) ],
     ) unless !$content;
@@ -131,6 +155,65 @@ sub get_syndetics_excerpt {
     return XMLout($excerpt) if $excerpt;
 }
 
+sub get_syndetics_reviews {
+    my ( $isbn ) = @_;
+
+    #normalize the ISBN
+    $isbn = _normalize_match_point ($isbn);
+
+    # grab the AWSAccessKeyId: mine is '0V5RRRRJZ3HR2RQFNHR2'
+    my $syndetics_client_code = C4::Context->preference('SyndeticsClientCode');
+       my @reviews;
+       my $review_sources = [
+       {title => 'Library Journal Review', file => 'LJREVIEW.XML'},
+       {title => 'Publishers Weekly Review', file => 'PWREVIEW.XML'},
+       {title => 'School Library Journal Review', file => 'SLJREVIEW.XML'},
+       {title => 'CHOICE Review', file => 'CHREVIEW.XML'},
+       {title => 'Booklist Review', file => 'BLREVIEW.XML'},
+       {title => 'Horn Book Review', file => 'HBREVIEW.XML'},
+       {title => 'Kirkus Book Review', file => 'KIRKREVIEW.XML'},
+       {title => 'Criticas Review', file => 'CRITICASREVIEW.XML'}
+       ];
+
+       for my $source (@$review_sources) {
+       my $url = "http://syndetics.com/index.aspx?isbn=$isbn/$source->{file}&client=$syndetics_client_code&type=xw10";
+
+               my $ua = LWP::UserAgent->new;
+               $ua->timeout(10);
+               $ua->env_proxy;
+               my $response = $ua->get($url);
+               unless ($response->content_type =~ /xml/) {
+                       next;
+               }
+
+       my $content = $response->content;
+       warn "could not retrieve $url" unless $content;
+       my $xmlsimple = XML::Simple->new();
+               eval {
+               $response = $xmlsimple->XMLin(
+               $content,
+               forcearray => [ qw(Fld520) ],
+       ) unless !$content;
+               };
+
+               # This particular review deserializes differently
+               if ($source->{file} =~ /BLREVIEW.XML/) {
+                       for my $subfield_a (@{$response->{VarFlds}->{VarDFlds}->{Notes}->{Fld520}}) {
+                               my @content;
+                               for my $content (@{$subfield_a->{a}->{content}}) {
+                                       push @content, {content => $content};
+                               }
+                               push @reviews, {title => $source->{title}, reviews => \@content}; #[ {content => $content} ]};
+                       }
+               }
+               else {
+                       push @reviews, {title => $source->{title}, reviews => \@{$response->{VarFlds}->{VarDFlds}->{Notes}->{Fld520}}} unless $@;
+               }
+
+       }
+       return \@reviews;
+}
 
 sub get_syndetics_editions {
     my ( $isbn ) = @_;
@@ -142,11 +225,20 @@ sub get_syndetics_editions {
     my $syndetics_client_code = C4::Context->preference('SyndeticsClientCode');
 
     my $url = "http://syndetics.com/index.aspx?isbn=$isbn/FICTION.XML&client=$syndetics_client_code&type=xw10";
-    # warn $url;
-    my $content = get($url);
+       my $ua = LWP::UserAgent->new;
+    $ua->timeout(10);
+    $ua->env_proxy;
+
+    my $response = $ua->get($url);
+    unless ($response->content_type =~ /xml/) {
+        return;
+    }  
+
+    my $content = $response->content;
+
     warn "could not retrieve $url" unless $content;
     my $xmlsimple = XML::Simple->new();
-    my $response = $xmlsimple->XMLin(
+    $response = $xmlsimple->XMLin(
         $content,
         forcearray => [ qw(Fld020) ],
     ) unless !$content;
index 29dbcec..ee546fd 100755 (executable)
@@ -239,6 +239,7 @@ $tabsysprefs{SyndeticsTOC}            = 'EnhancedContent';
 $tabsysprefs{SyndeticsSummary}        = 'EnhancedContent';
 $tabsysprefs{SyndeticsEditions}       = 'EnhancedContent';
 $tabsysprefs{SyndeticsExcerpt}       = 'EnhancedContent';
+$tabsysprefs{SyndeticsReviews}       = 'EnhancedContent';
 
 # FRBR
 $tabsysprefs{FRBRizeEditions}     = "EnhancedContent";
index a108092..09210cd 100755 (executable)
@@ -2236,6 +2236,8 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
 
         $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsExcerpt', '0', 'Display Excerpts and first chapters on OPAC from Syndetics','','YesNo')");
 
+        $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsReviews', '0', 'Display Reviews on OPAC from Syndetics','','YesNo')");
+
     print "Upgrade to $DBversion done (added Syndetics Enhanced Content system preferences)\n";
     SetVersion ($DBversion);
 }
index a5ef870..256d850 100644 (file)
 <!-- TMPL_IF NAME="SyndeticsExcerpt" --><!-- TMPL_IF NAME="SYNDETICS_EXCERPT" -->
  <li> <a href="/cgi-bin/koha/opac-detail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->#excerpt">Excerpt</a></li>
 <!-- /TMPL_IF --><!-- /TMPL_IF -->
+<!-- TMPL_IF NAME="SyndeticsReviews" --><!-- TMPL_IF NAME="SYNDETICS_REVIEWS" -->
+ <li> <a href="/cgi-bin/koha/opac-detail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->#reviews">Reviews</a></li>
+<!-- /TMPL_IF --><!-- /TMPL_IF -->
 <!-- TMPL_IF name="subscriptionsnumber" --><li>
             <a href="/cgi-bin/koha/opac-detail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->#subscriptions">Subscriptions</a>
     </li><!-- /TMPL_IF -->
 <!-- /TMPL_IF -->
 </div>
 </div>
+
+<div id="reviews">
+<div class="content_set">
+<!-- TMPL_IF NAME="SyndeticsReviews" --><!-- TMPL_IF NAME="SYNDETICS_REVIEWS" -->
+<!-- TMPL_LOOP NAME="SYNDETICS_REVIEWS" -->
+    <!-- TMPL_IF NAME="title" -->
+    <h4><!-- TMPL_VAR NAME="title" --></h4>
+       <!-- TMPL_LOOP NAME="reviews" -->
+
+       <!-- TMPL_IF NAME="content" -->
+               <!-- TMPL_VAR NAME="content" -->
+       <!-- /TMPL_IF -->
+
+       <!-- /TMPL_LOOP -->
+    <!-- /TMPL_IF -->
+<!-- /TMPL_LOOP -->
+<!-- /TMPL_IF --><!-- /TMPL_IF -->
+</div>
+</div>
+
 <!-- TMPL_IF name="subscriptionsnumber" -->
 <div id="subscriptions">
     <h2>This is a serial subscription</h2>
index afd0602..0964647 100755 (executable)
@@ -33,7 +33,7 @@ use C4::Tags qw(get_tags);
 use C4::Dates qw/format_date/;
 use C4::XISBN qw(get_xisbns get_biblionumber_from_isbn get_biblio_from_xisbn);
 use C4::External::Amazon;
-use C4::External::Syndetics qw(get_syndetics_summary get_syndetics_toc get_syndetics_excerpt );
+use C4::External::Syndetics qw(get_syndetics_summary get_syndetics_toc get_syndetics_excerpt get_syndetics_reviews );
 use C4::Review;
 use C4::Serials;
 use C4::Members;
@@ -296,6 +296,8 @@ if ( C4::Context->preference("SyndeticsEnabled") && C4::Context->preference("Syn
        my $syndetics_summary = &get_syndetics_summary($xisbn);
        $template->param( SYNDETICS_SUMMARY => $syndetics_summary );
        };
+       warn $@ if $@;
+
 }
 
 if ( C4::Context->preference("SyndeticsEnabled") && C4::Context->preference("SyndeticsTOC") ) {
@@ -303,13 +305,23 @@ if ( C4::Context->preference("SyndeticsEnabled") && C4::Context->preference("Syn
     my $syndetics_toc = &get_syndetics_toc($xisbn);
     $template->param( SYNDETICS_TOC => $syndetics_toc );
        };
+       warn $@ if $@;
 }
 
-if ( C4::Context->preference("SyndeticsEnabled") && C4::Context->preference("SyndeticsTOC") ) {
+if ( C4::Context->preference("SyndeticsEnabled") && C4::Context->preference("SyndeticsExcerpt") ) {
     eval {
     my $syndetics_excerpt = &get_syndetics_excerpt($xisbn);
     $template->param( SYNDETICS_EXCERPT => $syndetics_excerpt );
     };
+       warn $@ if $@;
+}
+
+if ( C4::Context->preference("SyndeticsEnabled") && C4::Context->preference("SyndeticsReviews") ) {
+    eval {
+    my $syndetics_reviews = &get_syndetics_reviews($xisbn);
+    $template->param( SYNDETICS_REVIEWS => $syndetics_reviews );
+    };
+       warn $@ if $@;
 }
 
 # Shelf Browser Stuff