from misago.conf import db_settings from misago.conf.models import Setting from . import defstdout, fetch_assoc def copy_value(setting): def closure(old_value): setting_obj = Setting.objects.get(setting=setting) setting_obj.value = old_value setting_obj.save() return setting_obj return closure def map_value(setting, translation): def closure(old_value): setting_obj = Setting.objects.get(setting=setting) setting_obj.value = translation[old_value] setting_obj.save() return setting_obj return closure def convert_allow_custom_avatars(old_value): setting_obj = Setting.objects.get(setting='allow_custom_avatars') setting_obj.value = 'upload' in old_value.split(',') setting_obj.save() return setting_obj SETTING_CONVERTER = { 'board_name': copy_value('forum_name'), 'board_index_title': copy_value('forum_index_title'), 'board_index_meta': copy_value('forum_index_meta_description'), 'board_header': copy_value('forum_branding_text'), 'email_footnote_plain': copy_value('email_footer'), 'tos_title': copy_value('terms_of_service_title'), 'tos_url': copy_value('terms_of_service_link'), 'tos_content': copy_value('terms_of_service'), 'board_credits': copy_value('forum_footnote'), 'thread_name_min': copy_value('thread_title_length_min'), 'thread_name_max': copy_value('thread_title_length_max'), 'post_length_min': copy_value('post_length_min'), 'account_activation': map_value('account_activation', { 'none': 'none', 'user': 'user', 'admin': 'admin', 'block': 'closed', }), 'username_length_min': copy_value('username_length_min'), 'username_length_max': copy_value('username_length_max'), 'password_length': copy_value('password_length_min'), 'avatars_types': convert_allow_custom_avatars, 'default_avatar': copy_value('default_avatar'), 'upload_limit': copy_value('avatar_upload_limit'), 'subscribe_start': map_value('subscribe_start', { '0': 'no', '1': 'watch', '2': 'watch_email', }), 'subscribe_reply': map_value('subscribe_reply', { '0': 'no', '1': 'watch', '2': 'watch_email', }), 'bots_registration': map_value('captcha_type', { 'no': 'no', 'recaptcha': 're', 'qa': 'qa', }), 'recaptcha_public': copy_value('recaptcha_site_key'), 'recaptcha_private': copy_value('recaptcha_secret_key'), 'qa_test': copy_value('qa_question'), 'qa_test_help': copy_value('qa_help_text'), 'qa_test_answers': copy_value('qa_answers'), } def move_settings(stdout=None): stdout = stdout or defstdout for row in fetch_assoc('SELECT * FROM misago_setting'): setting_key = row['setting'] if setting_key in SETTING_CONVERTER: convert_setting = SETTING_CONVERTER[setting_key] setting_obj = convert_setting(row['value']) stdout.write(setting_obj.name) db_settings.flush_cache()