gremmie@1: """ gremmie@1: Views for the bio application. gremmie@1: """ gremmie@1: gremmie@1: from django.shortcuts import render_to_response gremmie@1: from django.shortcuts import get_object_or_404 gremmie@1: from django.template import RequestContext gremmie@1: from django.contrib import auth gremmie@1: from django.http import HttpResponseRedirect gremmie@1: from django.core.urlresolvers import reverse gremmie@1: from django.contrib.auth.decorators import login_required gremmie@1: gremmie@1: from bio.models import UserProfile gremmie@1: from bio.forms import UploadAvatarForm gremmie@1: from bio.forms import EditUserForm gremmie@1: from bio.forms import EditUserProfileForm gremmie@1: from core.paginator import DiggPaginator gremmie@1: gremmie@1: ####################################################################### gremmie@1: gremmie@1: def get_profile(user): gremmie@1: try: gremmie@1: profile = user.get_profile() gremmie@1: except: gremmie@1: profile = UserProfile() gremmie@1: profile.user = user gremmie@1: return profile gremmie@1: gremmie@1: ####################################################################### gremmie@1: gremmie@1: def member_list(request, type='user', page=1): gremmie@1: if type == 'user': gremmie@1: users = auth.models.User.objects.all().order_by('username') gremmie@1: else: gremmie@1: users = auth.models.User.objects.all().order_by('date_joined') gremmie@1: gremmie@1: paginator = DiggPaginator(users, 10, body=5, tail=3, margin=3, padding=2) gremmie@1: try: gremmie@1: the_page = paginator.page(int(page)) gremmie@1: except InvalidPage: gremmie@1: raise Http404 gremmie@1: gremmie@1: return render_to_response('bio/members.html', { gremmie@1: 'page': the_page, gremmie@1: 'type': type, gremmie@1: }, gremmie@1: context_instance = RequestContext(request)) gremmie@1: gremmie@1: ####################################################################### gremmie@1: gremmie@1: @login_required gremmie@1: def my_profile(request): gremmie@1: profile = get_profile(request.user) gremmie@1: gremmie@1: return render_to_response('bio/view_profile.html', { gremmie@1: 'subject': request.user, gremmie@1: 'profile': profile, gremmie@1: 'hide_email': False, gremmie@1: 'this_is_me': True, gremmie@1: }, gremmie@1: context_instance = RequestContext(request)) gremmie@1: gremmie@1: ####################################################################### gremmie@1: gremmie@1: @login_required gremmie@1: def view_profile(request, username): gremmie@1: gremmie@1: user = get_object_or_404(auth.models.User, username = username) gremmie@1: if user == request.user: gremmie@1: return HttpResponseRedirect(reverse('bio.views.my_profile')) gremmie@1: gremmie@1: profile = get_profile(user) gremmie@1: gremmie@1: # work around MySQL's handling of Boolean gremmie@1: hide_email = bool(profile.hide_email) gremmie@1: gremmie@1: return render_to_response('bio/view_profile.html', { gremmie@1: 'subject': user, gremmie@1: 'profile': profile, gremmie@1: 'hide_email': hide_email, gremmie@1: 'this_is_me': False, gremmie@1: }, gremmie@1: context_instance = RequestContext(request)) gremmie@1: gremmie@1: ####################################################################### gremmie@1: gremmie@1: @login_required gremmie@1: def edit_profile(request): gremmie@1: if request.method == 'POST': gremmie@1: if request.POST.get('submit_button', 'Cancel') == 'Cancel': gremmie@1: return HttpResponseRedirect(reverse('bio.views.my_profile')) gremmie@1: profile = get_profile(request.user) gremmie@1: user_form = EditUserForm(request.POST, instance=request.user) gremmie@1: profile_form = EditUserProfileForm(request.POST, instance=profile) gremmie@1: if user_form.is_valid() and profile_form.is_valid(): gremmie@1: user_form.save() gremmie@1: profile = profile_form.save(commit=False) gremmie@1: profile.user = request.user gremmie@1: profile.save() gremmie@1: return HttpResponseRedirect(reverse('bio.views.my_profile')) gremmie@1: else: gremmie@1: profile = get_profile(request.user) gremmie@1: user_form = EditUserForm(instance=request.user) gremmie@1: profile_form = EditUserProfileForm(instance=profile) gremmie@1: gremmie@1: return render_to_response('bio/edit_profile.html', { gremmie@1: 'user_form': user_form, gremmie@1: 'profile_form': profile_form, gremmie@1: }, gremmie@1: context_instance = RequestContext(request)) gremmie@1: gremmie@1: ####################################################################### gremmie@1: gremmie@1: @login_required gremmie@1: def change_avatar(request): gremmie@1: if request.method == 'POST': gremmie@1: form = UploadAvatarForm(request.POST, request.FILES) gremmie@1: if form.is_valid(): gremmie@1: profile = get_profile(request.user) gremmie@1: file = form.get_file() gremmie@1: if profile.avatar.name != '': gremmie@1: profile.avatar.delete(save=False) gremmie@1: if file is not None: gremmie@1: profile.avatar.save(form.get_filename(), file, save=False) gremmie@1: profile.save() gremmie@1: gremmie@1: request.user.message_set.create(message='Avatar updated.') gremmie@1: return HttpResponseRedirect(reverse('bio-me')) gremmie@1: else: gremmie@1: form = UploadAvatarForm() gremmie@1: gremmie@1: return render_to_response('bio/avatar.html', { gremmie@1: 'form': form, gremmie@1: }, gremmie@1: context_instance = RequestContext(request)) gremmie@1: gremmie@1: gremmie@1: # vim: ts=4 sw=4