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