|
@@ -1,2 +1,64 @@
|
|
-def insert_or_update_settings_group(orm, group):
|
|
|
|
- pass
|
|
|
|
|
|
+from misago.conf import CACHE_KEY
|
|
|
|
+from misago.core.cache import cache as default_cache
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def get_custom_settings_values(orm, group_key):
|
|
|
|
+ custom_settings_values = {}
|
|
|
|
+
|
|
|
|
+ for setting in orm.Setting.objects.filter(group_id=group_key).iterator():
|
|
|
|
+ custom_settings_values[setting.setting] = setting.value
|
|
|
|
+
|
|
|
|
+ return custom_settings_values
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def get_group(orm, group_key):
|
|
|
|
+ try:
|
|
|
|
+ return orm.SettingsGroup.objects.get(key=group_key)
|
|
|
|
+ except orm.SettingsGroup.DoesNotExist:
|
|
|
|
+ return orm.SettingsGroup()
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def migrate_settings_group(orm, group_fixture, old_group_key=None):
|
|
|
|
+ group_key = group_fixture['key']
|
|
|
|
+
|
|
|
|
+ # Fetch settings group
|
|
|
|
+
|
|
|
|
+ if old_group_key:
|
|
|
|
+ custom_settings_values = get_custom_settings_values(orm, old_group_key)
|
|
|
|
+ group = get_group(orm, old_group_key)
|
|
|
|
+ else:
|
|
|
|
+ custom_settings_values = get_custom_settings_values(orm, group_key)
|
|
|
|
+ group = get_group(orm, group_key)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ # Update group's attributes
|
|
|
|
+
|
|
|
|
+ group.key = group_fixture['key']
|
|
|
|
+ group.name = group_fixture['name']
|
|
|
|
+ group.description = group_fixture.get('description')
|
|
|
|
+ group.save()
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ # Delete groups settings and make new ones
|
|
|
|
+ # Its easier to create news ones and then assign them old values
|
|
|
|
+
|
|
|
|
+ group.setting_set.all().delete()
|
|
|
|
+
|
|
|
|
+ for order, setting in enumerate(group_fixture['settings']):
|
|
|
|
+ setting['group'] = group
|
|
|
|
+ setting['order'] = order
|
|
|
|
+
|
|
|
|
+ try:
|
|
|
|
+ value = custom_settings_values[seting['setting']]
|
|
|
|
+ except KeyError:
|
|
|
|
+ value = setting.pop('value')
|
|
|
|
+ field_extra = setting.pop('field_extra', None)
|
|
|
|
+
|
|
|
|
+ setting = orm.Setting(**setting)
|
|
|
|
+ setting.value = value
|
|
|
|
+ setting.field_extra = field_extra
|
|
|
|
+ setting.save()
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def clear_settings_cache():
|
|
|
|
+ default_cache.delete(CACHE_KEY)
|