Commit 614f1566 by Bridger Maxwell

Added UI for locking article. Did more testing/bug fixes on deletion. Seems stable.

--HG--
branch : bridgerwiki
parent 056924ad
......@@ -85,6 +85,8 @@ class Article(models.Model):
def can_read(self, user):
""" Check read permissions and return True/False."""
if user.is_superuser:
return True
if self.permissions:
perms = self.permissions.can_read.all()
return perms.count() == 0 or (user in perms)
......@@ -93,6 +95,8 @@ class Article(models.Model):
def can_write(self, user):
""" Check write permissions and return True/False."""
if user.is_superuser:
return True
if self.permissions:
perms = self.permissions.can_write.all()
return perms.count() == 0 or (user in perms)
......@@ -101,6 +105,8 @@ class Article(models.Model):
def can_write_l(self, user):
"""Check write permissions and locked status"""
if user.is_superuser:
return True
return not self.locked and self.can_write(user)
def can_attach(self, user):
......@@ -229,18 +235,16 @@ class Revision(models.Model):
def get_user(self):
return self.revision_user if self.revision_user else _('Anonymous')
# Called after the deleted fied has been changed (between 0 and 2). This bypasses the normal checks put in
# save that update the revision or reject the save if contents haven't changed
def adminSetDeleted(self, deleted):
self.deleted = deleted
super(Revision, self).save()
def save(self, **kwargs):
#Really, the only time this should not happen is when the revision is being marked as deleted
print "kwargs" , kwargs, not ('is_deletion_modification' in kwargs and kwars['is_deletion_modification'])
print "save was just called"
# Check if contents have changed... if not, silently ignore save
if self.article and self.article.current_revision:
if self.article.current_revision.contents == self.contents:
if self.deleted == 0 and self.article.current_revision.contents == self.contents:
return
else:
import datetime
......@@ -256,7 +260,8 @@ class Revision(models.Model):
self.counter = previous_revision[0].counter + 1
else:
self.counter = 1
self.previous_revision = self.article.current_revision
if (self.article.current_revision.deleted == 0):
self.previous_revision = self.article.current_revision
# Create pre-parsed contents - no need to parse on-the-fly
ext = WIKI_MARKDOWN_EXTENSIONS
......@@ -288,6 +293,10 @@ class Revision(models.Model):
super(Revision, self).delete(**kwargs)
def get_diff(self):
if (self.deleted == 1):
yield "Article Deletion"
return
if self.previous_revision:
previous = self.previous_revision.contents.splitlines(1)
else:
......
......@@ -154,7 +154,7 @@ def edit(request, wiki_url):
if request.POST.__contains__('delete'):
if (article.current_revision.deleted == 1): #This article has already been deleted. Redirect
return HttpResponseRedirect(reverse('wiki_view', args=(article.get_url(),)))
new_revision.contents = "Article Deletion Revision\n==="
new_revision.contents = ""
new_revision.deleted = 1
elif not new_revision.get_diff():
return HttpResponseRedirect(reverse('wiki_view', args=(article.get_url(),)))
......@@ -189,6 +189,7 @@ def history(request, wiki_url, page=1):
perm_err = check_permissions(request, article, check_read=True, check_deleted=False)
if perm_err:
print "returned error " , perm_err
return perm_err
page_size = 10
......@@ -215,14 +216,15 @@ def history(request, wiki_url, page=1):
if (revision.deleted == 0):
revision.adminSetDeleted(2)
elif request.POST.__contains__('restore') and request.user.is_superuser:
print "revision.deleted: " , revision.deleted
if (revision.deleted == 2):
print "save was just called"
revision.adminSetDeleted(0)
print "revison.deleted is now " , revision.deleted
elif request.POST.__contains__('delete_all') and request.user.is_superuser:
Revision.objects.filter(article__exact = article, deleted = 0).update(deleted = 2)
elif request.POST.__contains__('lock_article'):
print "changing locked article " , article.locked
article.locked = not article.locked
print "changed locked article " , article.locked
article.save()
except:
pass
finally:
......@@ -289,7 +291,6 @@ def search_articles(request):
if request.user.is_superuser:
results = results.order_by('current_revision__deleted')
else:
print "tried to filter"
results = results.filter(current_revision__deleted = 0)
if results.count() == 1 and querystring:
......@@ -442,6 +443,7 @@ def check_permissions(request, article, check_read=False, check_write=False, che
deleted_err = check_deleted and not (article.current_revision.deleted == 0)
if (request.user.is_superuser):
deleted_err = False
locked_err = False
if read_err or write_err or locked_err or deleted_err:
d = {'wiki_article': article,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment