view bts_webui/amancay/ajax.py @ 134:c6bf9f23af62 draft

starring: implement bug add/remove works exactly like package add/remove, needs polishing to reuse javascript functions that packages are also using.
author diegoe-guest
date Mon, 10 Aug 2009 23:40:27 +0000
parents 2aa6bf2f3f2e
children 8c9dddbd97b0
line wrap: on
line source

# vim: set sw=4 ts=4 sts=4 noet:
from django.http import HttpResponse
from amancay.bugs import handle_email

def package_add(request):
	"""
	Add a package to our session watched list.
	"""
	user = request.user
	package_name = request.GET['id']

	if user.is_authenticated():
		packages = user.package_set.filter(package_name=package_name)[:1]
		if not packages:
			user.package_set.create(package_name=package_name)
			return HttpResponse(status=200)
		else:
			return HttpResponse(status=500)
	else:
		packages = request.session.get('packages', [])
		if package_name in packages:
			return HttpResponse(status=500)
		else:
			request.session['packages'].append(package_name)
			return HttpResponse(status=200)

def package_remove(request):
	"""
	Remove a package from the watched list.
	"""
	user = request.user
	package_name = request.GET['id']

	if user.is_authenticated():
		packages = user.package_set.filter(package_name=package_name)[:1]
		if packages:
			packages[0].delete()
			return HttpResponse(status=200)
		else:
			return HttpResponse(status=500)
	else:
		packages = request.session.get('packages', [])
		if package_name in packages:
			request.session['packages'].remove(package_name)
			return HttpResponse(status=200)
		else:
			return HttpResponse(status=500)

def bug_add(request):
	"""
	Add a bug to the session watched bugs.
	"""
	user = request.user
	bug_number = request.GET['id']

	if user.is_authenticated():
		bugs = user.bug_set.filter(number=bug_number)[:1]
		if not bugs:
			user.bug_set.create(number=bug_number)
			return HttpResponse(status=200)
		else:
			return HttpResponse(status=500)
	else:
		bugs = request.session.get('bugs', [])
		if bug_number in bugs:
			return HttpResponse(status=500)
		else:
			request.session['bugs'].append(bug_number)
			return HttpResponse(status=200)

def bug_remove(request):
	"""
	Remove a bug from the watched list.
	"""
	user = request.user
	bug_number = request.GET['id']

	if user.is_authenticated():
		bugs = user.bug_set.filter(number=bug_number)[:1]
		if bugs:
			bugs[0].delete()
			return HttpResponse(status=200)
		else:
			return HttpResponse(status=500)
	else:
		bugs = request.session.get('bugs', [])
		if bug_number in bugs:
			request.session['bugs'].remove(bug_number)
			return HttpResponse(status=200)
		else:
			return HttpResponse(status=500)

def _bug_toggle_subscribe(request, subscribe=True):
	"""
	Toggle subscription to a specific bug report
	"""
	user = request.user
	bug_number = request.GET['id']

	if subscribe:
		action = 'subscribe'
	else:
		action = 'unsubscribe'

	if user.is_authenticated():
		subscribe_email = request.user.email
		to_address = ['%s-%s@bugs.debian.org' % (bug_number, action)]

		# FIXME: this never tells us if the email left the building
		handle_email(request, to_address, '', '')
		return HttpResponse(status=200)
	else:
		return HttpResponse(status=500)

def bug_subscribe(request):
	"""
	Subscribe to a specific bug report
	"""
	return _bug_toggle_subscribe(request, subscribe=True)

def bug_unsubscribe(request):
	"""
	Unsubscribe to a specific bug report
	"""
	return _bug_toggle_subscribe(request, subscribe=False)