#48 : rollback, this is not trivial.

This commit is contained in:
tonio
2010-05-26 16:50:09 +02:00
parent f9f2a9e546
commit 67c66ed649
14 changed files with 74 additions and 198 deletions
-53
View File
@@ -112,56 +112,3 @@ class Alias(models.Model):
("view_aliases", "View aliases"),
)
class Extension(models.Model):
name = models.CharField(max_length=150)
enabled = models.BooleanField(_('enabled'),
help_text=_("Check to enable this extension"))
has_templates = models.BooleanField()
def on(self):
from django.core.management import sql, color
from django.db import connection, models
style = color.no_style()
cursor = connection.cursor()
module = __import__("mailng.extensions.%s" % self.name,
globals(), locals(), ['main', 'models'])
try:
extmodels = module.models
except AttributeError:
extmodels = None
if extmodels is not None:
mods = []
for k, v in extmodels.__dict__.iteritems():
try:
if not issubclass(v, models.Model):
continue
statements, pending = \
connection.creation.sql_create_model(v, style)
try:
for sql in statements:
cursor.execute(sql)
except Exception, msg:
pass
except TypeError:
pass
if self.has_templates:
code, output = exec_cmd("ln -s ../extensions/%s/templates templates/%s" \
% (self.name, self.name))
if os.path.exists("extensions/%s/scripts" % self.name):
code, output = exec_cmd("ln -s ../extensions/%s/scripts scripts/%s" \
% (self.name, self.name))
module.main.init()
self.enabled = True
self.save()
def off(self):
if self.has_templates:
code, output = exec_cmd("rm -f templates/%s" % self.name)
print output
self.enabled = False
self.save()
module = __import__("mailng.extensions.%s" % self.name,
globals(), locals(), ['main', 'models'])
module.main.destroy()
-3
View File
@@ -62,9 +62,6 @@ def settings_menu(selection, user):
"url" : reverse(admin.views.viewparameters),
"img" : "/static/pics/domains.png",
"label" : _("Parameters")},
{"name" : "extensions",
"url" : reverse(admin.views.viewextensions),
"label" : _("Extensions")},
]
return render_to_string('common/menu.html',
{"selection" : selection, "entries" : entries,
-2
View File
@@ -19,8 +19,6 @@ urlpatterns = patterns('mailng.admin.views',
(r'^settings/$', 'settings'),
(r'^settings/addperm/$', 'addpermission'),
(r'^settings/delperm/(?P<mbox_id>\d+)/(?P<group>\w+)/$', 'deletepermission'),
(r'^settings/extensions/$', 'viewextensions'),
(r'^settings/extensions/save/$', 'saveextensions'),
(r'^settings/parameters/$', 'viewparameters'),
(r'^settings/parameters/save/$', 'saveparameters'),
)
+1 -53
View File
@@ -12,7 +12,7 @@ from django.contrib.auth.decorators \
import login_required, permission_required, user_passes_test
from django.contrib.auth.models import User, Group
from mailng import admin, userprefs
from mailng.admin.models import Domain, Mailbox, Alias, Extension
from mailng.admin.models import Domain, Mailbox, Alias
from forms import MailboxForm, DomainForm, AliasForm, PermissionForm
from mailng.lib.authbackends import crypt_password
from mailng.lib import _render, _ctx_ok, _ctx_ko
@@ -440,55 +440,3 @@ def saveparameters(request):
parameters.save(app, name, v)
request.user.message_set.create(message=_("Configuration saved."))
return HttpResponseRedirect(reverse(admin.views.viewparameters))
@login_required
@user_passes_test(lambda u: u.is_superuser)
def viewextensions(request):
from mailng.extensions import list_extensions
from mailng.lib import tables
class ExtensionsTable(tables.Table):
idkey = "id"
selection = tables.SelectionColumn("selection", width="4%", first=True)
_1_name = tables.Column("name", label=_("Name"), width="15%")
_2_version = tables.Column("version", label=_("Version"), width="6%")
_3_descr = tables.Column("description", label=_("Description"))
exts = list_extensions()
for ext in exts:
try:
dbext = Extension.objects.get(name=ext["id"])
ext["selection"] = dbext.enabled
except Extension.DoesNotExist:
dbext = Extension()
dbext.name = ext["id"]
dbext.enabled = False
dbext.has_templates = ext["templates"]
dbext.save()
ext["selection"] = False
tbl = ExtensionsTable(exts)
return _render(request, 'admin/extensions.html', {
"extensions" : tbl.render(request)
})
@login_required
@user_passes_test(lambda u: u.is_superuser)
def saveextensions(request):
from mailng import extensions
actived_exts = Extension.objects.filter(enabled=True)
found = []
for k, v in request.POST.iteritems():
if k.startswith("select_"):
parts = k.split("_", 1)
dbext = Extension.objects.get(name=parts[1])
if not dbext in actived_exts:
dbext.on()
else:
found += [dbext]
for ext in actived_exts:
if not ext in found:
ext.off()
return HttpResponseRedirect(reverse(admin.views.viewextensions))