]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/cat/record_buckets.js
318d88bd5817301526a0a632da4c23690b9150c2
[Evergreen.git] / Open-ILS / xul / staff_client / server / cat / record_buckets.js
1 dump('entering cat.record_buckets.js\n');
2
3 if (typeof cat == 'undefined') cat = {};
4 cat.record_buckets = function (params) {
5
6         JSAN.use('util.error'); this.error = new util.error();
7         JSAN.use('util.network'); this.network = new util.network();
8         JSAN.use('util.date');
9         JSAN.use('OpenILS.data'); this.data = new OpenILS.data(); this.data.init({'via':'stash'});
10         this.first_pause = true;
11 };
12
13 cat.record_buckets.pick_file = function (defaultFileName) {
14         netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
15
16         var nsIFilePicker = Components.interfaces.nsIFilePicker;
17         var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance( nsIFilePicker );
18
19         fp.init( window, "Save File As", nsIFilePicker.modeSave );
20         if (defaultFileName)
21                 fp.defaultString = defaultFileName;
22
23         fp.appendFilters( nsIFilePicker.filterAll );
24
25         var result = fp.show(); 
26         if ( (result == nsIFilePicker.returnOK || result == nsIFilePicker.returnReplace) && fp.file ) {
27                 return fp.file;
28         } else {
29                 return null;
30         }
31 };
32
33 cat.record_buckets.export_records = function(obj, output_type) {
34         try {
35                 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
36                 obj.list2.select_all();
37                 obj.data.stash_retrieve();
38                 JSAN.use('util.functional');
39
40                 var record_ids = util.functional.map_list(
41                         obj.list2.dump_retrieve_ids(),
42                         function (o) { return JSON2js(o).docid }
43                 );
44
45                 var persist = Components.classes["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"]
46                         .createInstance(Components.interfaces.nsIWebBrowserPersist);
47
48                 var proto_uri = 'http://' + window.location.hostname + '/exporter?format=' + output_type;
49
50                 dump('Record Export URI is ' + proto_uri + '&id=' + record_ids.join('&id=') + '\n');
51
52                 var uri = Components.classes["@mozilla.org/network/io-service;1"]
53                         .getService(Components.interfaces.nsIIOService)
54                         .newURI( proto_uri + '&id=' + record_ids.join('&id='), null, null );
55
56                 var file = cat.record_buckets.pick_file('bucket.' + output_type);
57                                                                 
58                 if (file) {
59                         persist.saveURI(uri,null,null,null,null,file);
60                 } else {
61                         alert("File not downloaded.");
62                 }
63
64         } catch(E) {
65                 obj.error.standard_unexpected_error_alert('Records could not be exported.',E);
66         }
67 };
68
69
70 cat.record_buckets.prototype = {
71         'selection_list1' : [],
72         'selection_list2' : [],
73         'bucket_id_name_map' : {},
74
75         'render_pending_records' : function() {
76                 if (this.first_pause) {
77                         this.first_pause = false;
78                 } else {
79                         alert("Action completed.");
80                 }
81                 var obj = this;
82                 obj.list1.clear();
83                 for (var i = 0; i < obj.record_ids.length; i++) {
84                         var item = obj.flesh_item_for_list( obj.record_ids[i] );
85                         if (item) obj.list1.append( item );
86                 }
87         },
88
89         'init' : function( params ) {
90
91                 var obj = this;
92
93                 obj.record_ids = params['record_ids'] || [];
94
95                 JSAN.use('circ.util');
96                 var columns = circ.util.columns( 
97                         { 
98                                 'title' : { 'hidden' : false },
99                                 'author' : { 'hidden' : false },
100                                 'edition' : { 'hidden' : false },
101                                 'publisher' : { 'hidden' : false },
102                                 'pubdate' : { 'hidden' : false },
103                                 'isbn' : { 'hidden' : false },
104                                 'tcn' : { 'hidden' : false },
105                         } 
106                 );
107
108                 JSAN.use('util.list'); 
109
110                 obj.list1 = new util.list('pending_records_list');
111                 obj.list1.init(
112                         {
113                                 'columns' : columns,
114                                 'map_row_to_columns' : circ.util.std_map_row_to_columns(),
115                                 'on_select' : function(ev) {
116                                         try {
117                                                 JSAN.use('util.functional');
118                                                 var sel = obj.list1.retrieve_selection();
119                                                 document.getElementById('clip_button1').disabled = sel.length < 1;
120                                                 obj.selection_list1 = util.functional.map_list(
121                                                         sel,
122                                                         function(o) { return JSON2js(o.getAttribute('retrieve_id')); }
123                                                 );
124                                                 obj.error.sdump('D_TRACE','circ/record_buckets: selection list 1 = ' + js2JSON(obj.selection_list1) );
125                                                 if (obj.selection_list1.length == 0) {
126                                                         obj.controller.view.record_buckets_sel_add.disabled = true;
127                                                 } else {
128                                                         obj.controller.view.record_buckets_sel_add.disabled = false;
129                                                 }
130                                         } catch(E) {
131                                                 alert('FIXME: ' + E);
132                                         }
133                                 },
134
135                         }
136                 );
137
138                 obj.render_pending_records();
139         
140                 obj.list2 = new util.list('records_in_bucket_list');
141                 obj.list2.init(
142                         {
143                                 'columns' : columns,
144                                 'map_row_to_columns' : circ.util.std_map_row_to_columns(),
145                                 'on_select' : function(ev) {
146                                         try {
147                                                 JSAN.use('util.functional');
148                                                 var sel = obj.list2.retrieve_selection();
149                                                 document.getElementById('clip_button2').disabled = sel.length < 1;
150                                                 obj.selection_list2 = util.functional.map_list(
151                                                         sel,
152                                                         function(o) { return JSON2js(o.getAttribute('retrieve_id')); }
153                                                 );
154                                                 obj.error.sdump('D_TRACE','circ/record_buckets: selection list 2 = ' + js2JSON(obj.selection_list2) );
155                                                 if (obj.selection_list2.length == 0) {
156                                                         obj.controller.view.record_buckets_delete_item.disabled = true;
157                                                         obj.controller.view.record_buckets_delete_item.setAttribute('disabled','true');
158                                                         obj.controller.view.record_buckets_export.disabled = true;
159                                                         obj.controller.view.record_buckets_export.setAttribute('disabled','true');
160                                                 } else {
161                                                         obj.controller.view.record_buckets_delete_item.disabled = false;
162                                                         obj.controller.view.record_buckets_delete_item.setAttribute('disabled','false');
163                                                         obj.controller.view.record_buckets_export.disabled = false;
164                                                         obj.controller.view.record_buckets_export.setAttribute('disabled','false');
165                                                 }
166                                         } catch(E) {
167                                                 alert('FIXME: ' + E);
168                                         }
169                                 },
170                         }
171                 );
172                 
173                 JSAN.use('util.controller'); obj.controller = new util.controller();
174                 obj.controller.init(
175                         {
176                                 'control_map' : {
177                                         'save_columns2' : [
178                                                 ['command'],
179                                                 function() { obj.list2.save_columns(); }
180                                         ],
181                                         'save_columns1' : [
182                                                 ['command'],
183                                                 function() { obj.list1.save_columns(); }
184                                         ],
185                                         'sel_clip2' : [
186                                                 ['command'],
187                                                 function() { obj.list2.clipboard(); }
188                                         ],
189                                         'sel_clip1' : [
190                                                 ['command'],
191                                                 function() { obj.list1.clipboard(); }
192                                         ],
193                                         'record_buckets_menulist_placeholder' : [
194                                                 ['render'],
195                                                 function(e) {
196                                                         return function() {
197                                                                 JSAN.use('util.widgets'); JSAN.use('util.functional');
198                                                                 var buckets = obj.network.simple_request(
199                                                                         'BUCKET_RETRIEVE_VIA_USER',
200                                                                         [ ses(), obj.data.list.au[0].id() ]
201                                                                 );
202                                                                 if (typeof buckets.ilsevent != 'undefined') {
203                                                                         obj.error.standard_unexpected_error_alert('Could not retrieve your buckets.',buckets);
204                                                                         return;
205                                                                 }
206                                                                 var items = [ ['Choose a bucket...',''], ['Retrieve shared bucket...',-1] ].concat(
207                                                                         util.functional.map_list(
208                                                                                 util.functional.filter_list(
209                                                                                         buckets.biblio,
210                                                                                         function(o) {
211                                                                                                 return o.btype() == 'staff_client';
212                                                                                         }
213                                                                                 ),
214                                                                                 function(o) {
215                                                                                         obj.bucket_id_name_map[ o.id() ] = o.name();
216                                                                                         return [ o.name(), o.id() ];
217                                                                                 }
218                                                                         ).sort( 
219                                                         function( a, b ) {
220                                                             if (a[0] < b[0]) return -1;
221                                                             if (a[0] > b[0]) return 1;
222                                                             return 0;
223                                                         }
224                                                                         )
225                                                                 );
226                                                                 obj.error.sdump('D_TRACE','items = ' + js2JSON(items));
227                                                                 util.widgets.remove_children( e );
228                                                                 var ml = util.widgets.make_menulist(
229                                                                         items
230                                                                 );
231                                                                 e.appendChild( ml );
232                                                                 ml.setAttribute('id','bucket_menulist');
233                                                                 ml.setAttribute('accesskey','');
234
235                                                                 function change_bucket(ev) {
236                                                                         var bucket_id = ev.target.value;
237                                                                         if (bucket_id < 0 ) {
238                                                                                 bucket_id = window.prompt('Enter bucket number:');
239                                                                                 ev.target.value = bucket_id;
240                                                                                 ev.target.setAttribute('value',bucket_id);
241                                                                         }
242                                                                         if (!bucket_id) return;
243                                                                         var bucket = obj.network.simple_request(
244                                                                                 'BUCKET_FLESH',
245                                                                                 [ ses(), 'biblio', bucket_id ]
246                                                                         );
247                                                                         if (typeof bucket.ilsevent != 'undefined') {
248                                                                                 if (bucket.ilsevent == 1506 /* CONTAINER_NOT_FOUND */) {
249                                                                                         alert('Could not find a bucket with ID = ' + bucket_id);
250                                                                                 } else {
251                                                                                         obj.error.standard_unexpected_error_alert('Error retrieving bucket.  Did you use a valid bucket id?',bucket);
252                                                                                 }
253                                                                                 return;
254                                                                         }
255                                                                         try {
256                                                                                 var x = document.getElementById('info_box');
257                                                                                 x.setAttribute('hidden','false');
258                                                                                 x = document.getElementById('bucket_number');
259                                                                                 x.setAttribute('value',bucket.id());
260                                                                                 x = document.getElementById('bucket_name');
261                                                                                 x.setAttribute('value',bucket.name());
262                                                                                 x = document.getElementById('bucket_owner');
263                                                                                 var s = bucket.owner(); JSAN.use('patron.util');
264                                                                                 if (s && typeof s != "object") s = patron.util.retrieve_fleshed_au_via_id(ses(),s); 
265                                                                                 x.setAttribute('value',s.card().barcode() + " @ " + obj.data.hash.aou[ s.home_ou() ].shortname());
266                                                                         } catch(E) {
267                                                                                 alert(E);
268                                                                         }
269                                                                         var items = bucket.items() || [];
270                                                                         obj.list2.clear();
271                                                                         for (var i = 0; i < items.length; i++) {
272                                                                                 var item = obj.flesh_item_for_list( 
273                                                                                         items[i].target_biblio_record_entry(),
274                                                                                         items[i].id()
275                                                                                 );
276                                                                                 if (item) obj.list2.append( item );
277                                                                         }
278                                                                 }
279
280                                                                 ml.addEventListener( 'change_bucket', change_bucket , false);
281                                                                 ml.addEventListener( 'command', function() {
282                                                                         JSAN.use('util.widgets'); util.widgets.dispatch('change_bucket',ml);
283                                                                 }, false);
284                                                                 obj.controller.view.bucket_menulist = ml;
285                                                                 JSAN.use('util.widgets'); util.widgets.dispatch('change_bucket',ml);
286                                                                 document.getElementById('refresh').addEventListener( 'command', function() {
287                                                                         JSAN.use('util.widgets'); util.widgets.dispatch('change_bucket',ml);
288                                                                 }, false);
289                                                         };
290                                                 },
291                                         ],
292
293                                         'record_buckets_add' : [
294                                                 ['command'],
295                                                 function() {
296                                                         var bucket_id = obj.controller.view.bucket_menulist.value;
297                                                         if (!bucket_id) return;
298                                                         for (var i = 0; i < obj.record_ids.length; i++) {
299                                                                 var bucket_item = new cbrebi();
300                                                                 bucket_item.isnew('1');
301                                                                 bucket_item.bucket(bucket_id);
302                                                                 bucket_item.target_biblio_record_entry( obj.record_ids[i] );
303                                                                 try {
304                                                                         var robj = obj.network.simple_request('BUCKET_ITEM_CREATE',
305                                                                                 [ ses(), 'biblio', bucket_item ]);
306
307                                                                         if (typeof robj == 'object') throw robj;
308
309                                                                         var item = obj.flesh_item_for_list( obj.record_ids[i], robj );
310                                                                         if (!item) continue;
311
312                                                                         obj.list2.append( item );
313                                                                 } catch(E) {
314                                                                         alert( js2JSON(E) );
315                                                                 }
316                                                         }
317                                                 }
318                                         ],
319                                         'record_buckets_sel_add' : [
320                                                 ['command'],
321                                                 function() {                                                        
322                                                         var bucket_id = obj.controller.view.bucket_menulist.value;
323                                                         if (!bucket_id) return;
324                                                         for (var i = 0; i < obj.selection_list1.length; i++) {
325                                                                 var docid = obj.selection_list1[i].docid;
326                                                                 var bucket_item = new cbrebi();
327                                                                 bucket_item.isnew('1');
328                                                                 bucket_item.bucket(bucket_id);
329                                                                 bucket_item.target_biblio_record_entry( docid );
330                                                                 try {
331                                                                         var robj = obj.network.simple_request('BUCKET_ITEM_CREATE',
332                                                                                 [ ses(), 'biblio', bucket_item ]);
333
334                                                                         if (typeof robj == 'object') throw robj;
335
336                                                                         var item = obj.flesh_item_for_list( docid, robj );
337                                                                         if (!item) continue;
338
339                                                                         obj.list2.append( item );
340                                                                 } catch(E) {
341                                                                         alert( js2JSON(E) );
342                                                                 }
343                                                         }
344
345                                                 }
346                                         ],
347                                         'record_buckets_export' : [
348                                                 ['command'],
349                                                 function() {                                                        
350                                                         for (var i = 0; i < obj.selection_list2.length; i++) {
351                                                                 var docid = obj.selection_list2[i].docid;
352                                                                 var item = obj.flesh_item_for_list( docid );
353                                                                 if (item) {
354                                                                         obj.list1.append( item );
355                                                                         obj.record_ids.push( docid );
356                                                                 }
357                                                         }
358                                                 }
359                                         ],
360
361                                         'record_buckets_delete_item' : [
362                                                 ['command'],
363                                                 function() {
364                                                         for (var i = 0; i < obj.selection_list2.length; i++) {
365                                                                 try {
366                                                                         var bucket_item_id = obj.selection_list2[i].bucket_item_id;
367                                                                         var robj = obj.network.simple_request('BUCKET_ITEM_DELETE',
368                                                                                 [ ses(), 'biblio', bucket_item_id ]);
369                                                                         if (typeof robj == 'object') throw robj;
370                                                                 } catch(E) {
371                                                                         alert(js2JSON(E));
372                                                                 }
373                                                         }
374                                                         alert("Action completed.");
375                                                         setTimeout(
376                                                                 function() {
377                                                                         JSAN.use('util.widgets'); 
378                                                                         util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
379                                                                 }, 0
380                                                         );
381                                                 }
382                                         ],
383                                         'record_buckets_delete_bucket' : [
384                                                 ['command'],
385                                                 function() {
386                                                         try {
387                                                                 var bucket = obj.controller.view.bucket_menulist.value;
388                                                                 var name = obj.bucket_id_name_map[ bucket ];
389                                                                 var conf = window.confirm('Delete the bucket named ' + name + '?');
390                                                                 if (!conf) return;
391                                                                 obj.list2.clear();
392                                                                 var robj = obj.network.simple_request('BUCKET_DELETE',[ses(),'biblio',bucket]);
393                                                                 if (typeof robj == 'object') throw robj;
394                                                                 alert("Action completed.");
395                                                                 obj.controller.render('record_buckets_menulist_placeholder');
396                                                                 setTimeout(
397                                                                         function() {
398                                                                                 JSAN.use('util.widgets'); 
399                                                                                 util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
400                                                                         }, 0
401                                                                 );
402
403                                                         } catch(E) {
404                                                                 alert('FIXME -- ' + E);
405                                                         }
406                                                 }
407                                         ],
408                                         'record_buckets_new_bucket' : [
409                                                 ['command'],
410                                                 function() {
411                                                         try {
412                                                                 var name = prompt('What would you like to name the bucket?','','Bucket Creation');
413
414                                                                 if (name) {
415                                                                         var bucket = new cbreb();
416                                                                         bucket.btype('staff_client');
417                                                                         bucket.owner( obj.data.list.au[0].id() );
418                                                                         bucket.name( name );
419
420                                                                         var robj = obj.network.simple_request('BUCKET_CREATE',[ses(),'biblio',bucket]);
421
422                                                                         if (typeof robj == 'object') {
423                                                                                 if (robj.ilsevent == 1710 /* CONTAINER_EXISTS */) {
424                                                                                         alert('You already have a bucket with that name.');
425                                                                                         return;
426                                                                                 }
427                                                                                 throw robj;
428                                                                         }
429
430
431                                                                         alert('Bucket "' + name + '" created.');
432
433                                                                         obj.controller.render('record_buckets_menulist_placeholder');
434                                                                         obj.controller.view.bucket_menulist.value = robj;
435                                                                         setTimeout(
436                                                                                 function() {
437                                                                                         JSAN.use('util.widgets'); 
438                                                                                         util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
439                                                                                 }, 0
440                                                                         );
441                                                                 }
442                                                         } catch(E) {
443                                                                 alert( js2JSON(E) );
444                                                         }
445                                                 }
446                                         ],
447                                         
448                                         'cmd_pending_buckets_csv_to_clipboard' : [ ['command'], function() { obj.list1.dump_csv_to_clipboard(); } ], 
449                                         'cmd_record_buckets_csv_to_clipboard' : [ ['command'], function() { obj.list2.dump_csv_to_clipboard(); } ],
450                     'cmd_pending_buckets_csv_to_printer' : [ ['command'], function() { obj.list1.dump_csv_to_printer(); } ],
451                     'cmd_record_buckets_csv_printer' : [ ['command'], function() { obj.list2.dump_csv_to_printer(); } ], 
452                     'cmd_pending_buckets_csv_to_file' : [ ['command'], function() { obj.list1.dump_csv_to_file( { 'defaultFileName' : 'pending_records.txt' } ); } ],
453                     'cmd_record_buckets_csv_file' : [ ['command'], function() { obj.list2.dump_csv_to_file( { 'defaultFileName' : 'bucket_records.txt' } ); } ], 
454
455                                         'cmd_export_records_usmarc' : [
456                                                 ['command'],
457                                                 function () { return cat.record_buckets.export_records(obj, 'usmarc') }
458                                         ],
459
460                                         'cmd_export_records_unimarc' : [
461                                                 ['command'],
462                                                 function () { return cat.record_buckets.export_records(obj, 'unimarc') }
463                                         ],
464
465                                         'cmd_export_records_xml' : [
466                                                 ['command'],
467                                                 function () { return cat.record_buckets.export_records(obj, 'xml') }
468                                         ],
469
470                                         'cmd_export_records_bre' : [
471                                                 ['command'],
472                                                 function () { return cat.record_buckets.export_records(obj, 'bre') }
473                                         ],
474
475                                         'cmd_merge_records' : [
476                                                 ['command'],
477                                                 function() {
478                                                         try {
479                                                                 obj.list2.select_all();
480                                                                 obj.data.stash_retrieve();
481                                                                 JSAN.use('util.functional');
482
483                                                                 var record_ids = util.functional.map_list(
484                                                                         obj.list2.dump_retrieve_ids(),
485                                                                         function (o) {
486                                                                                 return JSON2js(o).docid; // docid
487                                                                         }
488                                                                 );
489
490                                                                 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
491                                                                 var top_xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" >';
492                                                                 top_xml += '<description>Merge these records? (Select the "lead" record first)</description>';
493                                                                 top_xml += '<hbox><button id="lead" disabled="true" label="Merge" name="fancy_submit"/><button label="Cancel" accesskey="C" name="fancy_cancel"/></hbox></vbox>';
494
495                                                                 var xml = '<form xmlns="http://www.w3.org/1999/xhtml">';
496                                                                 xml += '<table><tr valign="top">';
497                                                                 for (var i = 0; i < record_ids.length; i++) {
498                                                                         xml += '<td><input value="Lead" id="record_' + record_ids[i] + '" type="radio" name="lead"';
499                                                                         xml += ' onclick="' + "try { var x = document.getElementById('lead'); x.setAttribute('value',";
500                                                                         xml += record_ids[i] + '); x.disabled = false; } catch(E) { alert(E); }">';
501                                                                         xml += '</input>Lead Record? #' + record_ids[i] + '</td>';
502                                                                 }
503                                                                 xml += '</tr><tr valign="top">';
504                                                                 for (var i = 0; i < record_ids.length; i++) {
505                                                                         xml += '<td nowrap="nowrap"><iframe src="' + urls.XUL_BIB_BRIEF; 
506                                                                         xml += '?docid=' + record_ids[i] + '"/></td>';
507                                                                 }
508                                                                 xml += '</tr><tr valign="top">';
509                                                                 for (var i = 0; i < record_ids.length; i++) {
510                                                                         html = obj.network.simple_request('MARC_HTML_RETRIEVE',[ record_ids[i] ]);
511                                                                         xml += '<td nowrap="nowrap"><iframe style="min-height: 1000px; min-width: 300px;" flex="1" src="data:text/html,' + window.escape(html) + '"/></td>';
512                                                                 }
513                                                                 xml += '</tr></table></form>';
514                                                                 //obj.data.temp_merge_top = top_xml; obj.data.stash('temp_merge_top');
515                                                                 //obj.data.temp_merge_mid = xml; obj.data.stash('temp_merge_mid');
516                                                                 JSAN.use('util.window'); var win = new util.window();
517                                                                 var fancy_prompt_data = win.open(
518                                                                         urls.XUL_FANCY_PROMPT,
519                                                                         //+ '?xml_in_stash=temp_merge_mid'
520                                                                         //+ '&top_xml_in_stash=temp_merge_top'
521                                                                         //+ '&title=' + window.escape('Record Merging'),
522                                                                         'fancy_prompt', 'chrome,resizable,modal,width=700,height=500',
523                                                                         {
524                                                                                 'top_xml' : top_xml, 'xml' : xml, 'title' : 'Record Merging'
525                                                                         }
526                                                                 );
527                                                                 //obj.data.stash_retrieve();
528
529                                                                 if (typeof fancy_prompt_data.fancy_status == 'undefined' || fancy_prompt_data.fancy_status == 'incomplete') { alert('Merge Aborted'); return; }
530                                                                 var robj = obj.network.simple_request('MERGE_RECORDS', 
531                                                                         [ 
532                                                                                 ses(), 
533                                                                                 fancy_prompt_data.lead, 
534                                                                                 util.functional.filter_list( record_ids,
535                                                                                         function(o) {
536                                                                                                 return o != fancy_prompt_data.lead;
537                                                                                         }
538                                                                                 )
539                                                                         ]
540                                                                 );
541                                                                 if (typeof robj.ilsevent != 'undefined') {
542                                                                         throw(robj);
543                                                                 } else {
544                                                                         alert('Records were successfully merged.');
545                                                                 }
546
547                                                                 obj.render_pending_records(); // FIXME -- need a generic refresh for lists
548                                                                 setTimeout(
549                                                                         function() {
550                                                                                 JSAN.use('util.widgets'); 
551                                                                                 util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
552                                                                         }, 0
553                                                                 );
554                                                         } catch(E) {
555                                                                 obj.error.standard_unexpected_error_alert('Records were not likely merged.',E);
556                                                         }
557
558                                                 }
559                                         ],
560                                         
561                                         'cmd_delete_records' : [
562                                                 ['command'],
563                                                 function() {
564                                                         try {
565                                                                 obj.list2.select_all();
566                                                                 obj.data.stash_retrieve();
567                                                                 JSAN.use('util.functional');
568
569                                                                 var record_ids = util.functional.map_list(
570                                                                         obj.list2.dump_retrieve_ids(),
571                                                                         function (o) {
572                                                                                 return JSON2js(o).docid; // docid
573                                                                         }
574                                                                 );
575
576                                                                 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
577                                                                 var top_xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" >';
578                                                                 top_xml += '<description>Delete these records?</description>';
579                                                                 top_xml += '<hbox><button id="lead" disabled="false" label="Delete" name="fancy_submit"/><button label="Cancel" accesskey="C" name="fancy_cancel"/></hbox></vbox>';
580
581                                                                 var xml = '<form xmlns="http://www.w3.org/1999/xhtml">';
582                                                                 xml += '<table><tr valign="top">';
583                                                                 for (var i = 0; i < record_ids.length; i++) {
584                                                                         xml += '<td>Record #' + record_ids[i] + '</td>';
585                                                                 }
586                                                                 xml += '</tr><tr valign="top">';
587                                                                 for (var i = 0; i < record_ids.length; i++) {
588                                                                         xml += '<td nowrap="nowrap"><iframe src="' + urls.XUL_BIB_BRIEF; 
589                                                                         xml += '?docid=' + record_ids[i] + '"/></td>';
590                                                                 }
591                                                                 xml += '</tr><tr valign="top">';
592                                                                 for (var i = 0; i < record_ids.length; i++) {
593                                                                         html = obj.network.simple_request('MARC_HTML_RETRIEVE',[ record_ids[i] ]);
594                                                                         xml += '<td nowrap="nowrap"><iframe style="min-height: 1000px; min-width: 300px;" flex="1" src="data:text/html,' + window.escape(html) + '"/></td>';
595                                                                 }
596                                                                 xml += '</tr></table></form>';
597                                                                 //obj.data.temp_merge_top = top_xml; obj.data.stash('temp_merge_top');
598                                                                 //obj.data.temp_merge_mid = xml; obj.data.stash('temp_merge_mid');
599                                                                 JSAN.use('util.window'); var win = new util.window();
600                                                                 var fancy_prompt_data = win.open(
601                                                                         urls.XUL_FANCY_PROMPT,
602                                                                         //+ '?xml_in_stash=temp_merge_mid'
603                                                                         //+ '&top_xml_in_stash=temp_merge_top'
604                                                                         //+ '&title=' + window.escape('Record Purging'),
605                                                                         'fancy_prompt', 'chrome,resizable,modal,width=700,height=500',
606                                                                         {
607                                                                                 'top_xml' : top_xml, 'xml' : xml, 'title' : 'Record Purging'
608                                                                         }
609                                                                 );
610                                                                 //obj.data.stash_retrieve();
611                                                                 if (typeof fancy_prompt_data.fancy_status == 'undefined' || fancy_prompt_data.fancy_status != 'complete') { alert('Delete Aborted'); return; }
612                                                                 var s = '';
613                                                                 for (var i = 0; i < record_ids.length; i++) {
614                                                                         var robj = obj.network.simple_request('FM_BRE_DELETE',[ses(),record_ids[i]]);
615                                                                         if (typeof robj.ilsevent != 'undefined') {
616                                                                                 if (!s) s = 'Error deleting these records:\n';
617                                                                                 s += 'Record #' + record_ids[i] + ' : ' + robj.textcode + ' : ' + robj.desc + '\n';
618                                                                         }
619                                                                 }
620                                                                 if (s) { alert(s); } else { alert('Records deleted.'); }
621
622                                                                 obj.render_pending_records(); // FIXME -- need a generic refresh for lists
623                                                                 setTimeout(
624                                                                         function() {
625                                                                                 JSAN.use('util.widgets'); 
626                                                                                 util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
627                                                                         }, 0
628                                                                 );
629                                                         } catch(E) {
630                                                                 obj.error.standard_unexpected_error_alert('Records were not likely deleted.',E);
631                                                         }
632
633                                                 }
634                                         ],
635
636                                         'cmd_broken' : [
637                                                 ['command'],
638                                                 function() { alert('Not Yet Implemented'); }
639                                         ],
640                                         'cmd_sel_opac' : [
641                                                 ['command'],
642                                                 function() {
643                                                         try {
644                                                                 obj.list2.select_all();
645                                                                 JSAN.use('util.functional');
646                                                                 var docids = util.functional.map_list(
647                                                                         obj.list2.dump_retrieve_ids(),
648                                                                         function (o) {
649                                                                                 return JSON2js(o).docid; // docid
650                                                                         }
651                                                                 );
652                                                                 for (var i = 0; i < docids.length; i++) {
653                                                                         var doc_id = docids[i];
654                                                                         var opac_url = xulG.url_prefix( urls.opac_rdetail ) + '?r=' + doc_id;
655                                                                         var content_params = { 
656                                                                                 'session' : ses(),
657                                                                                 'authtime' : ses('authtime'),
658                                                                                 'opac_url' : opac_url,
659                                                                         };
660                                                                         xulG.new_tab(
661                                                                                 xulG.url_prefix(urls.XUL_OPAC_WRAPPER), 
662                                                                                 {'tab_name':'Retrieving title...'}, 
663                                                                                 content_params
664                                                                         );
665                                                                 }
666                                                         } catch(E) {
667                                                                 obj.error.standard_unexpected_error_alert('Showing in OPAC',E);
668                                                         }
669                                                 }
670                                         ],
671
672                                 }
673                         }
674                 );
675                 this.controller.render();
676
677                 if (typeof xulG == 'undefined') {
678                         obj.controller.view.cmd_sel_opac.disabled = true;
679                         obj.controller.view.cmd_sel_opac.setAttribute('disabled',true);
680                 }
681         },
682
683         'flesh_item_for_list' : function(docid,bucket_item_id) {
684                 var obj = this;
685                 try {
686                         var record = obj.network.simple_request( 'MODS_SLIM_RECORD_RETRIEVE.authoritative', [ docid ]);
687                         if (record == null || typeof(record.ilsevent) != 'undefined') {
688                                 throw(record);
689                         } else {
690                                 var item = {
691                                         'retrieve_id' : js2JSON( { 'docid' : docid, 'bucket_item_id' : bucket_item_id } ),
692                                         'row' : {
693                                                 'my' : {
694                                                         'mvr' : record,
695                                                 }
696                                         }
697                                 };
698                                 return item;
699                         }
700                 } catch(E) {
701                         obj.error.standard_unexpected_error_alert('Could not retrieve this record: ' + docid,E);
702                         return null;
703                 }
704
705         },
706         
707 };
708
709 dump('exiting cat.record_buckets.js\n');