133 lines
5.8 KiB
Python
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))
|