annotate gpp/bio/views.py @ 133:c515b7401078

Use the new common way to apply markItUp to textareas and to get the smiley and markdown help dialogs for all the remaining apps except for forums and comments.
author Brian Neal <bgneal@gmail.com>
date Fri, 27 Nov 2009 00:21:47 +0000
parents 903ae6168071
children 7ea842744a57
rev   line source
gremmie@1 1 """
gremmie@1 2 Views for the bio application.
gremmie@1 3 """
gremmie@1 4
gremmie@1 5 from django.shortcuts import render_to_response
gremmie@1 6 from django.shortcuts import get_object_or_404
gremmie@1 7 from django.template import RequestContext
gremmie@1 8 from django.contrib import auth
gremmie@1 9 from django.http import HttpResponseRedirect
bgneal@92 10 from django.core.paginator import InvalidPage
gremmie@1 11 from django.core.urlresolvers import reverse
gremmie@1 12 from django.contrib.auth.decorators import login_required
gremmie@1 13
bgneal@29 14 from elsewhere.models import SocialNetworkForm
bgneal@29 15 from elsewhere.models import InstantMessengerForm
bgneal@29 16 from elsewhere.models import WebsiteForm
bgneal@29 17
gremmie@1 18 from bio.models import UserProfile
gremmie@1 19 from bio.forms import UploadAvatarForm
gremmie@1 20 from bio.forms import EditUserForm
gremmie@1 21 from bio.forms import EditUserProfileForm
gremmie@1 22 from core.paginator import DiggPaginator
gremmie@1 23
gremmie@1 24 #######################################################################
gremmie@1 25
bgneal@125 26 @login_required
gremmie@1 27 def member_list(request, type='user', page=1):
gremmie@1 28 if type == 'user':
gremmie@1 29 users = auth.models.User.objects.all().order_by('username')
gremmie@1 30 else:
gremmie@1 31 users = auth.models.User.objects.all().order_by('date_joined')
gremmie@1 32
gremmie@1 33 paginator = DiggPaginator(users, 10, body=5, tail=3, margin=3, padding=2)
gremmie@1 34 try:
gremmie@1 35 the_page = paginator.page(int(page))
gremmie@1 36 except InvalidPage:
gremmie@1 37 raise Http404
gremmie@1 38
bgneal@118 39 # Attach user profiles to each post to avoid using get_user_profile() in
bgneal@118 40 # the template.
bgneal@118 41 users = set(user.id for user in the_page.object_list)
bgneal@118 42
bgneal@118 43 profiles = UserProfile.objects.filter(user__id__in=users).select_related()
bgneal@118 44 user_profiles = dict((profile.user.id, profile) for profile in profiles)
bgneal@118 45
bgneal@118 46 for user in the_page.object_list:
bgneal@118 47 user.user_profile = user_profiles[user.id]
bgneal@118 48
gremmie@1 49 return render_to_response('bio/members.html', {
gremmie@1 50 'page': the_page,
gremmie@1 51 'type': type,
gremmie@1 52 },
gremmie@1 53 context_instance = RequestContext(request))
gremmie@1 54
gremmie@1 55 #######################################################################
gremmie@1 56
gremmie@1 57 @login_required
gremmie@1 58 def my_profile(request):
bgneal@44 59 profile = request.user.get_profile()
gremmie@1 60
gremmie@1 61 return render_to_response('bio/view_profile.html', {
gremmie@1 62 'subject': request.user,
gremmie@1 63 'profile': profile,
gremmie@1 64 'hide_email': False,
gremmie@1 65 'this_is_me': True,
gremmie@1 66 },
gremmie@1 67 context_instance = RequestContext(request))
gremmie@1 68
gremmie@1 69 #######################################################################
gremmie@1 70
gremmie@1 71 @login_required
gremmie@1 72 def view_profile(request, username):
gremmie@1 73
gremmie@1 74 user = get_object_or_404(auth.models.User, username = username)
gremmie@1 75 if user == request.user:
gremmie@1 76 return HttpResponseRedirect(reverse('bio.views.my_profile'))
gremmie@1 77
bgneal@44 78 profile = user.get_profile()
gremmie@1 79
gremmie@1 80 # work around MySQL's handling of Boolean
gremmie@1 81 hide_email = bool(profile.hide_email)
gremmie@1 82
gremmie@1 83 return render_to_response('bio/view_profile.html', {
gremmie@1 84 'subject': user,
gremmie@1 85 'profile': profile,
gremmie@1 86 'hide_email': hide_email,
gremmie@1 87 'this_is_me': False,
gremmie@1 88 },
gremmie@1 89 context_instance = RequestContext(request))
gremmie@1 90
gremmie@1 91 #######################################################################
gremmie@1 92
gremmie@1 93 @login_required
gremmie@1 94 def edit_profile(request):
gremmie@1 95 if request.method == 'POST':
gremmie@1 96 if request.POST.get('submit_button', 'Cancel') == 'Cancel':
gremmie@1 97 return HttpResponseRedirect(reverse('bio.views.my_profile'))
bgneal@44 98 profile = request.user.get_profile()
gremmie@1 99 user_form = EditUserForm(request.POST, instance=request.user)
gremmie@1 100 profile_form = EditUserProfileForm(request.POST, instance=profile)
gremmie@1 101 if user_form.is_valid() and profile_form.is_valid():
gremmie@1 102 user_form.save()
gremmie@1 103 profile = profile_form.save(commit=False)
gremmie@1 104 profile.user = request.user
gremmie@1 105 profile.save()
gremmie@1 106 return HttpResponseRedirect(reverse('bio.views.my_profile'))
gremmie@1 107 else:
bgneal@44 108 profile = request.user.get_profile()
gremmie@1 109 user_form = EditUserForm(instance=request.user)
gremmie@1 110 profile_form = EditUserProfileForm(instance=profile)
gremmie@1 111
gremmie@1 112 return render_to_response('bio/edit_profile.html', {
gremmie@1 113 'user_form': user_form,
gremmie@1 114 'profile_form': profile_form,
gremmie@1 115 },
gremmie@1 116 context_instance = RequestContext(request))
gremmie@1 117
gremmie@1 118 #######################################################################
gremmie@1 119
gremmie@1 120 @login_required
gremmie@1 121 def change_avatar(request):
gremmie@1 122 if request.method == 'POST':
gremmie@1 123 form = UploadAvatarForm(request.POST, request.FILES)
gremmie@1 124 if form.is_valid():
bgneal@44 125 profile = request.user.get_profile()
gremmie@1 126 file = form.get_file()
gremmie@1 127 if profile.avatar.name != '':
gremmie@1 128 profile.avatar.delete(save=False)
gremmie@1 129 if file is not None:
gremmie@1 130 profile.avatar.save(form.get_filename(), file, save=False)
gremmie@1 131 profile.save()
gremmie@1 132
gremmie@1 133 request.user.message_set.create(message='Avatar updated.')
gremmie@1 134 return HttpResponseRedirect(reverse('bio-me'))
gremmie@1 135 else:
gremmie@1 136 form = UploadAvatarForm()
gremmie@1 137
gremmie@1 138 return render_to_response('bio/avatar.html', {
gremmie@1 139 'form': form,
gremmie@1 140 },
gremmie@1 141 context_instance = RequestContext(request))
gremmie@1 142
bgneal@29 143 #######################################################################
gremmie@1 144
bgneal@29 145 @login_required
bgneal@29 146 def edit_elsewhere(request):
bgneal@29 147 im_id = 'id_im_%s' # to prevent duplicate ID in HTML output
bgneal@29 148 if request.method == 'POST':
bgneal@29 149 new_data = request.POST.copy()
bgneal@29 150
bgneal@29 151 # Add forms
bgneal@29 152 if new_data.get('sn-form') or new_data.get('im-form') or new_data.get('w-form'):
bgneal@29 153
bgneal@29 154 if new_data.get('sn-form'):
bgneal@29 155 sn_form = SocialNetworkForm(new_data)
bgneal@29 156 im_form = InstantMessengerForm(auto_id=im_id)
bgneal@29 157 w_form = WebsiteForm()
bgneal@29 158 form = sn_form
bgneal@29 159 elif new_data.get('im-form'):
bgneal@29 160 sn_form = SocialNetworkForm()
bgneal@29 161 im_form = InstantMessengerForm(new_data, auto_id=im_id)
bgneal@29 162 w_form = WebsiteForm()
bgneal@29 163 form = im_form
bgneal@29 164 elif new_data.get('w-form'):
bgneal@29 165 sn_form = SocialNetworkForm()
bgneal@29 166 im_form = InstantMessengerForm(auto_id=im_id)
bgneal@29 167 w_form = WebsiteForm(new_data)
bgneal@29 168 form = w_form
bgneal@29 169
bgneal@29 170 if form.is_valid():
bgneal@29 171 profile = form.save(commit=False)
bgneal@29 172 profile.user = request.user
bgneal@29 173 profile.save()
bgneal@29 174 return HttpResponseRedirect(request.path)
bgneal@29 175
bgneal@29 176 # Delete forms
bgneal@29 177 elif new_data.get('delete-sn-form') or new_data.get('delete-im-form') or new_data.get('delete-w-form'):
bgneal@29 178 delete_id = request.POST['delete_id']
bgneal@29 179
bgneal@29 180 if new_data.get('delete-sn-form'):
bgneal@29 181 request.user.social_network_profiles.get(id=delete_id).delete()
bgneal@29 182 elif new_data.get('delete-im-form'):
bgneal@29 183 request.user.instant_messenger_profiles.get(id=delete_id).delete()
bgneal@29 184 elif new_data.get('delete-w-form'):
bgneal@29 185 request.user.website_profiles.get(id=delete_id).delete()
bgneal@29 186
bgneal@29 187 return HttpResponseRedirect(request.path)
bgneal@29 188
bgneal@29 189 # WTF?
bgneal@29 190 else:
bgneal@29 191 return HttpResponseServerError
bgneal@29 192
bgneal@29 193 else:
bgneal@29 194 # Create blank forms
bgneal@29 195 sn_form = SocialNetworkForm()
bgneal@29 196 im_form = InstantMessengerForm(auto_id=im_id)
bgneal@29 197 w_form = WebsiteForm()
bgneal@29 198
bgneal@29 199 return render_to_response('bio/edit_elsewhere.html', {
bgneal@29 200 'sn_form': sn_form,
bgneal@29 201 'im_form': im_form,
bgneal@29 202 'w_form': w_form,
bgneal@29 203 },
bgneal@29 204 context_instance=RequestContext(request))
bgneal@29 205