def purge_personal_data(request, urlname): conference = get_authenticated_conference(request, urlname) if conference.personal_data_purged: messages.warning(request, 'Personal data for this conference has already been purged') return HttpResponseRedirect('../') if request.method == 'POST': exec_no_result("INSERT INTO confreg_aggregatedtshirtsizes (conference_id, size_id, num) SELECT conference_id, shirtsize_id, count(*) FROM confreg_conferenceregistration WHERE conference_id=%(confid)s AND shirtsize_id IS NOT NULL GROUP BY conference_id, shirtsize_id", {'confid': conference.id, }) exec_no_result("INSERT INTO confreg_aggregateddietary (conference_id, dietary, num) SELECT conference_id, lower(dietary), count(*) FROM confreg_conferenceregistration WHERE conference_id=%(confid)s AND dietary IS NOT NULL AND dietary != '' GROUP BY conference_id, lower(dietary)", {'confid': conference.id, }) exec_no_result("UPDATE confreg_conferenceregistration SET shirtsize_id=NULL, dietary='', phone='', address='' WHERE conference_id=%(confid)s", {'confid': conference.id, }) conference.personal_data_purged = timezone.now() conference.save() messages.info(request, "Personal data purged from conference") return HttpResponseRedirect('../') return render(request, 'confreg/admin_purge_personal_data.html', { 'conference': conference, 'helplink': 'personaldata', 'counts': exec_to_dict("""SELECT count(1) FILTER (WHERE shirtsize_id IS NOT NULL) AS "T-shirt size registrations", count(1) FILTER (WHERE dietary IS NOT NULL AND dietary != '') AS "Dietary needs", count(1) FILTER (WHERE phone IS NOT NULL AND phone != '') AS "Phone numbers", count(1) FILTER (WHERE address IS NOT NULL AND address != '') AS "Addresses" FROM confreg_conferenceregistration WHERE conference_id=%(confid)s""", { 'confid': conference.id, })[0], })
def _attendee_email_form(request, conference, query, breadcrumbs): if request.method == 'POST': idlist = list(map(int, request.POST['idlist'].split(','))) else: if 'idlist' not in request.GET: raise Http404("Mandatory parameter idlist is missing") idlist = list(map(int, request.GET['idlist'].split(','))) queryparams = {'conference': conference.id, 'idlist': idlist} recipients = exec_to_dict(query, queryparams) initial = { '_from': '{0} <{1}>'.format(conference.conferencename, conference.contactaddr), 'recipients': escape(", ".join(['{0} <{1}>'.format(x['fullname'], x['email']) for x in recipients])), 'idlist': ",".join(map(str, idlist)), 'storeonregpage': True, } if request.method == 'POST': p = request.POST.copy() p['recipients'] = initial['recipients'] form = BackendSendEmailForm(conference, data=p, initial=initial) if form.is_valid(): with transaction.atomic(): if form.cleaned_data['storeonregpage']: mailid = exec_to_scalar("INSERT INTO confreg_attendeemail (conference_id, sentat, subject, message, tocheckin, tovolunteers) VALUES (%(confid)s, CURRENT_TIMESTAMP, %(subject)s, %(message)s, false, false) RETURNING id", { 'confid': conference.id, 'subject': form.cleaned_data['subject'], 'message': form.cleaned_data['message'], }) for r in recipients: send_conference_mail(conference, r['email'], form.cleaned_data['subject'], 'confreg/mail/attendee_mail.txt', { 'body': form.cleaned_data['message'], 'linkback': form.cleaned_data['storeonregpage'], }, receivername=r['fullname'], ) if form.cleaned_data['storeonregpage']: if r['regid']: # Existing registration, so attach directly to attendee exec_no_result("INSERT INTO confreg_attendeemail_registrations (attendeemail_id, conferenceregistration_id) VALUES (%(mailid)s, %(reg)s)", { 'mailid': mailid, 'reg': r['regid'], }) else: # No existing registration, so queue it up in case the attendee # might register later. We have the userid... exec_no_result("INSERT INTO confreg_attendeemail_pending_regs (attendeemail_id, user_id) VALUES (%(mailid)s, %(userid)s)", { 'mailid': mailid, 'userid': r['user_id'], }) if form.cleaned_data['storeonregpage']: messages.info(request, "Email sent to %s attendees, and added to their registration pages when possible" % len(recipients)) else: messages.info(request, "Email sent to %s attendees" % len(recipients)) return HttpResponseRedirect('../') else: form = BackendSendEmailForm(conference, initial=initial) return render(request, 'confreg/admin_backend_form.html', { 'conference': conference, 'basetemplate': 'confreg/confadmin_base.html', 'form': form, 'what': 'new email', 'savebutton': 'Send email', 'cancelurl': '../', 'breadcrumbs': breadcrumbs, })
def __exit__(self, *args): if self.notified: exec_no_result('NOTIFY pgeu_notification')