Added revision feed, which shows latest edits across the wiki. Also brought down wiki queries using select_related and caching article slugs

--HG--
branch : bridger-dev
This commit is contained in:
Bridger Maxwell
2012-03-06 15:26:34 -05:00
parent f58f08edbe
commit 84471d176e
3 changed files with 45 additions and 7 deletions

View File

@@ -3,6 +3,7 @@ import os
from django import forms
from django.contrib.auth.models import User
from django.core.cache import cache
from django.core.urlresolvers import reverse
from django.db import models
from django.db.models import signals
@@ -55,10 +56,16 @@ class Article(models.Model):
raise ShouldHaveExactlyOneRootSlug()
def get_url(self):
"""Return the Wiki URL for an article"""
"""Return the Wiki URL for an article"""
url = self.slug + "/"
if (self.parent):
url = self.parent.get_url() + url
if self.parent_id:
parent_url = cache.get("wiki_url-" + str(self.parent_id))
if parent_url is None:
parent_url = self.parent.get_url()
url = parent_url + url
cache.set("wiki_url-" + str(self.id), url, 60*60)
return url

View File

@@ -9,6 +9,7 @@ urlpatterns = patterns('',
url(r'^history(/[a-zA-Z\d/_-]*)/([0-9]*)/?$', 'simplewiki.views.history', name='wiki_history'),
url(r'^search_related(/[a-zA-Z\d/_-]*)/?$', 'simplewiki.views.search_add_related', name='search_related'),
url(r'^random/?$', 'simplewiki.views.random_article', name='wiki_random'),
url(r'^revision_feed/([0-9]*)/?$', 'simplewiki.views.revision_feed', name='wiki_revision_feed'),
url(r'^search/?$', 'simplewiki.views.search_articles', name='wiki_search_articles'),
url(r'^list/?$', 'simplewiki.views.search_articles', name='wiki_list_articles'), #Just an alias for the search, but you usually don't submit a search term
# url(r'^/?([a-zA-Z\d/_-]*)/_related/add/$', 'simplewiki.views.add_related', name='add_related'),

View File

@@ -232,7 +232,7 @@ def history(request, wiki_url, page=1):
except ValueError:
p = 1
history = Revision.objects.filter(article__exact = article).order_by('-counter')
history = Revision.objects.filter(article__exact = article).order_by('-counter').select_related('previous_revision__counter', 'revision_user', 'wiki_article')
if request.method == 'POST':
if request.POST.__contains__('revision'): #They selected a version, but they can be either deleting or changing the version
@@ -297,6 +297,37 @@ def history(request, wiki_url, page=1):
d.update(csrf(request))
return render_to_response('simplewiki_history.html', d)
def revision_feed(request, page=1):
if not request.user.is_superuser:
return redirect('/')
page_size = 10
try:
p = int(page)
except ValueError:
p = 1
history = Revision.objects.order_by('-revision_date').select_related('revision_user', 'article', 'previous_revision')
page_count = (history.count()+(page_size-1)) / page_size
if p > page_count:
p = 1
beginItem = (p-1) * page_size
next_page = p + 1 if page_count > p else None
prev_page = p - 1 if p > 1 else None
d = {'wiki_page': p,
'wiki_next_page': next_page,
'wiki_prev_page': prev_page,
'wiki_history': history[beginItem:beginItem+page_size],
'show_delete_revision' : request.user.is_superuser,}
d.update(csrf(request))
return render_to_response('simplewiki_revision_feed.html', d)
def search_articles(request):
if not request.user.is_authenticated():
@@ -333,9 +364,8 @@ def search_articles(request):
results = results._search(Q(current_revision__contents__icontains = queryword) | \
Q(title__icontains = queryword))
results.select_related('current_revision__deleted')
print [(article.title.lower(), article.get_url()) for article in results]
results = results.select_related('current_revision__deleted')
results = sorted(results, key=lambda article: (article.current_revision.deleted, article.get_url().lower()) )
if len(results) == 1 and querystring: