from django.contrib import admin
+from django.contrib.admin.util import unquote
+from django.shortcuts import get_object_or_404, render_to_response
+from django.template import RequestContext
from xerxes.influences.models import Character, Influence
+from django.contrib.contenttypes import generic
+from threadedcomments.models import ThreadedComment
+from django.utils.safestring import mark_safe
+
+from views import get_influence_comment_form, quote_reply
class CharacterAdmin(admin.ModelAdmin):
list_filter=('status', 'player')
search_fields=('character', 'summary', 'description', 'contact')
list_display=('character', 'contact', 'summary', 'longterm', 'status')
-admin.site.register(Influence, InfluenceAdmin)
+ class Media:
+ js = ('base/js/yahoo-dom-event.js', 'base/js/logger-debug.js')
+
+ def __call__(self, request, url):
+ if (url and url.endswith('/comments')):
+ return self.comments_view(request, unquote(url[:-9]))
+ else:
+ return super(InfluenceAdmin, self).__call__(request, url)
+ def comments_view(self, request, object_id):
+ model = self.model
+ opts = model._meta
+ obj = get_object_or_404(model, pk=object_id)
+
+ comments = ThreadedComment.objects.get_tree(obj)
+ # Annotate each comment with a proper reply form
+ for comment in comments:
+ initial = { 'comment' : quote_reply(comment) }
+ comment.reply_form = get_influence_comment_form(request.user.is_staff, comment)(initial=initial)
+
+ context = {
+ 'root_path' : self.admin_site.root_path,
+ 'app_label' : self.model._meta.app_label,
+ 'object' : obj,
+ 'opts' : opts,
+ 'comments' : comments,
+ 'media' : mark_safe(self.media),
+ }
+ return render_to_response('admin/influences/influence/comments.html', context, RequestContext(request))
+
+admin.site.register(Influence, InfluenceAdmin)