1 from django.conf import settings |
1 from django.conf import settings |
2 from django.contrib import admin |
2 from django.contrib.auth.models import (AbstractUser, User, UserManager, Group, |
3 from django.contrib.auth.models import User, UserManager, Group |
3 BaseUserManager) |
4 from django.db import models |
4 from django.db import models |
5 from django.db.models.signals import post_save |
5 from django.db.models.signals import post_save |
|
6 from django.utils import timezone |
6 from sorl.thumbnail import ImageField |
7 from sorl.thumbnail import ImageField |
7 import datetime |
|
8 |
8 |
9 |
|
10 class Ldt(User): |
|
11 # irigroups = models.ManyToManyField(IriGroup, blank=True) |
|
12 |
|
13 class Meta: |
|
14 verbose_name = 'iri user' |
|
15 verbose_name_plural = 'iri users' |
|
16 |
|
17 def __unicode__(self): |
|
18 return self.username |
|
19 |
|
20 |
9 |
21 class LdtManager(UserManager): |
10 class LdtUserManager(BaseUserManager): |
22 def create_user(self, username, email, password=None): |
|
23 "Creates and saves a User with the given username, e-mail and password." |
|
24 now = datetime.datetime.utcnow() |
|
25 new_user = Ldt(None, username, '', '', email.strip().lower(), 'placeholder', False, True, False, now, now) |
|
26 if password: |
|
27 new_user.set_password(password) |
|
28 else: |
|
29 new_user.set_unusable_password() |
|
30 new_user.save() |
|
31 new_user.groups.add(Group.objects.get(name=settings.PUBLIC_GROUP_NAME)) |
|
32 return new_user |
|
33 |
|
34 |
|
35 class UserProfile (models.Model): |
|
36 user = models.OneToOneField(User) |
|
37 language = models.CharField(max_length=2, default=settings.LANGUAGE_CODE[:2]) |
|
38 image = ImageField(upload_to=settings.MEDIA_ROOT+"thumbnails/users/", default=settings.DEFAULT_USER_ICON, max_length=200) |
|
39 |
11 |
40 @staticmethod |
12 def create_user(self, username, email=None, password=None, **extra_fields): |
41 def create_user_profile(sender, instance, created, **kwargs): |
13 """ |
42 if created: |
14 Creates and saves a User with the given username, email and password. |
43 UserProfile.objects.get_or_create(user=instance) |
15 """ |
44 everyone, _ = Group.objects.get_or_create(name=settings.PUBLIC_GROUP_NAME) |
16 now = timezone.now() |
45 instance.groups.add(everyone) |
17 if not username: |
|
18 raise ValueError('The given username must be set') |
|
19 email = UserManager.normalize_email(email) |
|
20 user = self.model(username=username, email=email, |
|
21 is_staff=False, is_active=True, is_superuser=False, |
|
22 last_login=now, date_joined=now, **extra_fields) |
|
23 |
|
24 user.set_password(password) |
|
25 user.save(using=self._db) |
|
26 everyone, _ = Group.objects.get_or_create(name=settings.PUBLIC_GROUP_NAME) |
|
27 user.groups.add(everyone) |
|
28 return user |
|
29 |
|
30 def create_superuser(self, username, email, password, **extra_fields): |
|
31 u = self.create_user(username, email, password, **extra_fields) |
|
32 u.is_staff = True |
|
33 u.is_active = True |
|
34 u.is_superuser = True |
|
35 u.save(using=self._db) |
|
36 return u |
46 |
37 |
47 class GroupProfile(models.Model): |
38 class GroupProfile(models.Model): |
48 group = models.OneToOneField(Group, primary_key=False, related_name='profile') |
39 group = models.OneToOneField(Group, primary_key=False, related_name='profile') |
49 description = models.TextField() |
40 description = models.TextField() |
50 image = ImageField(upload_to=settings.MEDIA_ROOT+"thumbnails/groups/", default=settings.DEFAULT_GROUP_ICON, max_length=200) |
41 image = ImageField(upload_to=settings.MEDIA_ROOT+"thumbnails/groups/", default=settings.DEFAULT_GROUP_ICON, max_length=200) |
56 profile.group_id = instance.id |
47 profile.group_id = instance.id |
57 profile.save() |
48 profile.save() |
58 admins = User.objects.filter(is_superuser=True) |
49 admins = User.objects.filter(is_superuser=True) |
59 if admins: |
50 if admins: |
60 instance.user_set.add(admins[0]) |
51 instance.user_set.add(admins[0]) |
|
52 |
|
53 class LdtUser(AbstractUser): |
|
54 language = models.CharField(max_length=2, default=settings.LANGUAGE_CODE[:2]) |
|
55 image = ImageField(upload_to=settings.MEDIA_ROOT+"thumbnails/users/", default=settings.DEFAULT_USER_ICON, max_length=200) |
|
56 |
|
57 objects = LdtUserManager() |
|
58 |
61 |
59 |
62 # To keep consistency with User.get_profile() method |
60 # To keep consistency with User.get_profile() method |
63 def get_profile(self): |
61 def get_profile(self): |
64 return self.profile |
62 return self.profile |
65 |
63 |
66 Group.add_to_class("get_profile", get_profile) |
64 Group.add_to_class("get_profile", get_profile) # @UndefinedVariable |
|
65 post_save.connect(GroupProfile.create_group_profile, sender=Group) |
67 |
66 |
68 post_save.connect(GroupProfile.create_group_profile, sender=Group) |
|
69 post_save.connect(UserProfile.create_user_profile, sender=User) |
|
70 |
|
71 User.objects = LdtManager() |
|
72 User.objects.contribute_to_class(User, "objects") |
|
73 |
|
74 admin.site.register(Ldt) |
|