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