]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/reports/oils_rpt_folders.js
added some folder actions and framework, more to come
[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() {
9         this.folderTree = {};
10         this.super.init();
11         this.tId = oilsNextId();
12         this.rId = oilsNextId();
13         this.oId = oilsNextId();
14         this.stId = oilsNextId();
15         this.srId = oilsNextId();
16         this.soId = oilsNextId();
17
18         this.ownerFolders = {};
19         this.ownerFolders.template = {};
20         this.ownerFolders.report = {};
21         this.ownerFolders.output = {};
22 }
23
24 oilsRptFolderManager.prototype.draw = function(auth) {
25
26         oilsRptTemplateFolderTree = 
27                 new SlimTree(
28                         DOM.oils_rpt_template_folder_tree, 
29                         'oilsRptTemplateFolderTree');
30                         //'images/template-page.gif');
31
32         oilsRptTemplateFolderTree.addNode(this.tId, -1, 'Templates')
33
34         oilsRptReportFolderTree = 
35                 new SlimTree(
36                         DOM.oils_rpt_report_folder_tree, 
37                         'oilsRptReportFolderTree');
38                         //'images/report-page.gif');
39
40         oilsRptReportFolderTree.addNode(this.rId, -1, 'Reports')
41
42
43         oilsRptOutputFolderTree = 
44                 new SlimTree(
45                         DOM.oils_rpt_output_folder_tree, 
46                         'oilsRptOutputFolderTree');
47                         //'images/output-page.gif');
48
49         oilsRptOutputFolderTree.addNode(this.oId, -1, 'Output')
50
51         oilsRptSharedTemplateFolderTree = 
52                 new SlimTree(
53                         DOM.oils_rpt_template_shared_folder_tree, 
54                         'oilsRptSharedTemplateFolderTree');
55                         //'images/template-page.gif');
56
57         oilsRptSharedTemplateFolderTree.addNode(this.stId, -1, 'Templates')
58
59         oilsRptSharedReportFolderTree = 
60                 new SlimTree(
61                         DOM.oils_rpt_report_shared_folder_tree, 
62                         'oilsRptSharedReportFolderTree');
63                         //'images/report-page.gif');
64
65         oilsRptSharedReportFolderTree.addNode(this.srId, -1, 'Reports')
66
67         oilsRptSharedOutputFolderTree = 
68                 new SlimTree(
69                         DOM.oils_rpt_output_shared_folder_tree, 
70                         'oilsRptSharedOutputFolderTree');
71                         //'images/output-page.gif');
72
73         oilsRptSharedOutputFolderTree.addNode(this.soId, -1, 'Output')
74
75         this.fetchFolders(auth);
76 }
77
78 oilsRptFolderManager.prototype.fetchFolders = function(auth) {
79         var obj = this;
80         var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'template');
81         req.callback( function(r) { obj.drawFolders('template', r.getResultObject()); } );
82         req.send();
83
84         var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'report');
85         req.callback( function(r) { obj.drawFolders('report', r.getResultObject()); } );
86         req.send();
87
88         var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'output');
89         req.callback( function(r) { obj.drawFolders('output', r.getResultObject()); } );
90         req.send();
91 }
92
93
94 oilsRptFolderManager.prototype.drawFolders = function(type, folders) {
95         var tree;
96
97         folders = folders.sort(
98                 function(a,b) {
99                         var asw = a.share_with();
100                         var bsw = b.share_with();
101                         if( asw ) asw = findOrgDepth(findOrgUnit(asw.id()));
102                         else asw = -1;
103                         if( bsw ) bsw = findOrgDepth(findOrgUnit(bsw.id()));
104                         else bsw = -1;
105                         if( asw < bsw ) return 1;
106                         if( asw > bsw ) return -1;
107                         return 0;
108                 }
109         );
110
111
112         for( var i = 0; i < folders.length; i++ ) {
113                 var folder = folders[i];
114                 var id = oilsNextId();
115                 var node = { folder : folder, treeId : id };
116                 oilsRptFolderNodeCache[type][folder.id()] = node;
117                 node.folderWindow = new oilsRptFolderWindow(type, folder.id())
118                 _debug("creating folder node for "+folder.name()+" : id = "+folder.id()+' treeId = '+id);
119         }
120
121
122         for( var i = 0; i < folders.length; i++ ) {
123
124                 var folder = folders[i];
125                 var mine = (folder.owner().id() == USER.id());
126                 var pid;
127                 var treename;
128
129                 switch(type) {
130                         case 'template': 
131                                 if(mine) {
132                                         tree = oilsRptTemplateFolderTree;
133                                         treename = 'oilsRptTemplateFolderTree';
134                                         pid = this.tId;
135                                 } else {
136                                         tree = oilsRptSharedTemplateFolderTree;
137                                         treename = 'oilsRptSharedTemplateFolderTree';
138                                         pid = this.stId;
139                                 }
140                                 break;
141                         case 'report': 
142                                 if(mine) {
143                                         tree = oilsRptTemplateFolderTree;
144                                         treename = 'oilsRptTemplateFolderTree';
145                                         pid = this.rId;
146                                 } else {
147                                         tree = oilsRptSharedTemplateFolderTree;
148                                         treename = 'oilsRptSharedTemplateFolderTree';
149                                         pid = this.srId;
150                                 }
151                                 break;
152                         case 'output': 
153                                 if(mine) {
154                                         tree = oilsRptTemplateFolderTree;
155                                         treename = 'oilsRptTemplateFolderTree';
156                                         pid = this.oId;
157                                 } else {
158                                         tree = oilsRptSharedTemplateFolderTree;
159                                         treename = 'oilsRptSharedTemplateFolderTree';
160                                         pid = this.soId;
161                                 }
162                 }
163
164                 id = this.findNode(type, folder.id()).treeId;
165                 if( folder.parent() ) 
166                         pid = this.findNode(type, folder.parent()).treeId;
167
168
169                 /*
170                 if(!mine) {
171                         if(!this.orgTrail[type][folder.share_with().id()]) {
172                                 tree.addNode(id, pid, folder.share_with().shortname());
173                                 tree.close(pid);
174                                 pid = id;
175                                 id = oilsNextId();
176                                 this.orgTrail[type][folder.share_with().id()] = pid;
177                         } else {
178                                 pid = this.orgTrail[type][folder.share_with().id()];
179                                 id = oilsNextId();
180                         }
181                 }
182                 */
183
184                 var fname = folder.name();
185
186                 if(!mine) {
187                         fname = folder.name() + ' ('+folder.share_with().shortname()+')';
188                         if(!this.ownerFolders[type][folder.owner().id()]) {
189                                 tree.addNode(id, pid, folder.owner().usrname());
190                                 tree.close(pid);
191                                 pid = id;
192                                 id = oilsNextId();
193                                 this.ownerFolders[type][folder.owner().id()] = pid;
194                         } else {
195                                 pid = this.ownerFolders[type][folder.owner().id()];
196                                 id = oilsNextId();
197                         }
198                 } else {
199                         if(isTrue(folder.shared()))
200                                 fname = folder.name() + ' ('+folder.share_with().shortname()+')';
201                 }
202
203                 var action = 'javascript:oilsRptObject.find('+
204                         node.folderWindow.id+').draw();'+treename+'.toggle("'+id+'");';
205
206                 _debug('adding node '+fname+' id = ' + id + ' pid = '+pid + ' parent = ' + folder.parent() );
207
208                 tree.addNode(id, pid, fname, action);
209                 tree.close(pid);
210         }
211 }
212
213
214 oilsRptFolderManager.prototype.findNode = function(type, id) {
215         return oilsRptFolderNodeCache[type][id];
216 }
217
218
219
220
221
222
223 /* this only works if the initial folder tree has been drawn 
224         if defined, "action" must be a function pointer that takes the
225         folder node as the param */
226 var __someid;
227 function oilsRptBuildFolder(type, node, treeVar, rootName, action) {
228         removeChildren(node);
229         var tree = new SlimTree(node, treeVar);
230         this.treeId = oilsNextId();
231         tree.addNode(this.treeId, -1, rootName);
232
233         __someid = oilsNextId();
234
235         var cache = oilsRptFolderNodeCache[type];
236
237         for( var c in cache ) {
238                 var tid = cache[c].treeId + __someid;
239                 var pid = this.treeId;
240                 var f = cache[c].folder;
241
242                 if(f.parent()) {
243                         /* find the parent's tree id so we can latch on to it */
244                         var pnode = cache[f.parent()];
245                         var pid = pnode.treeId + __someid;
246                 }
247
248                 tree.addNode(tid, pid, f.name(), __setFolderCB(tree, tid, action, cache[c]));
249         }
250         eval(treeVar +' = tree;');
251 }
252
253 function __setFolderCB(tree, id, action, node) {
254         var act;
255         if( action ) 
256                 act = function() { tree.toggle(id);     action( node ); };
257         return act;
258 }
259