3 # Copyright (C) 2013 FinalsClub Foundation
6 from allauth.account.signals import user_logged_in, user_signed_up, email_confirmed, email_changed, email_added
7 from allauth.socialaccount.signals import pre_social_login
8 from django.contrib.auth.models import User
9 from django.core.exceptions import ObjectDoesNotExist
10 from django.db.models.signals import post_save, pre_save
11 from django.dispatch import receiver
12 from django.db import models, DatabaseError
13 from django.middleware.transaction import transaction
14 from karmaworld.apps.courses.models import School
16 logger = logging.getLogger(__name__)
18 class UserProfile(models.Model):
19 user = models.OneToOneField(User)
21 school = models.ForeignKey(School, blank=True, null=True)
23 karma = models.IntegerField(default=0)
25 def __unicode__(self):
26 return self.user.__unicode__()
28 def user_display_name(user):
29 """Return the best way to display a user's
30 name to them on the site."""
31 if hasattr(user, 'first_name') and user.first_name and \
32 hasattr(user, 'last_name') and user.last_name:
33 return user.first_name + ' ' + user.last_name
34 elif hasattr(user, 'email') and user.email:
39 @receiver(post_save, sender=User, weak=True)
40 def create_user_profile(sender, instance, created, **kwargs):
42 with transaction.commit_on_success():
44 UserProfile.objects.create(user=instance)
46 logger.warn("Could not create UserProfile for user {u}. This is okay if running syncdb.".format(u=instance))