gremmie@1: """
gremmie@1: This file contains the automatic admin site definitions for the gcalendar application.
gremmie@1: """
gremmie@1: from django.contrib import admin
gremmie@1: from django.http import HttpResponse
gremmie@1: from django.conf.urls.defaults import *
gremmie@1: 
gremmie@1: from gcalendar.models import Event
gremmie@1: from gcalendar.admin_views import google_sync
bgneal@204: import bio.badges
gremmie@1: 
gremmie@1: 
gremmie@1: class EventAdmin(admin.ModelAdmin):
gremmie@1:     list_display = ('what', 'user', 'start_date', 'where', 'date_submitted',
bgneal@228:             'status', 'is_approved', 'google_html')
gremmie@1:     list_filter = ('start_date', 'status')
bgneal@152:     date_hierarchy = 'start_date'
gremmie@1:     search_fields = ('what', 'where', 'description')
gremmie@1:     raw_id_fields = ('user', )
bgneal@228:     exclude = ('html', 'google_id', 'google_url')
gremmie@1:     save_on_top = True
bgneal@152:     actions = ('approve_events', )
bgneal@152: 
bgneal@152:     pending_states = {
bgneal@152:         Event.NEW: Event.NEW_APRV,
bgneal@152:         Event.EDIT_REQ: Event.EDIT_APRV,
bgneal@152:         Event.DEL_REQ: Event.DEL_APRV,
bgneal@152:     }
gremmie@1: 
gremmie@1:     def get_urls(self):
gremmie@1:         urls = super(EventAdmin, self).get_urls()
gremmie@1:         my_urls = patterns('',
gremmie@1:             url(r'^google_sync/$', 
gremmie@1:                 self.admin_site.admin_view(google_sync), 
gremmie@1:                 name="gcalendar-google_sync")
gremmie@1:         )
gremmie@1:         return my_urls + urls
gremmie@1: 
bgneal@152:     def approve_events(self, request, qs):
bgneal@152:         """
bgneal@152:         Ratchets the selected events forward to the approved state.
bgneal@152:         Ignores events that aren't in the proper state.
bgneal@152:         """
bgneal@389:         count = 0
bgneal@152:         for event in qs:
bgneal@152:             if event.status in self.pending_states:
bgneal@152:                 event.status = self.pending_states[event.status]
bgneal@152:                 event.save()
bgneal@152:                 count += 1
bgneal@152: 
bgneal@204:                 if event.status == Event.NEW_APRV:
bgneal@204:                     bio.badges.award_badge(bio.badges.CALENDAR_PIN, event.user)
bgneal@204: 
bgneal@152:         msg = "1 event was" if count == 1 else "%d events were" % count
bgneal@152:         msg += " approved."
bgneal@152:         self.message_user(request, msg)
bgneal@152: 
bgneal@152:     approve_events.short_description = "Approve selected events"
bgneal@152: 
gremmie@1: 
gremmie@1: admin.site.register(Event, EventAdmin)
gremmie@1: