diff gpp/gcalendar/admin.py @ 152:bc657962941e

Implement #42; add admin actions to GCalendar.
author Brian Neal <bgneal@gmail.com>
date Sat, 19 Dec 2009 04:59:06 +0000
parents e04d91babfcf
children b4305e18d3af
line wrap: on
line diff
--- a/gpp/gcalendar/admin.py	Fri Dec 18 04:30:49 2009 +0000
+++ b/gpp/gcalendar/admin.py	Sat Dec 19 04:59:06 2009 +0000
@@ -13,10 +13,18 @@
     list_display = ('what', 'user', 'start_date', 'where', 'date_submitted',
             'status', 'is_approved')
     list_filter = ('start_date', 'status')
+    date_hierarchy = 'start_date'
     search_fields = ('what', 'where', 'description')
     raw_id_fields = ('user', )
     exclude = ('html', 'google_id')
     save_on_top = True
+    actions = ('approve_events', )
+
+    pending_states = {
+        Event.NEW: Event.NEW_APRV,
+        Event.EDIT_REQ: Event.EDIT_APRV,
+        Event.DEL_REQ: Event.DEL_APRV,
+    }
 
     def get_urls(self):
         urls = super(EventAdmin, self).get_urls()
@@ -27,7 +35,24 @@
         )
         return my_urls + urls
 
+    def approve_events(self, request, qs):
+        """
+        Ratchets the selected events forward to the approved state.
+        Ignores events that aren't in the proper state.
+        """
+        for event in qs:
+            count = 0
+            if event.status in self.pending_states:
+                event.status = self.pending_states[event.status]
+                event.save()
+                count += 1
+
+        msg = "1 event was" if count == 1 else "%d events were" % count
+        msg += " approved."
+        self.message_user(request, msg)
+
+    approve_events.short_description = "Approve selected events"
+
 
 admin.site.register(Event, EventAdmin)
 
-# vim: ts=4 sw=4