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