summaryrefslogtreecommitdiff
path: root/project/kiwipycon/user/views.py
diff options
context:
space:
mode:
authorMadhusudan.C.S2009-10-30 15:09:12 +0530
committerMadhusudan.C.S2009-10-30 15:09:12 +0530
commitf89410559c20dd88d78ccd6b9d24e7941da9d5ff (patch)
tree3ad4fb64efc7523d1f3065e0dd03693871d6ce55 /project/kiwipycon/user/views.py
parent75f0773685ef0724d8ccc1eb1aab16bba55cd7a7 (diff)
downloadscipycon-f89410559c20dd88d78ccd6b9d24e7941da9d5ff.tar.gz
scipycon-f89410559c20dd88d78ccd6b9d24e7941da9d5ff.tar.bz2
scipycon-f89410559c20dd88d78ccd6b9d24e7941da9d5ff.zip
Added all the files from kiwipycon and the changes made for SciPy.in.
Diffstat (limited to 'project/kiwipycon/user/views.py')
-rw-r--r--project/kiwipycon/user/views.py238
1 files changed, 238 insertions, 0 deletions
diff --git a/project/kiwipycon/user/views.py b/project/kiwipycon/user/views.py
new file mode 100644
index 0000000..e9a0454
--- /dev/null
+++ b/project/kiwipycon/user/views.py
@@ -0,0 +1,238 @@
+# -*- coding: utf-8 -*-
+from __future__ import absolute_import
+#python
+from urlparse import urlparse
+import urllib
+import os
+
+#django
+from django.conf import settings
+from django.shortcuts import render_to_response
+from django.template import RequestContext
+from django.core.urlresolvers import reverse
+from django.db.models.signals import post_save
+
+#django.contrib
+from django.contrib.auth.decorators import login_required
+from django.contrib.auth.forms import AuthenticationForm
+from django.contrib.auth.forms import PasswordChangeForm
+from django.core.exceptions import ObjectDoesNotExist
+
+#PIL
+from PIL import Image
+
+#kiwipycon
+from project.kiwipycon.utils import set_message_cookie
+from project.kiwipycon.talk.models import Talk
+from project.kiwipycon.registration.models import Registration
+from project.kiwipycon.registration.models import Wifi
+from project.kiwipycon.registration.forms import WifiForm
+from project.kiwipycon.sponsor.models import Sponsor
+
+from .utils import kiwipycon_createuser
+from .utils import handle_uploaded_photo
+from .forms import RegisterForm
+from .forms import EditProfileForm
+from .forms import UsernameForm
+
+@login_required
+def account(request, template_name="user/account.html"):
+ """Displays the main screen of the current user's account.
+ """
+ user = request.user
+ profile = user.get_profile()
+
+ talks = Talk.objects.filter(speaker=user)
+ try:
+ registration = Registration.objects.get(registrant=user)
+ except ObjectDoesNotExist:
+ registration = None
+ try:
+ wifiobj = Wifi.objects.get(user=user)
+ except ObjectDoesNotExist:
+ wifiobj = None
+
+ if profile.photo:
+ photo = os.path.join(settings.USER_MEDIA_URL, profile.photo)
+ else:
+ photo = '/img/user-default.png'
+
+ qstring = ""
+
+ wifi_comment = None
+ if wifiobj:
+ wifi_form = False
+ else:
+ if request.method == "POST":
+ wifi_form = WifiForm(request.POST)
+ if wifi_form.is_valid():
+ wifi_form.save(user)
+ wifi_comment = 'Thanks, your wifi preference has been saved'
+ wifi_form = None
+ else:
+ wifi_form = WifiForm()
+
+ return render_to_response(template_name, RequestContext(request, {
+ "form" : wifi_form, "comment": wifi_comment,
+ "user" : user, "profile" : profile, "photo" : photo,
+ "talks" : talks, "registration" : registration,
+ }))
+
+@login_required
+def edit_profile(request, template_name="user/editprofile.html"):
+ """Allows user to edit profile
+ """
+ user = request.user
+ profile = user.get_profile()
+
+ if request.method == "POST":
+ form = EditProfileForm(data=request.POST,
+ files=request.FILES)
+
+ if form.is_valid():
+ photo = request.FILES.get('photo', None)
+ filename= None
+ if photo:
+ filename = handle_uploaded_photo(user, request.FILES['photo'])
+ if filename:
+ profile.photo = filename
+
+ user.email = form.data.get("email")
+ user.first_name = form.data.get("first_name")
+ user.last_name = form.data.get("last_name")
+ user.save()
+
+ profile.url = form.data.get("url")
+ profile.about = form.data.get("about")
+ profile.save()
+
+ redirect_to = reverse("kiwipycon_account")
+ return set_message_cookie(redirect_to,
+ msg = u"Your profile has been changed.")
+
+ else:
+ form = EditProfileForm(initial={"email" : user.email,
+ "email2" : user.email, # hidden field
+ "first_name" : user.first_name,
+ "last_name" : user.last_name,
+ "url" : profile.url,
+ "about" : profile.about,
+ })
+
+ return render_to_response(template_name, RequestContext(request, {
+ "form": form
+ }))
+
+def login(request, template_name="user/login.html"):
+ """Custom view to login or register/login a user.
+ Integration of register and login form
+ It uses Django's standard AuthenticationForm, though.
+ """
+ user = request.user
+ if user.is_authenticated():
+ redirect_to = reverse("kiwipycon_account")
+ return set_message_cookie(redirect_to,
+ msg = u"Redirected to account from login form.")
+
+ # Using Djangos default AuthenticationForm
+ login_form = AuthenticationForm()
+ register_form = RegisterForm()
+
+ if request.POST.get("action") == "login":
+ login_form = AuthenticationForm(data=request.POST)
+
+ if login_form.is_valid():
+ redirect_to = request.POST.get("next")
+ # Light security check -- make sure redirect_to isn't garbage.
+ if not redirect_to or '//' in redirect_to or ' ' in redirect_to:
+ redirect_to = reverse("kiwipycon_account")
+
+ from django.contrib.auth import login
+ login(request, login_form.get_user())
+
+ return set_message_cookie(redirect_to, msg = u"You have been logged in.")
+
+ elif request.POST.get("action") == "register":
+ register_form = RegisterForm(data=request.POST)
+ if register_form.is_valid():
+
+ user = kiwipycon_createuser(request, register_form.data)
+
+ redirect_to = request.POST.get("next")
+ if not redirect_to or '//' in redirect_to or ' ' in redirect_to:
+ redirect_to = reverse("kiwipycon_account")
+
+ return set_message_cookie(
+ redirect_to, msg = u"You have been registered and logged in.")
+
+ # Get next_url
+ next_url = request.REQUEST.get("next")
+ if next_url is None:
+ next_url = request.META.get("HTTP_REFERER")
+ if next_url is None:
+ next_url = reverse("kiwipycon_account")
+ # Get just the path of the url. See django.contrib.auth.views.login for more
+ next_url = urlparse(next_url)
+ next_url = next_url[2]
+
+ try:
+ login_form_errors = login_form.errors["__all__"]
+ except KeyError:
+ login_form_errors = None
+
+ return render_to_response(template_name, RequestContext(request, {
+ "login_form" : login_form,
+ "login_form_errors" : login_form_errors,
+ "register_form" : register_form,
+ "next_url" : next_url,
+ }))
+
+def logout(request):
+ """Custom method to logout a user.
+
+ The reason to use a custom logout method is just to provide a login and a
+ logoutmethod on one place.
+ """
+ from django.contrib.auth import logout
+ logout(request)
+
+ redirect_to = '/'
+ return set_message_cookie(redirect_to, msg = u"You have been logged out.")
+
+@login_required
+def password(request, template_name="user/password.html"):
+ """Changes the password of current user.
+ """
+ if request.method == "POST":
+ form = PasswordChangeForm(request.user, request.POST)
+ if form.is_valid():
+ form.save()
+ redirect_to = reverse("kiwipycon_account")
+ return set_message_cookie(redirect_to,
+ msg = u"Your password has been changed.")
+ else:
+ form = PasswordChangeForm(request.user)
+
+ return render_to_response(template_name, RequestContext(request, {
+ "form" : form
+ }))
+
+@login_required
+def username(request, template_name="user/username.html"):
+ """Saves the username from the data form.
+ """
+ if request.method == "POST":
+ username_form = UsernameForm(initial={"username" : request.user.username}, data=request.POST)
+ if username_form.is_valid():
+ request.user.username = username_form.cleaned_data.get("username")
+ request.user.save()
+ redirect_to = reverse("kiwipycon_account")
+ return set_message_cookie(redirect_to,
+ msg = u"Your username has been changed.")
+ else:
+ username_form = UsernameForm(initial={"username" : request.user.username})
+
+ return render_to_response(template_name, RequestContext(request, {
+ "form": username_form
+ }))
+