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