Mercurial > hg > bts-webui
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 0000000000000000000000000000000000000000..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 0000000000000000000000000000000000000000..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',),