src/cm/models.py
changeset 103 61fd17f9ab78
parent 72 b0c777412d0a
child 130 f257ad33bed5
equal deleted inserted replaced
78:dda94db1149a 103:61fd17f9ab78
   121     def revert_to_version(self, v_id):
   121     def revert_to_version(self, v_id):
   122         text_version = self.get_version(int(v_id))
   122         text_version = self.get_version(int(v_id))
   123         new_text_version = TextVersion.objects.duplicate(text_version, True)
   123         new_text_version = TextVersion.objects.duplicate(text_version, True)
   124         return new_text_version
   124         return new_text_version
   125         
   125         
   126     def edit(self, new_title, new_format, new_content, new_tags=None, new_note=None, keep_comments=True, new_version=True):
   126     def edit(self, new_title, new_format, new_content, new_tags=None, new_note=None, keep_comments=True, cancel_modified_scopes=True, new_version=True):
   127         text_version = self.get_latest_version()
   127         text_version = self.get_latest_version()
   128             
   128             
   129         if new_version:        
   129         if new_version:        
   130             text_version = TextVersion.objects.duplicate(text_version, keep_comments)
   130             text_version = TextVersion.objects.duplicate(text_version, keep_comments)
   131         text_version.edit(new_title, new_format, new_content, new_tags, new_note, keep_comments)        
   131         text_version.edit(new_title, new_format, new_content, new_tags, new_note, keep_comments, cancel_modified_scopes)        
   132         return text_version 
   132         return text_version 
   133         
   133         
   134     def __unicode__(self):
   134     def __unicode__(self):
   135         return self.title    
   135         return self.title    
   136 
   136 
   184     text = models.ForeignKey("Text")
   184     text = models.ForeignKey("Text")
   185 
   185 
   186     objects = TextVersionManager()
   186     objects = TextVersionManager()
   187     
   187     
   188     def get_content(self, format='html'):
   188     def get_content(self, format='html'):
   189         converted_content = pandoc_convert(self.content, self.format, format)
   189         return pandoc_convert(self.content, self.format, format)
   190         return converted_content 
       
   191 
   190 
   192 #    def _get_comments(self, user = None, filter_reply = 0):        
   191 #    def _get_comments(self, user = None, filter_reply = 0):        
   193 #        """
   192 #        """
   194 #        get comments viewable by this user (user = None or user = AnonymousUser => everyone)
   193 #        get comments viewable by this user (user = None or user = AnonymousUser => everyone)
   195 #        filter_reply = 0: comments and replies
   194 #        filter_reply = 0: comments and replies
   226         return self.comment_set.filter(~Q(reply_to == None), Q(deleted=False))
   225         return self.comment_set.filter(~Q(reply_to == None), Q(deleted=False))
   227     
   226     
   228     def __unicode__(self):
   227     def __unicode__(self):
   229         return '<%d> %s' % (self.id, self.title)    
   228         return '<%d> %s' % (self.id, self.title)    
   230 
   229 
   231     def edit(self, new_title, new_format, new_content, new_tags=None, new_note=None, keep_comments=True): # TODO : tags
   230     def edit(self, new_title, new_format, new_content, new_tags=None, new_note=None, keep_comments=True, cancel_modified_scopes=True): 
   232         if not keep_comments :
   231         if not keep_comments :
   233             self.comment_set.all().delete()
   232             self.comment_set.all().delete()
   234         elif self.content != new_content or new_format != self.format:
   233         elif self.content != new_content or new_format != self.format:
   235             comments = self.get_comments() ;
   234             comments = self.get_comments() ;
   236             tomodify_comments, toremove_comments = compute_new_comment_positions(self.content, self.format, new_content, new_format, comments)
   235             tomodify_comments, toremove_comments = compute_new_comment_positions(self.content, self.format, new_content, new_format, comments)
   237             #print "tomodify_comments",len(tomodify_comments)
   236             #print "tomodify_comments"
       
   237             #print tomodify_comments
   238             #print "toremove_comments",len(toremove_comments)
   238             #print "toremove_comments",len(toremove_comments)
   239             [comment.save(keep_dates=True) for comment in tomodify_comments]
   239             [comment.save(keep_dates=True) for comment in tomodify_comments]
   240             [comment.delete() for comment in toremove_comments]
   240             if cancel_modified_scopes :
       
   241                 [comment.remove_scope() for comment in toremove_comments]
       
   242             else :
       
   243                 [comment.delete() for comment in toremove_comments]
       
   244                 
       
   245         #TODO: RBE: recompute same text comments links 
       
   246 
   241         self.title = new_title
   247         self.title = new_title
   242         if new_tags:
   248         if new_tags:
   243             self.tags = new_tags
   249             self.tags = new_tags
   244         if new_note:
   250         if new_note:
   245             self.note = new_note
   251             self.note = new_note
   305                 return True
   311                 return True
   306             else:                
   312             else:                
   307                 return self.reply_to.is_thread_full_visible(own_user)
   313                 return self.reply_to.is_thread_full_visible(own_user)
   308         return False
   314         return False
   309                
   315                
       
   316     def is_scope_removed(self):
       
   317         #when scope is "removed" we will have 
       
   318         #self.start_wrapper == self.end_wrapper == self.start_offset == self.end_offset == -1
       
   319         return (self.start_wrapper == -1)  
       
   320                
   310     def top_comment(self):
   321     def top_comment(self):
   311         if self.reply_to == None :
   322         if self.reply_to == None :
   312             return self
   323             return self
   313         else : 
   324         else : 
   314             return self.reply_to.top_comment()
   325             return self.reply_to.top_comment()
   321     
   332     
   322     def delete(self):
   333     def delete(self):
   323         PermanentModel.delete(self)
   334         PermanentModel.delete(self)
   324         # delete replies
   335         # delete replies
   325         [c.delete() for c in self.comment_set.all()]
   336         [c.delete() for c in self.comment_set.all()]
   326     
   337         
       
   338     def remove_scope(self):
       
   339         self.start_wrapper = self.end_wrapper = self.start_offset = self.end_offset = -1
       
   340         self.save()
       
   341         
   327 # http://docs.djangoproject.com/en/dev/topics/files/#topics-files
   342 # http://docs.djangoproject.com/en/dev/topics/files/#topics-files
   328 
   343 
   329 # default conf values
   344 # default conf values
   330 DEFAULT_CONF = {
   345 DEFAULT_CONF = {
   331                 'workspace_name' : 'Workspace',
   346                 'workspace_name' : 'Workspace',