]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/js/ui/default/opac/ebook_api/ebook.js
LP#1673870: Handle OverDrive ebook checkout and download
[working/Evergreen.git] / Open-ILS / web / js / ui / default / opac / ebook_api / ebook.js
1 // define our classes
2 function Vendor(name) {
3     this.name = name;
4     this.ebooks = [];
5 }
6
7 function Ebook(vendor, id) {
8     this.vendor = vendor;
9     this.id = id; // external ID for this title
10     this.rec_id;  // bre.id for this title's MARC record
11     this.title;   // title of ebook
12     this.author;  // author of ebook
13     this.avail;   // availability info for this title
14     this.holdings = {}; // holdings info
15     this.conns = {}; // references to Dojo event connection for performing actions with this ebook
16 }
17
18 Ebook.prototype.getDetails = function(callback) {
19     var ses = this.ses || dojo.cookie(this.vendor);
20     var ebook = this;
21     new OpenSRF.ClientSession('open-ils.ebook_api').request({
22         method: 'open-ils.ebook_api.title.details',
23         params: [ ses, ebook.id ],
24         async: true,
25         oncomplete: function(r) {
26             var resp = r.recv();
27             if (resp) {
28                 console.log('title details response: ' + resp.content());
29                 ebook.title = resp.content().title;
30                 ebook.author = resp.content().author;
31                 if (typeof resp.content().formats !== 'undefined')
32                     ebook.formats = resp.content().formats;
33                 return callback(ebook);
34             }
35         }
36     }).send();
37 }
38
39 Ebook.prototype.getAvailability = function(callback) {
40     var ses = this.ses || dojo.cookie(this.vendor);
41     new OpenSRF.ClientSession('open-ils.ebook_api').request({
42         method: 'open-ils.ebook_api.title.availability',
43         params: [ ses, this.id ],
44         async: true,
45         oncomplete: function(r) {
46             var resp = r.recv();
47             if (resp) {
48                 console.log('availability response: ' + resp.content());
49                 this.avail = resp.content();
50                 return callback(resp.content());
51             }
52         }
53     }).send();
54 }
55
56 Ebook.prototype.getHoldings = function(callback) {
57     var ses = this.ses || dojo.cookie(this.vendor);
58     new OpenSRF.ClientSession('open-ils.ebook_api').request({
59         method: 'open-ils.ebook_api.title.holdings',
60         params: [ ses, this.id ],
61         async: true,
62         oncomplete: function(r) {
63             var resp = r.recv();
64             if (resp) {
65                 console.log('holdings response: ' + resp.content());
66                 this.holdings = resp.content();
67                 return callback(resp.content());
68             }
69         }
70     }).send();
71 }
72
73 Ebook.prototype.checkout = function(authtoken, patron_id, callback) {
74     var ses = this.ses || dojo.cookie(this.vendor);
75     var ebook = this;
76     // get selected checkout format (optional, used by OverDrive)
77     var checkout_format;
78     var format_selector = dojo.byId('checkout-format');
79     if (format_selector) {
80         checkout_format = format_selector.value;
81     }
82     // perform checkout
83     new OpenSRF.ClientSession('open-ils.ebook_api').request({
84         method: 'open-ils.ebook_api.checkout',
85         params: [ authtoken, ses, ebook.id, patron_id, checkout_format ],
86         async: true,
87         oncomplete: function(r) {
88             var resp = r.recv();
89             if (resp) {
90                 console.log('checkout response: ' + resp.content());
91                 return callback(resp.content());
92             }
93         }
94     }).send();
95 }
96
97 Ebook.prototype.placeHold = function(authtoken, patron_id, callback) {
98     var ses = this.ses || dojo.cookie(this.vendor);
99     var ebook = this;
100     new OpenSRF.ClientSession('open-ils.ebook_api').request({
101         method: 'open-ils.ebook_api.place_hold',
102         params: [ authtoken, ses, ebook.id, patron_id, patron_email ],
103         async: true,
104         oncomplete: function(r) {
105             var resp = r.recv();
106             if (resp) {
107                 console.log('place hold response: ' + resp.content());
108                 return callback(resp.content());
109             }
110         }
111     }).send();
112 }
113
114 Ebook.prototype.cancelHold = function(authtoken, patron_id, callback) {
115     var ses = this.ses || dojo.cookie(this.vendor);
116     var ebook = this;
117     new OpenSRF.ClientSession('open-ils.ebook_api').request({
118         method: 'open-ils.ebook_api.cancel_hold',
119         params: [ authtoken, ses, ebook.id, patron_id ],
120         async: true,
121         oncomplete: function(r) {
122             var resp = r.recv();
123             if (resp) {
124                 console.log('cancel hold response: ' + resp.content());
125                 return callback(resp.content());
126             }
127         }
128     }).send();
129 }
130
131 Ebook.prototype.download = function() {
132     var ses = this.ses || dojo.cookie(this.vendor);
133     var ebook = this;
134     var request_link;
135     var format_selector = dojo.byId('download-format');
136     if (!format_selector) {
137         console.log('could not find a specified format for download');
138         return;
139     } else {
140         request_link = format_selector.value;
141     }
142     // Request links include params like "errorpageurl={errorpageurl}"
143     // for redirecting the user if there's an error doing the download, etc.
144     // In these scenarios we always redirect the user to the current page.
145     // TODO: Add params to the current-page URL so that, if redirected, we
146     // can detect those params on page reload and show a useful message.
147     request_link = request_link.replace('{errorpageurl}', window.location.href);
148     request_link = request_link.replace('{odreadauthurl}', window.location.href);
149     // Now we're ready to request our download link.
150     new OpenSRF.ClientSession('open-ils.ebook_api').request({
151         method: 'open-ils.ebook_api.title.get_download_link',
152         params: [ authtoken, ses, request_link ],
153         async: true,
154         oncomplete: function(r) {
155             var resp = r.recv();
156             if (resp) {
157                 if (resp.content().error_msg) {
158                     console.log('download link request failed: ' + resp.content().error_msg);
159                 } else if (resp.content().url) {
160                     var url = resp.content().url;
161                     console.log('download link received: ' + url);
162                     window.location = url;
163                 } else {
164                     console.log('unknown error requesting download link');
165                 }
166             }
167         }
168     }).send();
169 }
170