pytask/taskapp/views/user.py
author anoop
Mon, 01 Feb 2010 17:30:30 +0530
changeset 22 943a35c14cf7
parent 21 3e676fa948c4
permissions -rw-r--r--
added browse users functionality, added user/browse.html, fixed view my profile template.

from django.http import HttpResponse
from django.shortcuts import redirect, render_to_response
from pytask.taskapp.models import Task
from pytask.taskapp.forms.user import RegistrationForm, LoginForm, UserProfileEditForm
from pytask.taskapp.events.user import createUser, updateProfile
from django.contrib.auth import login, logout, authenticate
from django.contrib.auth.models import User
from pytask.taskapp.models import Profile

def show_msg(message, redirect_url=None, url_desc=None):
    """ simply redirect to homepage """
    
    return render_to_response('show_msg.html',{'message':message, 'redirect_url':redirect_url, 'url_desc':url_desc})

def homepage(request):
    """ check for authentication and display accordingly. """
    
    user = request.user
    is_guest = False
    is_mentor = False
    can_create_task = False
    task_list = []
    
    if not user.is_authenticated():
        is_guest = True
        disp_num = 10
        tasks_count = Task.objects.count()
        if tasks_count <= disp_num:
            task_list = Task.objects.order_by('id').reverse()
        else:
            task_list = Task.objects.order_by('id').reverse()[:10]
            
        return render_to_response('index.html', {'is_guest':is_guest, 'task_list':task_list})
        
    else:
        user_profile = user.get_profile()
        is_mentor = True if user.task_mentors.all() else False
        can_create_task = False if user_profile.rights == u"CT" else True
        
        context = {'user':user,
                   'is_guest':is_guest,
                   'is_mentor':is_mentor,
                   'task_list':task_list,
                   'can_create_task':can_create_task,
                   }
                   
        return render_to_response('index.html', context)


def register(request):
    """ user registration: gets the user details and create the user and userprofile if data entered is valid"""
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            data = form.cleaned_data
            if data['password'] == data['repeat_password']:
                if data['username'].isalnum():
                    try:
                        if User.objects.get(username__exact = data['username']):
                            errors=['Choose some other username']
                            return render_to_response('user/register.html',{'form':form,'errors':errors})
                    except:
                         u = createUser(username=data['username'], email=data['email'], password=data['password'],dob = data['dob'],gender = data['gender'])
                    return redirect('/accounts/login/')
                else:
                    errors = ['Username can contain only alphabets and numbers!']
                    return render_to_response('user/register.html',{'form':form,'errors':errors})
            else:
                errors=['Password do not match']
                form = RegistrationForm(request.POST)
                return render_to_response('user/register.html',{'form':form,'errors':errors})#HttpResponse('Password did not match')
        else:
            form = RegistrationForm(request.POST)
    else:
        form = RegistrationForm()
    return render_to_response('user/register.html', {'form': form})

def user_login(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                login(request, user)
                return redirect('/')# Redirect to a success page.
            else:
                return show_msg('username is not active, please contact the administrator')# Return a 'disabled account' error message
        else:
            errors = ['Please check your username and password']
            form = LoginForm()
            return render_to_response('user/login.html',{'form':form,'errors':errors})# Return an 'invalid login' error message.
        return redirect('/')
    else:
        form = LoginForm()
        return render_to_response('user/login.html',{'form': form})

def user_logout(request):
    logout(request)
    return show_msg('You have logged off successfully!!!')

def view_my_profile(request,uid):
    """ allows the user to view the profiles of users """
    edit_profile = True if request.user == User.objects.get(pk=uid) else False
    try:
        profile = Profile.objects.get(user = User.objects.get(pk=uid))
    except Profile.DoesNotExist:
        raise Http404
    return render_to_response('user/my_profile.html', {'edit_profile':edit_profile,'profile':profile})

def edit_my_profile(request):
    """ enables the user to edit his/her user profile """
    if str(request.user) == 'AnonymousUser':
        return show_msg('Please register yourself to activate the functionality')
    if request.method == 'POST':
        form = UserProfileEditForm(request.POST)
#        if not form.is_valid():
#            edit_profile_form = UserProfileEditForm(instance = form)
#            return render_to_response('user/edit_profile.html',{'edit_profile_form' : edit_profile_form})
        if request.user.is_authenticated() == True:
            profile = Profile.objects.get(user = request.user)
            data = request.POST#form.cleaned_data
            properties = {'aboutme':data['aboutme'], 'foss_comm':data['foss_comm'], 'phonenum':data['phonenum'], 'homepage':data['homepage'], 'street':data['street'], 'city':data['city'], 'country':data['country'], 'nick':data['nick']}
            #fields = ['dob','gender','credits','aboutme','foss_comm','phonenum','homepage','street','city','country','nick']
            updateProfile(profile,properties)
            return redirect('/user/view/uid='+str(profile.user_id))
    else:
        profile = Profile.objects.get(user = request.user)
        edit_profile_form = UserProfileEditForm(instance = profile)
        return render_to_response('user/edit_profile.html',{'edit_profile_form' : edit_profile_form})

def browse_users(request):
    userlist = User.objects.order_by('username')
    return render_to_response('user/browse.html',{'userlist':userlist})