LP#1677813: fix Download link for OverDrive ebook circs in OPAC user/jeffdavis/lp1677813-ebook-api-download-link
authorJeff Davis <jdavis@sitka.bclibraries.ca>
Thu, 30 Mar 2017 21:40:19 +0000 (14:40 -0700)
committerJeff Davis <jdavis@sitka.bclibraries.ca>
Thu, 30 Mar 2017 21:40:19 +0000 (14:40 -0700)
With OverDrive ebook API integration enabled, a user's current OverDrive
checkouts are displayed under the "E-Items Checked Out" tab in My
Account, but the Download link does not work.  Additionally, holds
that are ready for checkout don't have a Download link.  This commit
puts a correct Download link in both places.

Signed-off-by: Jeff Davis <jdavis@sitka.bclibraries.ca>
Open-ILS/src/perlmods/lib/OpenILS/Application/EbookAPI/OverDrive.pm
Open-ILS/web/js/ui/default/opac/ebook_api/loggedin.js

index 97a301a..7e5c2c4 100644 (file)
@@ -377,7 +377,9 @@ sub get_title_info {
         if ($res->{content}->{title}) {
             return {
                 title  => $res->{content}->{title},
-                author => $res->{content}->{creators}[0]{name}
+                author => $res->{content}->{creators}[0]{name},
+                # Link to OverDrive title details page (NOT a direct download link).
+                download_url => "https://link.overdrive.com/?websiteID=" . $self->{websiteid} . "&titleID=" . $res->content->{crossRefId}
             };
         } else {
             $logger->error("EbookAPI: OverDrive metadata lookup failed for $title_id");
@@ -493,12 +495,13 @@ sub get_patron_checkouts {
         foreach my $checkout (@{$res->{content}->{checkouts}}) {
             my $title_id = $checkout->{reserveId};
             my $title_info = $self->get_title_info($title_id);
-            # TODO get download URL - need to "lock in" a format first, see OD Checkouts API docs
             push @$checkouts, {
                 title_id => $title_id,
                 due_date => $checkout->{expires},
                 title => $title_info->{title},
-                author => $title_info->{author}
+                author => $title_info->{author},
+                # Link to OverDrive title details page (NOT a direct download link).
+                download_url => $title_info->{download_url}
             }
         };
         $self->{checkouts} = $checkouts;
index 0ba1827..971be45 100644 (file)
@@ -102,8 +102,10 @@ function updateCheckoutView() {
         dojo.removeClass('no_ebook_circs', "hidden");
     } else {
         dojo.forEach(xacts.checkouts, function(x) {
+            var dl_link = '';
+            if (x.download_url)
+                dl_link = '<a href="' + x.download_url + '" target="_blank">' + l_strings.download + '</a>';
             dojo.empty('ebook_circs_main_table_body');
-            var dl_link = '<a href="' + x.download_url + '">' + l_strings.download + '</a>';
             var tr = dojo.create("tr", null, dojo.byId('ebook_circs_main_table_body'));
             dojo.create("td", { innerHTML: x.title }, tr);
             dojo.create("td", { innerHTML: x.author }, tr);
@@ -128,8 +130,11 @@ function updateHoldView() {
     } else {
         dojo.forEach(holds, function(h) {
             var hold_status;
+            var dl_link = '';
             if (h.is_ready) {
                 hold_status = l_strings.ready_for_checkout;
+                if (h.download_url)
+                    dl_link = '<a href="' + h.download_url + '" target="_blank">' + l_strings.download + '</a>';
             } else if (h.is_frozen) {
                 hold_status = l_strings.suspended;
             } else {
@@ -141,7 +146,7 @@ function updateHoldView() {
             dojo.create("td", { innerHTML: h.author }, tr);
             dojo.create("td", { innerHTML: h.expire_date }, tr);
             dojo.create("td", { innerHTML: hold_status }, tr);
-            dojo.create("td", null, tr); // TODO actions
+            dojo.create("td", { innerHTML: dl_link }, tr); // TODO actions
         });
         dojo.addClass('no_ebook_holds', "hidden");
         dojo.removeClass('ebook_holds_main', "hidden");
@@ -154,12 +159,15 @@ function updateHoldReadyView() {
         dojo.removeClass('no_ebook_holds', "hidden");
     } else {
         dojo.forEach(holds, function(h) {
+            var dl_link = '';
+            if (h.is_ready && h.download_url)
+                dl_link = '<a href="' + h.download_url + '" target="_blank">' + l_strings.download + '</a>';
             dojo.empty('ebook_holds_main_table_body');
             var tr = dojo.create("tr", null, dojo.byId('ebook_holds_main_table_body'));
             dojo.create("td", { innerHTML: h.title }, tr);
             dojo.create("td", { innerHTML: h.author }, tr);
             dojo.create("td", { innerHTML: h.expire_date }, tr);
-            dojo.create("td", null, tr); // TODO actions
+            dojo.create("td", { innerHTML: dl_link }, tr); // TODO actions
         });
         dojo.addClass('no_ebook_holds', "hidden");
         dojo.removeClass('ebook_holds_main', "hidden");