diff --git a/htdocs/js/usereditor.js b/htdocs/js/usereditor.js index 015ac76..2228426 100644 --- a/htdocs/js/usereditor.js +++ b/htdocs/js/usereditor.js @@ -16,7 +16,7 @@ Ext.ux.UserEditorPanel = function( config ){ userAdminStore = new Ext.data.DirectStore({ baseParams: { server: this.server }, - directFn: Mumble.users, + directFn: MumbleUserAdmin.users, fields: userRecord, autoLoad: true, remoteSort: false @@ -42,7 +42,7 @@ Ext.ux.UserEditorPanel = function( config ){ valueField: 'uid', displayField: 'uname', store: new Ext.data.DirectStore({ - directFn: Mumble.djangousers, + directFn: MumbleUserAdmin.djangousers, fields: [ 'uid', 'uname' ], autoLoad: true }) @@ -86,7 +86,7 @@ Ext.ux.UserEditorPanel = function( config ){ } }, deleteColumn ] ), - tbar: [{ + buttons: [{ text: gettext("Add"), handler : function(){ userAdminStore.add( new userRecord( { @@ -101,18 +101,15 @@ Ext.ux.UserEditorPanel = function( config ){ }, { text: gettext("Save"), handler : function(){ - data = []; + var data = []; for( i = 0; i < userAdminStore.data.items.length; i++ ){ - rec = userAdminStore.data.items[i]; + var rec = userAdminStore.data.items[i]; if( rec.dirty ){ data.push(rec.data); } } - var conn = new Ext.data.Connection(); - conn.request( { - url: userAdminStore.url, - params: { data: Ext.encode( data ) }, - success: function(){ + MumbleUserAdmin.update( data, function(provider, response){ + if( response.result.success ){ for( i = 0; i < userAdminStore.data.items.length; i++ ){ rec = userAdminStore.data.items[i]; if( rec.data['delete'] == true ) @@ -122,6 +119,14 @@ Ext.ux.UserEditorPanel = function( config ){ } } } + else{ + Ext.Msg.show({ + title: gettext("Submit error"), + msg: gettext("Unable to save."), + icon: Ext.MessageBox.ERROR, + buttons: Ext.MessageBox.OK + }); + } }); } }, { diff --git a/pyweb/mumble/views.py b/pyweb/mumble/views.py index 7830713..ccdf5c0 100644 --- a/pyweb/mumble/views.py +++ b/pyweb/mumble/views.py @@ -216,7 +216,7 @@ def log( request, server, start, limit, filter ): ], 'success': True } -@EXT_DIRECT_PROVIDER.register_method( "Mumble" ) +@EXT_DIRECT_PROVIDER.register_method( "MumbleUserAdmin" ) def users( request, server ): """ Create a list of MumbleUsers for a given server serialized as a JSON object. @@ -247,7 +247,7 @@ def users( request, server ): return users -@EXT_DIRECT_PROVIDER.register_method( "Mumble" ) +@EXT_DIRECT_PROVIDER.register_method( "MumbleUserAdmin" ) def djangousers( request ): """ Return a list of all Django users' names and IDs. """ @@ -260,6 +260,26 @@ def djangousers( request ): return users +@EXT_DIRECT_PROVIDER.register_method( "MumbleUserAdmin" ) +def update( request, data ): + for record in data: + if record['id'] == -1: + if record['delete']: + continue + mu = MumbleUser( server=srv ) + else: + mu = MumbleUser.objects.get( id=record['id'] ) + if record['delete']: + mu.delete() + continue + + mu.name = record['name'] + mu.password = record['password'] + if record['owner']: + mu.owner = User.objects.get( id=int(record['owner']) ) + mu.save() + mu.aclAdmin = record['admin'] + return { 'success': True } @login_required @csrf_exempt