67 lines
2.4 KiB
Python
67 lines
2.4 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
from django.db import models
|
|
from django.db.models.signals import post_save, m2m_changed
|
|
from django.dispatch import receiver
|
|
from django.utils.translation import ugettext_lazy as _
|
|
from django.contrib.auth.models import User, Group
|
|
|
|
from greenmine.scrum.models import Project
|
|
|
|
class Profile(models.Model):
|
|
user = models.OneToOneField("auth.User", related_name='profile')
|
|
description = models.TextField(blank=True)
|
|
photo = models.FileField(upload_to="files/msg", max_length=500, null=True,
|
|
blank=True)
|
|
|
|
default_language = models.CharField(max_length=20, null=True, blank=True,
|
|
default=None)
|
|
default_timezone = models.CharField(max_length=20, null=True, blank=True,
|
|
default=None)
|
|
token = models.CharField(max_length=200, unique=True, null=True,
|
|
blank=True, default=None)
|
|
colorize_tags = models.BooleanField(default=False)
|
|
|
|
|
|
class Role(models.Model):
|
|
name = models.CharField(max_length=200)
|
|
slug = models.SlugField(max_length=250, unique=True, blank=True)
|
|
permissions = models.ManyToManyField('auth.Permission',
|
|
verbose_name=_('permissions'), blank=True)
|
|
|
|
def __unicode__(self):
|
|
return unicode(self.name)
|
|
|
|
if not hasattr(Group, 'role'):
|
|
field = models.ForeignKey(Role, blank=False, null=False, related_name='groups')
|
|
field.contribute_to_class(Group, 'role')
|
|
|
|
if not hasattr(Group, 'project'):
|
|
field = models.ForeignKey(Project, blank=False, null=False, related_name='groups')
|
|
field.contribute_to_class(Group, 'project')
|
|
|
|
|
|
@receiver(post_save, sender=User)
|
|
def user_post_save(sender, instance, created, **kwargs):
|
|
"""
|
|
Create void user profile if instance is a new user.
|
|
"""
|
|
if created and not Profile.objects.filter(user=instance).exists():
|
|
Profile.objects.create(user=instance)
|
|
|
|
@receiver(post_save, sender=Role)
|
|
def role_post_save(sender, instance, **kwargs):
|
|
"""
|
|
Recalculate projects groups
|
|
"""
|
|
from greenmine.profile.services import RoleGroupsService
|
|
RoleGroupsService().replicate_role_on_all_projects(instance)
|
|
|
|
@receiver(m2m_changed, sender=Role.permissions.through)
|
|
def role_m2m_changed(sender, instance, **kwargs):
|
|
"""
|
|
Recalculate projects groups
|
|
"""
|
|
from greenmine.profile.services import RoleGroupsService
|
|
RoleGroupsService().replicate_role_on_all_projects(instance)
|