'form': form,
}, RequestContext(request))
+@login_required
+@transaction.atomic
+def admin_waitlist_cancel(request, urlname, wlid):
+ if request.user.is_superuser:
+ conference = get_object_or_404(Conference, urlname=urlname)
+ else:
+ conference = get_object_or_404(Conference, urlname=urlname, administrators=request.user)
+
+ wl = get_object_or_404(RegistrationWaitlistEntry, pk=wlid, registration__conference=conference)
+ reg = wl.registration
+ wl.delete()
+
+ send_simple_mail(reg.conference.contactaddr,
+ reg.conference.contactaddr,
+ 'Waitlist cancel',
+ u'User {0} {1} <{2}> removed from the waitlist by {3}.'.format(reg.firstname, reg.lastname, reg.email, request.user),
+ sendername=reg.conference.conferencename)
+
+ send_template_mail(reg.conference.contactaddr,
+ reg.email,
+ 'Waitlist canceled',
+ 'confreg/mail/waitlist_admin_cancel.txt',
+ {
+ 'conference': conference,
+ 'reg': reg,
+ },
+ sendername=reg.conference.conferencename,
+ receivername=reg.fullname,
+ )
+
+ messages.info(request, "Waitlist entry removed.")
+ return HttpResponseRedirect("../../")
+
+
@login_required
@transaction.atomic
def admin_attendeemail(request, urlname):
(r'^events/admin/(\w+)/mail/(\d+)/$', postgresqleu.confreg.views.admin_attendeemail_view),
(r'^events/admin/(\w+)/regdashboard/$', postgresqleu.confreg.views.admin_registration_dashboard),
(r'^events/admin/(\w+)/waitlist/$', postgresqleu.confreg.views.admin_waitlist),
+ (r'^events/admin/(\w+)/waitlist/cancel/(\d+)/$', postgresqleu.confreg.views.admin_waitlist_cancel),
(r'^events/admin/(\w+)/wiki/$', postgresqleu.confwiki.views.admin),
(r'^events/admin/(\w+)/wiki/(new|\d+)/$', postgresqleu.confwiki.views.admin_edit_page),
(r'^events/admin/(\w+)/signups/$', postgresqleu.confwiki.views.signup_admin),
'title': 'Status history',
}).dialog('open');
}
+
+function cancelWaitlist(id) {
+ if (confirm('Are you really sure you want to cancel this waitlist entry?\nAll history will be lost, and a notification sent.')) {
+ document.location.href = 'cancel/' + id + '/';
+ }
+}
</script>
{%endblock%}
<td style="white-space: nowrap"><span onClick="showDialog({{w.registration.id}})" class="dlgClickable ui-icon ui-icon-circle-plus" style="display: inline-block"></span>
{%if w.registration.payconfirmedat%}Registered{%elif w.offeredon%}Offered{%if w.registration.invoice%} (with invoice){%endif%}{%else%}Pending ({{w.offers_made}} offers){%endif%}</td>
{%if waitlist_type == "waitlist_active" %}
- {%if not w.offeredon and not w.registration.payconfirmedat%}<td style="white-space: nowrap;"><input type="checkbox" name="reg_{{w.registration.id}}" value="1"{%if w.registration.id in form.reg_list%} CHECKED{%endif%}> offer</td>{%else%}<td></td>{%endif%}
+ {%if not w.offeredon and not w.registration.payconfirmedat%}<td style="white-space: nowrap;"><input type="checkbox" name="reg_{{w.registration.id}}" value="1"{%if w.registration.id in form.reg_list%} CHECKED{%endif%}> offer<br><a href="javascript:cancelWaitlist({{w.pk}})" class="btn btn-default btn-xs">Cancel</a></td>{%else%}<td></td>{%endif%}
{%endif%}
</tr>
{%endfor%}
--- /dev/null
+Hello!
+
+Your entry on the waitlist for {{conference.conferencename}}
+has been canceled by an administrator.
+
+This probably happened because of some ongoing modification to your
+registration. If you are not already in contact with the conference
+organizers about this, and have any questions about why this is
+done, please contact us as soon as you can by replying to this
+email.