changeset 131:2aa6bf2f3f2e draft

subscribe: implement subcribe action discard the old ugly button+form, use a nice icon+link. we need API from debbugs to know if an email is subscribed to a report. must ask Don.
author diegoe-guest
date Thu, 06 Aug 2009 23:00:31 +0000
parents 8ea1bce228b5
children 617e3c41e48f
files bts_webui/amancay/ajax.py bts_webui/amancay/bugs.py bts_webui/amancay/static/amancay.css bts_webui/amancay/static/icons/list-add.png bts_webui/amancay/static/icons/list-remove.png bts_webui/amancay/templates/bug.html bts_webui/amancay/templates/bug_actions.html bts_webui/amancay/urls.py
diffstat 8 files changed, 99 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/bts_webui/amancay/ajax.py
+++ b/bts_webui/amancay/ajax.py
@@ -1,5 +1,6 @@
 # vim: set sw=4 ts=4 sts=4 noet:
 from django.http import HttpResponse
+from amancay.bugs import handle_email
 
 def add_package(request):
 	"""
@@ -9,10 +10,12 @@
 	package_name = request.GET['id']
 
 	if user.is_authenticated():
-		packages = user.package_set.filter(package_name=package_name)
+		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:
@@ -33,8 +36,46 @@
 		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_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)
--- a/bts_webui/amancay/bugs.py
+++ b/bts_webui/amancay/bugs.py
@@ -38,6 +38,8 @@
 	info = process_bug_post(request, bug_number)
 
 	user = request.user
+	# FIXME: we need API
+	user.subscribed = False
 	queries = SoapQueries()
 	bug_status = queries.get_bugs_status(bug_number)[0]
 	bug_originator = email.Utils.parseaddr(bug_status['originator'])
@@ -227,15 +229,6 @@
 	else:
 		return None
 
-def subscribe(request, bug_number):
-	if request.user.is_authenticated():
-		subscribe_email = request.user.email
-	else:
-		subscribe_email = request.POST.get('subscribe_email')
-
-	to_address = ['%s-subscribe@bugs.debian.org' % bug_number]
-	return handle_email(request, to_address, '', '')
-
 def handle_email(request, to_address, subject, text):
 	"""
 	Sends an email to to_address if the user is authenticated, otherwise it
--- a/bts_webui/amancay/static/amancay.css
+++ b/bts_webui/amancay/static/amancay.css
@@ -421,3 +421,14 @@
 .favorite_icon img {
     border: 0;
 }
+.action img {
+	border: 0;
+	vertical-align: middle;
+}
+.action {
+	text-decoration: none;
+	vertical-align: middle;
+}
+#subscribe {
+	text-align: right;
+}
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1aa7f095c6c282262390748ab2e596a3fc15c228
GIT binary patch
literal 323
zc%17D@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE(~Ds(|LD2km4-xh%5%`
zxDLXMP8zc-fP(BLp1!W^*BH447zC%dR4fDvUGQ{q46!(UcH&;Xg9##S@|TV#Y%gNJ
zw5#!0f?2e6Ng=z-r6Vcg8>4vDnp>n_q?<?Sgk?Tje&0}_>sL3+`?61S_xzmq{J{Fj
zJH97a+R7XBFaES!R69@q=Yl(5Vx-S+?G)J?`XR_p&)}WGam$G(DvFX^W=3CCiq=(W
z$gQ~dJw{qkz%pWe`LSnb`5D4qPxxu%z_LYbi^B%NLjgB39kWlQ27Tmc$SP42=Xe^#
z*l_T~ezhR~rxAYsZI@e3ejD$6^#7CO=bK-$(|bBsZS~(KT0h%1q{y4QdsBHIC@ef(
L{an^LB{Ts5*CBo)
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..00b654e8ca567c380fa477d4b32f808c3b5500d3
GIT binary patch
literal 247
zc%17D@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE(~Ds(|LD2km4-xh%5%`
zxDLXMP8zc-fP(BLp1!W^*BH6^t(6#Jgbo3PT0C7GLo80eow$*+IY6LoKYQk#16JBE
zI3$(V=DKl6DsXqKEk43p(s5;*lFR3J{)(qIZ#Hg~myu!rUoOMW{`>JWwX>(BJj|ZW
z+O=aD!}5d~Hu>Ui!h8~Y!#Fdw*zbJ4zDYymLaojFZSG9QiA{9^_qx|}8e1H{=q1B7
i%RMgF?%|Jr_8*zo1nb^*d(v<N<bF?AKbLh*2~7Z2(o(+w
--- a/bts_webui/amancay/templates/bug.html
+++ b/bts_webui/amancay/templates/bug.html
@@ -4,6 +4,34 @@
 {% block title %}Amancay BTS interface - Bug View{% endblock %}
 {% block extrajs %}
 <script type="text/javascript" src="/static/buglog.js"></script>
+<script type="text/javascript" language="javascript" charset="utf-8">
+function toggle_subscribe_cb(img, newimg, txt, newtxt, xml) {
+	img.src = newimg;
+	txt.innerHTML = newtxt;
+}
+function toggle_subscribe(id) {
+	var url = '/ajax/bug/';
+	var img = document.getElementById('subscribe_img');
+	var txt = document.getElementById('subscribe_text');
+	var newimg = '';
+
+	if (MochiKit.Text.endsWith('list-remove.png', img.src))
+	{
+		newimg = '/static/icons/list-add.png';
+		newtxt = 'Subscribe to this report';
+		url += 'unsubscribe/';
+	}
+	else
+	{
+		newimg = '/static/icons/list-remove.png';
+		newtxt = 'Unsubscribe from this report';
+		url += 'subscribe/';
+	}
+
+	res = MochiKit.Async.doSimpleXMLHttpRequest(url, {'id': id});
+	res.addCallback(toggle_subscribe_cb, img, newimg, txt, newtxt);
+}
+</script>
 {% endblock %}
 
 {% block main_content %}
@@ -19,7 +47,20 @@
 			Found in: {{ bug_status.found_versions|join:", " }}
 		{% endif %}
 	</div>
-	<br/>
+	<div id="subscribe">
+	{% if current_user.is_authenticated %}
+		<a href="javascript:toggle_subscribe({{ bug_number }})" class="action">
+		{% if current_user.subscribed %}
+		<img id="subscribe_img" src="/static/icons/list-remove.png" /> <span id="subscribe_text">Unsubscribe from this report</span>
+		{% else %}
+		<img id="subscribe_img" src="/static/icons/list-add.png" /> <span id="subscribe_text">Subscribe to this report</span>
+		{% endif %}
+		</a>
+	{% else %}
+	Log in to be able to subscribe to reports.
+	{% endif %}
+	</div>
+
 {% if bug_messages %}
 	{% for message in bug_messages %}
 		{% if forloop.first %}
--- a/bts_webui/amancay/templates/bug_actions.html
+++ b/bts_webui/amancay/templates/bug_actions.html
@@ -1,9 +1,6 @@
 {% comment %} vim: set sw=4 ts=4 sts=4 noet: {% endcomment %}
 <div class="bug_actions">
 	<form name="show_add_comment" method="POST">
-		{% if current_user.is_authenticated %}
-		<input id="subscribe_button" type="button" value="Subscribe" />
-		{% endif %}
 		<input id="add_comment_button" type="button" value="Add Comment" />
 		<input id="report_spam_button" type="button" value="Report Spam" />
 		<select id="more_actions">
--- a/bts_webui/amancay/urls.py
+++ b/bts_webui/amancay/urls.py
@@ -24,6 +24,8 @@
 	# Small pieces
 	(r'^ajax/package/add/', 'bts_webui.amancay.ajax.add_package',),
 	(r'^ajax/package/remove/', 'bts_webui.amancay.ajax.remove_package',),
+	(r'^ajax/bug/subscribe/', 'bts_webui.amancay.ajax.bug_subscribe',),
+	(r'^ajax/bug/unsubscribe/', 'bts_webui.amancay.ajax.bug_unsubscribe',),
 
 	# Account Settings
 	#   (r'^account_settings', 'bts_webui.amancay.views.account_settings',),