diff -r b458138b8ab6 -r 37baf9d13f32 src/iconolab/models.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/iconolab/models.py Tue May 31 17:46:32 2016 +0200 @@ -0,0 +1,157 @@ +from django.db import models +from django.contrib.auth.models import User + +from django.contrib.contenttypes.fields import GenericForeignKey +from django.contrib.contenttypes.models import ContentType +from reversion import revisions as reversion +from reversion.models import Revision + + +class Tag(models.Model): + label = models.SlugField() + link = models.URLField() + description = models.TextField() + + def __str__(self): + return '%d:%s' % (self.id, self.label) + + +# fonds Ingres - Musée de la Poste +class Collection(models.Model): + name = models.CharField(max_length=50) + description = models.CharField(max_length=255) + + def __str__(self): + return self.name + +# class image_metadata +class Image(models.Model): + name = models.CharField(max_length=200) + media = models.ImageField(upload_to='uploads/', height_field='height', width_field='width') + height = models.IntegerField(null=False, blank=False) + width = models.IntegerField(null=False, blank=False) + mimetype = models.CharField(null=True, blank=True, max_length=1024) + exif = models.TextField(null=True, blank=True) + collection = models.ForeignKey(Collection) + date_created = models.DateTimeField(auto_now_add=True, null=True) + date_modified = models.DateTimeField(auto_now=True, null=True) + + def __str__(self): + return self.name + +# Folders +class Folder(models.Model): + label = models.CharField(max_length=255) + owner = models.ForeignKey(User) + images = models.ManyToManyField(Image) + + def __str__(self): + return label + +@reversion.register() +class Annotation(models.Model): + title = models.CharField(max_length=255) + description = models.TextField(null=True) + fragment = models.TextField() # path string + tags = models.ManyToManyField(Tag) + image = models.ForeignKey(Image, default=0, on_delete=models.CASCADE) + author = models.ForeignKey(User, null=True) + date_created = models.DateTimeField(auto_now_add=True, null=True) + date_modified = models.DateTimeField(auto_now=True, null=True) + + def __str__(self): + return self.title + +# comments + +LINK = 1 +IMAGE = 2 +PDF = 3 + +COMMENT_CHOICES = ( + (LINK, 'link'), + (IMAGE, 'image'), + (PDF, 'pdf') + ) + + +class MetaCategory(models.Model): + collection = models.ForeignKey(Collection) + label = models.CharField(max_length=200) + + def __str__(self): + return self.label + + class Meta: + verbose_name_plural = "Metacategories" + +class Comment(models.Model): + author = models.ForeignKey(User) + created_date = models.DateTimeField(blank=False, null=False, auto_now_add=True) + annotation = models.ForeignKey(Annotation, null=True) # revision de l'utilisateur? + target = models.ForeignKey("self") # + #thread_id #django-contrib-comment #threadedcomment + content = models.TextField(blank=True) + metacategories = models.ManyToManyField(MetaCategory) + + +class CommentAttachement(models.Model): + comment = models.ForeignKey(Comment, on_delete=models.CASCADE, related_name='attachments') + main_annotation = models.ForeignKey(Annotation) + attachment_type = models.IntegerField(choices=COMMENT_CHOICES, default=1) + created_date = models.DateTimeField(auto_now_add=True) + data = models.TextField(blank=False) + + +# Activity & Notification + +class Activity(models.Model): + + NEW_COMMENT = 1 + NEW_REVISION = 2 + NEW_REVISION_COMMENT = 3 + NEW_EXPERT_ANSWER = 4 + NEW_REFERENCE = 5 + EXPERT_CALL = 6 + + ACTIVITY_VERBS =( + (NEW_COMMENT, 'Nouveau commentaire'), + (NEW_REVISION, 'Nouvelle révision'), + (NEW_REVISION_COMMENT, 'Nouveau commentaire de révision'), + (NEW_EXPERT_ANSWER, 'New expert ans') + ) + + verb = models.IntegerField(choices=ACTIVITY_VERBS) + actor = models.ForeignKey(User) + + target_content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) + target_object_id = models.PositiveIntegerField() + target = GenericForeignKey('target_content_type', 'target_object_id') + + action_content_type = models.ForeignKey(ContentType, related_name='activity_action', on_delete=models.CASCADE, null=True, blank=True) + action_object_id = models.PositiveIntegerField(null=True, blank=True) + action_content = GenericForeignKey('action_content_type', 'action_object_id') + + created_date = models.DateTimeField(auto_now_add=True) + + def __str__(self): + return '%s:%s' % (author.name, verbe) + + +class Notification(models.Model): + + UNREAD = 0 + READ = 1 + DELETED = 2 + + STATUS = ( + (READ, 'Lu'), + (UNREAD, 'Non lu'), + (DELETED, 'Effacé') + ) + + activity = models.ForeignKey(Activity) + user = models.ForeignKey(User) + status = models.IntegerField(choices=STATUS, default=UNREAD) + created_date = models.DateTimeField(auto_now_add=True) +