from forum.settings.base import Setting
from django.utils.translation import ugettext as _
from django.core.files.storage import FileSystemStorage
+from django.core.urlresolvers import reverse
class DummySetting:
pass
class SettingsSetForm(forms.Form):
- def __init__(self, set, data=None, *args, **kwargs):
- if data is None:
- initial = dict([(setting.name, setting.value) for setting in set])
- else:
- initial = None
+ def __init__(self, set, data=None, unsaved=None, *args, **kwargs):
+ initial = dict([(setting.name, setting.value) for setting in set])
+
+ if unsaved:
+ initial.update(unsaved)
super(SettingsSetForm, self).__init__(data, initial=initial, *args, **kwargs)
for setting in set:
- if isinstance(setting, (Setting.emulators.get(str, DummySetting), Setting.emulators.get(unicode, DummySetting))):
+ widget = setting.field_context.get('widget', None)
+
+ if widget is forms.CheckboxSelectMultiple or widget is forms.SelectMultiple or isinstance(widget, forms.SelectMultiple):
+ field = forms.MultipleChoiceField(**setting.field_context)
+ elif widget is forms.RadioSelect or isinstance(widget, forms.RadioSelect):
+ field = forms.ChoiceField(**setting.field_context)
+ elif isinstance(setting, (Setting.emulators.get(str, DummySetting), Setting.emulators.get(unicode, DummySetting))):
if not setting.field_context.get('widget', None):
setting.field_context['widget'] = forms.TextInput(attrs={'class': 'longstring'})
field = forms.CharField(**setting.field_context)
return data[name]
class CommaStringListWidget(forms.Textarea):
+ def render(self, name, value, attrs=None):
+ return super(CommaStringListWidget, self).render(name, ', '.join(value), attrs)
+
+
def value_from_datadict(self, data, files, name):
if 'submit' in data:
return map(strip, data[name].split(','))
else:
return ', '.join(data[name])
+class TestEmailSettingsWidget(forms.TextInput):
+ def render(self, name, value, attrs=None):
+ if not value:
+ value = ''
-
-
+ return """
+ <div id="test_email_settings">
+ <a href="%s" onclick="return false;" class="button test_button" href="/">Test</a>
+
+ <div style="margin-top: 7px">
+ <div style="display: none" class="ajax_indicator">
+ Testing your current e-mail settings. Please, wait.
+ </div>
+ <div class="test_status"></div>
+ </div>
+ </div>
+ """ % reverse("test_email_settings")
\ No newline at end of file