def badge(request, pk=""): choices = [(p.id, p.name + " - " + p.site.title) for p in request.user.players.all()] if request.method == "POST": form = BadgeForm(request.POST) form.fields["players"].choices = choices if form.is_valid(): players = [get_object_or_404(Player, pk=int(p)) for p in form.cleaned_data["players"]] if pk: badge = get_object_or_404(Badge, pk=int(pk)) badge.players.clear() badge.title = form.cleaned_data["title"] badge.format = form.cleaned_data["config"] badge.is_custom = form.custom_format else: config = form.cleaned_data["config"].replace(r"\n", "\n") badge = Badge( user=request.user, is_custom=form.custom_format, format=config, title=form.cleaned_data["title"] ) badge.save() for p in players: badge.players.add(p) badge.save() badge.url = "images/badges/badge_custom_%s_%s.png" % (request.user.pk, badge.pk) badge.save() try: build_badge.delay(badge) except Exception as e: logging.exception(e.args[0]) raise e return HttpResponseRedirect(reverse("account_profile")) else: if pk: badge = get_object_or_404(Badge, pk=pk) if badge.is_custom: params = eval(badge.format) formData = { "title": badge.title, "players": [p.id for p in badge.players.all()], "preset": params["template"], "background": params["background"], "top_color": params["color1"], "bottom_color": params["color2"], "text_color": params["text"], "font_size": params["size"], } else: config = badge.format.replace("\n", "\\n") formData = { "title": badge.title, "config": config, "players": [(p.id, p.name + " - " + p.site.title) for p in badge.players.all()], } form = BadgeForm(initial=formData) else: # form = BadgeForm({'players':players}) form = BadgeForm() form.fields["players"].choices = choices return render_to_response("badge.html", {"form": form, "pk": pk}, context_instance=RequestContext(request))
def badge_preview(request): choices = [(p.id, p.name + " - " + p.site.title) for p in request.user.players.all()] url = "images/badges/badge_temp_%s.png" % hash(request.META["REMOTE_ADDR"]) if request.method == "POST": form = BadgeForm(request.POST) form.fields["players"].choices = choices if form.is_valid(): class Temp(object): pass badge = Temp() players = [get_object_or_404(Player, pk=int(p)) for p in form.cleaned_data["players"]] badge.players = Temp() badge.players.all = lambda: players badge.title = form.cleaned_data["title"] badge.format = form.cleaned_data["config"] badge.is_custom = form.custom_format badge.url = url badge.user = request.user build_badge.delay(badge) else: print form.errors return HttpResponse(url + "?" + str(hash(datetime.datetime.now())))