]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/cat/bib_brief.js
Fix can_have_copies checks
[Evergreen.git] / Open-ILS / xul / staff_client / server / cat / bib_brief.js
1 var docid;
2
3 function bib_brief_init(mode) {
4     try {
5
6         ui_init(); // JSAN, etc.
7
8         if (! mode) { mode = 'horizontal'; }
9
10         JSAN.use('OpenILS.data');
11         g.data = new OpenILS.data();
12         g.data.stash_retrieve();
13
14         docid = xul_param('docid');
15
16         // hackery if modal and invoked with util.window
17         var key = location.pathname + location.search + location.hash;
18         if (!docid
19             && typeof g.data.modal_xulG_stack != 'undefined'
20             && typeof g.data.modal_xulG_stack[key] != 'undefined'
21         ) {
22             var xulG = g.data.modal_xulG_stack[key][
23                 g.data.modal_xulG_stack[key].length - 1 ];
24             if (typeof xulG == 'object') {
25                 docid = xulG.docid;
26             }
27         }
28
29         JSAN.use('util.network'); g.network = new util.network();
30         JSAN.use('util.date');
31
32         document.getElementById('caption').setAttribute(
33             'tooltiptext',
34             document.getElementById('catStrings').getFormattedString(
35                 'staff.cat.bib_brief.record_id', [docid]
36             )
37         );
38
39         if (docid > -1) {
40
41             g.data.last_record = docid; g.data.stash('last_record');
42
43             g.network.simple_request(
44                 'MODS_SLIM_RECORD_RETRIEVE.authoritative',
45                 [ docid ],
46                 function (req) {
47                     try {
48                         g.mods = req.getResultObject();
49                         set_tab_name();
50                         g.network.simple_request(
51                             'FM_BRE_RETRIEVE_VIA_ID.authoritative',
52                             [ ses(), [ docid ] ],
53                             function (req2) {
54                                 try {
55                                     g.meta = req2.getResultObject()[0];
56                                     set_caption();
57                                     dynamic_grid_replacement(mode);
58                                     bib_brief_overlay({
59                                         'mvr' : g.mods,
60                                         'bre' : g.meta
61                                     });
62                                 } catch(E) {
63                                     alert('Error in bib_brief.js, '
64                                         + 'req handler 2: ' + E + '\n');
65                                 }
66                             }
67                         );
68                     } catch(E) {
69                         alert('Error in bib_brief.js, req handler 1: '
70                             + E + '\n');
71                     }
72                 }
73             );
74
75         } else {
76             var t = document.getElementById('caption').getAttribute('label');
77             t += ' ' + document.getElementById('catStrings').getString('staff.cat.bib_brief.noncat') + ' ';
78             document.getElementById('caption').setAttribute('style','background: red; color: white;');
79             document.getElementById('caption').setAttribute('label',t);
80         }
81
82     } catch(E) {
83         var err_msg = document.getElementById("commonStrings").getFormattedString('common.exception', ['cat/bib_brief.xul', E]);
84         try { g.error.sdump('D_ERROR',err_msg); } catch(E) { dump(err_msg); }
85         alert(err_msg);
86     }
87 }
88
89 function set_tab_name() {
90     try {
91         window.xulG.set_tab_name(g.mods.tcn());
92     } catch(E) {
93         dump('Error in bib_brief.js, set_tab_name(): ' + E + '\n');
94     }
95 }
96
97 function set_caption() {
98     try {
99         var t = document.getElementById('caption').getAttribute('label');
100         if (get_bool( g.meta.deleted() )) {
101             t += ' ' + document.getElementById('catStrings').getString('staff.cat.bib_brief.deleted') + ' ';
102             document.getElementById('caption').setAttribute('style','background: red; color: white;');
103         }
104         if ( ! get_bool( g.meta.active() ) ) {
105             t += ' ' + document.getElementById('catStrings').getString('staff.cat.bib_brief.inactive') + ' ';
106             document.getElementById('caption').setAttribute('style','background: red; color: white;');
107         }
108         document.getElementById('caption').setAttribute('label',t);
109
110     } catch(E) {
111         dump('Error in bib_brief.js, set_caption(): ' + E + '\n');
112     }
113 }
114
115 function unhide_add_volumes_button() {
116     if (xulG && typeof xulG == 'object' && typeof xulG['new_tab'] == 'function') {
117         document.getElementById('add_volumes').hidden = false;
118         document.getElementById('add_volumes_left_paren').hidden = false;
119         document.getElementById('add_volumes_right_paren').hidden = false;
120     }
121 }
122
123 function view_marc() {
124     try {
125         JSAN.use('util.window'); var win = new util.window();
126         if (docid < 0) {
127             alert(document.getElementById("catStrings").getString('staff.cat.bib_brief.noncat.alert'));
128         } else {
129             netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
130             //win.open( urls.XUL_MARC_VIEW + '?noprint=1&docid=' + docid, 'marc_view', 'chrome,resizable,modal,width=400,height=400');
131             win.open( urls.XUL_MARC_VIEW, 'marc_view', 'chrome,resizable,modal,width=400,height=400',{'noprint':1,'docid':docid});
132         }
133     } catch(E) {
134         g.error.standard_unexpected_error_alert('spawning marc display',E);
135     }
136 }
137
138 function spawn_patron(span) {
139     try {
140         if (typeof window.xulG == 'object' && typeof window.xulG.set_patron_tab == 'function') {
141             window.xulG.set_patron_tab( {}, { 'id' : span.getAttribute('au_id') } );
142         } else {
143             copy_to_clipboard( span.textContent );
144         }
145     } catch(E) {
146         g.error.standard_unexpected_error_alert('spawning patron display',E);
147     }
148 }
149
150 function add_volumes() {
151     try {
152         var edit = 0;
153         try {
154             edit = g.network.request(
155                 api.PERM_MULTI_ORG_CHECK.app,
156                 api.PERM_MULTI_ORG_CHECK.method,
157                 [
158                     ses(),
159                     ses('staff_id'),
160                     [ ses('ws_ou') ],
161                     [ 'CREATE_VOLUME', 'CREATE_COPY' ]
162                 ]
163             ).length == 0 ? 1 : 0;
164         } catch(E) {
165             g.error.sdump('D_ERROR','batch permission check: ' + E);
166         }
167
168         if (edit==0) {
169             alert(document.getElementById('offlineStrings').getString('staff.circ.copy_status.add_volumes.perm_failure'));
170             return; // no read-only view for this interface
171         }
172
173         try {
174             JSAN.use('cat.util');
175             var cbsObj = cat.util.get_cbs_for_bre_id(docid);
176             if (cbsObj && cbsObj.can_have_copies() != get_db_true()) {
177                 alert(document.getElementById('offlineStrings').getFormattedString('staff.cat.bib_source.can_have_copies.false', [cbsObj.source()]));
178                 return;
179             }
180         } catch(E) {
181             g.error.sdump('D_ERROR','can have copies check: ' + E);
182             alert('Error in server/cat/bib_brief.js, add_volumes(): ' + E);
183             return;
184         }
185
186         var title = document.getElementById('offlineStrings').getFormattedString('staff.circ.copy_status.add_volumes.title', [docid]);
187
188         var url;
189         var unified_interface = String( g.data.hash.aous['ui.unified_volume_copy_editor'] ) == 'true';
190         if (unified_interface) {
191             var horizontal_interface = String( g.data.hash.aous['ui.cat.volume_copy_editor.horizontal'] ) == 'true';
192             url = window.xulG.url_prefix( horizontal_interface ? urls.XUL_VOLUME_COPY_CREATOR_HORIZONTAL : urls.XUL_VOLUME_COPY_CREATOR );
193         } else {
194             url = window.xulG.url_prefix( urls.XUL_VOLUME_COPY_CREATOR_ORIGINAL );
195         }
196         var w = xulG.new_tab(
197             url,
198             { 'tab_name' : title },
199             { 'doc_id' : docid, 'ou_ids' : [ ses('ws_ou') ] }
200         );
201     } catch(E) {
202         alert('Error in server/cat/bib_brief.js, add_volumes(): ' + E);
203     }
204 }
205
206 function ui_init() {
207     netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
208     if (typeof JSAN == 'undefined') {
209         throw(
210             document.getElementById("commonStrings").getString(
211                 'common.jsan.missing'
212             )
213         );
214     }
215     JSAN.errorLevel = "die"; // none, warn, or die
216     JSAN.addRepository('/xul/server/');
217     JSAN.use('util.error'); g.error = new util.error();
218     g.error.sdump('D_TRACE','my_init() for cat_bib_brief.xul');
219 }
220
221 function dynamic_grid_replacement(mode) {
222     netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
223     var prefs = Components.classes[
224         '@mozilla.org/preferences-service;1'
225     ].getService(
226         Components.interfaces['nsIPrefBranch']
227     );
228     if (! prefs.prefHasUserValue(
229             'oils.bib_brief.'+mode+'.dynamic_grid_replacement.data'
230         )
231     ) {
232         return false;
233     }
234
235     var gridData = JSON2js(
236         prefs.getCharPref(
237             'oils.bib_brief.'+mode+'.dynamic_grid_replacement.data'
238         )
239     );
240
241     var grid = document.getElementById('bib_brief_grid');
242     if (!grid) { return false; }
243
244     JSAN.use('util.widgets');
245
246     util.widgets.remove_children(grid);
247
248     var columns = document.createElement('columns');
249     grid.appendChild(columns);
250
251     var maxColumns = 0;
252     for (var i = 0; i < gridData.length; i++) {
253         if (gridData[i].length > maxColumns) {
254             maxColumns = gridData[i].length;
255         }
256     }
257
258     for (var i = 0; i < maxColumns; i++) {
259         var columnA = document.createElement('column');
260         columns.appendChild(columnA);
261         var columnB = document.createElement('column');
262         columns.appendChild(columnB);
263     }
264
265     // Flex the column where the title usually goes
266     columns.firstChild.nextSibling.setAttribute('flex','1');
267
268     var rows = document.createElement('rows');
269     grid.appendChild(rows);
270
271 /*
272     <row id="bib_brief_grid_row1" position="1">
273         <label control="title" class="emphasis"
274             value="&staff.cat.bib_brief.title.label;"
275             accesskey="&staff.cat.bib_brief.title.accesskey;"/>
276         <textbox id="title"
277             name="title" readonly="true" context="clipboard"
278             class="plain" onfocus="this.select()"/>
279     </row>
280 */
281
282     var catStrings = document.getElementById('catStrings');
283
284     for (var i = 0; i < gridData.length; i++) {
285         var row = document.createElement('row');
286         row.setAttribute('id','bib_brief_grid_row'+i);
287         rows.appendChild(row);
288
289         for (var j = 0; j < gridData[i].length; j++) {
290             var name = gridData[i][j];
291
292             var label = document.createElement('label');
293             label.setAttribute('control',name);
294             label.setAttribute('class','emphasis');
295             label.setAttribute('value',
296                 catStrings.testString('staff.cat.bib_brief.'+name+'.label')
297                 ? catStrings.getString('staff.cat.bib_brief.'+name+'.label')
298                 : name
299             );
300             label.setAttribute('accesskey',
301                 catStrings.testString('staff.cat.bib_brief.'+name+'.accesskey')
302                 ? catStrings.getString('staff.cat.bib_brief.'+name+'.accesskey')
303                 : name
304             );
305             row.appendChild(label);
306
307             var textbox = document.createElement('textbox');
308             textbox.setAttribute('id',name);
309             textbox.setAttribute('name',name);
310             textbox.setAttribute('readonly','true');
311             textbox.setAttribute('context','clipboard');
312             textbox.setAttribute('class','plain');
313             textbox.setAttribute('onfocus','this.select()');
314             row.appendChild(textbox);
315         }
316     }
317     return true;
318 }
319