changeset 139:e04d91babfcf

Close #30. Create an admin dashboard to see pending content and requests for admin action.
author Brian Neal <bgneal@gmail.com>
date Sun, 29 Nov 2009 22:33:15 +0000
parents 7ea842744a57
children 91a01b8b5885
files gpp/core/templatetags/custom_admin_tags.py gpp/gcalendar/admin.py gpp/gcalendar/models.py gpp/templates/admin/base_site.html gpp/templates/admin/custom_index.html gpp/templates/core/admin_dashboard.html gpp/urls.py
diffstat 7 files changed, 126 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gpp/core/templatetags/custom_admin_tags.py	Sun Nov 29 22:33:15 2009 +0000
@@ -0,0 +1,44 @@
+"""
+Custom template tags for the admin.
+"""
+from django import template
+from django.db.models import Q
+
+from bio.models import UserProfileFlag
+from comments.models import CommentFlag
+from downloads.models import Download
+from forums.models import FlaggedPost
+from gcalendar.models import Event
+from news.models import PendingStory
+from weblinks.models import Link
+
+
+register = template.Library()
+
+
+@register.inclusion_tag('core/admin_dashboard.html')
+def admin_dashboard():
+    """
+    This tag is used in the admin to create a dashboard
+    of pending content that an admin must approve.
+    """
+    flagged_profiles = UserProfileFlag.objects.count()
+    flagged_comments = CommentFlag.objects.count()
+    new_downloads = Download.objects.filter(is_public=False).count()
+    flagged_posts = FlaggedPost.objects.count()
+    event_requests = Event.objects.filter(
+                Q(status=Event.NEW) | 
+                Q(status=Event.EDIT_REQ) | 
+                Q(status=Event.DEL_REQ)).count()
+    new_stories = PendingStory.objects.count()
+    new_links = Link.objects.filter(is_public=False).count()
+
+    return {
+        'flagged_profiles': flagged_profiles,
+        'flagged_comments': flagged_comments,
+        'new_downloads': new_downloads,
+        'flagged_posts': flagged_posts,
+        'event_requests': event_requests,
+        'new_stories': new_stories,
+        'new_links': new_links,
+        }
--- a/gpp/gcalendar/admin.py	Fri Nov 27 21:55:32 2009 +0000
+++ b/gpp/gcalendar/admin.py	Sun Nov 29 22:33:15 2009 +0000
@@ -11,7 +11,7 @@
 
 class EventAdmin(admin.ModelAdmin):
     list_display = ('what', 'user', 'start_date', 'where', 'date_submitted',
-            'status', 'needs_approval')
+            'status', 'is_approved')
     list_filter = ('start_date', 'status')
     search_fields = ('what', 'where', 'description')
     raw_id_fields = ('user', )
--- a/gpp/gcalendar/models.py	Fri Nov 27 21:55:32 2009 +0000
+++ b/gpp/gcalendar/models.py	Sun Nov 29 22:33:15 2009 +0000
@@ -94,6 +94,7 @@
         self.html = site_markup(self.description)
         super(Event, self).save(*args, **kwargs)
 
-    def needs_approval(self):
-        return self.status in (self.NEW, self.EDIT_REQ, self.DEL_REQ)
+    def is_approved(self):
+        return self.status not in (self.NEW, self.EDIT_REQ, self.DEL_REQ)
+    is_approved.boolean = True
 
--- a/gpp/templates/admin/base_site.html	Fri Nov 27 21:55:32 2009 +0000
+++ b/gpp/templates/admin/base_site.html	Sun Nov 29 22:33:15 2009 +0000
@@ -1,10 +1,10 @@
 {% extends "admin/base.html" %}
 {% load i18n %}
 
-{% block title %}{{ title }} | {% trans 'GPP Site Admin' %}{% endblock %}
+{% block title %}{{ title }} | {% trans 'SG101 Site Admin' %}{% endblock %}
 
 {% block branding %}
-<h1 id="site-name">{% trans 'Gremmies Portal Project Site Administration' %}</h1>
+<h1 id="site-name">{% trans 'SurfGuitar101.com Site Administration' %}</h1>
 {% endblock %}
 
 {% block nav-global %}{% endblock %}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gpp/templates/admin/custom_index.html	Sun Nov 29 22:33:15 2009 +0000
@@ -0,0 +1,40 @@
+{% extends "admin/index.html" %}
+{% load i18n %}
+{% load custom_admin_tags %}
+{% block content %}
+<div id="content-main">
+{% admin_dashboard %}
+{% if app_list %}
+    {% for app in app_list %}
+        <div class="module">
+        <table summary="{% blocktrans with app.name as name %}Models available in the {{ name }} application.{% endblocktrans %}">
+        <caption><a href="{{ app.app_url }}" class="section">{% blocktrans with app.name as name %}{{ name }}{% endblocktrans %}</a></caption>
+        {% for model in app.models %}
+            <tr>
+            {% if model.perms.change %}
+                <th scope="row"><a href="{{ model.admin_url }}">{{ model.name }}</a></th>
+            {% else %}
+                <th scope="row">{{ model.name }}</th>
+            {% endif %}
+
+            {% if model.perms.add %}
+                <td><a href="{{ model.admin_url }}add/" class="addlink">{% trans 'Add' %}</a></td>
+            {% else %}
+                <td>&nbsp;</td>
+            {% endif %}
+
+            {% if model.perms.change %}
+                <td><a href="{{ model.admin_url }}" class="changelink">{% trans 'Change' %}</a></td>
+            {% else %}
+                <td>&nbsp;</td>
+            {% endif %}
+            </tr>
+        {% endfor %}
+        </table>
+        </div>
+    {% endfor %}
+{% else %}
+    <p>{% trans "You don't have permission to edit anything." %}</p>
+{% endif %}
+</div>
+{% endblock %}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gpp/templates/core/admin_dashboard.html	Sun Nov 29 22:33:15 2009 +0000
@@ -0,0 +1,33 @@
+<div class="module">
+<table summary="Admin Dashboard">
+   <caption>Admin Dashboard</caption>
+   <tr>
+      <th><a href="/admin/forums/flaggedpost/">Flagged Posts</a></th>
+      <td>{{ flagged_posts }}</td>
+   </tr>
+   <tr>
+      <th><a href="/admin/comments/commentflag/">Flagged Comments</a></th>
+      <td>{{ flagged_comments }}</td>
+   </tr>
+   <tr>
+      <th><a href="/admin/bio/userprofileflag/">Flagged Profiles</a></th>
+      <td>{{ flagged_profiles }}</td>
+   </tr>
+   <tr>
+      <th><a href="/admin/gcalendar/event/">Calendar Requests</a></th>
+      <td>{{ event_requests }}</td>
+   </tr>
+   <tr>
+      <th><a href="/admin/news/pendingstory/">New Stories</a></th>
+      <td>{{ new_stories }}</td>
+   </tr>
+   <tr>
+      <th><a href="/admin/downloads/download/">New Downloads</a></th>
+      <td>{{ new_downloads }}</td>
+   </tr>
+   <tr>
+      <th><a href="/admin/weblinks/link/">New Links</a></th>
+      <td>{{ new_links }}</td>
+   </tr>
+</table>
+</div>
--- a/gpp/urls.py	Fri Nov 27 21:55:32 2009 +0000
+++ b/gpp/urls.py	Sun Nov 29 22:33:15 2009 +0000
@@ -3,6 +3,9 @@
 from django.contrib import admin
 from news.feeds import LatestNewsFeed
 
+# Use the default admin site, but tell it to use a custom
+# index template:
+admin.site.index_template = 'admin/custom_index.html'
 admin.autodiscover()
 
 feeds = {