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