Changeset - fcbacc82e68c
[Not reviewed]
0 3 0
James Polley - 7 years ago 2017-12-26 12:10:21
jp@jamezpolley.com
Add views to allow for PNG rendering of badge
3 files changed with 20 insertions and 9 deletions:
0 comments (0 inline, 0 general)
requirements.txt
Show inline comments
...
 
@@ -19,25 +19,26 @@ django-nose>=1.4.4
 
coverage==4.0.3
 

	
 

	
 
# Symposion reqs
 
django-appconf==1.0.1
 
django-model-utils>=3.0.0
 
django-reversion==1.10.1
 
django-sitetree>=1.8.0
 
django-taggit==0.18.0
 
django-timezone-field>=2.0
 
easy-thumbnails>=2.4.1
 
bleach
 
pytz==2015.7
 
django-ical==1.4
 

	
 

	
 
# registratoin reqs
 
# registrasion reqs
 
django-nested-admin==2.2.6
 

	
 
CairoSVG==2.1.2
 

	
 
# Registripe
 
django-countries>=4.3
 
pinax-stripe==3.2.1
 
requests>=2.11.1
 
stripe==1.38.0
 

	
vendor/registrasion/registrasion/urls.py
Show inline comments
...
 
@@ -14,33 +14,35 @@ from .views import (
 
    extend_reservation,
 
    guided_registration,
 
    invoice,
 
    invoice_access,
 
    invoice_mailout,
 
    manual_payment,
 
    product_category,
 
    refund,
 
    review,
 
    voucher_code,
 
)
 

	
 

	
 
public = [
 
    url(r"^amend/([0-9]+)$", amend_registration, name="amend_registration"),
 
    url(r"^mybadge$", user_badge, name="user_badge"),
 
    url(r"^mybadge/(png|svg)", user_badge, name="user_badge"),
 
    url(r"^badge/([0-9]+)$", badge, name="badge"),
 
    url(r"^badge/([0-9]+).(png|svg)$", badge, name="badge"),
 
    url(r"^badger/([A-Za-z0-9]+)$", badger, name="badger"),
 
    url(r"^badger/", badger, name="badger"),
 
    url(r"^category/([0-9]+)$", product_category, name="product_category"),
 
    url(r"^checkout$", checkout, name="checkout"),
 
    url(r"^checkout/([0-9]+)$", checkout, name="checkout"),
 
    url(r"^credit_note/([0-9]+)$", credit_note, name="credit_note"),
 
    url(r"^extend/([0-9]+)$", extend_reservation, name="extend_reservation"),
 
    url(r"^invoice/([0-9]+)$", invoice, name="invoice"),
 
    url(r"^invoice/([0-9]+)/([A-Z0-9]+)$", invoice, name="invoice"),
 
    url(r"^invoice/([0-9]+)/manual_payment$",
 
        manual_payment, name="manual_payment"),
 
    url(r"^invoice/([0-9]+)/refund$",
 
        refund, name="refund"),
 
    url(r"^invoice_access/([A-Z0-9]+)$", invoice_access,
 
        name="invoice_access"),
 
    url(r"^invoice_mailout$", invoice_mailout, name="invoice_mailout"),
vendor/registrasion/registrasion/views.py
Show inline comments
...
 
@@ -25,32 +25,33 @@ from collections import namedtuple
 
from django import forms as django_forms
 
from django.conf import settings
 
from django.contrib.auth.decorators import login_required
 
from django.contrib.auth.decorators import user_passes_test
 
from django.contrib.auth.models import User
 
from django.contrib import messages
 
from django.core.exceptions import ObjectDoesNotExist
 
from django.core.exceptions import ValidationError
 
from django.core.mail import send_mass_mail
 
from django.http import Http404, HttpResponse
 
from django.shortcuts import redirect
 
from django.shortcuts import render
 
from django.template import Context, Template, loader
 

	
 
from lxml import etree
 
from copy import deepcopy
 
from cairosvg import svg2png
 

	
 
from registrasion.forms import BadgeForm, ticket_selection
 
from registrasion.contrib.badger import (
 
                                         collate,
 
                                         svg_badge,
 
                                         InvalidTicketChoiceError
 
                                         )
 

	
 
_GuidedRegistrationSection = namedtuple(
 
    "GuidedRegistrationSection",
 
    (
 
        "title",
 
        "discounts",
 
        "description",
 
        "form",
 
    )
...
 
@@ -1100,52 +1101,59 @@ def invoice_mailout(request):
 
        if form.cleaned_data["action"] == forms.InvoiceEmailForm.ACTION_SEND:
 
            # Send e-mails *ONLY* if we're sending.
 
            send_mass_mail(emails)
 
            messages.info(request, "The e-mails have been sent.")
 

	
 
    data = {
 
        "form": form,
 
        "emails": emails,
 
    }
 

	
 
    return render(request, "registrasion/invoice_mailout.html", data)
 

	
 
def _get_badge_template_name():
 
    return os.path.join(settings.PROJECT_ROOT, 'pinaxcon', 'templates',
 
                        settings.BADGER_DEFAULT_SVG)
 
@login_required
 
def user_badge(request):
 
def user_badge(request, format="png"):
 
    '''Shows the logged-in user their badge'''
 

	
 
    return render_badge(request.user)
 
    return render_badge(request.user, format)
 

	
 
@user_passes_test(_staff_only)
 
def badge(request, user_id):
 
def badge(request, user_id, format="svg"):
 
    ''' Renders a single user's badge (SVG). '''
 

	
 
    user_id = int(user_id)
 
    user = User.objects.get(pk=user_id)
 

	
 
    return render_badge(user)
 
    return render_badge(user, format)
 

	
 
def render_badge(user):
 
def render_badge(user, format="svg"):
 
    rendered = render_badge_svg(user)
 
    if format == "png":
 
        rendered = svg2png(bytestring=svg, dpi=72, scale=3)
 

	
 
    response = HttpResponse(rendered)
 

	
 
    response["Content-Type"] = "image/svg+xml;charset=utf-8"
 
    response["Content-Disposition"] = 'inline; filename="badge.svg"'
 
    if format == "svg":
 
        response["Content-Type"] = "image/svg+xml;charset=utf-8"
 
        response["Content-Disposition"] = 'inline; filename="badge.svg"'
 
    elif format == "png":
 
        response["Content-Type"] = "image/png"
 
        response["Content-Disposition"] = 'inline; filename="badge.png"'
 
    return response
 

	
 
def render_badge_svg(user):
 
    ''' Renders a single user's badge as SVG. '''
 

	
 
    data = {
 
        "user": user,
 
    }
 

	
 
    t = loader.get_template('registrasion/badge.svg')
 
    return t.render(data)
 

	
 
def badges(request):
 
    '''
 
    *** NOT USED FOR PYCONAU 2017 MELBOURNE  (I.e., not supported in badger module.) ***
 

	
0 comments (0 inline, 0 general)