""" ScannerJammer models module """ from django.db import models from django.contrib import auth from django.contrib import admin from datetime import datetime import json class SJSettingsModel(models.Model): """ ScannerJammer abstract settings model """ settings_text = models.TextField(blank=True, default='{}') settings_update = models.DateTimeField(blank=True, default=datetime.now()) class Meta: abstract = True @property def settings(self): if not self.settings_text: return dict() return json.loads(self.settings_text) @settings.setter def settings(self, settings): if isinstance(settings, dict): self.settings_text = json.dumps(settings) self.settings_update = datetime.now() @settings.deleter def settings(self): self.settings_text = '{}' self.settings_update = datetime.now() class SJUserProfile(SJSettingsModel): """ ScannerJammer user model """ user = models.OneToOneField(auth.models.User) nickname = models.CharField(max_length=32, blank=True, default='') score = models.IntegerField(default=0, blank=True) access = models.IntegerField(default=0, blank=True) bio = models.TextField(blank=True) lastseen_chat = models.DateTimeField(blank=True) lastseen_webcam = models.DateTimeField(blank=True) class Meta: verbose_name = "SJ User Profile" def __unicode__(self): return "%s (%s)" % (self.user.username, self.nickname) class SJUserProfileAdmin(admin.ModelAdmin): list_display = ( 'user', 'nickname', 'score', 'access', 'bio', 'lastseen_chat', 'lastseen_webcam', 'settings_text', ) class SJUserActivity(models.Model): """ ScannerJammer abstract user activity model """ user = models.ForeignKey(auth.models.User) datetime = models.DateTimeField(blank=True) class Meta: abstract = True class SJRoom(SJUserActivity, SJSettingsModel): """ ScannerJammer room model """ name = models.CharField(max_length=32) users = models.ManyToManyField(auth.models.User, related_name='+', blank=True, null=True) private = models.BooleanField(default=False) class Meta: verbose_name = "SJ Room" def __unicode__(self): return self.name class SJRoomAdmin(admin.ModelAdmin): list_display = ( 'name', 'user', 'private', 'datetime', ) list_filter = ( 'user', 'datetime', 'private', ) class SJContent(SJUserActivity, SJSettingsModel): """ ScannerJammer model to encapsulate site content """ CONTENT_TYPE = ( (u'url', u'URL'), (u'html', u'HTML'), (u'text', u'Plane Text'), (u'image', u'Image'), (u'video', u'Video'), (u'audio', u'Audio'), (u'background', u'Background'), ) room = models.ForeignKey(SJRoom) content_type = models.CharField(max_length=32, choices=CONTENT_TYPE) class Meta: verbose_name = "SJ Content" def __unicode__(self): return '%s\'s %s %s' % (self.user, self.content_type, self.datetime or '') class SJContentAdmin(admin.ModelAdmin): list_display = ( 'room', 'user', 'content_type', 'settings_text', ) list_filter = ( 'room', 'user', 'datetime', 'content_type', ) class SJLike(SJUserActivity): """ ScannerJammer like model """ content = models.ForeignKey(SJContent) class Meta: verbose_name = "SJ Like" class SJLikeAdmin(admin.ModelAdmin): list_display = ( 'user', 'datetime', 'content', ) list_filter = ( 'user', 'datetime', 'content__content_type', ) class SJSearch(SJUserActivity, SJSettingsModel): """ Scannerjammer search model """ class Meta: verbose_name = "SJ Search" class SJSearchAdmin(admin.ModelAdmin): list_display = ( 'user', 'datetime', 'settings_text', ) list_filter = ( 'user', 'datetime', ) admin.site.register(SJUserProfile, SJUserProfileAdmin) admin.site.register(SJRoom, SJRoomAdmin) admin.site.register(SJContent, SJContentAdmin) admin.site.register(SJLike, SJLikeAdmin) admin.site.register(SJSearch, SJSearchAdmin)