src/ldt/ldt/user/models.py
changeset 1191 b6e0b1811723
parent 854 e4be64dd42af
child 1193 cd67b17d257d
equal deleted inserted replaced
1190:129d45eec68c 1191:b6e0b1811723
     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)