zulip/zephyr/views.py

144 lines
5.1 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
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'))