project/scipycon/user/utils.py
author Madhusudan.C.S <madhusudancs@gmail.com>
Thu, 18 Nov 2010 19:04:24 +0530
branchpayments
changeset 278 2ea8af6851c9
parent 143 ea9477690acd
permissions -rw-r--r--
Modify the delegate_remainder function to send mails for the registered user and add content for registration update mail.

import os

from django.conf import settings
from django.core.exceptions import ObjectDoesNotExist
from django.contrib.auth.models import User

from PIL import Image

from project.scipycon.base.models import Event
from project.scipycon.user.models import UserProfile


def scipycon_createregistrant(request, data, scope):
    """Create user
    """

    email = data.get('email')
    name = data.get('name')
    username = data.get('username')

    n = name.split(' ')
    if len(n) > 1:
        first_name = ' '.join(n[:-1])
        last_name = n[-1]
    else:
        first_name = ''
        last_name = n[0]


    # Create user
    user = User.objects.create_user(username=username, email=email)
    user.first_name = first_name
    user.last_name = last_name
    user.save()

    scope_entity = Event.objects.get(scope=scope)
    try:
        profile = user.get_profile()
    except:
        profile, new = UserProfile.objects.get_or_create(
            user=user, scope=scope_entity)
        profile.save()

    return user

def scipycon_createuser(request, data, scope):
    """Create user
    """

    from django.contrib.auth import authenticate
    from django.contrib.auth import login

    email = data.get('email')
    username = data.get('username')
    password = data.get('password_1')
    password = data.get('password_1')

    # Create user
    user = User.objects.create_user(
        username=username, email=email, password=password)
    user.first_name = data.get('first_name')
    user.last_name = data.get('last_name')
    user.save()

    # Log in user
    
    user = authenticate(username=username, password=password)

    login(request, user)

    scope_entity = Event.objects.get(scope=scope)

    try:
        profile = user.get_profile()
    except:
        profile, new = UserProfile.objects.get_or_create(
            user=user, scope=scope_entity)

    photo = request.FILES.get('photo', None)
    filename= None
    if photo:
        filename = handle_uploaded_photo(user, request.FILES['photo'])
    if filename:
        profile.photo = filename

    profile.url = data.get('url')
    profile.about = data.get('about')
    profile.save()

    return user

def handle_uploaded_photo(user, ufile):
    """Handles the upload and gives the file path to be saved.
    """

    usermedia = settings.USER_MEDIA_ROOT
    filename = ufile.name
    ext = filename.split('.')[-1]

    filecontent = ufile.read()
    userfilename = 'user-%d.%s' % (user.id, ext)
    if not filecontent:
        return None

    #save
    foutname = os.path.join(usermedia, userfilename)

    fout = file(foutname, 'wb')
    fout.write(filecontent)
    fout.close()

    # crop and resize
    image = Image.open(foutname)
    pw = image.size[0]
    ph = image.size[1]
    nw = nh = 80
    if (pw, ph) != (nw, nh):
        pr = float(pw) / float(ph)
        nr = float(nw) / float(nh)

        if pr > nr:
            # photo aspect is wider than destination ratio
            tw = int(round(nh * pr))
            image = image.resize((tw, nh), Image.ANTIALIAS)
            l = int(round(( tw - nw ) / 2.0))
            image = image.crop((l, 0, l + nw, nh))
        elif pr < nr:
            # photo aspect is taller than destination ratio
            th = int(round(nw / pr))
            image = image.resize((nw, th), Image.ANTIALIAS)
            t = int(round(( th - nh ) / 2.0))
            image = image.crop((0, t, nw, t + nh))
        else:
            # photo aspect matches the destination ratio
            image = image.resize((nw, nh), Image.ANTIALIAS)

        image.save(str(foutname))
    return userfilename