Add Syndetics AuthorNotes, Awards, Series
authorJoshua Ferraro <jmf@liblime.com>
Mon, 16 Feb 2009 16:28:00 +0000 (10:28 -0600)
committerGalen Charlton <galen.charlton@liblime.com>
Fri, 27 Mar 2009 22:23:50 +0000 (17:23 -0500)
This patch also includes a new function to retrieve the index
page from Syndetics and parse it for available content prior to
retrieving content; this is done to speed up syndetics content
by not retrieving content that doesn't exist for an item. However,
Syndetics continues to be a very slow service compared to Amazon.com
and other enhanced content services

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 cfb65b1..e846926 100644 (file)
@@ -277,6 +277,9 @@ sub get_template_and_user {
                        SyndeticsEditions                => C4::Context->preference("SyndeticsEditions"),
                        SyndeticsExcerpt                     => C4::Context->preference("SyndeticsExcerpt"),
                        SyndeticsReviews                         => C4::Context->preference("SyndeticsReviews"),
+                       SyndeticsAuthorNotes             => C4::Context->preference("SyndeticsAuthorNotes"),
+                       SyndeticsAwards                          => C4::Context->preference("SyndeticsAwards"),
+                       SyndeticsSeries                          => C4::Context->preference("SyndeticsSeries"),
                  );
 
     if ( $in->{'type'} eq "intranet" ) {
index b9f480b..b54a6d5 100644 (file)
@@ -32,11 +32,13 @@ BEGIN {
     $VERSION = 0.03;
     @ISA = qw(Exporter);
     @EXPORT = qw(
+        &get_syndetics_index
         &get_syndetics_summary
         &get_syndetics_toc
-               &get_syndetics_editions
-               &get_syndetics_excerpt
-               &get_syndetics_reviews
+        &get_syndetics_editions
+        &get_syndetics_excerpt
+        &get_syndetics_reviews
+        &get_syndetics_anotes
     );
 }
 
@@ -60,6 +62,41 @@ Get Summary data from Syndetics
 
 =cut
 
+sub get_syndetics_index {
+    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 $url = "http://syndetics.com/index.aspx?isbn=$isbn/INDEX.XML&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/) {
+        return;
+    }
+
+    my $content = $response->content;
+    warn "could not retrieve $url" unless $content;
+    my $xmlsimple = XML::Simple->new();
+    $response = $xmlsimple->XMLin(
+        $content,
+    ) unless !$content;
+
+    my $syndetics_elements;
+    for my $available_type ('SUMMARY','TOC','FICTION','AWARDS1','SERIES1','SPSUMMARY','SPREVIEW','AVSUMMARY','DBCHAPTER','LJREVIEW','PWREVIEW','SLJREVIEW','CHREVIEW','BLREVIEW','HBREVIEW','KIREVIEW','CRITICASREVIEW','ANOTES') {
+        if (exists $response->{$available_type} && $response->{$available_type} =~ /$available_type/) {
+            $syndetics_elements->{$available_type} = $available_type;
+            #warn "RESPONSE: $available_type : $response->{$available_type}";
+        }
+    }
+    return $syndetics_elements if $syndetics_elements;
+}
+
 sub get_syndetics_summary {
     my ( $isbn ) = @_;
 
@@ -70,12 +107,12 @@ 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";
-       my $ua = LWP::UserAgent->new;
+    my $ua = LWP::UserAgent->new;
     $ua->timeout(10);
     $ua->env_proxy;
-       my $response = $ua->get($url);
-       unless ($response->content_type =~ /xml/) {
-               return;
+    my $response = $ua->get($url);
+    unless ($response->content_type =~ /xml/) {
+        return;
     }  
 
     my $content = $response->content;
@@ -86,9 +123,9 @@ sub get_syndetics_summary {
         $content,
         forcearray => [ qw(Fld520) ],
     ) unless !$content;
-       # manipulate response USMARC VarFlds VarDFlds Notes Fld520 a
-       my $summary;
-       $summary = \@{$response->{VarFlds}->{VarDFlds}->{Notes}->{Fld520}} if $response;
+    # manipulate response USMARC VarFlds VarDFlds Notes Fld520 a
+    my $summary;
+    $summary = \@{$response->{VarFlds}->{VarDFlds}->{Notes}->{Fld520}} if $response;
     return $summary if $summary;
 }
 
@@ -102,16 +139,16 @@ 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";
-       my $ua = LWP::UserAgent->new;
+    my $ua = LWP::UserAgent->new;
     $ua->timeout(10);
     $ua->env_proxy;
         
-       my $response = $ua->get($url);
-       unless ($response->content_type =~ /xml/) {
-               return;
-       }  
+    my $response = $ua->get($url);
+    unless ($response->content_type =~ /xml/) {
+        return;
+    }  
 
-       my $content = $response->content;
+    my $content = $response->content;
     warn "could not retrieve $url" unless $content;
     my $xmlsimple = XML::Simple->new();
     $response = $xmlsimple->XMLin(
@@ -120,7 +157,7 @@ sub get_syndetics_toc {
     ) unless !$content;
     # manipulate response USMARC VarFlds VarDFlds Notes Fld520 a
     my $toc;
-       $toc = \@{$response->{VarFlds}->{VarDFlds}->{SSIFlds}->{Fld970}} if $response;
+    $toc = \@{$response->{VarFlds}->{VarDFlds}->{SSIFlds}->{Fld970}} if $response;
     return $toc if $toc;
 }
 
@@ -134,15 +171,15 @@ 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";
-       my $ua = LWP::UserAgent->new;
+    my $ua = LWP::UserAgent->new;
     $ua->timeout(10);
     $ua->env_proxy;
     my $response = $ua->get($url);
     unless ($response->content_type =~ /xml/) {
-               return;
-       }  
+        return;
+    }  
         
-       my $content = $response->content;
+    my $content = $response->content;
     warn "could not retrieve $url" unless $content;
     my $xmlsimple = XML::Simple->new();
     $response = $xmlsimple->XMLin(
@@ -156,63 +193,70 @@ sub get_syndetics_excerpt {
 }
 
 sub get_syndetics_reviews {
-    my ( $isbn ) = @_;
+    my ( $isbn, $syndetics_elements ) = @_;
 
     #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 @reviews;
+    my $review_sources = [
+    {title => 'Library Journal Review', file => 'LJREVIEW.XML', element => 'LJREVIEW'},
+    {title => 'Publishers Weekly Review', file => 'PWREVIEW.XML', element => 'PWREVIEW'},
+    {title => 'School Library Journal Review', file => 'SLJREVIEW.XML', element => 'SLJREVIEW'},
+    {title => 'CHOICE Review', file => 'CHREVIEW.XML', element => 'CHREVIEW'},
+    {title => 'Booklist Review', file => 'BLREVIEW.XML', element => 'BLREVIEW'},
+    {title => 'Horn Book Review', file => 'HBREVIEW.XML', element => 'HBREVIEW'},
+    {title => 'Kirkus Book Review', file => 'KIREVIEW.XML', element => 'KIREVIEW'},
+    {title => 'Criticas Review', file => 'CRITICASREVIEW.XML', element => 'CRITICASREVIEW'},
+    {title => 'Spanish Review', file => 'SPREVIEW.XML', element => 'SPREVIEW'},
+    ];
+
+    for my $source (@$review_sources) {
+        if ($syndetics_elements->{$source->{element}} and $source->{element} =~ $syndetics_elements->{$source->{element}}) {
+
+        } else {
+            #warn "Skipping $source->{element} doesn't match $syndetics_elements->{$source->{element}} \n";
+            next;
+        }
+        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;
+        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,
+            ForceContent => 1,
+            forcearray => [ qw(Fld520) ]
+        ) unless !$content;
+        };
+            
+        for my $subfield_a (@{$response->{VarFlds}->{VarDFlds}->{Notes}->{Fld520}}) {
+            my @content;
+            # this is absurd, but sometimes this data serializes differently
+            if(ref($subfield_a->{a}->{content}) eq 'ARRAY') {
+                for my $content (@{$subfield_a->{a}->{content}}) {
+                    push @content, {content => $content};
+                }
+            }
+            else {
+                push @content, {content => $subfield_a->{a}->{content}};
+            }
+            push @reviews, {title => $source->{title}, reviews => \@content};
+        }
+    }
+    return \@reviews;
 }
 
 sub get_syndetics_editions {
@@ -225,7 +269,7 @@ 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";
-       my $ua = LWP::UserAgent->new;
+    my $ua = LWP::UserAgent->new;
     $ua->timeout(10);
     $ua->env_proxy;
 
@@ -244,16 +288,60 @@ sub get_syndetics_editions {
     ) unless !$content;
     # manipulate response USMARC VarFlds VarDFlds Notes Fld520 a
     my $similar_items;
-       $similar_items = \@{$response->{VarFlds}->{VarDFlds}->{NumbCode}->{Fld020}} if $response;
+    $similar_items = \@{$response->{VarFlds}->{VarDFlds}->{NumbCode}->{Fld020}} if $response;
     return $similar_items if $similar_items;
 }
 
+sub get_syndetics_anotes {
+    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 $url = "http://syndetics.com/index.aspx?isbn=$isbn/ANOTES.XML&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/) {
+        return;
+    }
+
+    my $content = $response->content;
+
+    warn "could not retrieve $url" unless $content;
+    my $xmlsimple = XML::Simple->new();
+    $response = $xmlsimple->XMLin(
+        $content,
+        forcearray => [ qw(Fld980) ],
+        ForceContent => 1,
+    ) unless !$content;
+    my @anotes;
+    for my $fld980 (@{$response->{VarFlds}->{VarDFlds}->{SSIFlds}->{Fld980}}) {
+        # this is absurd, but sometimes this data serializes differently
+        if(ref($fld980->{a}->{content}) eq 'ARRAY') {
+            for my $content (@{$fld980->{a}->{content}}) {
+                push @anotes, {content => $content};
+                
+            }
+        }
+        else {
+            push @anotes, {content => $fld980->{a}->{content}};
+        }
+    }
+    return \@anotes;
+}
+
 sub _normalize_match_point {
-       my $match_point = shift;
-       (my $normalized_match_point) = $match_point =~ /([\d-]*[X]*)/;
-       $normalized_match_point =~ s/-//g;
+    my $match_point = shift;
+    (my $normalized_match_point) = $match_point =~ /([\d-]*[X]*)/;
+    $normalized_match_point =~ s/-//g;
 
-       return $normalized_match_point;
+    return $normalized_match_point;
 }
 
 1;
index ee546fd..3f92a77 100755 (executable)
@@ -238,8 +238,12 @@ $tabsysprefs{SyndeticsCoverImages}    = 'EnhancedContent';
 $tabsysprefs{SyndeticsTOC}            = 'EnhancedContent';
 $tabsysprefs{SyndeticsSummary}        = 'EnhancedContent';
 $tabsysprefs{SyndeticsEditions}       = 'EnhancedContent';
-$tabsysprefs{SyndeticsExcerpt}       = 'EnhancedContent';
-$tabsysprefs{SyndeticsReviews}       = 'EnhancedContent';
+$tabsysprefs{SyndeticsExcerpt}        = 'EnhancedContent';
+$tabsysprefs{SyndeticsReviews}        = 'EnhancedContent';
+$tabsysprefs{SyndeticsAuthorNotes}    = 'EnhancedContent';
+$tabsysprefs{SyndeticsAwards}         = 'EnhancedContent';
+$tabsysprefs{SyndeticsSeries}         = 'EnhancedContent';
+
 
 # FRBR
 $tabsysprefs{FRBRizeEditions}     = "EnhancedContent";
index 09210cd..140c26d 100755 (executable)
@@ -2238,6 +2238,12 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
 
         $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsReviews', '0', 'Display Reviews on OPAC from Syndetics','','YesNo')");
 
+       $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsAuthorNotes', '0', 'Display Notes about the Author on OPAC from Syndetics','','YesNo')");
+
+    $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsAwards', '0', 'Display Awards on OPAC from Syndetics','','YesNo')");
+
+    $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsSeries', '0', 'Display Series information on OPAC from Syndetics','','YesNo')");
+
     print "Upgrade to $DBversion done (added Syndetics Enhanced Content system preferences)\n";
     SetVersion ($DBversion);
 }
index 256d850..920406e 100644 (file)
         </div>
     <!-- /TMPL_IF -->
 
+        <!-- TMPL_IF NAME="SyndeticsEnabled" --><!-- TMPL_IF NAME="SyndeticsSeries" --><!-- TMPL_IF NAME="SyndeticsSERIES1Exists" -->
+        <span class="results_summary">
+        <span class="label">Series Information:</span> <a target="_blank" href="http://syndetics.com/ffseries.aspx?isbn=<!-- TMPL_VAR NAME="amazonisbn" -->&type=series&num=1&client=<!-- TMPL_VAR NAME="SyndeticsClientCode" -->">Click to open in new window</a>
+        </span>
+        <!-- /TMPL_IF --><!-- /TMPL_IF -->
+        <!-- TMPL_IF NAME="SyndeticsAwards" --><!-- TMPL_IF NAME="SyndeticsAWARDS1Exists" -->
+        <span class="results_summary">
+        <span class="label">Awards:</span> <a target="_blank" href="http://syndetics.com/ffawards.aspx?isbn=<!-- TMPL_VAR NAME="amazonisbn" -->&type=awards&client=<!-- TMPL_VAR NAME="SyndeticsClientCode" -->">Click to open in new window</a>
+        </span>
+        <!-- /TMPL_IF --><!-- /TMPL_IF --><!-- /TMPL_IF -->
+
     <!-- TMPL_IF NAME="BakerTaylorContentURL" -->
         <span class="results_summary">
         <span class="label">Enhanced Content:</span><!-- TMPL_IF NAME="OPACURLOpenInNewWindow" --><a href="<!-- TMPL_VAR NAME="BakerTaylorContentURL" ESCAPE="HTML" -->" target="_blank">Content Cafe</a><!-- TMPL_ELSE --><a href="<!-- TMPL_VAR NAME="BakerTaylorContentURL" ESCAPE="HTML" -->">Content Cafe</a><!-- /TMPL_IF -->
 <!-- TMPL_IF NAME="SYNDETICS_TOC" -->
  <li> <a href="/cgi-bin/koha/opac-detail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->#toc">TOC</a></li>
 <!-- /TMPL_IF -->
+<!-- TMPL_IF NAME="SyndeticsEnabled" -->
 <!-- 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="SyndeticsAuthorNotes" --><!-- TMPL_IF NAME="SYNDETICS_ANOTES" -->
+ <li> <a href="/cgi-bin/koha/opac-detail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->#anotes">About the Author</a></li>
+<!-- /TMPL_IF --><!-- /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 -->
 <!-- /TMPL_LOOP -->
 <!-- /TMPL_IF-->
-
-<!-- TMPL_IF NAME="SyndeticsSummary" -->
+<!-- TMPL_IF NAME="SyndeticsEnabled" -->
+<!-- TMPL_IF NAME="SyndeticsSummary" --><!-- TMPL_IF NAME="SyndeticsSUMMARYExists" -->
 <!-- TMPL_LOOP NAME="SYNDETICS_SUMMARY" -->
     <!-- TMPL_IF NAME="a" -->
-    <h4>From Syndetics:</h4>
+    <h4>Enhanced Description:</h4>
     <p><!-- TMPL_VAR NAME="a" --></p>
     <!-- /TMPL_IF -->
 <!-- /TMPL_LOOP -->
+<!-- /TMPL_IF --><!-- /TMPL_IF -->
 <!-- /TMPL_IF -->
 
 <!-- TMPL_IF name="MARCNOTES" -->
 <!-- /TMPL_IF -->
 </div>
 </div>
-
+<!-- TMPL_IF NAME="SyndeticsEnabled" -->
 <div id="toc">
 <div class="content_set">
 <!-- TMPL_IF NAME="SyndeticsTOC" --><!-- TMPL_IF NAME="SYNDETICS_TOC" -->
 </div>
 </div>
 
+<div id="anotes">
+<div class="content_set">
+<!-- TMPL_IF NAME="SyndeticsAuthorNotes" --><!-- TMPL_IF NAME="SYNDETICS_ANOTES" -->
+<!-- TMPL_LOOP NAME="SYNDETICS_ANOTES" -->
+    <!-- TMPL_IF NAME="content" -->
+        <!-- TMPL_VAR NAME="content" -->
+    <!-- /TMPL_IF -->
+<!-- /TMPL_LOOP -->
+<!-- /TMPL_IF --><!-- /TMPL_IF -->
+</div>
+</div>
+
+<!-- /TMPL_IF -->
 <!-- TMPL_IF name="subscriptionsnumber" -->
 <div id="subscriptions">
     <h2>This is a serial subscription</h2>
index 0964647..0a46fa7 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 get_syndetics_reviews );
+use C4::External::Syndetics qw(get_syndetics_index get_syndetics_summary get_syndetics_toc get_syndetics_excerpt get_syndetics_reviews get_syndetics_anotes );
 use C4::Review;
 use C4::Serials;
 use C4::Members;
@@ -291,7 +291,21 @@ if ( C4::Context->preference("OPACAmazonContent") == 1 ) {
     $template->param( AMAZON_EDITORIAL_REVIEWS    => $editorial_reviews );
 }
 
-if ( C4::Context->preference("SyndeticsEnabled") && C4::Context->preference("SyndeticsSummary") ) {
+my $syndetics_elements;
+if ( C4::Context->preference("SyndeticsEnabled") ) {
+       eval {
+    $syndetics_elements = &get_syndetics_index($xisbn);
+       for my $element (values %$syndetics_elements) {
+               $template->param("Syndetics$element"."Exists" => 1 );
+               #warn "Exists: "."Syndetics$element"."Exists";
+       }
+    };
+    warn $@ if $@;
+}
+
+if ( C4::Context->preference("SyndeticsEnabled")
+        && C4::Context->preference("SyndeticsSummary")
+        && $syndetics_elements->{'SUMMARY'} =~ /SUMMARY/) {
        eval {
        my $syndetics_summary = &get_syndetics_summary($xisbn);
        $template->param( SYNDETICS_SUMMARY => $syndetics_summary );
@@ -300,7 +314,9 @@ if ( C4::Context->preference("SyndeticsEnabled") && C4::Context->preference("Syn
 
 }
 
-if ( C4::Context->preference("SyndeticsEnabled") && C4::Context->preference("SyndeticsTOC") ) {
+if ( C4::Context->preference("SyndeticsEnabled")
+        && C4::Context->preference("SyndeticsTOC")
+        && $syndetics_elements->{'TOC'} =~ /TOC/) {
        eval {
     my $syndetics_toc = &get_syndetics_toc($xisbn);
     $template->param( SYNDETICS_TOC => $syndetics_toc );
@@ -308,7 +324,9 @@ if ( C4::Context->preference("SyndeticsEnabled") && C4::Context->preference("Syn
        warn $@ if $@;
 }
 
-if ( C4::Context->preference("SyndeticsEnabled") && C4::Context->preference("SyndeticsExcerpt") ) {
+if ( C4::Context->preference("SyndeticsEnabled")
+    && C4::Context->preference("SyndeticsExcerpt")
+    && $syndetics_elements->{'DBCHAPTER'} =~ /DBCHAPTER/ ) {
     eval {
     my $syndetics_excerpt = &get_syndetics_excerpt($xisbn);
     $template->param( SYNDETICS_EXCERPT => $syndetics_excerpt );
@@ -316,14 +334,25 @@ if ( C4::Context->preference("SyndeticsEnabled") && C4::Context->preference("Syn
        warn $@ if $@;
 }
 
-if ( C4::Context->preference("SyndeticsEnabled") && C4::Context->preference("SyndeticsReviews") ) {
+if ( C4::Context->preference("SyndeticsEnabled")
+    && C4::Context->preference("SyndeticsReviews")) {
     eval {
-    my $syndetics_reviews = &get_syndetics_reviews($xisbn);
+    my $syndetics_reviews = &get_syndetics_reviews($xisbn,$syndetics_elements);
     $template->param( SYNDETICS_REVIEWS => $syndetics_reviews );
     };
        warn $@ if $@;
 }
 
+if ( C4::Context->preference("SyndeticsEnabled")
+    && C4::Context->preference("SyndeticsAuthorNotes")
+       && $syndetics_elements->{'ANOTES'} =~ /ANOTES/ ) {
+    eval {
+    my $syndetics_anotes = &get_syndetics_anotes($xisbn);
+    $template->param( SYNDETICS_ANOTES => $syndetics_anotes );
+    };
+    warn $@ if $@;
+}
+
 # Shelf Browser Stuff
 if (C4::Context->preference("OPACShelfBrowser")) {
     # pick the first itemnumber unless one was selected by the user