Files
caminus/local/views.py
2012-04-21 10:33:56 -04:00

133 lines
5.8 KiB
Python

from django.contrib.auth.decorators import login_required
from django.contrib.sites.models import Site
from django.contrib import messages
from django.http import HttpResponseRedirect, Http404
from django.shortcuts import render_to_response
from notification import models as notification
from django.template import RequestContext
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
import django.contrib.auth
from django.contrib.auth import authenticate, login
from django.core.exceptions import ObjectDoesNotExist
import forms
import models
from forums.models import Forum
from minecraft.forms import ProfileForm
from minecraft.models import MinecraftProfile
from django.conf import settings
@login_required
def profile(request, username=None, mc_username=None):
if username is None and mc_username is None:
user = request.user
elif mc_username is None:
user = User.objects.get(username=username)
else:
user = MinecraftProfile.objects.get(mc_username=mc_username).user
return render_to_response('local/profile.html', {'profile': user}, context_instance = RequestContext(request))
@login_required
def edit(request):
if request.method == 'POST':
form = ProfileForm(request.POST, instance=request.user.minecraftprofile)
else:
form = ProfileForm(instance=request.user.minecraftprofile)
if form.is_valid():
profile = request.user.minecraftprofile
profile.mc_username = form.cleaned_data['mc_username']
profile.save()
return HttpResponseRedirect(reverse('local.views.profile'))
return render_to_response('local/edit.html', {"form":form}, context_instance = RequestContext(request))
@login_required
def invites(request):
invites = request.user.invites.all()
return render_to_response('local/invites.html', {'invites': invites}, context_instance = RequestContext(request))
@login_required
def createInvite(request):
activeCount = request.user.invites.exclude(deleted=True).filter(claimer=None)
if len(activeCount) < 2:
invite = models.Invite()
invite.creator = request.user
invite.save()
else:
messages.error(request, "You already have your maximum number of active invites.")
return HttpResponseRedirect(reverse('local.views.invites'))
def register(request):
invite = request.session['profile-invite']
if request.method == 'POST':
userForm = forms.UserForm(request.POST, prefix='user')
profileForm = ProfileForm(request.POST, prefix='profile')
else:
userForm = forms.UserForm(prefix='user')
profileForm = ProfileForm(prefix='profile')
if userForm.is_valid() and profileForm.is_valid():
oldUser = None
try:
oldUser = User.objects.get(username__exact=userForm.cleaned_data['username'])
except ObjectDoesNotExist, e:
pass
if not oldUser:
user = User.objects.create_user(userForm.cleaned_data['username'], userForm.cleaned_data['email'], userForm.cleaned_data['password'])
user.save()
invite.claimer = user
invite.save()
profile = user.minecraftprofile
profile.mc_username = profileForm.cleaned_data['mc_username']
profile.save()
user = authenticate(username=userForm.cleaned_data['username'], password=userForm.cleaned_data['password'])
notification.send_now([invite.creator], "invite_accepted", {"new_user": user})
login(request, user)
del request.session['profile-invite']
return HttpResponseRedirect(reverse('welcome'))
return render_to_response('local/register.html', {'userForm': userForm, 'profileForm': profileForm, 'invite':invite}, context_instance = RequestContext(request))
@login_required
def deleteInvite(request, code=None):
invite = models.Invite.objects.get(code__exact=code)
if invite.claimer:
messages.error(request, "That invite is already claimed.")
return HttpResponseRedirect(reverse('local.views.invites'))
if request.method == 'POST':
invite.deleted = True
invite.save()
messages.info(request, "Invite deleted.")
return HttpResponseRedirect(reverse('local.views.invites'))
return render_to_response('local/delete_invite.html', {'invite':invite}, context_instance = RequestContext(request))
def claimInvite(request, code=None):
if request.user.is_authenticated():
invite = models.Invite.objects.get(code__exact=code)
siteURL = Site.objects.get_current().domain
return render_to_response('local/show_invite.html', {'invite':invite, 'site_url': siteURL}, context_instance = RequestContext(request))
if request.method == 'POST':
form = forms.InviteClaimForm(request.POST)
else:
form = forms.InviteClaimForm()
if form.is_valid():
code = form.cleaned_data['code']
if code:
try:
invite = models.Invite.objects.get(code__exact=code, claimer__exact=None, deleted__exact=False)
except models.Invite.DoesNotExist:
raise Http404
request.session['profile-invite'] = invite
return HttpResponseRedirect(reverse('local.views.register'))
return render_to_response('local/claim_invite.html', {'form': form}, context_instance = RequestContext(request))
def list(request):
profiles = User.objects.all()
return render_to_response('local/list.html', {'profiles': profiles}, context_instance = RequestContext(request))
def index(request):
newsForum = Forum.objects.get(id=settings.CAMINUS_NEWS_FORUM_ID)
try:
latestNews = newsForum.topic_set.order_by('-created')[0]
except IndexError, e:
latestNews = None
forums = Forum.objects.filter(parent=None)
return render_to_response('local/index.html', {'news': latestNews, 'forums': forums}, context_instance = RequestContext(request))