115 lines
3.3 KiB
Python
115 lines
3.3 KiB
Python
from __future__ import unicode_literals
|
|
|
|
from django.conf import settings
|
|
from django.contrib.contenttypes.fields import GenericForeignKey
|
|
from django.contrib.contenttypes.models import ContentType
|
|
from django.db import models
|
|
from django.utils.encoding import force_text, python_2_unicode_compatible
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
from actstream.models import Action
|
|
|
|
from .classes import EventType
|
|
from .managers import (
|
|
EventSubscriptionManager, ObjectEventSubscriptionManager
|
|
)
|
|
|
|
|
|
@python_2_unicode_compatible
|
|
class StoredEventType(models.Model):
|
|
name = models.CharField(
|
|
max_length=64, unique=True, verbose_name=_('Name')
|
|
)
|
|
|
|
class Meta:
|
|
verbose_name = _('Stored event type')
|
|
verbose_name_plural = _('Stored event types')
|
|
|
|
def __str__(self):
|
|
return force_text(self.get_class())
|
|
|
|
def get_class(self):
|
|
return EventType.get(name=self.name)
|
|
|
|
@property
|
|
def label(self):
|
|
return self.get_class().label
|
|
|
|
@property
|
|
def namespace(self):
|
|
return self.get_class().namespace
|
|
|
|
|
|
@python_2_unicode_compatible
|
|
class EventSubscription(models.Model):
|
|
user = models.ForeignKey(
|
|
db_index=True, on_delete=models.CASCADE,
|
|
related_name='event_subscriptions', to=settings.AUTH_USER_MODEL,
|
|
verbose_name=_('User')
|
|
)
|
|
stored_event_type = models.ForeignKey(
|
|
on_delete=models.CASCADE, related_name='event_subscriptions',
|
|
to=StoredEventType, verbose_name=_('Event type')
|
|
)
|
|
|
|
objects = EventSubscriptionManager()
|
|
|
|
class Meta:
|
|
verbose_name = _('Event subscription')
|
|
verbose_name_plural = _('Event subscriptions')
|
|
|
|
def __str__(self):
|
|
return force_text(self.stored_event_type)
|
|
|
|
|
|
@python_2_unicode_compatible
|
|
class Notification(models.Model):
|
|
user = models.ForeignKey(
|
|
db_index=True, on_delete=models.CASCADE,
|
|
related_name='notifications', to=settings.AUTH_USER_MODEL,
|
|
verbose_name=_('User')
|
|
)
|
|
action = models.ForeignKey(
|
|
on_delete=models.CASCADE, related_name='notifications', to=Action,
|
|
verbose_name=_('Action')
|
|
)
|
|
read = models.BooleanField(default=False, verbose_name=_('Read'))
|
|
|
|
class Meta:
|
|
ordering = ('-action__timestamp',)
|
|
verbose_name = _('Notification')
|
|
verbose_name_plural = _('Notifications')
|
|
|
|
def __str__(self):
|
|
return force_text(self.action)
|
|
|
|
|
|
@python_2_unicode_compatible
|
|
class ObjectEventSubscription(models.Model):
|
|
content_type = models.ForeignKey(
|
|
on_delete=models.CASCADE, to=ContentType,
|
|
)
|
|
object_id = models.PositiveIntegerField()
|
|
content_object = GenericForeignKey(
|
|
ct_field='content_type',
|
|
fk_field='object_id',
|
|
)
|
|
user = models.ForeignKey(
|
|
db_index=True, on_delete=models.CASCADE,
|
|
related_name='object_subscriptions', to=settings.AUTH_USER_MODEL,
|
|
verbose_name=_('User')
|
|
)
|
|
stored_event_type = models.ForeignKey(
|
|
on_delete=models.CASCADE, related_name='object_subscriptions',
|
|
to=StoredEventType, verbose_name=_('Event type')
|
|
)
|
|
|
|
objects = ObjectEventSubscriptionManager()
|
|
|
|
class Meta:
|
|
verbose_name = _('Object event subscription')
|
|
verbose_name_plural = _('Object event subscriptions')
|
|
|
|
def __str__(self):
|
|
return force_text(self.stored_event_type)
|