diff --git a/tailbone/templates/configure.mako b/tailbone/templates/configure.mako index 463d48b1..e6b128fc 100644 --- a/tailbone/templates/configure.mako +++ b/tailbone/templates/configure.mako @@ -280,15 +280,14 @@ Cancel - ${h.form(request.current_route_url())} + ${h.form(request.current_route_url(), **{'@submit': 'purgingSettings = true'})} ${h.csrf_token(request)} ${h.hidden('remove_settings', 'true')} + icon-left="trash"> {{ purgingSettings ? "Working, please wait..." : "Remove All Settings" }} ${h.end_form()} diff --git a/tailbone/views/settings.py b/tailbone/views/settings.py index 0180aa4b..10a0c2eb 100644 --- a/tailbone/views/settings.py +++ b/tailbone/views/settings.py @@ -77,13 +77,41 @@ class AppInfoView(WuttaAppInfoView): return context + # nb. these email settings require special handling below + configure_profile_key_mismatches = [ + 'default.subject', + 'default.to', + 'default.cc', + 'default.bcc', + 'feedback.subject', + 'feedback.to', + ] + def configure_get_simple_settings(self): """ """ simple_settings = super().configure_get_simple_settings() + # TODO: + # there are several email config keys which differ between + # wuttjamaican and rattail. basically all of the "profile" keys + # have a different prefix. + + # after wuttaweb has declared its settings, we examine each and + # overwrite the value if one is defined with rattail config key. + # (nb. this happens even if wuttjamaican key has a value!) + + # note that we *do* declare the profile mismatch keys for + # rattail, as part of simple settings. this ensures the + # parent logic will always remove them when saving. however + # we must also include them in gather_settings() to ensure + # they are saved to match wuttjamaican values. + + # there are also a couple of flags where rattail's default is the + # opposite of wuttjamaican. so we overwrite those too as needed. + for setting in simple_settings: - # TODO: the update home page redirect setting is off by + # nb. the update home page redirect setting is off by # default for wuttaweb, but on for tailbone if setting['name'] == 'wuttaweb.home_redirect_to_login': value = self.config.get_bool('wuttaweb.home_redirect_to_login') @@ -91,55 +119,43 @@ class AppInfoView(WuttaAppInfoView): value = self.config.get_bool('tailbone.login_is_home', default=True) setting['value'] = value - # TODO: sending email is off by default for wuttjamaican, + # nb. sending email is off by default for wuttjamaican, # but on for rattail elif setting['name'] == 'rattail.mail.send_emails': value = self.config.get_bool('rattail.mail.send_emails', default=True) setting['value'] = value - # TODO: email defaults have different config keys in rattail + # nb. this one is even more special, key is entirely different elif setting['name'] == 'rattail.email.default.sender': value = self.config.get('rattail.email.default.sender') if value is None: value = self.config.get('rattail.mail.default.from') setting['value'] = value - # TODO: email defaults have different config keys in rattail - elif setting['name'] == 'rattail.email.default.subject': - value = self.config.get('rattail.email.default.subject') - if value is None: - value = self.config.get('rattail.mail.default.subject') - setting['value'] = value + else: - # TODO: email defaults have different config keys in rattail - elif setting['name'] == 'rattail.email.default.to': - value = self.config.get('rattail.email.default.to') - if value is None: - value = self.config.get('rattail.mail.default.to') - setting['value'] = value - - # TODO: email defaults have different config keys in rattail - elif setting['name'] == 'rattail.email.default.cc': - value = self.config.get('rattail.email.default.cc') - if value is None: - value = self.config.get('rattail.mail.default.cc') - setting['value'] = value - - # TODO: email defaults have different config keys in rattail - elif setting['name'] == 'rattail.email.default.bcc': - value = self.config.get('rattail.email.default.bcc') - if value is None: - value = self.config.get('rattail.mail.default.bcc') - setting['value'] = value + # nb. fetch alternate value for profile key mismatch + for key in self.configure_profile_key_mismatches: + if setting['name'] == f'rattail.email.{key}': + value = self.config.get(f'rattail.email.{key}') + if value is None: + value = self.config.get(f'rattail.mail.{key}') + setting['value'] = value + break # nb. these are no longer used (deprecated), but we keep # them defined here so the tool auto-deletes them simple_settings.extend([ + {'name': 'tailbone.login_is_home'}, {'name': 'tailbone.buefy_version'}, {'name': 'tailbone.vue_version'}, ]) + simple_settings.append({'name': 'rattail.mail.default.from'}) + for key in self.configure_profile_key_mismatches: + simple_settings.append({'name': f'rattail.mail.{key}'}) + for key in self.get_weblibs(): simple_settings.extend([ {'name': f'tailbone.libver.{key}'}, @@ -148,6 +164,28 @@ class AppInfoView(WuttaAppInfoView): return simple_settings + def configure_gather_settings(self, data, simple_settings=None): + """ """ + settings = super().configure_gather_settings(data, simple_settings=simple_settings) + + # nb. must add legacy rattail profile settings to match new ones + for setting in list(settings): + + if setting['name'] == 'rattail.email.default.sender': + value = setting['value'] + settings.append({'name': 'rattail.mail.default.from', + 'value': value}) + + else: + for key in self.configure_profile_key_mismatches: + if setting['name'] == f'rattail.email.{key}': + value = setting['value'] + settings.append({'name': f'rattail.mail.{key}', + 'value': value}) + break + + return settings + class SettingView(MasterView): """