mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-19 05:58:34 +02:00
#48 : rollback, this is not trivial.
This commit is contained in:
@@ -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()
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user