]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/reports/oils_rpt_utils.js
LP2061136 - Stamping 1405 DB upgrade script
[working/Evergreen.git] / Open-ILS / web / reports / oils_rpt_utils.js
1 var oilsRptID = 0;
2 var oilsRptID2 = 0;
3 var oilsRptID3 = 0;
4 function oilsNextId() {
5         return 'oils_'+ (oilsRptID++);
6 }
7
8 function oilsNextNumericId() {
9         return oilsRptID3++;
10 }
11
12 function oilsRptNextParam() {
13         return '::P'+ (oilsRptID2++);
14 }
15
16 function oilsRptFetchOrgTree(callback) {
17         var req = new Request(OILS_RPT_FETCH_ORG_TREE);
18         req.callback(
19                 function(r) {
20                         globalOrgTree = r.getResultObject();
21                         if( callback ) callback();
22                 }
23         );
24         req.send();
25 }
26
27
28 /*
29 function oilsRptCacheObject(obj) {
30         var id = oilsNextId();
31         oilsRptObjectCache[id] = obj;
32         return id;
33 }
34
35 function oilsRptFindObject(id) {
36         return oilsRptObjectCache[id];
37 }
38 */
39
40 function oilsRptCacheObject(type, obj, id) {
41         if( !oilsRptObjectCache[type] )
42                 oilsRptObjectCache[type] = {};
43         oilsRptObjectCache[type][id] = obj;
44 }
45
46 function oilsRptGetCache(type, id) {
47         if( !oilsRptObjectCache[type] )
48                 return null;
49         return oilsRptObjectCache[type][id];
50 }
51
52
53 /* -------------------------------------------- */
54 function oilsRptObject() {}
55 oilsRptObject.prototype.init = function(obj) {
56         if(!obj) obj = this;
57         oilsRptObject.cache(obj);
58 }
59 oilsRptObject.objectCache = {};
60 oilsRptObject.find = function(id) {
61         return oilsRptObject.objectCache[id];
62 }
63 oilsRptObject.cache = function(obj) {
64         obj.id = oilsNextNumericId();
65         oilsRptObject.objectCache[obj.id] = obj;
66         return obj.id;
67 }
68 /* -------------------------------------------- */
69
70
71 /* returns just the column name */
72 function oilsRptPathCol(path) {
73         var parts = path.split(/-/);
74         return parts.pop();
75 }
76
77 /* returns the IDL class of the selected column */
78 function oilsRptPathClass(path) {
79         var parts = path.split(/-/);
80         parts.pop();
81         return parts.pop();
82 }
83
84 /* returns everything prior to the column name */
85 function oilsRptPathRel(path) {
86         var parts = path.split(/-/);
87         parts.pop();
88         return parts.join('-');
89 }
90
91 /* creates a label "path" based on the column path */
92 function oilsRptMakeLabel(path) {
93     if (!path) return path;
94     if (path.indexOf(' ') > -1) return path
95
96         var parts = path.split(/-/);
97         var str = '';
98         for( var i = 0; i < parts.length; i++ ) {
99                 if(i%2 == 0) { // IDL class names
100                         if( i == 0 )
101                                 str += oilsIDL[parts[i]].label;
102                 } else { // Field names
103             var name = parts[i];
104             name = name.replace(/>.*/,''); // field name may be appended with >join-type
105             var f = oilsRptFindField(oilsIDL[parts[i-1]], name);
106                         str += " -> "+f.label;
107                 }
108         }
109
110         return str;
111 }
112
113
114
115
116 function oilsRptResetParams() {
117         oilsRptID2 = 0;
118 }
119
120 function nodeText(id) {
121         if($(id))
122                 return $(id).innerHTML;
123         return "";
124 }
125
126
127 function oilsRptDebug() {
128         if(!oilsRptDebugEnabled) return;
129
130         _debug("\n-------------------------------------\n");
131         _debug(oilsRpt.toString());
132         _debug("\n-------------------------------------\n");
133
134         /*
135         if(!oilsRptDebugWindow)
136                 oilsRptDebugWindow = window.open('','Debug','resizable,width=700,height=500,scrollbars=1,chrome'); 
137         oilsRptDebugWindow.document.body.innerHTML = oilsRpt.toHTMLString();
138         */
139 }
140
141
142 function print_tabs_html(t) {
143         var r = '';
144         for (var j = 0; j < t; j++ ) { r = r + "&nbsp;&nbsp;"; }
145         return r;
146 }
147
148 function formatJSONHTML(s) {
149         var r = ''; var t = 0;
150         for (var i in s) {
151                 if (s[i] == '{' || s[i] == '[') {
152                         r = r + s[i] + "<br/>" + print_tabs_html(++t);
153                 } else if (s[i] == '}' || s[i] == ']') {
154                         t--; r = r + "<br/>" + print_tabs_html(t) + s[i];
155                 } else if (s[i] == ',') {
156                         r = r + s[i];
157                         r = r + "<br/>" + print_tabs_html(t);
158                 } else {
159                         r = r + s[i];
160                 }
161         }
162         return r;
163 }
164
165 function setMousePos(e) {
166         oilsMouseX = e.pageX
167         oilsMouseY = e.pageY
168         oilsPageXMid = parseInt(window.innerHeight / 2);
169         oilsPageYMid = parseInt(window.innerWidth / 2);
170 }  
171
172 function buildFloatingDiv(div, width) {
173         var left = parseInt((window.innerWidth / 2) - (width/2));
174         var halfh = parseInt(div.clientHeight / 2);
175         var top = oilsMouseY - halfh + 50;
176         var dbot = top + halfh;
177         if( dbot > window.innerHeight ) {
178                 top = oilsMouseY - div.clientHeight - 10;
179         }
180         div.setAttribute('style', 'left:'+left+'px; top:'+top+'px; width:'+width+'px');
181         //div.setAttribute('style', 'top:'+top+'px;');
182         //alert(DOM.oils_rpt_filter_selector.style.top);
183 }
184
185
186 function mergeObjects( src, obj ) {
187         for( var i in obj ) {
188                 if( typeof obj[i] == 'string' ) {
189                         src[i] = obj[i];
190                 } else {
191                         if(src[i]) mergeObjects(src[i], obj[i]);
192                         else src[i] = obj[i];
193                 }
194         }
195 }
196
197
198 /* scours the doc for elements with IDs.  When it finds one,
199         it grabs the dom node and sets a reference to the node at DOM[id]; */
200 function oilsRptIdObjects(node) {
201         if(!node) node = document.documentElement;
202         if( node.nodeType != 1 ) return;
203         var id = node.getAttribute('id');
204         /* Create node references only for IDs that are likely
205            valid function names. This avoids an issue where
206            the interface fails to load if the DOM contains
207            elements with a hyphen in their ID. For example,
208            a script element loaded by the BitWarden browser
209            plugin - see LP#2052567 */
210         if( id && id.match(/^[A-Za-z][0-9A-Za-z_]*$/) ) eval("DOM."+id+"=$('"+id+"');");
211         var children = node.childNodes;
212         for( var c = 0; c < children.length; c++ ) 
213                 oilsRptIdObjects(children[c]);
214 }
215
216
217 function oilsRptObjectKeys(obj) {
218         var k = [];
219         for( var i in obj ) k.push(i);
220         return k;
221 }
222
223
224 /* makes cls a subclass of parent */
225 function oilsRptSetSubClass(cls, parent) {
226         var str = cls+'.prototype = new '+parent+'();\n';
227         str += cls+'.prototype.constructor = '+cls+';\n';
228         str += cls+'.baseClass = '+parent+'.prototype.constructor;\n';
229         str += cls+'.prototype.super = '+parent+'.prototype;\n';
230         eval(str);
231 }
232
233
234 function oilsRptUpdateFolder(folder, type, callback) {
235
236         _debug("updating folder " + js2JSON(folder));
237
238         var req = new Request(OILS_RPT_UPDATE_FOLDER, SESSION, type, folder);
239         if( callback ) {
240                 req.callback( 
241                         function(r) {
242                                 if( r.getResultObject() == 1 )
243                                         callback(true);
244                                 else callback(false);
245                         }
246                 );
247                 req.send();
248         } else {
249                 req.send(true);
250                 return req.result();
251         }
252 }
253
254 function oilsRptCreateFolder(folder, type, callback) {
255         _debug("creating folder "+ js2JSON(folder));
256         var req = new Request(OILS_RPT_CREATE_FOLDER, SESSION, type, folder);
257         if( callback ) {
258                 req.callback( 
259                         function(r) {
260                                 if( r.getResultObject() > 0 )
261                                         callback(true);
262                                 else callback(false);
263                         }
264                 );
265                 req.send();
266         } else {
267                 req.send(true);
268                 return req.result();
269         }
270 }
271
272 function oilsRptUpdateTemplate(template, callback) {
273         oilsRptDoGenericUpdate(OILS_RPT_UPDATE_TEMPLATE, template, callback);
274 }
275
276 function oilsRptUpdateReport(report, callback) {
277         oilsRptDoGenericUpdate(OILS_RPT_UPDATE_REPORT, report, callback);
278 }
279
280 function oilsRptUpdateSchedule(schedule, callback) {
281         oilsRptDoGenericUpdate(OILS_RPT_UPDATE_SCHEDULE, schedule, callback);
282 }
283
284 function oilsRptDoGenericUpdate( method, arg, callback ) {
285         _debug("generic update running: "+method);
286         var req = new Request(method, SESSION, arg);
287         req.callback(
288                 function(r) {
289                         if( r.getResultObject() > 0 )
290                                 callback(true);
291                         else callback(false);
292                 }
293         );
294         req.send();
295 }
296
297 function oilsRptFetchReport(id, callback) {
298         var r = oilsRptGetCache('rr', id);
299         if(r) return callback(r);
300         var req = new Request(OILS_RPT_FETCH_REPORT, SESSION, id);
301         req.callback( 
302                 function(res) { 
303                         var rpt = res.getResultObject();
304                         oilsRptCacheObject('rr', rpt, id);
305                         callback(rpt);
306                 }
307         );
308         req.send();
309 }
310
311 function oilsRptFetchUser(id, callback) {
312         var r = oilsRptGetCache('au', id);
313         if(r) return callback(r);
314         var req = new Request(FETCH_FLESHED_USER, SESSION, id, []);
315         req.callback( 
316                 function(res) { 
317                         var user = res.getResultObject();
318                         oilsRptCacheObject('au', user, id);
319                         callback(user);
320                 }
321         );
322         req.send();
323 }
324
325 function oilsRptFetchTemplate(id, callback) {
326         var t = oilsRptGetCache('rt', id);
327         if(t) return callback(t);
328         var r = new Request(OILS_RPT_FETCH_TEMPLATE, SESSION, id);
329         r.callback( 
330                 function(res) { 
331                         var tmpl = res.getResultObject();
332                 oilsRptCacheObject('rt', tmpl, id);
333                         callback(tmpl);
334                 }
335         );
336         r.send();
337 }
338
339 function oilsRptAlertSuccess() { alertId('oils_rpt_generic_success'); }
340 function oilsRptAlertFailure() { alertId('oils_rpt_generic_failure'); }
341
342
343 function oilsRptBuildOutputLink(tid, rid, sid) {
344         return OILS_IDL_OUTPUT_URL + tid+'/'+rid+'/'+sid+'/'+ OILS_IDL_OUTPUT_FILE;
345 }
346
347