from django.contrib.auth import authenticate, login from django.contrib.auth.decorators import login_required from django.core.urlresolvers import reverse from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import render_to_response from django.template import RequestContext from django.shortcuts import render from django.utils.timezone import utc from django.contrib.auth.models import User from zephyr.models import Zephyr, UserProfile, ZephyrClass, Recipient from zephyr.forms import RegistrationForm import datetime import simplejson def register(request): if request.method == 'POST': form = RegistrationForm(request.POST) if form.is_valid(): username = request.POST['username'] password = request.POST['password'] u = User.objects.create_user(username=username, password=password) u.save() user = authenticate(username=username, password=password) login(request, user) return HttpResponseRedirect(reverse('zephyr.views.home')) else: form = RegistrationForm() return render(request, 'zephyr/register.html', { 'form': form, }) def accounts_home(request): return render_to_response('zephyr/accounts_home.html', context_instance=RequestContext(request)) def home(request): if not request.user.is_authenticated(): return HttpResponseRedirect('accounts/home/') zephyrs = Zephyr.objects.all() for zephyr in zephyrs: if zephyr.recipient.type == "class": zephyr_class = ZephyrClass.objects.get(pk=zephyr.recipient.user_or_class) zephyr.display_recipient = zephyr_class.name else: user = User.objects.get(pk=zephyr.recipient.user_or_class) zephyr.display_recipient = user.username user = request.user user_profile = UserProfile.objects.get(user=user) if user_profile.pointer == -1 and zephyrs: user_profile.pointer = min([zephyr.id for zephyr in zephyrs]) user_profile.save() return render_to_response('zephyr/index.html', {'zephyrs': zephyrs, 'user_profile': user_profile}, context_instance=RequestContext(request)) def update(request): if not request.POST: # Do something pass user = request.user user_profile = UserProfile.objects.get(user=user) if request.POST.get('pointer'): user_profile.pointer = request.POST.get("pointer") user_profile.save() return HttpResponse(simplejson.dumps({}), mimetype='application/json') def get_updates(request): if not request.POST: # Do something pass last_received = request.POST.get('last_received') new_zephyrs = Zephyr.objects.filter(id__gt=last_received) new_zephyr_list = [] for zephyr in new_zephyrs: if zephyr.recipient.type == "class": zephyr_class = ZephyrClass.objects.get(pk=zephyr.recipient.user_or_class) display_recipient = zephyr_class.name else: user = User.objects.get(pk=zephyr.recipient.user_or_class) display_recipient = user.username new_zephyr_list.append({"id": zephyr.id, "sender": zephyr.sender.user.username, "display_recipient": display_recipient, "instance": zephyr.instance, "content": zephyr.content }) return HttpResponse(simplejson.dumps(new_zephyr_list), mimetype='application/json') @login_required def personal_zephyr(request): username = request.POST['recipient'] if User.objects.filter(username=username): user = User.objects.get(username=username) else: # Do something reasonable. return HttpResponseRedirect(reverse('zephyr.views.home')) recipient = Recipient() recipient.user_or_class = user.pk recipient.type = "personal" recipient.save() new_zephyr = Zephyr() new_zephyr.sender = UserProfile.objects.get(user=request.user) new_zephyr.content = request.POST['new_personal_zephyr'] new_zephyr.recipient = recipient new_zephyr.instance = u'' new_zephyr.pub_date = datetime.datetime.utcnow().replace(tzinfo=utc) new_zephyr.save() return HttpResponseRedirect(reverse('zephyr.views.home')) @login_required def zephyr(request): class_name = request.POST['class'] if ZephyrClass.objects.filter(name=class_name): my_class = ZephyrClass.objects.get(name=class_name) else: my_class = ZephyrClass() my_class.name = class_name my_class.save() recipient = Recipient() recipient.user_or_class = my_class.pk recipient.type = "class" recipient.save() new_zephyr = Zephyr() new_zephyr.sender = UserProfile.objects.get(user=request.user) new_zephyr.content = request.POST['new_zephyr'] new_zephyr.recipient = recipient new_zephyr.instance = request.POST['instance'] new_zephyr.pub_date = datetime.datetime.utcnow().replace(tzinfo=utc) new_zephyr.save() return HttpResponseRedirect(reverse('zephyr.views.home'))