4
4
# Google Diff Match Patch library
5
5
# http://code.google.com/p/google-diff-match-patch
6
from diff_match_patch import diff_match_patch
6
from .diff_match_patch import diff_match_patch
8
8
from django.db import models
9
9
from django.conf import settings
35
35
markup_choices = settings.WIKI_MARKUP_CHOICES
36
36
except AttributeError:
38
('crl', _(u'Creole')),
39
('rst', _(u'reStructuredText')),
40
('txl', _(u'Textile')),
41
('mrk', _(u'Markdown')),
39
('rst', _('reStructuredText')),
40
('txl', _('Textile')),
41
('mrk', _('Markdown')),
45
45
class Article(models.Model):
46
46
"""A wiki page reflecting the actual revision."""
47
title = models.CharField(_(u"Title"), max_length=50, unique=True)
48
content = models.TextField(_(u"Content"))
49
summary = models.CharField(_(u"Summary"), max_length=150,
47
title = models.CharField(_("Title"), max_length=50, unique=True)
48
content = models.TextField(_("Content"))
49
summary = models.CharField(_("Summary"), max_length=150,
50
50
null=True, blank=True)
51
markup = models.CharField(_(u"Content Markup"), max_length=3,
51
markup = models.CharField(_("Content Markup"), max_length=3,
52
52
choices=markup_choices,
53
53
null=True, blank=True)
54
54
creator = models.ForeignKey(User, verbose_name=_('Article Creator'),
134
134
class ChangeSet(models.Model):
135
135
"""A report of an older version of some Article."""
137
article = models.ForeignKey(Article, verbose_name=_(u"Article"))
137
article = models.ForeignKey(Article, verbose_name=_("Article"))
139
139
# Editor identification -- logged
140
editor = models.ForeignKey(User, verbose_name=_(u'Editor'),
140
editor = models.ForeignKey(User, verbose_name=_('Editor'),
143
143
# Revision number, starting from 1
144
revision = models.IntegerField(_(u"Revision Number"))
144
revision = models.IntegerField(_("Revision Number"))
146
146
# How to recreate this version
147
old_title = models.CharField(_(u"Old Title"), max_length=50, blank=True)
148
old_markup = models.CharField(_(u"Article Content Markup"), max_length=3,
147
old_title = models.CharField(_("Old Title"), max_length=50, blank=True)
148
old_markup = models.CharField(_("Article Content Markup"), max_length=3,
149
149
choices=markup_choices,
150
150
null=True, blank=True)
151
content_diff = models.TextField(_(u"Content Patch"), blank=True)
151
content_diff = models.TextField(_("Content Patch"), blank=True)
153
comment = models.TextField(_(u"Editor comment"), blank=True)
154
modified = models.DateTimeField(_(u"Modified at"), default=datetime.now)
155
reverted = models.BooleanField(_(u"Reverted Revision"), default=False)
153
comment = models.TextField(_("Editor comment"), blank=True)
154
modified = models.DateTimeField(_("Modified at"), default=datetime.now)
155
reverted = models.BooleanField(_("Reverted Revision"), default=False)
157
157
objects = ChangeSetManager()
160
verbose_name = _(u'Change set')
161
verbose_name_plural = _(u'Change sets')
160
verbose_name = _('Change set')
161
verbose_name_plural = _('Change sets')
162
162
get_latest_by = 'modified'
163
163
ordering = ('-revision',)
164
164
app_label = 'wiki'
166
def __unicode__(self):
167
return u'#%s' % self.revision
167
return '#%s' % self.revision
169
169
def get_absolute_url(self):
170
170
if self.article.group is None:
247
247
def compare_to(self, revision_from):
249
if revision_from > 0:
249
if int(revision_from) > 0:
250
250
other_content = ChangeSet.objects.filter(
251
251
article=self.article, revision__lte=revision_from).order_by('-revision')[0].get_content()
252
252
diffs = dmp.diff_main(other_content, self.get_content())
253
dmp.diff_cleanupSemantic(diffs)
253
#dmp.diff_cleanupSemantic(diffs)
254
254
return dmp.diff_prettyHtml(diffs)