src/cm/models.py
changeset 72 b0c777412d0a
parent 38 be1807d390d4
child 103 61fd17f9ab78
equal deleted inserted replaced
71:a865a5d0809a 72:b0c777412d0a
    20 from django.db import models
    20 from django.db import models
    21 from django.utils.translation import ugettext as _, ugettext_lazy, ugettext_noop
    21 from django.utils.translation import ugettext as _, ugettext_lazy, ugettext_noop
    22 from tagging.fields import TagField
    22 from tagging.fields import TagField
    23 import pickle
    23 import pickle
    24 from django.db import connection
    24 from django.db import connection
    25 
    25 from datetime import datetime
    26 
       
    27 
    26 
    28 class TextManager(Manager):
    27 class TextManager(Manager):
    29     def create_text(self, title, format, content, note, name, email, tags, user=None, state='approved', **kwargs):
    28     def create_text(self, title, format, content, note, name, email, tags, user=None, state='approved', **kwargs):
    30         text = self.create(name=name, email=email, user=user, state=state)
    29         text = self.create(name=name, email=email, user=user, state=state)
    31         text_version = TextVersion.objects.create(title=title, format=format, content=content, text=text, note=note, name=name, email=email, tags=tags, user=user)
    30         text_version = TextVersion.objects.create(title=title, format=format, content=content, text=text, note=note, name=name, email=email, tags=tags, user=user)
   161                         old_id = c.id
   160                         old_id = c.id
   162                         old_comment_set.remove(c)
   161                         old_comment_set.remove(c)
   163                         reply_to = None
   162                         reply_to = None
   164                         if c.reply_to:                            
   163                         if c.reply_to:                            
   165                             reply_to = old_comment_map[c.reply_to.id]  
   164                             reply_to = old_comment_map[c.reply_to.id]  
   166                         c2 = Comment.objects.duplicate(c, duplicate_text_version, reply_to)
   165                         c2 = Comment.objects.duplicate(c, duplicate_text_version, reply_to, keep_dates=True)
   167                         old_comment_map[old_id] = c2
   166                         old_comment_map[old_id] = c2
   168                         break
   167                         break
   169                  
   168                  
   170         return duplicate_text_version
   169         return duplicate_text_version
   171         
   170         
   235         elif self.content != new_content or new_format != self.format:
   234         elif self.content != new_content or new_format != self.format:
   236             comments = self.get_comments() ;
   235             comments = self.get_comments() ;
   237             tomodify_comments, toremove_comments = compute_new_comment_positions(self.content, self.format, new_content, new_format, comments)
   236             tomodify_comments, toremove_comments = compute_new_comment_positions(self.content, self.format, new_content, new_format, comments)
   238             #print "tomodify_comments",len(tomodify_comments)
   237             #print "tomodify_comments",len(tomodify_comments)
   239             #print "toremove_comments",len(toremove_comments)
   238             #print "toremove_comments",len(toremove_comments)
   240             [comment.save() for comment in tomodify_comments]
   239             [comment.save(keep_dates=True) for comment in tomodify_comments]
   241             [comment.delete() for comment in toremove_comments]
   240             [comment.delete() for comment in toremove_comments]
   242         self.title = new_title
   241         self.title = new_title
   243         if new_tags:
   242         if new_tags:
   244             self.tags = new_tags
   243             self.tags = new_tags
   245         if new_note:
   244         if new_note:
   248         self.format = new_format
   247         self.format = new_format
   249         self.save()
   248         self.save()
   250         
   249         
   251 class CommentManager(Manager):
   250 class CommentManager(Manager):
   252     
   251     
   253     def duplicate(self, comment, text_version, reply_to=None):
   252     def duplicate(self, comment, text_version, reply_to=None, keep_dates=False):
   254         comment.id = None
   253         comment.id = None
   255         comment.text_version = text_version
   254         comment.text_version = text_version
   256         if reply_to:
   255         if reply_to:
   257             comment.reply_to = reply_to
   256             comment.reply_to = reply_to
   258         self.update_keys(comment)
   257         self.update_keys(comment)
   259         comment.save()
   258         comment.save(keep_dates=keep_dates)
   260         return comment
   259         return comment
   261     
   260     
   262 class Comment(PermanentModel, AuthorModel):
   261 class Comment(PermanentModel, AuthorModel):
   263     modified = models.DateTimeField(auto_now=True)
   262     modified = models.DateTimeField()
   264     created = models.DateTimeField(auto_now_add=True)
   263     created = models.DateTimeField()
   265 
   264 
   266     text_version = models.ForeignKey("TextVersion")
   265     text_version = models.ForeignKey("TextVersion")
   267 
   266 
   268     # comment_set will be replies
   267     # comment_set will be replies
   269     reply_to = models.ForeignKey("Comment", null=True, blank=True)
   268     reply_to = models.ForeignKey("Comment", null=True, blank=True)
   281     start_offset = models.IntegerField(null=True, blank=True)
   280     start_offset = models.IntegerField(null=True, blank=True)
   282     end_offset = models.IntegerField(null=True, blank=True)
   281     end_offset = models.IntegerField(null=True, blank=True)
   283 
   282 
   284     objects = CommentManager()
   283     objects = CommentManager()
   285     
   284     
       
   285     def save(self, force_insert=False, force_update=False, keep_dates=False):
       
   286         if not keep_dates:
       
   287             now = datetime.now()
       
   288             if not self.id: 
       
   289                 self.created = now  
       
   290             self.modified = now 
       
   291         super(PermanentModel, self).save() 
       
   292             
   286     def __unicode__(self):
   293     def __unicode__(self):
   287         return '<%d> %s' % (self.id, self.title)    
   294         return '<%d> %s' % (self.id, self.title)    
   288         
   295         
   289     def is_reply(self):
   296     def is_reply(self):
   290         return self.reply_to != None
   297         return self.reply_to != None