Browse Source

add move{User,Channel} events, implement moving users to other channels via DD. see #81

Natenom/support-murmur-13-1446181288462
Michael Ziegler 14 years ago
parent
commit
ae377cd309
  1. 24
      pyweb/mumble/media/js/channelviewer.js
  2. 9
      pyweb/mumble/models.py
  3. 8
      pyweb/mumble/templates/mumble/mumble.html
  4. 6
      pyweb/mumble/views.py

24
pyweb/mumble/media/js/channelviewer.js

@ -65,15 +65,23 @@ Ext.ux.MumbleChannelViewer = function( config ){
refreshInterval: 10000,
idleInterval: 2,
autoScroll: true,
enableDD: false, // Users need to enable this explicitly
root: {
text: gettext("Loading..."),
leaf: true
},
listeners: {}
});
Ext.applyIf( this.listeners, {
dragdrop: function( tree, node, targetdd, ev ){
if( typeof node.attributes.userdata != "undefined" )
tree.fireEvent("moveUser", tree, node.attributes.userdata, targetdd.dragOverData.target.attributes.chandata);
}
});
Ext.applyIf( this, {
// This stuff needs the above applied already
// x-btn x-btn-noicon
bbar: [ gettext("Auto-Refresh")+':', {
xtype: "checkbox",
ref: "../cbAutoRefresh",
@ -110,6 +118,12 @@ Ext.ux.MumbleChannelViewer = function( config ){
} );
Ext.ux.MumbleChannelViewer.superclass.constructor.call( this );
this.addEvents({
'moveUser': true,
'moveChannel': true //TODO
});
this.autoRefreshId = 0;
this.setAutoRefresh();
}
@ -144,6 +158,7 @@ Ext.extend( Ext.ux.MumbleChannelViewer, Ext.tree.TreePanel, {
var respdata = Ext.decode( resp.responseText );
var root = {
text: respdata.name,
nodeType: 'async',
id: "mumbroot",
leaf: false,
icon: this.imageurl+'/mumble.16x16.png',
@ -158,7 +173,11 @@ Ext.extend( Ext.ux.MumbleChannelViewer, Ext.tree.TreePanel, {
var child = {
text: json.channels[i].name,
id: ("channel_" + json.channels[i].id),
nodeType: 'async',
leaf: true,
allowDrag: true,
allowDrop: true,
draggable: true,
icon: tree.imageurl+'/channel.png',
children: [],
uiProvider: Ext.ux.MumbleChannelNodeUI,
@ -174,7 +193,10 @@ Ext.extend( Ext.ux.MumbleChannelViewer, Ext.tree.TreePanel, {
var child = {
text: json.users[i].name,
id: ("user_" + json.users[i].session),
nodeType: 'async',
leaf: true,
allowDrag: true,
draggable: true,
uiProvider: Ext.ux.MumbleUserNodeUI,
userdata: json.users[i],
imageurl: tree.imageurl

9
pyweb/mumble/models.py

@ -557,6 +557,15 @@ class Mumble( models.Model ):
def banUser( self, sessionid, reason="" ):
return self.ctl.addBanForSession( self.srvid, sessionid, reason=reason )
def moveUser( self, sessionid, channelid ):
return self.ctl.moveUser( self.srvid, sessionid, channelid )
def muteUser( self, sessionid, mute=True ):
return self.ctl.muteUser( self.srvid, sessionid, mute )
def deafenUser( self, sessionid, deafen=True ):
return self.ctl.moveUser( self.srvid, sessionid, deafen )
def getLog( self, first=0, last=100, filter="" ):
""" Return log entries from ``first`` to ``last`` that contain ``filter`` (if any). """
logentries = self.ctl.getLog( self.srvid, first, last )

8
pyweb/mumble/templates/mumble/mumble.html

@ -58,8 +58,14 @@
region: "west",
width: 350,
split: true,
enableDD: true,
source_url: "{% url mumble.views.cvp_json MumbleServer.id %}",
imageurl: '{{MUMBLE_MEDIA_PREFIX}}/img'
imageurl: '{{MUMBLE_MEDIA_PREFIX}}/img',
listeners: {
moveUser: function( tree, userdata, chandata ){
User.move( {{MumbleServer.id}}, userdata.session, chandata.id )
}
}
}, {
xtype: "tabpanel",
region: "center",

6
pyweb/mumble/views.py

@ -329,6 +329,12 @@ def update_avatar( request, userid ):
return HttpResponse( "false", mimetype="text/html" )
@EXT_DIRECT_PROVIDER.register_method( "User" )
def move( request, server, sessionid, channelid ):
srv = get_object_or_404( Mumble, id=int(server) )
if not srv.isUserAdmin( request.user ):
raise Exception( 'Access denied' )
srv.moveUser( sessionid, channelid )
def mmng_tree( request, server ):
""" Return a JSON representation of the channel tree suitable for

Loading…
Cancel
Save