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="' + Roo.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 Roo.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 Roo.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 Roo.grid.EditorGrid(frm,  {
82         this.grid = new Roo.grid.Grid(frm,  {
83                 
84                 ds:   new Roo.data.Store({
85                     // load using HTTP
86                     proxy: new Roo.data.HttpProxy({
87                         url: baseURL + '/Admin/GroupRights.php',
88                         method: 'GET'
89                     }),
90                     reader: new Roo.data.JsonReader({}, 
91                         [
92                             {
93                                 'name': 'FullMask',
94                                 'type': 'string'
95                             },
96                             {
97                                 'name': 'accessmask',
98                                 'type': 'string'
99                             },
100                             {
101                                 'name': 'rightname',
102                                 'type': 'string'
103                             }
104                         ]
105                     ),
106                     remoteSort: false,
107                     listeners : {
108                         beforeload : function(t,o)
109                         {
110                             if (!o.params) {
111                                 o.params = {}
112                             }
113                             var s = Pman.Tab.Groups.grid.getSelectionModel().getSelections();
114                             if (!s.length) {
115                                 o.params.group_id = -1;
116                             } else {
117                                 o.params.group_id = s[0].data.id;
118                             }
119                             if (o.params.group_id < 0) {
120                                 _this.grid.getView().el.mask("You can not set permissions for that group");
121                                 return false;
122                             }
123                             _this.grid.getView().el.unmask();
124                             return true;
125                         },
126                         load : function (_self, records, options)
127                         {
128                             Roo.log(records);
129                         },
130                         loadexception : Pman.loadException
131                     
132                     }
133                 }), 
134                 selModel: new Roo.grid.CellSelectionModel(),
135                 cm: new Roo.grid.ColumnModel([
136                     {
137                         'id' : 'aa',
138                         header : "[All]",
139                         dataIndex : 'accessmask',
140                         'sortable' : false,
141                         'width' : 50,
142                         renderer : Pman.ColModels.Group_RightsRenderer
143                     },
144                     
145                     {
146                         'id' : 'group-rights-module',
147                         header : "Module",
148                         dataIndex : 'rightname',
149                         'sortable' : false,
150                         'width' : 50,
151                         renderer : function(v,x,r)
152                         {
153                             return String.format('<span qtip="{1}">{0}</span>', v.split('.').shift(), v);
154                         }
155                     },
156                     
157                     {
158                         'id' : 'group_rights-rightname',
159                         header : "Permission",
160                         'dataIndex' : 'rightname',
161                         'sortable' : false,
162                         'width' : 300,
163                         renderer : function (v,x,r) {
164                             
165                             if (r.json.descript && r.json.descript.length) {
166                                 return String.format('{0}',r.json.descript);
167                             }
168                             
169                             
170                             // this needs to be generated by the modules..
171                             /*
172                             if (typeof(Pman.rightNames[v]) == 'string' && Pman.rightNames[v].length) {
173                                 return String.format('{0}',Pman.rightNames[v]);
174                             }
175                             */
176                             return '???' + v;
177                              
178                             
179                             
180                         }
181                     },
182                     {
183                         'id' : 'am-a',
184                         header : "Add",
185                         'dataIndex' : 'accessmask',
186                         'width' : 50,
187                         'sortable' : false,
188                         renderer : Pman.ColModels.Group_RightsRenderer
189                     },
190                     {
191                         'id' : 'am-e',
192                         header : "Edit",
193                         'dataIndex' : 'accessmask',
194                         'width' : 50,
195                         'sortable' : false,
196                         renderer : Pman.ColModels.Group_RightsRenderer
197                     },
198                     {
199                         'id' : 'am-d',
200                         header : "Delete",
201                         'dataIndex' : 'accessmask',
202                         'width' : 50,
203                         'sortable' : false,
204                         renderer : Pman.ColModels.Group_RightsRenderer
205                     },
206                     {
207                         'id' : 'am-s', // S
208                         header : "List/View",
209                         'dataIndex' : 'accessmask',
210                         'width' : 90,
211                         'sortable' : false,
212                         renderer : Pman.ColModels.Group_RightsRenderer
213                     }, // P= print / I= import (not used)
214                     
215                      {
216                         'id' : 'am-p',
217                         header : "Print / Export",
218                         'dataIndex' : 'accessmask',
219                         'width' : 100,
220                         'sortable' : false,
221                         renderer : Pman.ColModels.Group_RightsRenderer
222                     }, /*
223                     {
224                         'id' : 'AM-I',
225                         header : "Import",
226                         'dataIndex' : 'accessmask',
227                         'width' : 50,
228                         'sortable' : false,
229                         renderer : Pman.ColModels.Group_RightsRenderer
230                     },
231                     /*
232                     {
233                         'id' : 'AM-M',
234                         'header' : 'Admin mode',
235                         'dataIndex' : 'accessmask',
236                         'width' : 100,
237                         'sortable' : false,
238                         renderer : Pman.ColModels.Group_RightsRenderer
239                     },
240                     */
241                     {
242                         'id': 'group_rights-remarks',
243                         header : '',
244                         dataIndex : 'Remarks',
245                         'sortable' : false,
246                         'width' : 50 
247                     }
248                 ]),
249                 autoExpandColumn: 'group_rights-remarks' , // fixme!!!!
250                 clicksToEdit : 1,
251                 
252                 loadMask: true,
253                 trackMouseOver : false,
254                 listeners : {
255                     cellclick: function (g, ri, ci, e)
256                     {
257                         var h = g.getColumnModel().getColumnId(ci);
258                         //console.log(h);
259                         var fm = g.getDataSource().getAt(ri).json.FullMask;
260                         
261                         if (h.substring(0,2) == 'aa') {
262                             var old = g.getDataSource().getAt(ri).data.accessmask;
263                             
264                             g.getDataSource().getAt(ri).set('accessmask',
265                                 old == fm ? "" : fm );
266                             return;
267                         }
268                         
269                         if (h.substring(0,2) != 'am') {
270                             return;
271                         }
272                         var c = h.substring(3).toUpperCase();
273                         
274                         if (fm.indexOf(c) < 0) {
275                             return; // skip no perms boxes
276                         }
277                         // ADESPIM
278                         //var def = 'ADESPIM';
279                         function toKV(str) {
280                            
281                             var ret = { };
282                             for(var i = 0;i< fm.length; i++) {
283                                 var cc = fm.substring(i,i+1);
284                                 ret[cc] = str.indexOf(cc) > -1;
285                             }
286                             return ret;
287                         }
288                         function toStr(obj) {
289                            
290                             var ret = '';
291                             for(var i = 0;i< fm.length; i++) {
292                                 var cc = fm.substring(i,i+1);
293                                 if (obj[cc]) {
294                                     ret += cc;
295                                 }
296                             }
297                             //console.log(ret);
298                             return ret;    
299                         }
300                         
301                         
302                         // get existing value..
303                         var conf = toKV(g.getDataSource().getAt(ri).data.accessmask);
304                         conf[c] = !conf[c];
305                         g.getDataSource().getAt(ri).set('accessmask',toStr(conf));
306                     }
307                     
308                 }
309                  
310         });
311         this.grid.getSelectionModel().lock();
312         this.panel  = parentLayout.add(region,  new Roo.GridPanel(this.grid ,
313             { fitToframe: true,fitContainer: true, title: "Rights", id: 'group_rights', controller : this })
314         );
315         this.grid.render();
316         /*
317         var gridFoot = this.grid.getView().getFooterPanel(true);
318         
319         this.paging = new Roo.PagingToolbar(gridFoot, this.grid.getDataSource(), {
320             pageSize: 25,
321             displayInfo: true,
322             displayMsg: "", 
323             emptyMsg: ""
324         });
325         */
326         var grid = this.grid;
327  
328         var gridHead = this.grid.getView().getHeaderPanel(true);
329         var tb = new Roo.Toolbar(gridHead);
330         
331       
332         
333         tb.add(
334             {
335                 text: "Save",
336                 cls: 'x-btn-text-icon',
337                 icon: rootURL + '/Pman/templates/images/save.gif',
338                 hidden : !Pman.hasPerm('Core.Groups', 'E'),
339                 handler : function(){
340                     var data = {}; 
341                     grid.getDataSource().each(function(r) {
342                             if (!r.dirty) {
343                                 return;
344                             }
345                             data[r.data.id > -1 ? 'dataUpdate['+r.data.id+']' : 'dataAdd['+r.data.rightname+']'] = r.data.accessmask;
346                             
347                     });
348                     
349                     data.group_id = grid.getDataSource().lastOptions.params.group_id;
350                     Roo.Ajax.request({
351                         url: baseURL + '/Admin/GroupRights.php',
352                         params : data,
353                         method: 'POST',
354                         success : function() {
355                             _this.refresh();
356                             //Pman.Tab.Group_Rights.paging.onClick('first');
357                         },
358                         failure: function() {
359                             Roo.MessageBox.alert("There was a problem saving the data");
360                         }
361                     });
362                 }
363             }, 
364             '-',
365             {
366                 text: "Reload",
367                  cls: 'x-btn-text-icon',
368                 icon: rootURL + '/Pman/templates/images/refresh.gif',
369                 handler : function(){
370                     _this.refresh();
371                 }
372             } 
373         );
374         this.panel.on('activate', function() {
375             _this.refresh();
376         });
377             
378         //this.toolbar = tb;
379         // add stuff to toolbar?
380         //this.innerLayout.endUpdate();
381         
382         
383         
384     },
385     refresh : function() {
386         this.grid.getDataSource().reload();
387     },
388     /*
389     show: function (parentLayout, region)
390     {
391         this.add(parentLayout, region);
392         this.grid.getDataSource().load({
393             params: {
394                 start:0, 
395                 limit:25
396             }
397         });
398
399     },
400     */
401     renderer: function(v, c, r, ri, ci, st) {
402         // work out what the column is..
403         var h = Pman.Tab.Group_Rights.grid.getColumnModel().getColumnId(ci).toUpperCase();
404         // ADESPIM
405         
406         if (v.indexOf(h.substring(3)) > -1) {
407             return 'Y';
408         }
409         
410         return '-';
411         
412     },
413     save : function()
414     {
415        
416     }
417         
418         
419 };
420