diff --git a/july/models.py b/july/models.py index 219ace7..d7833f7 100644 --- a/july/models.py +++ b/july/models.py @@ -42,6 +42,25 @@ def add_auth_id(self, auth_str): provider, uid = auth_str.split(':') UserSocialAuth.create_social_auth(self, uid, provider) + def get_provider(self, provider): + """Return the uid of the provider or None if not set.""" + try: + return self.social_auth.filter(provider=provider).get() + except UserSocialAuth.DoesNotExist: + return None + + @property + def gittip(self): + return self.get_provider('gittip') + + @property + def twitter(self): + return self.get_provider('twitter') + + @property + def github(self): + return self.get_provider('github') + @classmethod def get_by_auth_id(cls, auth_str): """ diff --git a/july/people/forms.py b/july/people/forms.py index c44570c..d4552ad 100644 --- a/july/people/forms.py +++ b/july/people/forms.py @@ -81,12 +81,16 @@ class EditUserForm(forms.Form): 'data-bind':'typeahead: $data.filterTeam' })) + gittip = forms.CharField( + label=ugettext_lazy("Gittip Username"), required=False) + email = forms.EmailField( label=ugettext_lazy("Add Email Address"), required=False) def __init__(self, *args, **kwargs): self.user = kwargs.pop('user', None) self.emails = set([]) + self._gittip = None super(EditUserForm, self).__init__(*args, **kwargs) if self.user: self.fields['first_name'].initial=self.user.first_name @@ -100,12 +104,15 @@ def __init__(self, *args, **kwargs): # initialize the emails for auth in self.user.social_auth.filter(provider="email"): self.emails.add(auth.uid) + self._gittip = self.user.get_provider("gittip") + if self._gittip: + self.fields['gittip'].initial = self._gittip.uid def clean_location(self): location = self.data.get('location', '') try: l = Location.objects.get(slug=slugify(location)) - except Location.DoesNotExist as ex: + except Location.DoesNotExist: l = Location.objects.create(name=location, slug=slugify(location), total=0) return l @@ -117,6 +124,25 @@ def clean_team(self): t = Team.objects.create(slug=slugify(team), name=team, total=0) return t + def clean_gittip(self): + uid = self.cleaned_data['gittip'] + if not uid: + return None + if self._gittip is not None: + self._gittip.uid = uid + self._gittip.save() + return uid + else: + try: + self.user.add_auth_id('gittip:%s' % uid) + except: + error_msg = ugettext_lazy( + "This gittip username is already in use, if this is not" + " right please email help@julython.org" + ) + raise forms.ValidationError(error_msg) + return uid + def clean_email(self): email = self.cleaned_data['email'] if not email: diff --git a/july/templates/july/user_detail.html b/july/templates/july/user_detail.html index 0c55c5f..df1d737 100644 --- a/july/templates/july/user_detail.html +++ b/july/templates/july/user_detail.html @@ -16,7 +16,7 @@

{{ profile }} {% if profile.twitter %} - + {% endif %} @@ -26,7 +26,7 @@

{{ profile }}

{% if profile.description %}{{ profile.description }}{% else %}{% trans "Python Hacker" %}{% endif %}