diff mysite/band/views.py @ 1:0dcfcdf50c62

Initial import of Madeira project from the private repository.
author Brian Neal <bgneal@gmail.com>
date Mon, 06 Apr 2009 03:10:59 +0000
parents
children e602b5302b94
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mysite/band/views.py	Mon Apr 06 03:10:59 2009 +0000
@@ -0,0 +1,319 @@
+#######################################################################
+#
+# PyBand Copyright (C) 2008 by Brian Neal
+#
+#######################################################################
+from django import forms
+from django.core.urlresolvers import reverse
+from django.http import HttpResponse
+from django.http import HttpResponseRedirect
+from django.shortcuts import render_to_response
+from django.shortcuts import get_object_or_404
+from django.template import RequestContext
+from django.template.loader import render_to_string
+from django.core.mail import send_mail
+from django.db.models import Q
+from mysite.band.models import Article
+from mysite.band.models import Album
+from mysite.band.models import Fan
+from mysite.band.models import Gear
+from mysite.band.models import Gig
+from mysite.band.models import Member
+from mysite.band.models import Merchandise
+from mysite.band.models import Mp3
+from mysite.band.models import Mp3_Set
+from mysite.band.models import News
+from mysite.band.models import SiteConfig
+from mysite.band.models import Video_Set
+from mysite.photologue.models import Gallery
+from mysite.photologue.models import Photo
+import datetime
+import random
+
+#######################################################################
+
+def index(request):
+   config = SiteConfig.objects.get(pk = 1)
+   carpe = Photo.objects.get(title_slug = 'carpe-noctem')
+   sandstorm = Photo.objects.get(title_slug = 'sandstorm-cover')
+   ruins = Photo.objects.get(title_slug = 'ruins-cover')
+
+   upcomingDates = Gig.objects.filter(date__gte = datetime.date.today).order_by('date')[:5]
+
+   #tourPhotos = Photo.objects.filter(
+   #   Q(slug = 'flyer-aug-1-2008-san-diego') |
+   #   Q(slug = 'flyer-aug-2-2008-hermosa-beach') 
+   #   ).order_by('id')
+
+   return render_to_response('band/index.html',
+         { 
+           'config' : config, 
+           'carpe' : carpe,
+           'sandstorm' : sandstorm,
+           'ruins' : ruins,
+           'upcomingDates' : upcomingDates,
+           # 'tourPhotos' : tourPhotos,
+         },
+         context_instance = RequestContext(request))
+
+#######################################################################
+
+def bio(request):
+   members = Member.objects.exclude(is_active__exact = 0)
+
+   return render_to_response('band/bio.html', 
+         { 'members' : members, },
+         context_instance = RequestContext(request))
+
+#######################################################################
+
+def gigs(request):
+   upcoming = Gig.objects.select_related().filter(date__gte = datetime.date.today).order_by('date')
+   previous = Gig.objects.select_related().filter(date__lt = datetime.date.today)
+   #upcoming = Gig.objects.filter(date__gte = datetime.date.today).order_by('date')
+   #previous = Gig.objects.filter(date__lt = datetime.date.today)
+
+   stats = {}
+   venues = set([])
+   cities = set([])
+   states = set([])
+   bands = set([])
+   for gig in previous:
+      if gig.venue.id not in venues:
+         venues.add(gig.venue.id)
+      if gig.venue.city.id not in cities:
+         cities.add(gig.venue.city.id)
+      if gig.venue.city.state and gig.venue.city.state.id not in states:
+         states.add(gig.venue.city.state.id)
+      for band in gig.bands.all():
+         if band.id not in bands:
+            bands.add(band.id)
+
+   stats['count'] = previous.count()
+   stats['venues'] = len(venues)
+   stats['cities'] = len(cities)
+   stats['states'] = len(states)
+   stats['bands'] = len(bands)
+
+   flyerGigs = Gig.objects.exclude(flyer__isnull = True).order_by('-date')
+
+   return render_to_response('band/gigs.html',
+         { 
+           'upcoming' : upcoming,
+           'previous' : previous,
+           'stats' : stats,
+           'flyerGigs' : flyerGigs,
+         },
+         context_instance = RequestContext(request))
+
+#######################################################################
+
+def news(request):
+   news = News.objects.order_by('-date')
+
+   return render_to_response('band/news.html',
+         { 
+           'news' : news
+         },
+         context_instance = RequestContext(request))
+
+#######################################################################
+
+def press_index(request):
+   articles = Article.objects.order_by('-date')
+
+   return render_to_response('band/press.html',
+         { 
+           'articles' : articles
+         },
+         context_instance = RequestContext(request))
+
+#######################################################################
+
+def press_detail(request, id):
+   article = get_object_or_404(Article, pk = id)
+
+   return render_to_response('band/press_detail.html',
+         { 'article' : article },
+         context_instance = RequestContext(request))
+
+#######################################################################
+
+def songs(request):
+   mp3Sets = Mp3_Set.objects.order_by('-date', '-id')
+
+   return render_to_response('band/songs.html',
+         { 'mp3Sets' : mp3Sets },
+         context_instance = RequestContext(request))
+
+#######################################################################
+
+def photos_index(request):
+   galleries = Gallery.objects.values('title', 'id').order_by('-id')
+
+   photos = Photo.objects.filter(is_public__exact = 1)
+   randomPhotos = random.sample(photos, 4)
+
+   return render_to_response('band/photos.html',
+         { 'galleries' : galleries, 'randomPhotos' : randomPhotos },
+         context_instance = RequestContext(request))
+
+#######################################################################
+
+def photo_detail(request, id):
+   gallery = get_object_or_404(Gallery, pk = id)
+   return render_to_response('band/photo_detail.html',
+         { 'gallery' : gallery },
+         context_instance = RequestContext(request))
+
+#######################################################################
+
+def videos_index(request):
+   vidsets = Video_Set.objects.values('title', 'id').order_by('-id')
+   return render_to_response('band/videos.html',
+         { 'vidsets' : vidsets },
+         context_instance = RequestContext(request))
+
+#######################################################################
+
+def video_detail(request, id):
+   vidset = get_object_or_404(Video_Set, pk = id)
+
+   return render_to_response('band/video_detail.html',
+         { 'vidset' : vidset },
+         context_instance = RequestContext(request))
+
+#######################################################################
+
+def buy(request):
+   albums = Album.objects.all().order_by('-id')
+   merchandise = Merchandise.objects.all().order_by('-id')
+   config = SiteConfig.objects.values('ordering_info').get(pk = 1)
+   return render_to_response('band/buy.html',
+         { 'albums' : albums, 'merchandise' : merchandise, 'config' : config },
+         context_instance = RequestContext(request))
+
+#######################################################################
+
+def confirmEmail(config, to, subscribe, key):
+   band = config.band_name
+   fromEmail = config.contact_email
+   url = config.url
+   if url[-1] != '/':
+      url += '/'
+   url += 'mail/confirm/' + key
+
+   if subscribe:
+      emailTemplate = 'band/email_subscribe.txt'
+   else:
+      emailTemplate = 'band/email_unsubscribe.txt'
+
+   msg = render_to_string(emailTemplate, { 'band' : band, 'url' : url, 'band_url' : config.url })
+
+   subject = '[' + band + '] Mailing List Confirmation'
+
+   send_mail(subject, msg, fromEmail, [to])
+
+#######################################################################
+
+def contact(request):
+   config = SiteConfig.objects.get(pk = 1)
+   band = Member.objects.exclude(is_active__exact = 0).order_by('order')
+   return render_to_response('band/contact.html',
+         { 'config' : config, 'band' : band },
+         context_instance = RequestContext(request))
+
+#######################################################################
+
+class ContactForm(forms.Form):
+   name = forms.CharField(max_length = 32, required = False,
+         widget = forms.TextInput(attrs = {'class' : 'form-box'}))
+   email = forms.EmailField(widget = forms.TextInput(attrs = {'class' : 'form-box'}))
+   location = forms.CharField(max_length = 32, required = False,
+         widget = forms.TextInput(attrs = {'class' : 'form-box'}))
+   option = forms.ChoiceField(choices = (('subscribe', 'Subscribe'), ('unsubscribe', 'Unsubscribe')),
+         widget = forms.Select(attrs = {'class' : 'form-box'}))
+
+def mail(request):
+   config = SiteConfig.objects.get(pk = 1)
+   form = ContactForm()
+   if request.method == 'POST':
+      form = ContactForm(request.POST)
+      if form.is_valid():
+         if form.cleaned_data['option'] == 'unsubscribe':
+            try:
+               fan = Fan.objects.get(email = form.cleaned_data['email'])
+            except Fan.DoesNotExist:
+               return HttpResponseRedirect(reverse(mail_not_found))
+
+            fan.setLeaving()
+            fan.save()
+            confirmEmail(config, fan.email, False, fan.key)
+            return HttpResponseRedirect(reverse(mail_unsubscribe))
+
+         elif form.cleaned_data['option'] == 'subscribe':
+            try:
+               fan = Fan.objects.get(email = form.cleaned_data['email'])
+            except Fan.DoesNotExist:
+               fan = Fan(name = form.cleaned_data['name'],
+                         email = form.cleaned_data['email'],
+                         location = form.cleaned_data['location'])
+
+            fan.setPending()
+            fan.save()
+            confirmEmail(config, fan.email, True, fan.key)
+            return HttpResponseRedirect(reverse(mail_thanks))
+
+   return render_to_response('band/mail.html',
+         { 'form' : form },
+         context_instance = RequestContext(request))
+
+#######################################################################
+
+def mail_not_found(request):
+   return render_to_response('band/mail_not_found.html',
+         {},
+         context_instance = RequestContext(request))
+
+#######################################################################
+
+def mail_thanks(request):
+   return render_to_response('band/mail_thanks.html',
+         {},
+         context_instance = RequestContext(request))
+
+#######################################################################
+
+def mail_unsubscribe(request):
+   return render_to_response('band/mail_unsubscribe.html',
+         {},
+         context_instance = RequestContext(request))
+
+#######################################################################
+
+def mail_confirm(request, key):
+   fan = get_object_or_404(Fan, key = key)
+
+   email = fan.email
+   action = 'subscribed'
+
+   if fan.isPending():
+      fan.setActive()
+      fan.save()
+   elif fan.isLeaving():
+      fan.delete()
+      action = 'unsubscribed'
+   
+   return render_to_response('band/mail_confirm.html',
+         { 'email' : email, 'action' : action },
+         context_instance = RequestContext(request))
+
+#######################################################################
+
+def flyers(request):
+
+   gigs = Gig.objects.exclude(flyer__isnull = True).order_by('-date')
+
+   return render_to_response('band/flyers.html',
+         { 'gigs' : gigs },
+         context_instance = RequestContext(request))