cablegates/pandora/annotaion/models.py

96 lines
2.8 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
# vi:si:et:sw=4:sts=4:ts=4
from __future__ import division, with_statement
from django.db import models
from django.contrib.auth.models import User
2010-12-28 14:04:28 +00:00
import utils
2010-11-28 16:03:23 +00:00
class Layer(models.Model):
2011-01-01 11:44:42 +00:00
class Meta:
ordering = ('position', )
2011-01-18 09:54:14 +00:00
enabled = models.BooleanField(default=True)
name = models.CharField(null=True, max_length=255, unique=True)
title = models.CharField(null=True, max_length=255)
2011-01-18 09:54:14 +00:00
#text, string, string from list(fixme), date, place, person, pingback,
#What about: smart layers? for date, place, person
type = models.CharField(null=True, max_length=255)
2011-01-18 09:54:14 +00:00
#can this be changed per user?
position = models.IntegerField(default=0)
2011-01-18 09:54:14 +00:00
overlap = models.BooleanField(default=True)
overlay = models.BooleanField(default=True)
2011-01-01 11:44:42 +00:00
public = models.BooleanField(default=True) #false=users only see there own bins
2011-01-18 09:54:14 +00:00
#find/sort integration
find = models.BooleanField(default=True) #true part of find all
2011-01-01 11:44:42 +00:00
#words / item duration(wpm), total words, cuts per minute, cuts, number of annotations, number of annotations/duration
sort = models.CharField(null=True, max_length=255)
def properties(self):
p = {}
if self.find:
p[self.name] = {'type': 'bin', 'find': True}
if self.sort:
print 'FIXME: need to add sort stuff'
return p
2010-11-28 16:03:23 +00:00
def json(self):
return {'id': self.name, 'title': self.title, 'type': self.type}
2010-11-28 16:31:53 +00:00
def __unicode__(self):
return self.title
2011-01-01 11:44:42 +00:00
2010-11-28 16:03:23 +00:00
class Annotation(models.Model):
2011-01-01 11:44:42 +00:00
#FIXME: here having a item,start index would be good
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
user = models.ForeignKey(User)
2011-01-06 03:11:00 +00:00
item = models.ForeignKey('item.Item', related_name='annotations')
#seconds
start = models.FloatField(default=-1)
2011-01-18 09:54:14 +00:00
end = models.FloatField(default=-1)
2010-12-28 14:04:28 +00:00
layer = models.ForeignKey(Layer)
value = models.TextField()
def editable(self, user):
if user.is_authenticated():
2011-01-21 09:31:49 +00:00
if user.is_staff or \
self.user == user or \
user.groups.filter(id__in=self.groups.all()).count() > 0:
return True
return False
2010-12-28 14:04:28 +00:00
def html(self):
if self.layer.type == 'string':
return utils.html_parser(self.value)
else:
return self.value
2011-01-18 09:54:14 +00:00
def get_id(self):
return ox.to32(self.id)
2010-12-28 14:04:28 +00:00
def json(self):
return {
2011-01-18 09:54:14 +00:00
'id': self.get_id(),
2010-12-28 14:04:28 +00:00
'user': self.user.username,
'start': self.start,
2011-01-18 09:54:14 +00:00
'end': self.end,
2010-12-28 14:04:28 +00:00
'value': self.value,
'value_html': self.html(),
'layer': self.layer.name
}
2010-11-28 16:31:53 +00:00
def __unicode__(self):
2011-01-18 09:54:14 +00:00
return u"%s/%s-%s" %(self.item, self.start, self.end)