Browse Source

Change db settings action nearly complete.

Rafał Pitoń 11 years ago
parent
commit
73279b6606
4 changed files with 37 additions and 2 deletions
  1. 4 0
      misago/conf/dbsettings.py
  2. 3 0
      misago/conf/forms.py
  3. 15 0
      misago/conf/models.py
  4. 15 2
      misago/conf/views.py

+ 4 - 0
misago/conf/dbsettings.py

@@ -45,6 +45,10 @@ class DBSettings(object):
         except (KeyError, Setting.DoesNotExist):
         except (KeyError, Setting.DoesNotExist):
             raise AttributeError("Setting %s is undefined" % setting)
             raise AttributeError("Setting %s is undefined" % setting)
 
 
+    def flush_cache(self):
+        from misago.core.cache import cache
+        cache.delete(CACHE_KEY)
+
     def __getattr__(self, attr):
     def __getattr__(self, attr):
         try:
         try:
             return self._settings[attr]['value']
             return self._settings[attr]['value']

+ 3 - 0
misago/conf/forms.py

@@ -15,11 +15,14 @@ def basic_kwargs(setting):
 
 
     return kwargs
     return kwargs
 
 
+
 def create_text(setting, kwargs, extra):
 def create_text(setting, kwargs, extra):
     kwargs.update(extra)
     kwargs.update(extra)
     if setting.python_type == 'int':
     if setting.python_type == 'int':
         return forms.IntegerField(**kwargs)
         return forms.IntegerField(**kwargs)
     else:
     else:
+        if extra.get('min_length', 0) == 0:
+            kwargs['required'] = False
         return forms.CharField(**kwargs)
         return forms.CharField(**kwargs)
 
 
 
 

+ 15 - 0
misago/conf/models.py

@@ -31,6 +31,19 @@ class SettingsGroup(models.Model):
     objects = SettingsGroupsManager()
     objects = SettingsGroupsManager()
 
 
 
 
+class SettingsManager(models.Manager):
+    def change_setting(self, setting, dry_value=None, wet_value=None):
+        if dry_value:
+            return self.filter(setting=setting).update(dry_value=dry_value)
+        elif wet_value:
+            try:
+                setting = self.get(setting=setting)
+                setting.value = wet_value
+                setting.save(update_fields=['dry_value'])
+            except Setting.DoesNotExist:
+                return 0
+
+
 class Setting(models.Model):
 class Setting(models.Model):
     group = models.ForeignKey(SettingsGroup)
     group = models.ForeignKey(SettingsGroup)
     setting = models.CharField(max_length=255, unique=True)
     setting = models.CharField(max_length=255, unique=True)
@@ -45,6 +58,8 @@ class Setting(models.Model):
     form_field = models.CharField(max_length=255, default='text')
     form_field = models.CharField(max_length=255, default='text')
     pickled_field_extra = models.TextField(null=True, blank=True)
     pickled_field_extra = models.TextField(null=True, blank=True)
 
 
+    objects = SettingsManager()
+
     @property
     @property
     def value(self):
     def value(self):
         if not self.dry_value and self.default_value:
         if not self.dry_value and self.default_value:

+ 15 - 2
misago/conf/views.py

@@ -2,6 +2,7 @@ from django.contrib import messages
 from django.shortcuts import redirect
 from django.shortcuts import redirect
 from django.utils.translation import ugettext as _
 from django.utils.translation import ugettext as _
 from misago.admin.views import render as mi_render
 from misago.admin.views import render as mi_render
+from misago.conf import db_settings
 from misago.conf.forms import ChangeSettingsForm
 from misago.conf.forms import ChangeSettingsForm
 from misago.conf.models import SettingsGroup, Setting
 from misago.conf.models import SettingsGroup, Setting
 
 
@@ -31,9 +32,21 @@ def group(request, group_key):
     fieldsets = ChangeSettingsForm(group=active_group)
     fieldsets = ChangeSettingsForm(group=active_group)
     if request.method == 'POST':
     if request.method == 'POST':
         fieldsets = ChangeSettingsForm(request.POST, group=active_group)
         fieldsets = ChangeSettingsForm(request.POST, group=active_group)
-        valid_fieldsets = len(True for form in fieldsets if form.is_valid())
+        valid_fieldsets = len([True for fieldset in fieldsets if
+                               fieldset['form'].is_valid()])
         if len(fieldsets) == valid_fieldsets:
         if len(fieldsets) == valid_fieldsets:
-            pass
+            new_values = {}
+            for fieldset in fieldsets:
+                new_values.update(fieldset['form'].cleaned_data)
+
+            for setting, dry_value in new_values.items():
+                Setting.objects.change_setting(setting, dry_value=dry_value)
+
+            db_settings.flush_cache()
+
+            messages.success(request,
+                             _('Changes in settings have been saved!'))
+            return redirect('misago:admin:settings:group', group_key=group_key)
 
 
     use_single_form_template = (len(fieldsets) == 1 and
     use_single_form_template = (len(fieldsets) == 1 and
                                 not fieldsets[0]['legend'])
                                 not fieldsets[0]['legend'])