Pman.Tab.GroupsList.js
[Pman.Core] / Pman.Tab.GroupsList.js
1
2 //<script type="text/javascript">
3
4 // generic groups listing tab
5
6
7 Pman.Tab.GroupsList = function(config) {
8     Roo.apply(this, config);
9 };
10
11 Pman.Tab.GroupsList.prototype = {
12     id : false,
13     grid : false,
14     panel : false,
15     getDialog : false,
16     title : false,
17     type : 0,
18     disabled : false,
19     add : function(parentLayout, region) {
20         
21         var _this = this;
22         
23         var refreshPager = function() {
24             _this.refresh();
25         }
26         
27         if (this.panel) {
28             parentLayout.getRegion(region).showPanel(this.panel);
29             return;
30         }
31           
32         var refreshCenterPanel = function()
33         {
34             var actpan = parentLayout.getRegion('center').getActivePanel();
35             if (actpan && actpan.controller) {
36                 actpan.controller.refresh();
37                 return;
38             }
39             // depreciated..
40             var agid = actpan.id;
41             if (!agid) {
42                 return;
43             }
44             Pman.Tab[agid].refresh();
45         }
46         
47         var frm = parentLayout.getRegion(region).getEl().createChild({tag:'div'});
48         //this.grid = new Roo.grid.EditorGrid(frm,  {
49         this.grid = new Roo.grid.Grid(frm,  {
50                 id: _this.id + '-groups',
51                 
52                 //enableDragDrop:true,
53                 enableDrop:true,
54                 ddGroup: 'groupDD',
55                 
56                 //dropConfig: {
57                 //    appendOnly : true,
58                 //    ddGroup: 'groupDD' 
59                 //},
60                 ds:   new Roo.data.Store({
61                     // load using HTTP
62                     
63                     
64                     proxy: new Roo.data.HttpProxy({
65                         url: baseURL + '/Roo/core_group',
66                         method: 'GET'
67                     }),
68                     remoteSort: true,
69                     reader: new Roo.data.JsonReader({
70                         
71                     }),
72                     sortInfo: {
73                         field: 'name', direction: 'ASC'
74                     },
75                     listeners : {
76                         
77                         beforeload: function(t, o) {
78                             //console.log(o.params);
79                             if (!o.params) {
80                                 o.params = {};
81                             }
82                             o.params.type = _this.type;
83                             
84                             o.params._add_everyone = 1;
85                             
86                             
87                         },
88                         load : function()
89                         {
90                             var sm = _this.grid.getSelectionModel();
91                             if (!sm.getSelections().length) {
92                                 sm.selectFirstRow();
93                             }
94                             refreshCenterPanel();
95                           //  Pman.Tab.Documents_In.delayedCreate();
96                           //  Pman.Tab.Documents_Out.delayedCreate();
97                         },
98                         loadexception : Pman.loadException
99                     
100                     }
101                 }),
102                 sm: new Roo.grid.RowSelectionModel({ singleSelect: true }),
103                 cm: new Roo.grid.ColumnModel(
104                     [{
105                         id : _this.id + '-name',
106                         header : "Name",
107                         dataIndex : 'name',
108                         sortable : true,
109                         width : 100,
110                         renderer : function(v,x,r) {
111                             if (r.data.id == -1) {
112                                 return '<b>' + "Not in a Group" + '</b>';
113                             }
114                             if ((r.data.id == 0) && (_this.type == 0)) {
115                                 return '<b>' + "All Staff (Default Permissions)" + '</b>';
116                             }
117                             if ((r.data.id == 0) && (_this.type == 2)) {
118                                 return '<b>' + "Everybody" + '</b>';
119                             }
120                             if (r.data.id == 0) {
121                                 return '<b>' + "All Staff" + '</b>';
122                             }
123                             if (v == 'Administrators') {
124                                 return '<b>' + "Adminstrators" + '</b>';
125                             }
126                             if (r.data.leader) {
127                                 return v + ' (' + r.data.leader_name + ')';
128                             }
129                             
130                             return v;
131                             /*
132                             switch (v) {
133                                 case 'Default':
134                                     return '<b>' + "All Staff (Default Perms.)" + '</b>';
135                                 case 'Administrators':
136                                     return '<b>' + "Administrators" + '</b>';
137                                 default: 
138                                     return v;
139                             }
140                             */
141                             
142                        }
143                     }]
144                 ),
145                 autoExpandColumn: _this.id + '-name' , // fixme!!!!
146                 clicksToEdit : 1,
147                 
148                 loadMask: true,
149                 listeners : {
150                     rowclick: function(g, ri, e)
151                     {
152                         refreshCenterPanel();
153                     } 
154                 }
155                  
156         });
157         // add selection changed...
158         
159         this.panel  = parentLayout.add(region,  new Roo.GridPanel(this.grid ,
160             { fitToframe: true,fitContainer: true, title: _this.title, id : _this.id, background: true})
161         );
162         this.grid.render();
163         
164         
165         new Roo.dd.DropTarget(_this.grid.getView().mainBody, {  
166             ddGroup : 'groupDD',  
167             copy       : true,
168
169             notifyOver : function(dd, e, data){  
170                 var t = Roo.lib.Event.getTarget(e); 
171                 var ri = _this.grid.view.findRowIndex(t);
172                 var rid  = false;
173                 if (ri !== false) {
174                     rid = _this.grid.getDataSource().getAt(ri).data;
175                 }
176                 
177                 var s = _this.grid.getSelectionModel().getSelections();
178                 
179                 var isFromGroup = s.length ? s[0].data.id > 0 : false;
180                 
181                 var isToGroup = rid && rid.id > 0;
182                 
183                 if (isFromGroup && isToGroup) {
184                     return this.dropNotAllowed; 
185                 }
186                 if (!isFromGroup && !isToGroup) {
187                     return this.dropNotAllowed; 
188                 }
189                 if (isFromGroup && !isToGroup) {
190                     return 'x-dd-drop-ok-sub'; 
191                 } 
192                 //if (!isFromGroup && isToGroup) {
193                     return 'x-dd-drop-ok-add'; 
194                 //}
195                 
196                   
197             },  
198             notifyDrop : function(dd, e, data){  
199                 
200                 var t = Roo.lib.Event.getTarget(e); 
201                 var ri = _this.grid.view.findRowIndex(t);
202                 var rid  = false;
203                 if (ri !== false) {
204                     rid = _this.grid.getDataSource().getAt(ri).data;
205                 }
206                 var s = _this.grid.getSelectionModel().getSelections();
207                   
208                 //console.log(data);
209                 var isFromGroup = s.length ? s[0].data.id > 0 : false;
210                 
211                 var isToGroup = rid && rid.id > 0;
212                 
213                 if (isFromGroup && isToGroup) {
214                     return false;
215                 }
216                 if (!isFromGroup && !isToGroup) {
217                     return false;
218                 }
219                 var action = 'add';
220                 if (isFromGroup && !isToGroup) {
221                     action = 'sub';
222                     //return 'x-dd-drop-ok-sub'; 
223                 }
224                 // build a list of selections.
225                 var sels = [];
226                 for (var i=0; i < data.selections.length; i++) {
227                     sels.push(data.selections[i].data.id);
228                 }
229                 
230                 new Pman.Request({
231                     url: baseURL + '/Core/GroupMembers', // not a dataobject...
232                     params: {
233                         action : action,
234                         group_id: action =='add' ? rid.id : s[0].data.id,
235                         type: _this.type,
236                         user_ids : sels.join(',')
237                         
238                     },  
239                     method: 'POST',  
240                     success : function(data) {
241                         refreshPager();
242                     }, 
243                     
244                     failure: function() {
245                         //Roo.get(document.body).unmask();
246                         //if (cb) {
247                         //    cb.call(false);
248                         //}
249                          
250                     }
251                 });
252                 
253                 
254                 
255                 //if (!isFromGroup && isToGroup) {
256                     //return 'x-dd-drop-ok-add'; 
257                 return true;
258                 //}
259                 
260                   
261             }
262         });  
263         
264         /*
265         var gridFoot = this.grid.getView().getFooterPanel(true);
266         
267         this.paging = new Roo.PagingToolbar(gridFoot, this.grid.getDataSource(), {
268             pageSize: 25,
269             displayInfo: true,
270             displayMsg: '',
271             emptyMsg: ''
272         });
273         */
274         var grid = this.grid;
275  
276         var gridHead = this.grid.getView().getHeaderPanel(true);
277         this.toolbar = new Roo.Toolbar(gridHead);
278           
279  
280         var _dialog= this.getDialog();
281         this.toolbar.add({
282             
283             text: "Manage Groups",
284             cls: 'x-btn-text-icon',
285             icon: Roo.rootURL + 'images/default/tree/leaf.gif',
286             menu : {
287                 items : [
288                     
289                     {
290                         text: "Add",
291                          cls: 'x-btn-text-icon',
292                         icon: Roo.rootURL + 'images/default/dd/drop-add.gif',
293                         hidden : !Pman.hasPerm('Core.Groups', 'A'),
294                         handler : function(){
295                             _dialog.show( { id : 0, type: _this.type }, refreshPager ); 
296                         }
297                     }, 
298                     {
299                         text: "Edit",
300                         cls: 'x-btn-text-icon',
301                         icon: Roo.rootURL + 'images/default/tree/leaf.gif',
302                         hidden : !Pman.hasPerm('Core.Groups', 'E'),
303                         handler : function() {
304                             var s = grid.getSelectionModel().getSelections();
305                             if (!s.length || (s.length > 1))  {
306                                 Roo.MessageBox.alert("Error", s.length ? "Select only one Row" : "Select a Row");
307                                 return;
308                             }
309                             if ((s[0].data.name == 'Administrators') ||(s[0].data.name == 'Default')) {
310                                 Roo.MessageBox.alert("Error", "You can not rename that group");
311                                 return;
312                             }
313                             if (s[0].data.id < 1) {
314                                 Roo.MessageBox.alert("Error", "You can not rename that group");
315                                 return;
316                             }
317                             _dialog.show(s[0].data, refreshPager); 
318                         }
319                     },  
320                     
321                     {
322                         text: "Delete",
323                          cls: 'x-btn-text-icon',
324                         icon: rootURL + '/Pman/templates/images/trash.gif',
325                         hidden : !Pman.hasPerm('Core.Groups', 'D'),
326                         handler : function(){
327                             var s = grid.getSelectionModel().getSelections();
328                               
329                             for(var i = 0; i < s.length; i++) {
330                                 
331                                 if ((s[i].data.id < 1) || (s[i].data.name == 'Administrators')) {
332                                     Roo.MessageBox.alert("Error", "You can not delete that group");
333                                     return;
334                                 }
335                             }
336                             
337                             
338                             Pman.genericDelete(_this, 'core_group'); 
339                         } 
340                     } , '-',
341                       {
342                         text: "Reload",
343                          cls: 'x-btn-text-icon',
344                            icon: rootURL + '/Pman/templates/images/view-refresh.gif',
345                         handler : function(){
346                             refreshPager();
347                         }
348                     }
349                 ]
350             }
351                     
352         });
353         this.panel.on('activate', function() {
354            // refreshPager();
355         });
356             
357         //this.toolbar = tb;
358         // add stuff to toolbar?
359         //this.innerLayout.endUpdate();
360         
361         
362         
363     },
364     refresh: function()
365     {
366         this.grid.getDataSource().reload();   
367     } /*,
368    // - is this used anymore? 
369    
370     show: function (parentLayout, region)
371     {
372         this.add(parentLayout, region);
373         this.grid.getDataSource().load({
374             params: {
375                 type: _this.type
376             }
377         });
378
379     }
380     */
381 };