LP#1772680: Enhance the add to display wishlist on myopac page
authorJaswinder Singh <jaswinder.singh0011@gmail.com>
Tue, 10 Jul 2018 19:08:37 +0000 (15:08 -0400)
committerChris Sharp <csharp@georgialibraries.org>
Tue, 14 Aug 2018 19:39:15 +0000 (15:39 -0400)
Signed-off-by: Jaswinder Singh <jaswinder.singh0011@gmail.com>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader.pm
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/RBDigitalRecord.pm
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/RBDigitalSearch.pm
Open-ILS/src/templates/opac/ebook_api/rbdigital/parts/record/summary.tt2
Open-ILS/src/templates/opac/ebook_api/rbdigital/parts/result/table.tt2
Open-ILS/src/templates/opac/myopac/wishlist.tt2 [new file with mode: 0755]
Open-ILS/src/templates/opac/parts/myopac/base.tt2 [changed mode: 0644->0755]
Open-ILS/web/js/ui/default/opac/ebook_api/rbdigital.js

index 0288577..c6f722d 100755 (executable)
@@ -372,6 +372,7 @@ sub load_rbdigital_common {
 
         # Call sub to get all the vendors to be displayed on the UI
         $self->ctx->{vendors} = _get_authorized_vendors($self->editor->authtoken, $session_id);
+        $self->ctx->{wishlist} = _get_patron_wishlist($self->editor->authtoken, $session_id);
     } else {
         $self->ctx->{rbdigital_patron_id} = 0;
         $self->ctx->{vendors} = [];
index 9c6cbcf..2d906c1 100755 (executable)
@@ -52,7 +52,7 @@ sub load_rbdigital_record {
 
     #Get Patron Wishlist
     # Return hash reference of wishlist {isbn => true}
-    $ctx->{wishlist} = _get_patron_wishlist($self->editor->authtoken, $session_id);
+    $ctx->{wishlist_map} = _get_patron_wishlist_isbn_map($self->editor->authtoken, $session_id);
 
     $ctx->{checkouts} = _get_patron_checkouts($self->editor->authtoken, $session_id);
 
index 4a5abdd..ad0fb65 100755 (executable)
@@ -237,7 +237,7 @@ sub load_rbdigital_results {
 
         #Get Patron Wishlist
         # Return hash reference of wishlist {isbn => true}
-        $ctx->{wishlist} = _get_patron_wishlist($self->editor->authtoken, $session_id);
+        $ctx->{wishlist_map} = _get_patron_wishlist_isbn_map($self->editor->authtoken, $session_id);
 
         $ctx->{holds} = _get_patron_holds($self->editor->authtoken, $session_id);
         
@@ -259,7 +259,8 @@ sub load_rbdigital_results {
     return Apache2::Const::OK;
 }
 
-sub _get_patron_wishlist {
+# Return hash reference of wishlist {isbn => true}
+sub _get_patron_wishlist_isbn_map {
     my ($authtoken, $session_id) = @_;
 
     my $ebookapi_session = OpenSRF::AppSession->create('open-ils.ebook_api');
@@ -282,6 +283,24 @@ sub _get_patron_wishlist {
     return \%wishlist_ref;
 }
 
+sub _get_patron_wishlist {
+     my ($authtoken, $session_id) = @_;
+
+    my $ebookapi_session = OpenSRF::AppSession->create('open-ils.ebook_api');
+    my $wishlist_req = $ebookapi_session->request('open-ils.ebook_api.patron.wishlist',$authtoken, $session_id,'','get')->recv();
+    
+    if (defined($wishlist_req->{content}->{content})) {
+        $logger->info('EbookAPI: RBDigitalSearch Patron Wishlist API call was successful');
+        # Loop over the wishlist contents and build hash array for easier to use in the UI: { isbn => '1', ...}
+        return $wishlist_req->{content}->{content};
+        
+    } else {
+        $logger->error('EbookAPI: RBDigitalSearch Patron Wishlist API call failed');
+    }
+
+    return undef;
+}
+
 sub _get_patron_holds {
     
     my ($authtoken, $session_id) = @_;
index 64c94f1..584419b 100755 (executable)
             <div class="rdetail_aux_utils">
             <!-- Display Wishlist option -->
             [% IF !ctx.is_staff %]
-                <a id="[% ebook_item.isbn %]_ebook_wishlist_add" href="#" class="no-dec ebook_wishlist_link_add [% IF ctx.wishlist.$ebook_isbn == "1"; %] hidden [% END; %]" rel="nofollow" data-isbn="[% ebook_item.isbn %]">
+                <a id="[% ebook_item.isbn %]_ebook_wishlist_add" href="#" class="no-dec ebook_wishlist_link_add [% IF ctx.wishlist_map.$ebook_isbn == "1"; %] hidden [% END; %]" rel="nofollow" data-isbn="[% ebook_item.isbn %]">
                     <img src="[% ctx.media_prefix %]/images/clipboard.png[% ctx.cache_key %]" alt="" />&nbsp;[% l("Add to Wishlist") %]</a>
 
-                <a id="[% ebook_item.isbn %]_ebook_wishlist_remove" href="#" class="no-dec ebook_wishlist_link_remove [% IF ctx.wishlist.$ebook_isbn != "1"; %] hidden [% END; %]" rel="nofollow" vocab="" data-isbn="[% ebook_item.isbn %]">
+                <a id="[% ebook_item.isbn %]_ebook_wishlist_remove" href="#" class="no-dec ebook_wishlist_link_remove [% IF ctx.wishlist_map.$ebook_isbn != "1"; %] hidden [% END; %]" rel="nofollow" vocab="" data-isbn="[% ebook_item.isbn %]">
                     <img src="[% ctx.media_prefix %]/images/minus_sign.png[% ctx.cache_key %]" alt="" />&nbsp;[% l("Remove from Wishlist") %]</a>
             [% END %]
             </div>
index 894bf9b..2a6fd47 100755 (executable)
@@ -413,12 +413,12 @@ END;
                                                         <div class="results_aux_utils result_util ebook_action">
                                                         [%  IF !ctx.is_staff; %]
                                                                 <a id="[% ebook_item.isbn %]_ebook_wishlist_add" href="#" 
-                                                                    class="no-dec ebook_wishlist_link_add [% IF ctx.wishlist.$ebook_isbn == "1"; %] hidden [% END; %]" 
+                                                                    class="no-dec ebook_wishlist_link_add [% IF ctx.wishlist_map.$ebook_isbn == "1"; %] hidden [% END; %]" 
                                                                     [% html_text_attr('title', title_label) %] rel="nofollow" data-isbn="[% ebook_item.isbn %]">
                                                                     <img src="[% ctx.media_prefix %]/images/clipboard.png[% ctx.cache_key %]" alt="" />&nbsp;[% l("Add to Wishlist") %]</a>
                                                                     
                                                                 <a id="[% ebook_item.isbn %]_ebook_wishlist_remove" href="#" 
-                                                                    class="no-dec ebook_wishlist_link_remove [% IF ctx.wishlist.$ebook_isbn != "1"; %] hidden [% END; %]" rel="nofollow" vocab="" data-isbn="[% ebook_item.isbn %]">
+                                                                    class="no-dec ebook_wishlist_link_remove [% IF ctx.wishlist_map.$ebook_isbn != "1"; %] hidden [% END; %]" rel="nofollow" vocab="" data-isbn="[% ebook_item.isbn %]">
                                                                     <img src="[% ctx.media_prefix %]/images/minus_sign.png[% ctx.cache_key %]" alt="" />&nbsp;[% l("Remove from Wishlist") %]</a>
                                                         [% END; %]
                                                         </div>
diff --git a/Open-ILS/src/templates/opac/myopac/wishlist.tt2 b/Open-ILS/src/templates/opac/myopac/wishlist.tt2
new file mode 100755 (executable)
index 0000000..0430bc7
--- /dev/null
@@ -0,0 +1,49 @@
+[%  PROCESS "opac/parts/header.tt2";
+    PROCESS "opac/parts/misc_util.tt2";
+    PROCESS "opac/parts/hold_status.tt2";
+    PROCESS "opac/parts/myopac/column_sort_support.tt2";
+    WRAPPER "opac/parts/myopac/base.tt2";
+    myopac_page = "wishlist";
+%]
+<h3 class="sr-only">[% l('My Wishlist') %]</h3>
+<div id='myopac_holds_div'>
+    <!-- Ebook Spinner -->
+    <span id="ebook_spinner" class="hidden">&nbsp;Removing ...&nbsp;&nbsp;<img style="width:20px;height:auto" src="[% ctx.media_prefix %]/opac/images/progressbar_green.gif[% ctx.cache_key %]" alt="[% l("Removing...") %]"/></span>
+    <div class="clear-both"></div>
+    <div class="header_middle">
+        <span class="float-left">[% l('E-Items on Wishlist') %]</span>
+    </div>
+    
+    [% IF !ctx.wishlist || ctx.wishlist.size == 0; %]
+    <div id="no_ebook_holds" class="warning_box">[% l('You have no e-items on wishlist.') %]</div>
+    [% ELSE; %]
+    <div id='ebook_holds_main'>
+        <table id="ebook_holds_main_table"
+            title="[% l('E-Items on Wishlist') %]"
+            class="table_no_border_space table_no_cell_pad item_list_padding">
+            <thead>
+            <tr>
+                <th>[% l("Title") %]</th>
+                <th>[% l("Authors") %]</th>
+                <th>[% l("ISBN") %]</th>
+                <th>[% l("Publishers") %]</th>
+                <th>[% l("Actions") %]</th>
+            </tr>
+            [% FOR ewishlist IN ctx.wishlist; %]
+            <tr id="[% ewishlist.isbn %]_ebook_wishlist_remove">
+                <td>[% ewishlist.title; %]</td>
+                <td>[% ewishlist.authors; %]</td>
+                <td>[% ewishlist.isbn; %]</td>
+                <td>[% ewishlist.publisher; %]</td>
+                <td><a href="#" class="no-dec ebook_wishlist_row_remove" rel="nofollow" vocab="" data-isbn="[% ewishlist.isbn %]">
+                    <img src="[% ctx.media_prefix %]/images/minus_sign.png[% ctx.cache_key %]" alt="" />&nbsp;[% l("Remove from Wishlist") %]</a>
+                </td>
+            </tr>
+            [% END;%]
+            </thead>
+            <tbody id="ebook_holds_main_table_body"></tbody>
+        </table>
+    </div>
+    [% END; %]
+</div>
+[% END %]
old mode 100644 (file)
new mode 100755 (executable)
index 94259db..005a07d
@@ -5,6 +5,7 @@
         {url => "messages", name => l("Messages")},
         {url => "circs", name => l("Items Checked Out")},
         {url => "holds", name => l("Holds")},
+        {url => "wishlist", name => l("Wishlist")},
         {url => "prefs", name => l("Account Preferences")},
         {url => "lists", name => l("My Lists")}
     ];
@@ -31,6 +32,8 @@
         <div id="myopac_tabs">
             <div id="acct_tabs">
                 [%- FOREACH page IN myopac_pages;
+                    NEXT IF ebook_api.enabled != 'true' && page.url == 'wishlist';
+
                     IF page.url == myopac_page;
                         cls_which = "acct-tab-on";
                         ctx.page_title = l("My Account - [_1]", page.name);
index 554cfca..71a66f9 100755 (executable)
@@ -45,7 +45,16 @@ function setupEventHandlers() {
         ebook_rbdigital.wishlist(authtoken, 'add', wishlistAddCallback);
         return false;
     });
+    //Handle wishlist link from Wishlist tab
+    $(document).on("click", ".ebook_wishlist_row_remove", function () {
+        showEbookSpinner($(this), true);
+        var isbn = $(this).data('isbn');
+        ebook_rbdigital.id = isbn;
+        ebook_rbdigital.wishlist(authtoken, 'delete', wishlistRemoveRowCallback);
+        return false;
+    });
 
+    //Handle wishlist link from record view and results page
     $(document).on("click", ".ebook_wishlist_link_remove", function () {
         showEbookSpinner($(this), true);
         var isbn = $(this).data('isbn');
@@ -328,6 +337,19 @@ function wishlistRemoveCallback(responseContents, isbn) {
     hideEbookSpinner();
 }
 
+
+//Process post ajax call to remove wishlist to patron's account
+function wishlistRemoveRowCallback(responseContents, isbn) {
+    if (responseContents.message == "success") {
+        showNotification('Success','Succesfully removed from your wishlist!','success');
+        $("#"+isbn+"_ebook_wishlist_remove").remove();
+    } else {
+        showNotification('Unknown Error','Unable to remove from your wishlist. Please try it again!','error');
+        console.log(responseContents.message);
+    }
+    hideEbookSpinner();
+}
+
 //Process post ajax call to register the patron
 function registerPatronCallback(response) {
     rbdigitalPatronId = parseInt(response);