Pman.Tab.Group_Rights.js
[Pman.Admin] / Pman.Tab.Group_Rights.js
1 //<script type="text/javascript">
2
3 /**
4  * 
5  * needs a translation list..
6  * 
7  * 
8  */
9  Pman.on('beforeload', function()
10
11     
12     
13   Pman.register({
14         modKey : '002-pman-tab-groups-rights',
15         module : Pman.Tab.Group_Rights,
16         region : 'center',
17         parent : Pman.Tab.GroupMgr,
18         name : "Permission Groups"
19     });
20 });
21  
22  
23
24 Pman.ColModels.Group_RightsRenderer =  function(v, c, r, ri, ci, st) {
25         // work out what the column is..
26         var h = Pman.Tab.Group_Rights.grid.getColumnModel().getColumnId(ci).toUpperCase();
27         // ADESPIM
28         var fm = r.json.FullMask;
29         state = '';
30         if (h == 'AA') { // All....
31             state = v== fm ? '-checked' : '';
32         } else if (v.indexOf(h.substring(3)) > -1) {
33             state = '-checked';
34         }
35         if (fm.indexOf(h.substring(3)) < 0) { // dont show checkboxes for no perms.
36             return '';
37         }
38         
39         return '<img class="x-grid-check-icon' + state + '" src="' + Ext.BLANK_IMAGE_URL + '"/>';
40         
41         
42 };
43
44  
45 Pman.Tab.Group_Rights = {
46     rightNames : { }, // filled in by modules.
47        
48     
49     grid : false,
50     panel : false,
51     add : function(parentLayout, region) {
52         
53
54         if (this.panel) {
55             parentLayout.getRegion(region).showPanel(this.panel);
56             return;
57         }
58         var _this= this;
59         /*
60         this.innerLayout = new Ext.BorderLayout(
61             parentLayout.getEl().createChild({tag:'div'}),
62             {
63                
64                 center: {
65                     autoScroll:true,
66                     hideTabs: true
67                 }
68             }
69         );
70
71         
72
73         this.tab = parentLayout.add(region,  new Ext.NestedLayoutPanel(
74             this.innerLayout, {title: "Rights", id: 'Group_Rights'}));
75         */
76        
77         //this.innerLayout.beginUpdate();
78        
79
80         var frm = parentLayout.getRegion(region).getEl().createChild({tag:'div', id: 'grid-group_rights'});
81         //this.grid = new Ext.grid.EditorGrid(frm,  {
82         this.grid = new Ext.grid.Grid(frm,  {
83                 
84                 ds:   new Ext.data.Store({
85                     // load using HTTP
86                     proxy: new Ext.data.HttpProxy({
87                         url: baseURL + '/Admin/GroupRights.php',
88                         method: 'GET'
89                     }),
90                     reader: Pman.Readers.Group_Rights,
91                     remoteSort: false,
92                     listeners : {
93                         beforeload : function(t,o)
94                         {
95                             if (!o.params) {
96                                 o.params = {}
97                             }
98                             var s = Pman.Tab.Groups.grid.getSelectionModel().getSelections();
99                             if (!s.length) {
100                                 o.params.group_id = -1;
101                             } else {
102                                 o.params.group_id = s[0].data.id;
103                             }
104                             if (o.params.group_id < 0) {
105                                 _this.grid.getView().el.mask("You can not set permissions for that group");
106                                 return false;
107                             }
108                             _this.grid.getView().el.unmask();
109                             return true;
110                         },
111                         loadexception : Pman.loadException
112                     
113                     }
114                 }), 
115                 selModel: new Ext.grid.CellSelectionModel(),
116                 cm: new Ext.grid.ColumnModel([
117                     {
118                         'id' : 'aa',
119                         header : "[All]",
120                         dataIndex : 'AccessMask',
121                         'sortable' : false,
122                         'width' : 50,
123                         renderer : Pman.ColModels.Group_RightsRenderer
124                     },
125                     
126                     {
127                         'id' : 'group-rights-module',
128                         header : "Module",
129                         dataIndex : 'rightname',
130                         'sortable' : false,
131                         'width' : 50,
132                         renderer : function(v,x,r)
133                         {
134                             return String.format('{0}',v.split('.').unshift());
135                         }
136                     },
137                     
138                     {
139                         'id' : 'group_rights-rightname',
140                         header : "Permission",
141                         'dataIndex' : 'rightname',
142                         'sortable' : false,
143                         'width' : 300,
144                         renderer : function (v,x,r) {
145                             
146                             if (r.json.descript && r.json.descript.length) {
147                                 return String.format('{0}',r.json.descript);
148                             }
149                             
150                             
151                             // this needs to be generated by the modules..
152                             switch(v) {
153                                 case   'Documents.Document_Manager': return "Document Manager";
154                                 case   'Documents.Documents': return "Documents";
155                                 case   'Documents.Unread_Documents': return "Unread Documents";
156                                 case   'Documents.Distribute_Documents': return "Distribute Documents";
157                                 case   'Documents.Work_In_Progress': return "Work In Progress";
158                                 
159                                 case   'Documents.Project_Directory': return "Project Directory";
160                                     
161                                  
162                                 case   'Fax.Fax': return "Fax";
163                                 case   'Fax.Fax_To_Company': return "Send Faxes To Companies";
164                                 case   'Timesheet.Timesheet': return "Timesheet";
165                                 
166                                 case   'Admin.Admin_Tab':   return "Admin Tab";  
167                                 case   'Core.Person': return "Person";
168                                 case   'Core.Offices': return "Offices";
169                                 case   'Core.Companies': return "Companies";
170                                     
171                                 case   'Core.Staff': return "Staff";
172                                 case   'Core.Groups': return "Groups";
173                                
174                                 case   'Core.Events':   return "Events";
175                                 default : 
176                                     if (typeof(Pman.rightNames[v]) == 'string' && Pman.rightNames[v].length) {
177                                         return String.format('{0}',Pman.rightNames[v]);
178                                     }
179                                     
180                                     return '???' + v;
181                                      
182                             }
183                             
184                             
185                         }
186                     },
187                     {
188                         'id' : 'am-a',
189                         header : "Add",
190                         'dataIndex' : 'AccessMask',
191                         'width' : 50,
192                         'sortable' : false,
193                         renderer : Pman.ColModels.Group_RightsRenderer
194                     },
195                     {
196                         'id' : 'am-e',
197                         header : "Edit",
198                         'dataIndex' : 'AccessMask',
199                         'width' : 50,
200                         'sortable' : false,
201                         renderer : Pman.ColModels.Group_RightsRenderer
202                     },
203                     {
204                         'id' : 'am-d',
205                         header : "Delete",
206                         'dataIndex' : 'AccessMask',
207                         'width' : 50,
208                         'sortable' : false,
209                         renderer : Pman.ColModels.Group_RightsRenderer
210                     },
211                     {
212                         'id' : 'am-s', // S
213                         header : "List/View",
214                         'dataIndex' : 'AccessMask',
215                         'width' : 90,
216                         'sortable' : false,
217                         renderer : Pman.ColModels.Group_RightsRenderer
218                     }, // P= print / I= import (not used)
219                     
220                      {
221                         'id' : 'am-p',
222                         header : "Print / Export",
223                         'dataIndex' : 'AccessMask',
224                         'width' : 100,
225                         'sortable' : false,
226                         renderer : Pman.ColModels.Group_RightsRenderer
227                     }, /*
228                     {
229                         'id' : 'AM-I',
230                         header : "Import",
231                         'dataIndex' : 'AccessMask',
232                         'width' : 50,
233                         'sortable' : false,
234                         renderer : Pman.ColModels.Group_RightsRenderer
235                     },
236                     /*
237                     {
238                         'id' : 'AM-M',
239                         'header' : 'Admin mode',
240                         'dataIndex' : 'AccessMask',
241                         'width' : 100,
242                         'sortable' : false,
243                         renderer : Pman.ColModels.Group_RightsRenderer
244                     },
245                     */
246                     {
247                         'id': 'group_rights-remarks',
248                         header : '',
249                         dataIndex : 'Remarks',
250                         'sortable' : false,
251                         'width' : 50 
252                     }
253                 ]),
254                 autoExpandColumn: 'group_rights-remarks' , // fixme!!!!
255                 clicksToEdit : 1,
256                 
257                 loadMask: true,
258                 trackMouseOver : false,
259                 listeners : {
260                     cellclick: function (g, ri, ci, e)
261                     {
262                         var h = g.getColumnModel().getColumnId(ci);
263                         //console.log(h);
264                         var fm = g.getDataSource().getAt(ri).json.FullMask;
265                         
266                         if (h.substring(0,2) == 'aa') {
267                             var old = g.getDataSource().getAt(ri).data.AccessMask;
268                             
269                             g.getDataSource().getAt(ri).set('AccessMask',
270                                 old == fm ? "" : fm );
271                             return;
272                         }
273                         
274                         if (h.substring(0,2) != 'am') {
275                             return;
276                         }
277                         var c = h.substring(3).toUpperCase();
278                         
279                         if (fm.indexOf(c) < 0) {
280                             return; // skip no perms boxes
281                         }
282                         // ADESPIM
283                         //var def = 'ADESPIM';
284                         function toKV(str) {
285                            
286                             var ret = { };
287                             for(var i = 0;i< fm.length; i++) {
288                                 var cc = fm.substring(i,i+1);
289                                 ret[cc] = str.indexOf(cc) > -1;
290                             }
291                             return ret;
292                         }
293                         function toStr(obj) {
294                            
295                             var ret = '';
296                             for(var i = 0;i< fm.length; i++) {
297                                 var cc = fm.substring(i,i+1);
298                                 if (obj[cc]) {
299                                     ret += cc;
300                                 }
301                             }
302                             //console.log(ret);
303                             return ret;    
304                         }
305                         
306                         
307                         // get existing value..
308                         var conf = toKV(g.getDataSource().getAt(ri).data.AccessMask);
309                         conf[c] = !conf[c];
310                         g.getDataSource().getAt(ri).set('AccessMask',toStr(conf));
311                     }
312                     
313                 }
314                  
315         });
316         this.grid.getSelectionModel().lock();
317         this.panel  = parentLayout.add(region,  new Ext.GridPanel(this.grid ,
318             { fitToframe: true,fitContainer: true, title: "Rights", id: 'group_rights', controller : this })
319         );
320         this.grid.render();
321         /*
322         var gridFoot = this.grid.getView().getFooterPanel(true);
323         
324         this.paging = new Ext.PagingToolbar(gridFoot, this.grid.getDataSource(), {
325             pageSize: 25,
326             displayInfo: true,
327             displayMsg: "", 
328             emptyMsg: ""
329         });
330         */
331         var grid = this.grid;
332  
333         var gridHead = this.grid.getView().getHeaderPanel(true);
334         var tb = new Ext.Toolbar(gridHead);
335         
336       
337         
338         tb.add(
339             {
340                 text: "Save",
341                 cls: 'x-btn-text-icon',
342                 icon: rootURL + '/Pman/templates/images/save.gif',
343                 hidden : !Pman.hasPerm('Core.Groups', 'E'),
344                 handler : function(){
345                     var data = {}; 
346                     grid.getDataSource().each(function(r) {
347                             if (!r.dirty) {
348                                 return;
349                             }
350                             data[r.data.id > -1 ? 'dataUpdate['+r.data.id+']' : 'dataAdd['+r.data.rightname+']'] = r.data.AccessMask;
351                             
352                     });
353                     
354                     data.group_id = grid.getDataSource().lastOptions.params.group_id;
355                     Ext.Ajax.request({
356                         url: baseURL + '/Admin/GroupRights.php',
357                         params : data,
358                         method: 'POST',
359                         success : function() {
360                             _this.refresh();
361                             //Pman.Tab.Group_Rights.paging.onClick('first');
362                         },
363                         failure: function() {
364                             Ext.MessageBox.alert("There was a problem saving the data");
365                         }
366                     });
367                 }
368             }, 
369             '-',
370             {
371                 text: "Reload",
372                  cls: 'x-btn-text-icon',
373                 icon: rootURL + '/Pman/templates/images/refresh.gif',
374                 handler : function(){
375                     _this.refresh();
376                 }
377             } 
378         );
379         this.panel.on('activate', function() {
380             _this.refresh();
381         });
382             
383         //this.toolbar = tb;
384         // add stuff to toolbar?
385         //this.innerLayout.endUpdate();
386         
387         
388         
389     },
390     refresh : function() {
391         this.grid.getDataSource().reload();
392     },
393     /*
394     show: function (parentLayout, region)
395     {
396         this.add(parentLayout, region);
397         this.grid.getDataSource().load({
398             params: {
399                 start:0, 
400                 limit:25
401             }
402         });
403
404     },
405     */
406     renderer: function(v, c, r, ri, ci, st) {
407         // work out what the column is..
408         var h = Pman.Tab.Group_Rights.grid.getColumnModel().getColumnId(ci).toUpperCase();
409         // ADESPIM
410         
411         if (v.indexOf(h.substring(3)) > -1) {
412             return 'Y';
413         }
414         
415         return '-';
416         
417     },
418     save : function()
419     {
420        
421     }
422         
423         
424 };
425