Commit b3797a41 by Bridger Maxwell

Got most of admin deleting and user deleting implemented. Need to work on…

Got most of admin deleting and user deleting implemented. Need to work on interface for encountering deleted articles.

--HG--
branch : bridgerwiki
parent 608fa179
......@@ -220,12 +220,24 @@ class Revision(models.Model):
counter = models.IntegerField(verbose_name=_('Revision#'), default=1, editable=False)
previous_revision = models.ForeignKey('self', blank=True, null=True, editable=False)
# Deleted has three values. 0 is normal, non-deleted. 1 is if it was deleted by a normal user. It should
# be a NEW revision, so that it appears in the history. 2 is a special flag that can be applied or removed
# from a normal revision. It means it has been admin-deleted, and can only been seen by an admin. It doesn't
# show up in the history.
deleted = models.IntegerField(verbose_name=_('Deleted group'), default=0)
def get_user(self):
return self.revision_user if self.revision_user else _('Anonymous')
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:
......
......@@ -38,6 +38,7 @@ def view(request, wiki_url):
d = {'wiki_article': article,
'wiki_write': article.can_write_l(request.user),
'wiki_attachments_write': article.can_attach(request.user),
'wiki_current_revision_deleted' : not (article.current_revision.deleted == 0),
}
d.update(csrf(request))
return render_to_response('simplewiki_view.html', d)
......@@ -149,9 +150,15 @@ def edit(request, wiki_url):
if f.is_valid():
new_revision = f.save(commit=False)
new_revision.article = article
# Check that something has actually been changed...
if not new_revision.get_diff():
return (None, HttpResponseRedirect(reverse('wiki_view', args=(article.get_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.deleted = 1
elif not new_revision.get_diff():
return HttpResponseRedirect(reverse('wiki_view', args=(article.get_url(),)))
if not request.user.is_anonymous():
new_revision.revision_user = request.user
new_revision.save()
......@@ -160,7 +167,9 @@ def edit(request, wiki_url):
new_revision.article.save()
return HttpResponseRedirect(reverse('wiki_view', args=(article.get_url(),)))
else:
f = EditForm({'contents': article.current_revision.contents, 'title': article.title})
startContents = article.current_revision.contents if (article.current_revision.deleted == 0) else 'Headline\n===\n\n'
f = EditForm({'contents': startContents, 'title': article.title})
d = {'wiki_form': f,
'wiki_write': True,
'wiki_article': article,
......@@ -192,18 +201,40 @@ def history(request, wiki_url, page=1):
history = Revision.objects.filter(article__exact = article).order_by('-counter')
if request.method == 'POST':
if request.POST.__contains__('revision'):
if request.POST.__contains__('revision'): #They selected a version, but they can be either deleting or changing the version
perm_err = check_permissions(request, article, check_write=True, check_locked=True)
if perm_err:
return perm_err
try:
r = int(request.POST['revision'])
article.current_revision = Revision.objects.get(id=r)
article.save()
revision = Revision.objects.get(id=r)
if request.POST.__contains__('change'):
article.current_revision = revision
article.save()
elif request.POST.__contains__('delete') and request.user.is_superuser:
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)
except:
pass
finally:
return HttpResponseRedirect(reverse('wiki_view', args=(article.get_url(),)))
#
#
# <input type="submit" name="delete" value="Delete revision"/>
# <input type="submit" name="restore" value="Restore revision"/>
# <input type="submit" name="delete_all" value="Delete all revisions">
# %else:
# <input type="submit" name="delete_article" value="Delete all revisions">
#
page_count = (history.count()+(page_size-1)) / page_size
if p > page_count:
......@@ -219,7 +250,8 @@ def history(request, wiki_url, page=1):
'wiki_write': article.can_write_l(request.user),
'wiki_attachments_write': article.can_attach(request.user),
'wiki_article': article,
'wiki_history': history[beginItem:beginItem+page_size],}
'wiki_history': history[beginItem:beginItem+page_size],
'show_delete_revision' : request.user.is_superuser,}
d.update(csrf(request))
return render_to_response('simplewiki_history.html', d)
......@@ -394,16 +426,21 @@ def fetch_from_url(request, url):
return (article, path, err)
def check_permissions(request, article, check_read=False, check_write=False, check_locked=False):
def check_permissions(request, article, check_read=False, check_write=False, check_locked=False, check_deleted=True):
read_err = check_read and not article.can_read(request.user)
write_err = check_write and not article.can_write(request.user)
locked_err = check_locked and article.locked
if read_err or write_err or locked_err:
deleted_err = check_deleted and not (article.current_revision.deleted == 0)
if request.user.is_superuser:
deleted_err = False
if read_err or write_err or locked_err or deleted_err:
d = {'wiki_article': article,
'wiki_err_noread': read_err,
'wiki_err_nowrite': write_err,
'wiki_err_locked': locked_err,}
'wiki_err_locked': locked_err,
'wiki_err_deleted': deleted_err,}
d.update(csrf(request))
# TODO: Make this a little less jarring by just displaying an error
# on the current page? (no such redirect happens for an anon upload yet)
......
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