]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/reports/oils_rpt_folders.js
added sanity checks to user params to verify data is getting filled in
[Evergreen.git] / Open-ILS / web / reports / oils_rpt_folders.js
1 var oilsRptFolderNodeCache = {};
2 oilsRptFolderNodeCache.template = {};
3 oilsRptFolderNodeCache.report  = {};
4 oilsRptFolderNodeCache.output  = {};
5
6 oilsRptSetSubClass('oilsRptFolderManager','oilsRptObject');
7
8 function oilsRptFolderManager() { this.init(); }
9
10 oilsRptFolderManager.prototype.draw = function(auth) {
11
12         if(!auth) auth = SESSION;
13
14         this.folderTree = {};
15         this.tId = oilsNextId();
16         this.rId = oilsNextId();
17         this.oId = oilsNextId();
18         this.stId = oilsNextId();
19         this.srId = oilsNextId();
20         this.soId = oilsNextId();
21
22         this.ownerFolders = {};
23         this.ownerFolders.template = {};
24         this.ownerFolders.report = {};
25         this.ownerFolders.output = {};
26
27         removeChildren(DOM.oils_rpt_template_folder_tree); 
28         removeChildren(DOM.oils_rpt_report_folder_tree); 
29         removeChildren(DOM.oils_rpt_output_folder_tree); 
30         removeChildren(DOM.oils_rpt_template_shared_folder_tree); 
31         removeChildren(DOM.oils_rpt_report_shared_folder_tree); 
32         removeChildren(DOM.oils_rpt_output_shared_folder_tree); 
33
34         var porg = PERMS.SHARE_REPORT_FOLDER;
35         if( porg < 1 ) 
36                 DOM.oils_rpt_top_folder_shared.disabled = true;
37
38         var obj = this;
39         var orgsel = new oilsRptMyOrgsWidget(
40                 DOM.oils_rpt_top_folder_lib_picker, USER.ws_ou(), porg)
41         orgsel.draw();
42
43         oilsRptTemplateFolderTree = 
44                 new SlimTree(
45                         DOM.oils_rpt_template_folder_tree, 
46                         'oilsRptTemplateFolderTree');
47                         //'images/template-page.gif');
48
49         oilsRptTemplateFolderTree.addNode(this.tId, -1, 'Templates',
50                 function() {
51                         unHideMe(DOM.oils_rpt_folder_table_alt_td);
52                         unHideMe(DOM.oils_rpt_top_folder);
53                         hideMe(DOM.oils_rpt_editor_div);
54                         appendClear(DOM.oils_rpt_top_folder_type,text('Template'));
55                         hideMe(DOM.oils_rpt_folder_table_right_td);
56                         DOM.oils_rpt_top_folder_create.onclick = function() {
57                                 obj.createTopFolder('template', orgsel);
58                         }
59                 }
60         );
61
62         oilsRptReportFolderTree = 
63                 new SlimTree(
64                         DOM.oils_rpt_report_folder_tree, 
65                         'oilsRptReportFolderTree');
66                         //'images/report-page.gif');
67
68
69         oilsRptReportFolderTree.addNode(this.rId, -1, 'Reports',
70                 function() {
71                         unHideMe(DOM.oils_rpt_folder_table_alt_td);
72                         unHideMe(DOM.oils_rpt_top_folder);
73                         hideMe(DOM.oils_rpt_editor_div);
74                         hideMe(DOM.oils_rpt_folder_table_right_td);
75                         appendClear(DOM.oils_rpt_top_folder_type,text('Report'));
76                         DOM.oils_rpt_top_folder_create.onclick = function() {
77                                 obj.createTopFolder('report', orgsel);
78                         }
79                 }
80         );
81
82
83
84         oilsRptOutputFolderTree = 
85                 new SlimTree(
86                         DOM.oils_rpt_output_folder_tree, 
87                         'oilsRptOutputFolderTree');
88                         //'images/output-page.gif');
89
90         oilsRptOutputFolderTree.addNode(this.oId, -1, 'Output',
91                 function() {
92                         unHideMe(DOM.oils_rpt_folder_table_alt_td);
93                         unHideMe(DOM.oils_rpt_top_folder);
94                         hideMe(DOM.oils_rpt_editor_div);
95                         hideMe(DOM.oils_rpt_folder_table_right_td);
96                         appendClear(DOM.oils_rpt_top_folder_type,text('Output'));
97                         DOM.oils_rpt_top_folder_create.onclick = function() {
98                                 obj.createTopFolder('output', orgsel);
99                         }
100                 }
101         );
102
103
104         oilsRptSharedTemplateFolderTree = 
105                 new SlimTree(
106                         DOM.oils_rpt_template_shared_folder_tree, 
107                         'oilsRptSharedTemplateFolderTree');
108                         //'images/template-page.gif');
109
110         oilsRptSharedTemplateFolderTree.addNode(this.stId, -1, 'Templates')
111
112
113         oilsRptSharedReportFolderTree = 
114                 new SlimTree(
115                         DOM.oils_rpt_report_shared_folder_tree, 
116                         'oilsRptSharedReportFolderTree');
117                         //'images/report-page.gif');
118
119         oilsRptSharedReportFolderTree.addNode(this.srId, -1, 'Reports')
120
121         oilsRptSharedOutputFolderTree = 
122                 new SlimTree(
123                         DOM.oils_rpt_output_shared_folder_tree, 
124                         'oilsRptSharedOutputFolderTree');
125                         //'images/output-page.gif');
126
127         oilsRptSharedOutputFolderTree.addNode(this.soId, -1, 'Output')
128
129         this.fetchFolders(auth);
130 }
131
132 oilsRptFolderManager.prototype.createTopFolder = function(type, orgsel) {
133
134         if( type == 'report' ) folder = new rrf();
135         if( type == 'template' ) folder = new rtf();
136         if( type == 'output' ) folder = new rof();
137
138         folder.owner(USER.id());
139         folder.parent(null);
140         folder.name(DOM.oils_rpt_top_folder_name.value);
141         folder.shared(getSelectorVal(DOM.oils_rpt_top_folder_shared));
142
143         if( folder.shared() == 't' )
144                 folder.share_with( orgsel.getValue() );
145
146         oilsRptCreateFolder(folder, type,
147                 function(success) {
148                         if(success) {
149                                 oilsRptAlertSuccess();
150                                 oilsRptCurrentFolderManager.draw();
151                                 hideMe(DOM.oils_rpt_top_folder);
152                                 hideMe(DOM.oils_rpt_folder_table_alt_td);
153                                 unHideMe(DOM.oils_rpt_editor_div);
154                         }
155                 }
156         );
157 }
158
159
160 oilsRptFolderManager.prototype.fetchFolders = function(auth) {
161         var obj = this;
162         var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'template');
163         req.callback( function(r) { obj.drawFolders('template', r.getResultObject()); } );
164         req.send();
165
166         var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'report');
167         req.callback( function(r) { obj.drawFolders('report', r.getResultObject()); } );
168         req.send();
169
170         var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'output');
171         req.callback( function(r) { obj.drawFolders('output', r.getResultObject()); } );
172         req.send();
173 }
174
175
176 oilsRptFolderManager.prototype.drawFolders = function(type, folders) {
177         var tree;
178
179         folders = folders.sort(
180                 function(a,b) {
181                         var asw = a.share_with();
182                         var bsw = b.share_with();
183                         if( asw ) asw = findOrgDepth(findOrgUnit(asw.id()));
184                         else asw = -1;
185                         if( bsw ) bsw = findOrgDepth(findOrgUnit(bsw.id()));
186                         else bsw = -1;
187                         if( asw < bsw ) return 1;
188                         if( asw > bsw ) return -1;
189                         return 0;
190                 }
191         );
192
193
194         for( var i = 0; i < folders.length; i++ ) {
195                 var folder = folders[i];
196                 var id = oilsNextId();
197                 var node = { folder : folder, treeId : id };
198                 oilsRptFolderNodeCache[type][folder.id()] = node;
199                 node.folderWindow = new oilsRptFolderWindow(type, folder.id())
200                 /*
201                 _debug("creating folder node for "+folder.name()+" : id = "+
202                         folder.id()+' treeId = '+id + ' window id = ' + node.folderWindow.id);
203                         */
204         }
205
206
207         for( var i = 0; i < folders.length; i++ ) {
208
209                 var folder = folders[i];
210                 var mine = (folder.owner().id() == USER.id());
211                 var pid;
212                 var treename;
213
214                 switch(type) {
215                         case 'template': 
216                                 if(mine) {
217                                         tree = oilsRptTemplateFolderTree;
218                                         treename = 'oilsRptTemplateFolderTree';
219                                         pid = this.tId;
220                                 } else {
221                                         tree = oilsRptSharedTemplateFolderTree;
222                                         treename = 'oilsRptSharedTemplateFolderTree';
223                                         pid = this.stId;
224                                 }
225                                 break;
226                         case 'report': 
227                                 if(mine) {
228                                         tree = oilsRptTemplateFolderTree;
229                                         treename = 'oilsRptTemplateFolderTree';
230                                         pid = this.rId;
231                                 } else {
232                                         tree = oilsRptSharedTemplateFolderTree;
233                                         treename = 'oilsRptSharedTemplateFolderTree';
234                                         pid = this.srId;
235                                 }
236                                 break;
237                         case 'output': 
238                                 if(mine) {
239                                         tree = oilsRptTemplateFolderTree;
240                                         treename = 'oilsRptTemplateFolderTree';
241                                         pid = this.oId;
242                                 } else {
243                                         tree = oilsRptSharedTemplateFolderTree;
244                                         treename = 'oilsRptSharedTemplateFolderTree';
245                                         pid = this.soId;
246                                 }
247                 }
248
249                 node = this.findNode(type, folder.id());
250                 id = node.treeId;
251                 if( folder.parent() ) 
252                         pid = this.findNode(type, folder.parent()).treeId;
253
254                 /*
255                 if(!mine) {
256                         if(!this.orgTrail[type][folder.share_with().id()]) {
257                                 tree.addNode(id, pid, folder.share_with().shortname());
258                                 tree.close(pid);
259                                 pid = id;
260                                 id = oilsNextId();
261                                 this.orgTrail[type][folder.share_with().id()] = pid;
262                         } else {
263                                 pid = this.orgTrail[type][folder.share_with().id()];
264                                 id = oilsNextId();
265                         }
266                 }
267                 */
268
269                 var fname = folder.name();
270
271                 if(!mine) {
272                         fname = folder.name() + ' ('+folder.share_with().shortname()+')';
273                         if(!this.ownerFolders[type][folder.owner().id()]) {
274                                 tree.addNode(id, pid, folder.owner().usrname());
275                                 tree.close(pid);
276                                 pid = id;
277                                 id = oilsNextId();
278                                 this.ownerFolders[type][folder.owner().id()] = pid;
279                         } else {
280                                 pid = this.ownerFolders[type][folder.owner().id()];
281                                 id = oilsNextId();
282                         }
283                 } else {
284                         if(isTrue(folder.shared()))
285                                 fname = folder.name() + ' ('+folder.share_with().shortname()+')';
286                 }
287
288                 var action = 'javascript:oilsRptObject.find('+node.folderWindow.id+').draw();';
289                 /*
290                 _debug('adding node '+fname+' id = ' + id + ' pid = '
291                         +pid + ' parent = ' + folder.parent() + ' folder-window = ' + node.folderWindow.id );
292                         */
293
294                 tree.addNode(id, pid, fname, action);
295                 tree.close(pid);
296         }
297 }
298
299
300 oilsRptFolderManager.prototype.findNode = function(type, id) {
301         return oilsRptFolderNodeCache[type][id];
302 }
303
304
305
306
307
308
309 /* this only works if the initial folder tree has been drawn 
310         if defined, "action" must be a function pointer that takes the
311         folder node as the param */
312 var __someid;
313 function oilsRptBuildFolder(type, node, treeVar, rootName, action, shared) {
314         removeChildren(node);
315         var tree = new SlimTree(node, treeVar);
316         this.treeId = oilsNextId();
317         tree.addNode(this.treeId, -1, rootName);
318
319         __someid = oilsNextId();
320
321         var cache = oilsRptFolderNodeCache[type];
322
323         for( var c in cache ) {
324                 var tid = cache[c].treeId + __someid;
325                 var pid = this.treeId;
326                 var f = cache[c].folder;
327
328                 if( !shared && (f.owner().id() != USER.id()) ) continue;
329
330                 if(f.parent()) {
331                         /* find the parent's tree id so we can latch on to it */
332                         var pnode = cache[f.parent()];
333                         var pid = pnode.treeId + __someid;
334                 }
335
336                 tree.addNode(tid, pid, f.name(), __setFolderCB(tree, tid, action, cache[c]));
337         }
338         eval(treeVar +' = tree;');
339 }
340
341 function __setFolderCB(tree, id, action, node) {
342         var act;
343         if( action ) 
344                 act = function() { action( node ); };
345         return act;
346 }
347