""" ScannerJammer models module """ from django.db import models from django.contrib import auth from django.contrib import admin import json class SJSettingsModel(models.Model): """ ScannerJammer abstract settings model """ settings_text = models.TextField(blank=True) class Meta: abstract = True @property def settings(self): if not self.settings_text: return dict() return json.loads(self.settings_text, parse_float=True, parse_int=True) @settings.setter def settings(self, settings): if isinstance(settings, dict): self.settings_text = json.dumps(settings) @settings.deleter def settings(self): self.settings_text = '{}' class SJUserProfile(SJSettingsModel): """ ScannerJammer user model """ user = models.OneToOneField(auth.models.User) nickname = models.CharField(max_length=32, blank=True) score = models.IntegerField(default=0, blank=True) access = models.IntegerField(default=0, blank=True) bio = models.TextField(blank=True) # Backward compatibility fields username = models.CharField(max_length=32, blank=True) # see User.username password = models.CharField(max_length=32, blank=True) # see User.password (store password hash) joindate = models.DateTimeField(blank=True, verbose_name="Join Date") # see User.date_joined seendate = models.DateTimeField(blank=True, verbose_name="Seen Date") # see User.last_login class Meta: verbose_name = "SJ User Profile" def __unicode__(self): if self.nickname: return "%s (%s)" % (self.username or self.user.username, self.nickname) return "%s" % (self.username or self.user.username) class SJUserProfileAdmin(admin.ModelAdmin): list_display = ( 'user', 'nickname', 'score', 'access', 'bio', 'joindate', 'seendate', ) 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) private = models.BooleanField(default=False) class Meta: verbose_name = "SJ Room" def __unicode__(self): return self.name class SJRoomAdmin(admin.ModelAdmin): list_display = ( 'name', 'private', 'user', 'datetime', ) 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' % (self.user, self.content_type) class SJContentAdmin(admin.ModelAdmin): list_display = ( 'room', 'content_type', 'settings_text', ) 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', ) admin.site.register(SJUserProfile, SJUserProfileAdmin) admin.site.register(SJRoom, SJRoomAdmin) admin.site.register(SJContent, SJContentAdmin) admin.site.register(SJLike, SJLikeAdmin)