zulip/zephyr/views.py

132 lines
4.6 KiB
Python
Raw Normal View History

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, get_display_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:
zephyr.display_recipient = get_display_recipient(zephyr.recipient)
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:
new_zephyr_list.append({"id": zephyr.id,
"sender": zephyr.sender.user.username,
"display_recipient": get_display_recipient(zephyr.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'))