Commit 84471d17 by Bridger Maxwell

Added revision feed, which shows latest edits across the wiki. Also brought down…

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
parent f58f08ed
...@@ -3,6 +3,7 @@ import os ...@@ -3,6 +3,7 @@ import os
from django import forms from django import forms
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.cache import cache
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.db import models from django.db import models
from django.db.models import signals from django.db.models import signals
...@@ -57,8 +58,14 @@ class Article(models.Model): ...@@ -57,8 +58,14 @@ class Article(models.Model):
def get_url(self): def get_url(self):
"""Return the Wiki URL for an article""" """Return the Wiki URL for an article"""
url = self.slug + "/" url = self.slug + "/"
if (self.parent): if self.parent_id:
url = self.parent.get_url() + url 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 return url
......
...@@ -9,6 +9,7 @@ urlpatterns = patterns('', ...@@ -9,6 +9,7 @@ urlpatterns = patterns('',
url(r'^history(/[a-zA-Z\d/_-]*)/([0-9]*)/?$', 'simplewiki.views.history', name='wiki_history'), 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'^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'^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'^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'^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'), # url(r'^/?([a-zA-Z\d/_-]*)/_related/add/$', 'simplewiki.views.add_related', name='add_related'),
......
...@@ -232,7 +232,7 @@ def history(request, wiki_url, page=1): ...@@ -232,7 +232,7 @@ def history(request, wiki_url, page=1):
except ValueError: except ValueError:
p = 1 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.method == 'POST':
if request.POST.__contains__('revision'): #They selected a version, but they can be either deleting or changing the version if request.POST.__contains__('revision'): #They selected a version, but they can be either deleting or changing the version
...@@ -298,6 +298,37 @@ def history(request, wiki_url, page=1): ...@@ -298,6 +298,37 @@ def history(request, wiki_url, page=1):
return render_to_response('simplewiki_history.html', d) 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): def search_articles(request):
if not request.user.is_authenticated(): if not request.user.is_authenticated():
return redirect('/') return redirect('/')
...@@ -333,9 +364,8 @@ def search_articles(request): ...@@ -333,9 +364,8 @@ def search_articles(request):
results = results._search(Q(current_revision__contents__icontains = queryword) | \ results = results._search(Q(current_revision__contents__icontains = queryword) | \
Q(title__icontains = queryword)) Q(title__icontains = queryword))
results.select_related('current_revision__deleted') results = results.select_related('current_revision__deleted')
print [(article.title.lower(), article.get_url()) for article in results]
results = sorted(results, key=lambda article: (article.current_revision.deleted, article.get_url().lower()) ) results = sorted(results, key=lambda article: (article.current_revision.deleted, article.get_url().lower()) )
if len(results) == 1 and querystring: if len(results) == 1 and querystring:
......
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