| author | ymh <ymh.work@gmail.com> |
| Wed, 16 Sep 2015 22:18:24 +0200 | |
| changeset 1434 | e0ba7a35e9df |
| parent 1431 | bdefbdf222e7 |
| permissions | -rw-r--r-- |
|
188
74bad93d3cb7
Merge with 50dd5c3e8ab8365982cffc4f411f9f5ba7686176
ymh <ymh.work@gmail.com>
diff
changeset
|
1 |
from django.conf import settings |
| 1369 | 2 |
from django.contrib.auth import models as auth_models |
|
1431
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
3 |
from django.contrib.auth.models import (UserManager, Group, |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
4 |
BaseUserManager, Permission, AbstractBaseUser, PermissionsMixin) |
| 1369 | 5 |
from django.contrib.contenttypes.models import ContentType |
|
1431
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
6 |
from django.core import validators |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
7 |
from django.core.mail import send_mail |
| 169 | 8 |
from django.db import models |
|
1431
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
9 |
from django.db.models.signals import post_migrate |
|
174
43748b6b0678
Add a default profile instead of get_or_create_profile
verrierj
parents:
172
diff
changeset
|
10 |
from django.db.models.signals import post_save |
| 1191 | 11 |
from django.utils import timezone |
|
1431
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
12 |
from django.utils.translation import ugettext_lazy as _ |
|
314
1a8620e5ebb0
Add memcached and sorl thumbnail pour thumbnail management. Set default pict on content, project and user.
cavaliet
parents:
276
diff
changeset
|
13 |
from sorl.thumbnail import ImageField |
| 1369 | 14 |
|
|
1431
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
15 |
from ldt.user import MAX_USERNAME_LENGTH, MAX_FIRST_NAME_LENGTH, MAX_LAST_NAME_LENGTH |
|
111
4535dafa6007
improve releasing of resources when indexing + convert line endings to unix
ymh <ymh.work@gmail.com>
parents:
63
diff
changeset
|
16 |
|
|
1383
eb55bae28748
remove ref to ldtplatform in platform
ymh <ymh.work@gmail.com>
parents:
1369
diff
changeset
|
17 |
class LdtUserManager(BaseUserManager): |
|
111
4535dafa6007
improve releasing of resources when indexing + convert line endings to unix
ymh <ymh.work@gmail.com>
parents:
63
diff
changeset
|
18 |
|
| 1191 | 19 |
def create_user(self, username, email=None, password=None, **extra_fields): |
20 |
""" |
|
21 |
Creates and saves a User with the given username, email and password. |
|
22 |
""" |
|
23 |
now = timezone.now() |
|
24 |
if not username: |
|
25 |
raise ValueError('The given username must be set') |
|
26 |
email = UserManager.normalize_email(email) |
|
27 |
user = self.model(username=username, email=email, |
|
28 |
is_staff=False, is_active=True, is_superuser=False, |
|
29 |
last_login=now, date_joined=now, **extra_fields) |
|
|
111
4535dafa6007
improve releasing of resources when indexing + convert line endings to unix
ymh <ymh.work@gmail.com>
parents:
63
diff
changeset
|
30 |
|
| 1191 | 31 |
user.set_password(password) |
32 |
user.save(using=self._db) |
|
33 |
everyone, _ = Group.objects.get_or_create(name=settings.PUBLIC_GROUP_NAME) |
|
34 |
user.groups.add(everyone) |
|
|
1434
e0ba7a35e9df
ensure that created users are put in everyone group + new version
ymh <ymh.work@gmail.com>
parents:
1431
diff
changeset
|
35 |
user.save(using=self._db) |
| 1191 | 36 |
return user |
37 |
||
38 |
def create_superuser(self, username, email, password, **extra_fields): |
|
39 |
u = self.create_user(username, email, password, **extra_fields) |
|
40 |
u.is_staff = True |
|
41 |
u.is_active = True |
|
42 |
u.is_superuser = True |
|
43 |
u.save(using=self._db) |
|
44 |
return u |
|
|
276
ee792e43b36a
Replace is_regular field in userprofile by django permission
verrierj
parents:
259
diff
changeset
|
45 |
|
| 1369 | 46 |
# This method was added to stabilize migrations |
47 |
def get_group_image_upload_to(instance, filename): |
|
48 |
return settings.MEDIA_ROOT+"thumbnails/groups/" |
|
49 |
||
50 |
def get_group_image_default(): |
|
51 |
return settings.DEFAULT_GROUP_ICON |
|
52 |
||
| 325 | 53 |
class GroupProfile(models.Model): |
54 |
group = models.OneToOneField(Group, primary_key=False, related_name='profile') |
|
55 |
description = models.TextField() |
|
| 1369 | 56 |
image = ImageField(upload_to=get_group_image_upload_to, default=get_group_image_default, max_length=200) |
| 325 | 57 |
|
58 |
@staticmethod |
|
59 |
def create_group_profile(sender, instance, created, **kwargs): |
|
60 |
if created: |
|
61 |
profile = GroupProfile() |
|
62 |
profile.group_id = instance.id |
|
63 |
profile.save() |
|
| 1193 | 64 |
admins = LdtUser.objects.filter(is_superuser=True) |
|
452
8e9494006e7b
segment abstracts + content images can be retrieved directly from search results page
verrierj
parents:
406
diff
changeset
|
65 |
if admins: |
| 1193 | 66 |
admin_user = admins[0] |
67 |
admin_user.groups.add(instance) |
|
| 1369 | 68 |
admin_user.save() |
69 |
||
70 |
def get_ldtuser_image_default(): |
|
71 |
return settings.DEFAULT_USER_ICON |
|
72 |
||
73 |
def get_ldtuser_language_default(): |
|
74 |
if hasattr(settings, 'LANGUAGE_CODE'): |
|
75 |
return settings.LANGUAGE_CODE[:2] |
|
76 |
else : |
|
77 |
return 'en' |
|
| 1191 | 78 |
|
|
1431
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
79 |
|
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
80 |
class LdtUser(AbstractBaseUser, PermissionsMixin): |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
81 |
""" |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
82 |
An abstract base class implementing a fully featured User model with |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
83 |
admin-compliant permissions. |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
84 |
Username and password are required. Other fields are optional. |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
85 |
""" |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
86 |
username = models.CharField( |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
87 |
_('username'), |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
88 |
max_length=MAX_USERNAME_LENGTH, |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
89 |
unique=True, |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
90 |
help_text=_('Required. %d characters or fewer. Letters, digits and @/./+/-/_ only.' % MAX_USERNAME_LENGTH), |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
91 |
validators=[ |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
92 |
validators.RegexValidator( |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
93 |
r'^[\w.@+-]+$', |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
94 |
_('Enter a valid username. This value may contain only ' |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
95 |
'letters, numbers ' 'and @/./+/-/_ characters.') |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
96 |
), |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
97 |
], |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
98 |
error_messages={ |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
99 |
'unique': _("A user with that username already exists."), |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
100 |
}, |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
101 |
) |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
102 |
first_name = models.CharField(_('first name'), max_length=MAX_FIRST_NAME_LENGTH, blank=True) |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
103 |
last_name = models.CharField(_('last name'), max_length=MAX_LAST_NAME_LENGTH, blank=True) |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
104 |
external_id = models.CharField(_('external id'), max_length=MAX_USERNAME_LENGTH, blank=True) |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
105 |
email = models.EmailField(_('email address'), blank=True) |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
106 |
is_staff = models.BooleanField( |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
107 |
_('staff status'), |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
108 |
default=False, |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
109 |
help_text=_('Designates whether the user can log into this admin site.'), |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
110 |
) |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
111 |
is_active = models.BooleanField( |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
112 |
_('active'), |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
113 |
default=True, |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
114 |
help_text=_( |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
115 |
'Designates whether this user should be treated as active. ' |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
116 |
'Unselect this instead of deleting accounts.' |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
117 |
), |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
118 |
) |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
119 |
date_joined = models.DateTimeField(_('date joined'), default=timezone.now) |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
120 |
|
| 1369 | 121 |
language = models.CharField(max_length=2, default=get_ldtuser_language_default) |
122 |
image = ImageField(upload_to="thumbnails/users/", default=get_ldtuser_image_default, max_length=200) |
|
|
1431
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
123 |
|
| 1191 | 124 |
objects = LdtUserManager() |
|
1431
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
125 |
|
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
126 |
USERNAME_FIELD = 'username' |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
127 |
REQUIRED_FIELDS = ['email'] |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
128 |
|
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
129 |
class Meta: |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
130 |
verbose_name = _('user') |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
131 |
verbose_name_plural = _('users') |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
132 |
|
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
133 |
def get_full_name(self): |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
134 |
""" |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
135 |
Returns the first_name plus the last_name, with a space in between. |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
136 |
""" |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
137 |
full_name = '%s %s' % (self.first_name, self.last_name) |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
138 |
return full_name.strip() |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
139 |
|
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
140 |
def get_short_name(self): |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
141 |
"Returns the short name for the user." |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
142 |
return self.first_name |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
143 |
|
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
144 |
def email_user(self, subject, message, from_email=None, **kwargs): |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
145 |
""" |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
146 |
Sends an email to this User. |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
147 |
""" |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
148 |
send_mail(subject, message, from_email, [self.email], **kwargs) |
|
bdefbdf222e7
internalize user model + resize fields (username, firstname, lastname) and add externalid
ymh <ymh.work@gmail.com>
parents:
1385
diff
changeset
|
149 |
|
| 1369 | 150 |
|
|
342
17d615b49a91
Extend image fields size to 200 characters + minor bugs
verrierj
parents:
330
diff
changeset
|
151 |
def get_profile(self): |
|
17d615b49a91
Extend image fields size to 200 characters + minor bugs
verrierj
parents:
330
diff
changeset
|
152 |
return self.profile |
|
17d615b49a91
Extend image fields size to 200 characters + minor bugs
verrierj
parents:
330
diff
changeset
|
153 |
|
| 1191 | 154 |
Group.add_to_class("get_profile", get_profile) # @UndefinedVariable |
| 325 | 155 |
post_save.connect(GroupProfile.create_group_profile, sender=Group) |
|
111
4535dafa6007
improve releasing of resources when indexing + convert line endings to unix
ymh <ymh.work@gmail.com>
parents:
63
diff
changeset
|
156 |
|
| 1369 | 157 |
|
158 |
def add_group_permissions(sender, **kwargs): |
|
159 |
ct = ContentType.objects.get(app_label='auth', model='group') |
|
160 |
Permission.objects.get_or_create(codename='is_owner_group', name='Can add/delete admins to the group',content_type=ct) |
|
161 |
||
162 |
post_migrate.connect(add_group_permissions, sender=auth_models) |
|
163 |