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:
@@ -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
|
||||
|
||||
|
||||
@@ -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'),
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user