X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=influences%2Fviews.py;h=51cfb495692fb9b6c6b71671eed1a0c10fe00206;hb=483829feb4f219b31afebaf1d5f7136dfcc05a18;hp=4450efadc8e863fe825e9e5871d9cb0faf42fca8;hpb=25f8408523048e3734758d970efaf12b1d7157db;p=matthijs%2Fprojects%2Fxerxes.git diff --git a/influences/views.py b/influences/views.py index 4450efa..51cfb49 100644 --- a/influences/views.py +++ b/influences/views.py @@ -1,23 +1,79 @@ +from django.contrib.auth.decorators import login_required from django.shortcuts import render_to_response from django.shortcuts import get_object_or_404 +from django.template import RequestContext +from django.utils.translation import ugettext as _ +from django.contrib.auth.models import User +from django.core.urlresolvers import reverse +from django.http import HttpResponseRedirect, HttpResponseForbidden +from django.views.generic.list_detail import object_detail, object_list from ee.influences.models import Character from ee.influences.models import Influence -from django import newforms as forms - -class AddInfluenceForm(forms.Form): - contact = forms.CharField(max_length=255, help_text='Which contact will you ask?') - description = forms.CharField(help_text='What do you want to achieve') - -def addinfluence(request, character_id): - character = get_object_or_404(Character, id=character_id) - message = None - if (request.method == "POST"): - f = AddInfluenceForm(request.POST) - if (f.is_valid()): - inf = character.influence_set.create(contact = f.clean_data['contact'], description = f.clean_data['description']) - message = "Influence added" - f = None +from ee.tools.forms import ContextModelForm + + + +class InfluenceForm(ContextModelForm): + class Meta: + model = Influence + fields = ('character', 'contact', 'summary', 'description') + +class CharacterForm(ContextModelForm): + class Meta: + model = Character + fields = ('name') + +@login_required +def add(request, character_id=None): + initial = {} + # Get the current user's characters + chars = request.user.character_set.all() + + if (character_id): + initial['character'] = character_id + elif (chars.count() == 1): + initial['character'] = chars[0].id + + f = InfluenceForm(request=request, initial=initial) + if (f.is_valid()): + influence = f.save(commit=False) + if (influence.character.player == request.user): + influence.save() + return HttpResponseRedirect(reverse('influences_influence_detail', args=[influence.id])) else: - f = AddInfluenceForm() + # TODO: Make this a bit more pretty. Perhaps throw an exception here and add some middleware to catch it? + return HttpResponseForbidden("Forbidden -- Trying to submit influence for somebody else's character") + + # Only allow characters of the current user + f.fields['character']._set_queryset(chars) + + return render_to_response('influences/add.html', {'form' : f}, RequestContext(request)) + +@login_required +def addCharacter(request): + f = CharacterForm(request=request) + if (f.is_valid()): + character = f.save(commit=False) + character.player = request.user + character.save() + return HttpResponseRedirect(reverse('influences_character_detail', args=[character.id])) + + return render_to_response('influences/add_character.html', {'form' : f}, RequestContext(request)) + +@login_required +def index(request): + characters = request.user.character_set.all() + influences = Influence.objects.filter(character__in=characters) + return render_to_response('influences/index.html', {'characters' : characters, 'influences' : influences}, RequestContext(request)) + +@login_required +def character_list(*args, **kwargs): + return object_list(*args, **kwargs) + +@login_required +def character_detail(*args, **kwargs): + return object_detail(*args, **kwargs) - return render_to_response('influences/character_addinfluence.html', {'character' : character, 'message' : message, 'form' : f}) +@login_required +def influence_detail(*args, **kwargs): + return object_detail(*args, **kwargs)