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