old/Pman.Tab.AdminPermMembers.bjs
[Pman.Admin] / old / Pman.Tab.AdminPermManager.js
1 //<script type="text/javascript">
2
3 // Auto generated file - created by app.Builder.js- do not edit directly (at present!)
4
5
6
7 // register the module first
8 Pman.on('beforeload', function()
9 {
10     Pman.register({
11         modKey : '700-Pman.Tab.AdminPermManager',
12         module : Pman.Tab.AdminPermManager,
13         region : 'center',
14         parent : Pman.Tab.Admin,
15         name : "Pman.Tab.AdminPermManager",
16         disabled : false, 
17         permname: 'Core.Groups' 
18     });
19 });
20
21 Pman.Tab.AdminPermManager = new Roo.util.Observable({
22
23     panel : false,
24     disabled : false,
25     parentLayout:  false,
26
27     add : function(parentLayout, region)
28     {
29
30         var _this = this;
31         this.parentLayout = parentLayout;
32
33         this.panel = parentLayout.addxtype({
34             xtype: 'NestedLayoutPanel',
35             xns: Roo,
36             background : true,
37             region : 'center',
38             title : "Permission Manager",
39             layout : {
40                 xtype: 'BorderLayout',
41                 xns: Roo,
42                 items : [
43                     {
44                         xtype: 'GridPanel',
45                         xns: Roo,
46                         listeners : {
47                             activate : function() {
48                                 _this.panel = this;
49                                 if (_this.grid) {
50                                     _this.grid.ds.load({});
51                                 }
52                             }
53                         },
54                         background : true,
55                         fitContainer : true,
56                         fitToframe : true,
57                         region : 'west',
58                         tableName : 'Groups',
59                         title : "Groups",
60                         grid : {
61                             xtype: 'Grid',
62                             xns: Roo.grid,
63                             listeners : {
64                                 render : function() 
65                                 {
66                                     _this.grid = this; 
67                                     _this.dialog = Pman.Dialog.Groups;
68                                     if (_this.panel.active) {
69                                         _this.grid.ds.load({});
70                                     }
71                                 },
72                                 rowdblclick : function (_self, rowIndex, e)
73                                 {
74                                     if (!_this.dialog) return;
75                                     var s = this.getDataSource().getAt(rowIndex);
76                                     if (s.data.id < 1 ) {
77                                         return;
78                                     }
79                                     _this.dialog.show( s.data, function() {
80                                         _this.ds.load({});
81                                     }); 
82                                 }
83                             },
84                             autoExpandColumn : 'name',
85                             ddGroup : 'groupDD',
86                             enableDrop : true,
87                             loadMask : true,
88                             dataSource : {
89                                 xtype: 'Store',
90                                 xns: Roo.data,
91                                 listeners : {
92                                     beforeload : function (_self, o)
93                                     {
94                                         o.params = o.params || {};
95                                         o.params.type =0;
96                                     },
97                                     load : function (_self, records, options)
98                                     {
99                                         var sm = _this.grid.getSelectionModel();
100                                         if (!sm.getSelections().length) {
101                                             sm.selectFirstRow();
102                                         }
103                                         // should refresh righthand side grid..
104                                          //   Pman.Tab.AdminContacts.grid.footer.onClick('first');
105                                     }
106                                 },
107                                 remoteSort : true,
108                                 sortInfo : { field : 'name', direction: 'ASC' },
109                                 proxy : {
110                                     xtype: 'HttpProxy',
111                                     xns: Roo.data,
112                                     method : 'GET',
113                                     url : baseURL + '/Roo/Groups.php'
114                                 },
115                                 reader : {
116                                     xtype: 'JsonReader',
117                                     xns: Roo.data,
118                                     totalProperty : 'total',
119                                     root : 'data',
120                                     id : 'id',
121                                     fields : [
122                                         {
123                                             'name': 'id',
124                                             'type': 'int'
125                                         },
126                                         {
127                                             'name': 'name',
128                                             'type': 'string'
129                                         },
130                                         {
131                                             'name': 'type',
132                                             'type': 'int'
133                                         },
134                                         {
135                                             'name': 'leader',
136                                             'type': 'int'
137                                         },
138                                         {
139                                             'name': 'leader_id',
140                                             'type': 'int'
141                                         },
142                                         {
143                                             'name': 'leader_office_id',
144                                             'type': 'int'
145                                         },
146                                         {
147                                             'name': 'leader_name',
148                                             'type': 'string'
149                                         },
150                                         {
151                                             'name': 'leader_phone',
152                                             'type': 'string'
153                                         },
154                                         {
155                                             'name': 'leader_fax',
156                                             'type': 'string'
157                                         },
158                                         {
159                                             'name': 'leader_email',
160                                             'type': 'string'
161                                         },
162                                         {
163                                             'name': 'leader_company_id',
164                                             'type': 'int'
165                                         },
166                                         {
167                                             'name': 'leader_role',
168                                             'type': 'string'
169                                         },
170                                         {
171                                             'name': 'leader_active',
172                                             'type': 'int'
173                                         },
174                                         {
175                                             'name': 'leader_remarks',
176                                             'type': 'string'
177                                         },
178                                         {
179                                             'name': 'leader_passwd',
180                                             'type': 'string'
181                                         },
182                                         {
183                                             'name': 'leader_owner_id',
184                                             'type': 'int'
185                                         },
186                                         {
187                                             'name': 'leader_lang',
188                                             'type': 'string'
189                                         },
190                                         {
191                                             'name': 'leader_no_reset_sent',
192                                             'type': 'int'
193                                         },
194                                         {
195                                             'name': 'leader_action_type',
196                                             'type': 'string'
197                                         },
198                                         {
199                                             'name': 'leader_project_id',
200                                             'type': 'int'
201                                         }
202                                     ]
203                                 }
204                             },
205                             toolbar : {
206                                 xtype: 'Toolbar',
207                                 xns: Roo,
208                                 items : [
209                                     {
210                                         xtype: 'Button',
211                                         xns: Roo.Toolbar,
212                                         text : "Manage Groups",
213                                         menu : {
214                                             xtype: 'Menu',
215                                             xns: Roo.menu,
216                                             items : [
217                                                 {
218                                                     xtype: 'Item',
219                                                     xns: Roo.menu,
220                                                     listeners : {
221                                                         click : function()
222                                                         {
223                                                             if (!_this.dialog) return;
224                                                             _this.dialog.show( { id : 0,  type: 0 } , function() {
225                                                                  _this.grid.ds.load({});
226                                                            }); 
227                                                         }
228                                                     },
229                                                     cls : 'x-btn-text-icon',
230                                                     text : "Add",
231                                                     icon : Roo.rootURL + 'images/default/dd/drop-add.gif'
232                                                 },
233                                                 {
234                                                     xtype: 'Item',
235                                                     xns: Roo.menu,
236                                                     listeners : {
237                                                         click : function()
238                                                         {
239                                                             var s = _this.grid.getSelectionModel().getSelections();
240                                                             if (!s.length || (s.length > 1))  {
241                                                                 Roo.MessageBox.alert("Error", s.length ? "Select only one Row" : "Select a Row");
242                                                                 return;
243                                                             }
244                                                             if (s[0].data.id < 1 ) {
245                                                                 return;
246                                                             }
247                                                             if (!_this.dialog) return;
248                                                             _this.dialog.show(s[0].data, function() {
249                                                                  _this.grid.ds.load({});
250                                                             }); 
251                                                             
252                                                         }
253                                                     },
254                                                     cls : 'x-btn-text-icon',
255                                                     text : "Edit",
256                                                     icon : Roo.rootURL + 'images/default/tree/leaf.gif'
257                                                 },
258                                                 {
259                                                     xtype: 'Item',
260                                                     xns: Roo.menu,
261                                                     listeners : {
262                                                         click : function()
263                                                         {
264                                                              Pman.genericDelete(_this, 'Groups'); 
265                                                         }
266                                                     },
267                                                     cls : 'x-btn-text-icon',
268                                                     text : "Delete",
269                                                     icon : rootURL + '/Pman/templates/images/trash.gif'
270                                                 },
271                                                 {
272                                                     xtype: 'Separator',
273                                                     xns: Roo.menu
274                                                 },
275                                                 {
276                                                     xtype: 'Item',
277                                                     xns: Roo.menu,
278                                                     listeners : {
279                                                         click : function (_self, e)
280                                                         {
281                                                           _this.grid.ds.load({});
282                                                         }
283                                                     },
284                                                     text : "Reload"
285                                                 }
286                                             ]
287                                         }
288                                     }
289                                 ]
290                             },
291                             colModel : [
292                                 {
293                                     xtype: 'ColumnModel',
294                                     xns: Roo.grid,
295                                     dataIndex : 'name',
296                                     header : 'Name',
297                                     width : 200,
298                                     renderer : function(v,x,r) { 
299                                         if (r.data.id == -1) {
300                                             return '<b>' + "Not in a Group" + '</b>';
301                                         }
302                                         if ((r.data.id == 0) && (_this.type == 0)) {
303                                             return '<b>' + "All Staff (Default Permissions)" + '</b>';
304                                         }
305                                         if ((r.data.id == 0) && (_this.type == 2)) {
306                                             return '<b>' + "Everybody" + '</b>';
307                                         }
308                                         if (r.data.id == 0) {
309                                             return '<b>' + "All Staff" + '</b>';
310                                         }
311                                         if (v == 'Administrators') {
312                                             return '<b>' + "Adminstrators" + '</b>';
313                                         }
314                                         if (r.data.leader) {
315                                             return v + ' (' + r.data.leader_name + ')';
316                                         }
317                                         
318                                         return v;
319                                     }
320                                 }
321                             ],
322                             sm : {
323                                 xtype: 'RowSelectionModel',
324                                 xns: Roo.grid,
325                                 listeners : {
326                                     afterselectionchange : function (_self)
327                                     {
328                                         Pman.Tab.AdminPermMembers.grid.footer.onClick('first');
329                                     }
330                                 },
331                                 singleSelect : true
332                             },
333                             dropTarget : {
334                                 xtype: 'DropTarget',
335                                 xns: Roo.dd,
336                                 listeners : {
337                                     drop : function (source, e, data)
338                                     {
339                                         // Roo.log("DROP");
340                                         var t = Roo.lib.Event.getTarget(e); 
341                                         var ri = _this.grid.view.findRowIndex(t);
342                                         var rid  = false;
343                                         if (ri !== false) {
344                                             rid = _this.grid.getDataSource().getAt(ri).data;
345                                         }
346                                         var s = _this.grid.getSelectionModel().getSelections();
347                                           
348                                         //console.log(data);
349                                         var isFromGroup = s.length ? s[0].data.id > 0 : false;
350                                     
351                                         var isToGroup = rid && rid.id > 0;
352                                         this.success = false;
353                                         if (isFromGroup && isToGroup) {
354                                             return;
355                                         }
356                                         if (!isFromGroup && !isToGroup) {
357                                             return;
358                                         }
359                                         var action = 'add';
360                                         if (isFromGroup && !isToGroup) {
361                                             action = 'sub';
362                                             //return 'x-dd-drop-ok-sub'; 
363                                         }
364                                         // build a list of selections.
365                                         var sels = [];
366                                         for (var i=0; i < data.selections.length; i++) {
367                                             sels.push(data.selections[i].data.id);
368                                         }
369                                     
370                                         Pman.request({
371                                             url: baseURL + '/Core/GroupMembers.php',
372                                             params: {
373                                                 action : action,
374                                                 group_id: action =='add' ? rid.id : s[0].data.id,
375                                                 type: _this.type,
376                                                 user_ids : sels.join(',')
377                                                 
378                                             },  
379                                             method: 'POST',  
380                                             success : function(data) {
381                                                 //refreshPager();
382                                                 // 
383                                                 // do we need to do anything??
384                                                 if (isFromGroup) {
385                                                     Pman.Tab.AdminPermMembers.grid.footer.onClick('refresh');
386                                                 }
387                                             }, 
388                                             
389                                             failure: function() {
390                                                 //Ext.get(document.body).unmask();
391                                                 //if (cb) {
392                                                 //    cb.call(false);
393                                                 //}
394                                                  
395                                             }
396                                         });
397                                     
398                                         this.success = true;
399                                     
400                                         //if (!isFromGroup && isToGroup) {
401                                             //return 'x-dd-drop-ok-add'; 
402                                         return;
403                                         //}
404                                     },
405                                     over : function (source, e, data)
406                                     {
407                                         // Roo.log("dragover");
408                                          
409                                         //Roo.log(e);
410                                         var t = Roo.lib.Event.getTarget(e); 
411                                            //  Roo.log(t);
412                                         var ri = _this.grid.view.findRowIndex(t);
413                                           //            Roo.log(ri);
414                                         
415                                         var rid  = false;
416                                         if (ri !== false) {
417                                             rid = _this.grid.getDataSource().getAt(ri).data;
418                                         }
419                                         
420                                         var s = _this.grid.getSelectionModel().getSelections();
421                                         
422                                         var isFromGroup = s.length ? s[0].data.id > 0 : false;
423                                         
424                                         var isToGroup = rid && rid.id > 0;
425                                         
426                                     //    Roo.log("isToGroup:"  + isToGroup + ", isFromGroup" + isFromGroup);
427                                          
428                                         if (isFromGroup && isToGroup) {
429                                             this.valid = false;
430                                     //        Roo.log('not valid');
431                                             return;
432                                         }
433                                         if (!isFromGroup && !isToGroup) {
434                                             this.valid = false;
435                                     //        Roo.log('not valid');
436                                             return  
437                                         }
438                                         if (isFromGroup && !isToGroup) {
439                                             this.valid = 'ok-sub'; 
440                                             return;
441                                         } 
442                                         //if (!isFromGroup && isToGroup) {
443                                         this.valid = 'ok-add';
444                                     //    Roo.log('add'); 
445                                         //}
446                                     }
447                                 },
448                                 ddGroup : 'groupDD'
449                             }
450                         }
451                     }
452                 ],
453                 center : {
454                     xtype: 'LayoutRegion',
455                     xns: Roo,
456                     tabPosition : 'top'
457                 },
458                 west : {
459                     xtype: 'LayoutRegion',
460                     xns: Roo,
461                     width : 200
462                 }
463             }
464         });
465         this.layout = this.panel.layout;
466
467     }
468 });