diff --git a/htdocs/js/mumble.js b/htdocs/js/mumble.js
index ab4cf82..88c598b 100644
--- a/htdocs/js/mumble.js
+++ b/htdocs/js/mumble.js
@@ -1,6 +1,23 @@
// kate: space-indent on; indent-width 4; replace-tabs on;
function render_mumble( divname, urls ){
+ Ext.QuickTips.init();
+
+ var adminform = new Ext.ux.MumbleForm({
+ title: gettext("Administration"),
+ buttons: [{
+ text: "doit",
+ handler: function( btn ){
+ this.ownerCt.ownerCt.getForm().load({ params: {pk: 1} });
+ }
+ }, {
+ text: "submit",
+ handler: function( btn ){
+ this.ownerCt.ownerCt.getForm().submit({ params: {pk: 1} });
+ }
+ }]
+ });
+
var mainpanel = new Ext.Panel({
renderTo: divname,
height: 600,
@@ -28,15 +45,7 @@ function render_mumble( divname, urls ){
xtype: "textfield",
inputType: "password",
}],
- }, {
- title: gettext("Administration"),
- xtype: "form",
- items: [{
- name: "test",
- fieldLabel: "testing",
- xtype: "textfield",
- }],
- }, {
+ }, adminform, {
title: gettext("User texture"),
layout: "border",
items: [{
@@ -75,4 +84,5 @@ function render_mumble( divname, urls ){
} ],
}],
});
+ adminform.getForm().load({ params: {pk: 1} });
}
diff --git a/pyweb/mumble/forms.py b/pyweb/mumble/forms.py
index 340bd34..aa339cf 100644
--- a/pyweb/mumble/forms.py
+++ b/pyweb/mumble/forms.py
@@ -25,6 +25,9 @@ from django.utils.translation import ugettext_lazy as _
from mumble.models import MumbleServer, Mumble, MumbleUser
+from extdirect import Provider
+
+EXT_FORMS_PROVIDER = Provider(name="Ext.app.MUMBLE_FORMS_API")
class PropertyModelForm( ModelForm ):
""" ModelForm that gets/sets fields that are not within the model's
@@ -69,7 +72,7 @@ class PropertyModelForm( ModelForm ):
if fldname not in instfields:
setattr( inst, fldname, self.cleaned_data[fldname] )
-
+@EXT_FORMS_PROVIDER.register_form
class MumbleForm( PropertyModelForm ):
""" The Mumble Server admin form that allows to configure settings which do
not necessarily have to be reserved to the server hoster.
@@ -150,6 +153,7 @@ class MumbleAdminForm( MumbleForm ):
return None
+@EXT_FORMS_PROVIDER.register_form
class MumbleServerForm( ModelForm ):
defaultconf = forms.CharField( label=_("Default config"), required=False, widget=forms.Textarea )
diff --git a/pyweb/mumble/templates/mumble/mumble.html b/pyweb/mumble/templates/mumble/mumble.html
index b509f40..33656d1 100644
--- a/pyweb/mumble/templates/mumble/mumble.html
+++ b/pyweb/mumble/templates/mumble/mumble.html
@@ -13,6 +13,8 @@
{% block HeadTag %}
+
+
diff --git a/pyweb/mumble/templatetags/mumble_extras.py b/pyweb/mumble/templatetags/mumble_extras.py
index 6637267..a6b4051 100644
--- a/pyweb/mumble/templatetags/mumble_extras.py
+++ b/pyweb/mumble/templatetags/mumble_extras.py
@@ -61,3 +61,5 @@ def mmversion_eq( obj, version ):
def mmversion_gt( obj, version ):
""" return True if the given Server's version is greater than the given version. """
return tuple(obj.version[:3]) > tuple([int(v) for v in version.split('.')])
+
+
diff --git a/pyweb/mumble/urls.py b/pyweb/mumble/urls.py
index 9c63988..e8af967 100644
--- a/pyweb/mumble/urls.py
+++ b/pyweb/mumble/urls.py
@@ -17,6 +17,7 @@
from django.conf.urls.defaults import patterns, include
from views import EXT_DIRECT_PROVIDER
+from forms import EXT_FORMS_PROVIDER
urlpatterns = patterns(
'mumble.views',
@@ -24,6 +25,7 @@ urlpatterns = patterns(
( r'(?P\d+)/users', 'users' ),
( r'api/', include(EXT_DIRECT_PROVIDER.urls) ),
+ ( r'forms/', include(EXT_FORMS_PROVIDER.urls) ),
( r'(?P\d+)/(?P\d+)/texture.png', 'showTexture' ),
diff --git a/pyweb/mumble/views.py b/pyweb/mumble/views.py
index 2f562d9..c886f6d 100644
--- a/pyweb/mumble/views.py
+++ b/pyweb/mumble/views.py
@@ -255,6 +255,17 @@ def showTexture( request, server, userid ):
img.save( buf, "PNG" )
return HttpResponse( buf.getvalue(), "image/png" )
+@login_required
+@EXT_DIRECT_PROVIDER.register_method( "Mumble" )
+def get_admin( request, server ):
+ srv = get_object_or_404( Mumble, id=int(server) )
+ if not srv.isUserAdmin( request.user ):
+ raise Exception( 'Access denied' )
+ adminform = MumbleForm( request.POST, instance=srv )
+ data = {}
+ for fld in adminform.fields:
+ data[fld] = getattr( srv, fld )
+ return { 'data': data, 'success': True }
@login_required
@EXT_DIRECT_PROVIDER.register_method( "Mumble" )