init
[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                         'id' : 'group_rights-rightname',
127                         header : "Permission",
128                         'dataIndex' : 'rightname',
129                         'sortable' : false,
130                         'width' : 300,
131                         renderer : function (v,x,r) {
132                             
133                             if (r.json.descript && r.json.descript.length) {
134                                 return String.format('{0}',r.json.descript);
135                             }
136                             
137                             
138                             // this needs to be generated by the modules..
139                             switch(v) {
140                                 case   'Documents.Document_Manager': return "Document Manager";
141                                 case   'Documents.Documents': return "Documents";
142                                 case   'Documents.Unread_Documents': return "Unread Documents";
143                                 case   'Documents.Distribute_Documents': return "Distribute Documents";
144                                 case   'Documents.Work_In_Progress': return "Work In Progress";
145                                 
146                                 case   'Documents.Project_Directory': return "Project Directory";
147                                     
148                                  
149                                 case   'Fax.Fax': return "Fax";
150                                 case   'Fax.Fax_To_Company': return "Send Faxes To Companies";
151                                 case   'Timesheet.Timesheet': return "Timesheet";
152                                 
153                                 case   'Admin.Admin_Tab':   return "Admin Tab";  
154                                 case   'Core.Person': return "Person";
155                                 case   'Core.Offices': return "Offices";
156                                 case   'Core.Companies': return "Companies";
157                                     
158                                 case   'Core.Staff': return "Staff";
159                                 case   'Core.Groups': return "Groups";
160                                
161                                 case   'Core.Events':   return "Events";
162                                 default : 
163                                     if (typeof(Pman.rightNames[v]) == 'string' && Pman.rightNames[v].length) {
164                                         return String.format('{0}',Pman.rightNames[v]);
165                                     }
166                                     
167                                     return '???' + v;
168                                      
169                             }
170                             
171                             
172                         }
173                     },
174                     {
175                         'id' : 'am-a',
176                         header : "Add",
177                         'dataIndex' : 'AccessMask',
178                         'width' : 50,
179                         'sortable' : false,
180                         renderer : Pman.ColModels.Group_RightsRenderer
181                     },
182                     {
183                         'id' : 'am-e',
184                         header : "Edit",
185                         'dataIndex' : 'AccessMask',
186                         'width' : 50,
187                         'sortable' : false,
188                         renderer : Pman.ColModels.Group_RightsRenderer
189                     },
190                     {
191                         'id' : 'am-d',
192                         header : "Delete",
193                         'dataIndex' : 'AccessMask',
194                         'width' : 50,
195                         'sortable' : false,
196                         renderer : Pman.ColModels.Group_RightsRenderer
197                     },
198                     {
199                         'id' : 'am-s', // S
200                         header : "List/View",
201                         'dataIndex' : 'AccessMask',
202                         'width' : 90,
203                         'sortable' : false,
204                         renderer : Pman.ColModels.Group_RightsRenderer
205                     }, // P= print / I= import (not used)
206                     
207                      {
208                         'id' : 'am-p',
209                         header : "Print / Export",
210                         'dataIndex' : 'AccessMask',
211                         'width' : 100,
212                         'sortable' : false,
213                         renderer : Pman.ColModels.Group_RightsRenderer
214                     }, /*
215                     {
216                         'id' : 'AM-I',
217                         header : "Import",
218                         'dataIndex' : 'AccessMask',
219                         'width' : 50,
220                         'sortable' : false,
221                         renderer : Pman.ColModels.Group_RightsRenderer
222                     },
223                     /*
224                     {
225                         'id' : 'AM-M',
226                         'header' : 'Admin mode',
227                         'dataIndex' : 'AccessMask',
228                         'width' : 100,
229                         'sortable' : false,
230                         renderer : Pman.ColModels.Group_RightsRenderer
231                     },
232                     */
233                     {
234                         'id': 'group_rights-remarks',
235                         header : '',
236                         dataIndex : 'Remarks',
237                         'sortable' : false,
238                         'width' : 50 
239                     }
240                 ]),
241                 autoExpandColumn: 'group_rights-remarks' , // fixme!!!!
242                 clicksToEdit : 1,
243                 
244                 loadMask: true,
245                 trackMouseOver : false,
246                 listeners : {
247                     cellclick: function (g, ri, ci, e)
248                     {
249                         var h = g.getColumnModel().getColumnId(ci);
250                         //console.log(h);
251                         var fm = g.getDataSource().getAt(ri).json.FullMask;
252                         
253                         if (h.substring(0,2) == 'aa') {
254                             var old = g.getDataSource().getAt(ri).data.AccessMask;
255                             
256                             g.getDataSource().getAt(ri).set('AccessMask',
257                                 old == fm ? "" : fm );
258                             return;
259                         }
260                         
261                         if (h.substring(0,2) != 'am') {
262                             return;
263                         }
264                         var c = h.substring(3).toUpperCase();
265                         
266                         if (fm.indexOf(c) < 0) {
267                             return; // skip no perms boxes
268                         }
269                         // ADESPIM
270                         //var def = 'ADESPIM';
271                         function toKV(str) {
272                            
273                             var ret = { };
274                             for(var i = 0;i< fm.length; i++) {
275                                 var cc = fm.substring(i,i+1);
276                                 ret[cc] = str.indexOf(cc) > -1;
277                             }
278                             return ret;
279                         }
280                         function toStr(obj) {
281                            
282                             var ret = '';
283                             for(var i = 0;i< fm.length; i++) {
284                                 var cc = fm.substring(i,i+1);
285                                 if (obj[cc]) {
286                                     ret += cc;
287                                 }
288                             }
289                             //console.log(ret);
290                             return ret;    
291                         }
292                         
293                         
294                         // get existing value..
295                         var conf = toKV(g.getDataSource().getAt(ri).data.AccessMask);
296                         conf[c] = !conf[c];
297                         g.getDataSource().getAt(ri).set('AccessMask',toStr(conf));
298                     }
299                     
300                 }
301                  
302         });
303         this.grid.getSelectionModel().lock();
304         this.panel  = parentLayout.add(region,  new Ext.GridPanel(this.grid ,
305             { fitToframe: true,fitContainer: true, title: "Rights", id: 'group_rights', controller : this })
306         );
307         this.grid.render();
308         /*
309         var gridFoot = this.grid.getView().getFooterPanel(true);
310         
311         this.paging = new Ext.PagingToolbar(gridFoot, this.grid.getDataSource(), {
312             pageSize: 25,
313             displayInfo: true,
314             displayMsg: "", 
315             emptyMsg: ""
316         });
317         */
318         var grid = this.grid;
319  
320         var gridHead = this.grid.getView().getHeaderPanel(true);
321         var tb = new Ext.Toolbar(gridHead);
322         
323       
324         
325         tb.add(
326             {
327                 text: "Save",
328                 cls: 'x-btn-text-icon',
329                 icon: rootURL + '/Pman/templates/images/save.gif',
330                 hidden : !Pman.hasPerm('Core.Groups', 'E'),
331                 handler : function(){
332                     var data = {}; 
333                     grid.getDataSource().each(function(r) {
334                             if (!r.dirty) {
335                                 return;
336                             }
337                             data[r.data.id > -1 ? 'dataUpdate['+r.data.id+']' : 'dataAdd['+r.data.rightname+']'] = r.data.AccessMask;
338                             
339                     });
340                     
341                     data.group_id = grid.getDataSource().lastOptions.params.group_id;
342                     Ext.Ajax.request({
343                         url: baseURL + '/Admin/GroupRights.php',
344                         params : data,
345                         method: 'POST',
346                         success : function() {
347                             _this.refresh();
348                             //Pman.Tab.Group_Rights.paging.onClick('first');
349                         },
350                         failure: function() {
351                             Ext.MessageBox.alert("There was a problem saving the data");
352                         }
353                     });
354                 }
355             }, 
356             '-',
357             {
358                 text: "Reload",
359                  cls: 'x-btn-text-icon',
360                 icon: rootURL + '/Pman/templates/images/refresh.gif',
361                 handler : function(){
362                     _this.refresh();
363                 }
364             } 
365         );
366         this.panel.on('activate', function() {
367             _this.refresh();
368         });
369             
370         //this.toolbar = tb;
371         // add stuff to toolbar?
372         //this.innerLayout.endUpdate();
373         
374         
375         
376     },
377     refresh : function() {
378         this.grid.getDataSource().reload();
379     },
380     /*
381     show: function (parentLayout, region)
382     {
383         this.add(parentLayout, region);
384         this.grid.getDataSource().load({
385             params: {
386                 start:0, 
387                 limit:25
388             }
389         });
390
391     },
392     */
393     renderer: function(v, c, r, ri, ci, st) {
394         // work out what the column is..
395         var h = Pman.Tab.Group_Rights.grid.getColumnModel().getColumnId(ci).toUpperCase();
396         // ADESPIM
397         
398         if (v.indexOf(h.substring(3)) > -1) {
399             return 'Y';
400         }
401         
402         return '-';
403         
404     },
405     save : function()
406     {
407        
408     }
409         
410         
411 };
412