Improving login experience
[oweals/karmaworld.git] / karmaworld / apps / users / models.py
1 #!/usr/bin/env python
2 # -*- coding:utf8 -*-
3 # Copyright (C) 2013  FinalsClub Foundation
4 import random
5 from allauth.account.signals import user_logged_in
6 from django.contrib.auth.models import User
7 from django.core.exceptions import ObjectDoesNotExist
8 from django.db.models.signals import post_save, pre_save
9 from django.dispatch import receiver
10 from django.db import models
11 from karmaworld.apps.courses.models import School
12
13
14 class UserProfile(models.Model):
15     user      = models.OneToOneField(User)
16
17     school    = models.ForeignKey(School, blank=True, null=True)
18
19     karma     = models.IntegerField(default=0)
20
21     def __unicode__(self):
22         return self.user.__unicode__()
23
24 def user_display_name(user):
25     """Return the best way to display a user's
26     name to them on the site."""
27     if user.first_name or user.last_name:
28         return user.first_name + ' ' + user.last_name
29     else:
30         return user.username
31
32
33 @receiver(pre_save, sender=User, weak=True)
34 def assign_username(sender, instance, **kwargs):
35     # If a user does not have a username, they need
36     # one before we save to the database
37     if not instance.username:
38         if instance.email:
39             try:
40                 # See if any other users have this email address
41                 others = User.objects.get(email=instance.email)
42             except ObjectDoesNotExist:
43                 instance.username = instance.email
44             else:
45                 instance.username = 'user' + str(random.randint(10000, 100000))
46         else:
47             instance.username = 'user' + str(random.randint(10000, 100000))
48
49
50 @receiver(post_save, sender=User, weak=True)
51 def create_user_profile(sender, instance, created, **kwargs):
52     if created:
53         UserProfile.objects.create(user=instance)
54