12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- from django import forms
- from django.utils.translation import gettext_lazy as _
- from ....admin.forms import ColorField, YesNoSwitch
- from ...models import SocialAuthProvider
- from ..ordering import get_next_free_order
- class ProviderForm(forms.ModelForm):
- button_text = forms.CharField(label=_("Button text"), required=False)
- button_color = ColorField(label=_("Button color"), required=False)
- is_active = YesNoSwitch(label=_("Enable this provider"))
- class Meta:
- model = SocialAuthProvider
- fields = ["button_text", "button_color", "is_active"]
- def __init__(self, *args, **kwargs):
- self.request = kwargs.pop("request")
- super().__init__(*args, **kwargs)
- def save(self):
- settings = {}
- for setting, value in self.cleaned_data.items():
- if setting not in ["button_text", "button_color", "is_active"]:
- settings[setting] = value
- self.instance.settings = settings
- if "is_active" in self.changed_data and self.cleaned_data.get("is_active"):
- self.instance.order = get_next_free_order()
- self.instance.save()
- class OAuthProviderForm(ProviderForm):
- associate_by_email = YesNoSwitch(
- label=_("Associate existing users by email"),
- help_text=_(
- "Enabling this option will result in the user being signed in if their "
- "forum account was registered using same e-mail address as used on the "
- "social site. Otherwise they will be asked to specify a different e-mail "
- "to continue sign in using social site."
- ),
- )
- def clean(self):
- cleaned_data = super().clean()
- if cleaned_data.get("is_active"):
- if not cleaned_data.get("key"):
- self.add_error("key", _("This field is required."))
- if not cleaned_data.get("secret"):
- self.add_error("secret", _("This field is required."))
- return cleaned_data
|