from django.shortcuts import render_to_response from django.template import RequestContext from django.contrib.auth.decorators import login_required from django.db.models import Count from django.http import HttpResponseRedirect from main.models import Plugin, PluginPermission from buyable.models import Purchase, Buyable @login_required def startpage(request): ''' Diese Funktion wird wahrscheinlich viel Last erzeugen, da sie ueber mehrere Tabellen joined,filtered und wieder reduced. ''' allMost = Purchase.objects.filter(isDeposit=False).values('buyable__name', 'buyable__id').annotate(num_buys=Count('buyable')).order_by('-num_buys') usersMost = Purchase.objects.filter(isDeposit=False).values('buyable__name','buyable__id').filter(order__user=request.user.id).annotate(num_buys=Count('buyable')).order_by('-num_buys') usersLast = Purchase.objects.filter(isDeposit=False).values('buyable__name','buyable__id').filter(order__user=request.user.id).order_by('-order__dateTime') return render_to_response("main/startpage.html", {'allMost' : allMost,'usersMost': usersMost, 'usersLast' : usersLast[:12]}, RequestContext(request)) def register(request): """ The "no registration available" page... """ return render_to_response("registration/register.html", RequestContext(request)) def getPluginDict(request): """ Generate a dict containing the users plugin information. """ plugins = Plugin.objects.all() allowed = Plugin.objects.filter(pluginpermission__user=request.user) unallowed = Plugin.objects.exclude(pluginpermission__user=request.user) perms = PluginPermission.objects.filter(user=request.user) return {'plugins': plugins, 'allowed': allowed, 'unallowed': unallowed, 'permissions': perms} @login_required def settings(request): """ Render settings page. """ return render_to_response("settings/settings.html", getPluginDict(request), RequestContext(request)) @login_required def pluginPermission(request, method, pluginId): """ View to edit the users :class:`Plugin` permissions. """ plugin = None try: plugin = Plugin.objects.get(id=pluginId) except Plugin.DoesNotExist: d = getPluginDict(request) d['pluginerror'] = "Ein Plugin mit der angegebenen ID existiert nicht" return render_to_response("settings/settings.html", d, RequestContext(request)) if method == "allow": try: p = PluginPermission.objects.get(user=request.user, plugin=plugin) d = getPluginDict(request) d['pluginerror'] = "Dieses Plugin wurde bereits erlaubt" return render_to_response("settings/settings.html", d, RequestContext(request)) except PluginPermission.DoesNotExist: p = PluginPermission(user=request.user, plugin=plugin) p.save() else: try: p = PluginPermission.objects.get(user=request.user, plugin=plugin) p.delete() except PluginPermission.DoesNotExist: d = getPluginDict(request) d['pluginerror'] = "Keine Berechtigungen für dieses Plugin gefunden - kann also auch nicht zurückgezogen werden" return render_to_response("settings/settings.html", d, RequestContext(request)) return HttpResponseRedirect("/user/settings/") @login_required def pluginAuthblob(request, pluginId): """ View to edit the users :attr:`authblob `. """ if request.method != "POST": return HttpResponseRedirect("/user/settings/") plugin = None try: plugin = Plugin.objects.get(id=pluginId) except Plugin.DoesNotExist: d = getPluginDict(request) d['pluginerror'] = "Ein Plugin mit der angegebenen ID existiert nicht" return render_to_response("settings/settings.html", d, RequestContext(request)) p = None try: p = PluginPermission.objects.get(user=request.user, plugin=plugin) except PluginPermission.DoesNotExist: d = getPluginDict(request) d['pluginerror'] = "Vor dem editieren vom Authblob muss das Plugin ersteinmal erlaubt werden" return render_to_response("settings/settings.html", d, RequestContext(request)) if not p.plugin.userCanWriteAuthblob or not request.POST.has_key("authblob"): d = getPluginDict(request) d['pluginerror'] = "Der Authblob darf für dieses Plugin nicht vom User verändert werden (oder der Authblob war kaputt)" return render_to_response("settings/settings.html", d, RequestContext(request)) if p.plugin.uniqueAuthblob and PluginPermission.objects.filter(plugin=plugin, authblob=request.POST["authblob"]).count() > 0: d = getPluginDict(request) d['pluginerror'] = "Achtung! Dein Authblob wird bereits von einer anderen Person benutzt. Bitte wähle einen anderen (eindeutigen) Authblob!" return render_to_response("settings/settings.html", d, RequestContext(request)) p.authblob = request.POST['authblob'] p.save() d = getPluginDict(request) d['pluginmsg'] = "Authblob erfolgreich geändert" return render_to_response("settings/settings.html", d, RequestContext(request))