src/cm/models.py
changeset 145 fb5b1e6ad179
parent 140 87eec0c11516
child 146 51c34f5970c2
equal deleted inserted replaced
142:9b3438382e53 145:fb5b1e6ad179
    83         """
    83         """
    84         Versions with most recent first
    84         Versions with most recent first
    85         """
    85         """
    86         versions = TextVersion.objects.filter(text__exact=self).order_by('-created')
    86         versions = TextVersion.objects.filter(text__exact=self).order_by('-created')
    87         # TODO: use new postgresql 8.4 row_number as extra select to do that
    87         # TODO: use new postgresql 8.4 row_number as extra select to do that
    88         for index in xrange(len(versions)):
    88         #for index in xrange(len(versions)):
    89             v = versions[index]
    89         #    v = versions[index]
    90             # version_number is 1-based
    90         #    # version_number is 1-based
    91             setattr(v, 'version_number', len(versions) - index)
    91         #    setattr(v, 'version_number', len(versions) - index)
    92         #for v in versions:
       
    93         #    print v.created,v.id,v.version_number
       
    94         return versions
    92         return versions
    95 
    93 
    96     def get_version(self, version_number):        
    94     def get_version(self, version_number):        
    97         """
    95         """
    98         Get version number 'version_number' (1-based)
    96         Get version number 'version_number' (1-based)
   101         return version
    99         return version
   102         
   100         
   103     def get_inversed_versions(self):
   101     def get_inversed_versions(self):
   104         versions = TextVersion.objects.filter(text__exact=self).order_by('created')
   102         versions = TextVersion.objects.filter(text__exact=self).order_by('created')
   105         # TODO: use new postgresql 8.4 row_number as extra select to do that
   103         # TODO: use new postgresql 8.4 row_number as extra select to do that
   106         for index in xrange(len(versions)):
   104         #for index in xrange(len(versions)):
   107             v = versions[index]
   105         #    v = versions[index]
   108             # version_number is 1-based
   106         #    # version_number is 1-based
   109             setattr(v, 'version_number', index + 1)
   107         #    setattr(v, 'version_number', index + 1)
   110         return versions
   108         return versions
   111 
   109 
   112     def get_versions_number(self):
   110     def get_versions_number(self):
   113         return self.get_versions().count()
   111         return self.get_versions().count()
   114 
   112 
   116         if adminkey and self.adminkey == adminkey:
   114         if adminkey and self.adminkey == adminkey:
   117             return True
   115             return True
   118         else:
   116         else:
   119             return False
   117             return False
   120 
   118 
   121     def revert_to_version(self, v_id):
   119     def revert_to_version(self, text_version_key):
   122         text_version = self.get_version(int(v_id))
   120         text_version = TextVersion.objects.get(key=text_version_key)
       
   121         if text_version.text != self:
       
   122             raise Exception('Invalid revert attempt')
   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, cancel_modified_scopes=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()
   250         if new_note:
   250         if new_note:
   251             self.note = new_note
   251             self.note = new_note
   252         self.content = new_content
   252         self.content = new_content
   253         self.format = new_format
   253         self.format = new_format
   254         self.save()
   254         self.save()
   255         
   255 
       
   256     def get_next_version(self):        
       
   257         other_versions = TextVersion.objects.filter(text__exact=self.text).order_by('created').filter(created__gt=self.created)
       
   258         return other_versions[0] if other_versions else None 
       
   259         if other_versions:
       
   260             return 
       
   261         else:
       
   262             return None
       
   263 
       
   264     def get_previous_version(self):
       
   265         other_versions = TextVersion.objects.filter(text__exact=self.text).order_by('-created').filter(created__lt=self.created)
       
   266         return other_versions[0] if other_versions else None
       
   267 
       
   268     def get_version_number(self):
       
   269         return TextVersion.objects.filter(text__exact=self.text).order_by('created').filter(created__lte=self.created).count()
       
   270     
   256 class CommentManager(Manager):
   271 class CommentManager(Manager):
   257     
   272     
   258     def duplicate(self, comment, text_version, reply_to=None, keep_dates=False):
   273     def duplicate(self, comment, text_version, reply_to=None, keep_dates=False):
   259         comment.id = None
   274         comment.id = None
   260         comment.text_version = text_version
   275         comment.text_version = text_version