Languages

Previous versions

1.2
1.1

Source code for openPLM.plmapp.models.user

import os.path
import hashlib

from django.db import models
from django.db.models.signals import post_save
from django.conf import settings
from django.contrib.auth.models import User
from django.core.files.storage import FileSystemStorage
from django.utils.html import conditional_escape as esc
from django.utils.safestring import mark_safe
from django.utils.encoding import iri_to_uri
from django.utils.translation import ugettext_lazy as _


class AvatarStorage(FileSystemStorage):

    def get_valid_name(self, name):
        name = name.encode("utf-8")
        basename = os.path.basename(name)
        base, ext = os.path.splitext(basename)
        md5 = hashlib.md5()
        md5.update(basename)
        md5_value = md5.hexdigest()
        return md5_value + ext


avatarfs = AvatarStorage()

# user stuff
[docs]class UserProfile(models.Model): """ Profile for a :class:`~django.contrib.auth.models.User` """ class Meta: app_label = "plmapp" user = models.OneToOneField(User, unique=True, related_name="profile") #: True if user is an administrator is_administrator = models.BooleanField(default=False, blank=True) #: True if user is a contributor is_contributor = models.BooleanField(default=False, blank=True) #: .. versionadded:: 1.1 True if user can publish a plmobject can_publish = models.BooleanField(default=False, blank=True) #: .. versionadded:: 1.1 True if user has a restricted account restricted = models.BooleanField(default=False, blank=True) #: language language = models.CharField(max_length=5, default="en", choices=settings.LANGUAGES) avatar = models.ImageField(upload_to='avatars', null=True, storage=avatarfs, blank=True) @property def title(self): attrs = (esc(self.user.username), esc(self.user.get_full_name())) return mark_safe(u"""<span class="type">User</span> // <span class="reference"> %s </span> // <span class="name"> %s </span>""" % attrs) @property
[docs] def is_viewer(self): u""" True if user is just a viewer, i.e: not an adminstrator and not a contributor. """ return not (self.is_administrator or self.is_contributor)
def __unicode__(self): return u"UserProfile<%s>" % self.user.username @property def plmobject_url(self): return iri_to_uri("/user/%s/" % self.user.username) @property
[docs] def rank(self): u""" Rank of the user: "administrator", "contributor" or "viewer" """ if self.is_administrator: return _("administrator") elif self.is_contributor: return _("contributor") elif self.restricted: return _("restricted account") else: return _("viewer")
@property
[docs] def attributes(self): u"Attributes to display in `Attributes view`" return ["first_name", "last_name", "email", "date_joined", "last_login", "rank"]
@property def menu_items(self): "menu items to choose a view" if self.restricted: return ["attributes", "parts-doc-cad"] return ["attributes", "history", "parts-doc-cad", "delegation", "groups"]
[docs]def add_profile(sender, instance, created, **kwargs): """ function called when a user is created to add his profile """ if sender == User and created: profile = UserProfile(user=instance) profile.save()
if __name__ == "openPLM.plmapp.models.user": post_save.connect(add_profile, sender=User)