def extraform(self, request, tl, one, two, module, extra, prog): custom_form_id = Tag.getProgramTag('%s_extraform_id' % tl, prog, None) if custom_form_id: cf = Form.objects.get(id=int(custom_form_id)) else: raise ESPError( False ), 'Cannot find an appropriate form for the quiz. Please ask your administrator to create a form and set the %s_extraform_id Tag.' % tl form_wizard = FormHandler(cf, request, request.user).get_wizard() form_wizard.curr_request = request if request.method == 'POST': form = form_wizard.get_form(0, request.POST, request.FILES) if form.is_valid(): # Delete previous responses from this user dmh = DynamicModelHandler(cf) form_model = dmh.createDynModel() form_model.objects.filter(user=request.user).delete() form_wizard.done([form]) bit, created = UserBit.valid_objects().get_or_create( user=request.user, qsc=self.program.anchor, verb=self.reg_verb) return self.goToCore(tl) else: # If the user already filled out the form, use their earlier response for the initial values if self.isCompleted(): dmh = DynamicModelHandler(cf) form_model = dmh.createDynModel() prev_results = form_model.objects.filter( user=request.user).order_by('-id') if prev_results.exists(): prev_result_data = {} plain_form = form_wizard.get_form(0) # Load previous results, with a hack for multiple choice questions. for field in plain_form.fields: if isinstance(plain_form.fields[field], forms.MultipleChoiceField): prev_result_data[field] = getattr( prev_results[0], field).split(';') else: prev_result_data[field] = getattr( prev_results[0], field) form_wizard = FormHandler( cf, request, request.user).get_wizard( initial_data={0: prev_result_data}) form = form_wizard.get_form(0) return render_to_response(self.baseDir() + 'custom_form.html', request, (prog, tl), { 'prog': prog, 'form': form, 'tl': tl })
def getRebuildData(request): """ Returns form metadata for rebuilding via AJAX """ if request.is_ajax(): if request.method == 'GET': try: form_id = int(request.GET['form_id']) except ValueError: return HttpResponse(status=400) form = Form.objects.get(pk=form_id) fh = FormHandler(form=form, request=request) metadata = json.dumps(fh.rebuildData()) return HttpResponse(metadata) return HttpResponse(status=400)
def getData(request): """ Returns response data via Ajax """ if request.is_ajax(): if request.method == 'GET': try: form_id = int(request.GET['form_id']) except ValueError: return HttpResponse(status=400) form = Form.objects.get(pk=form_id) fh = FormHandler(form=form, request=request) resp_data = json.dumps(fh.getResponseData(form)) return HttpResponse(resp_data) return HttpResponse(status=400)
def getExcelData(request, form_id): """ Returns the response data as an excel spreadsheet """ try: form_id = int(form_id) except ValueError: return HttpResponse(status=400) form = Form.objects.get(pk=form_id) fh = FormHandler(form=form, request=request) wbk = fh.getResponseExcel() response = HttpResponse(wbk.getvalue(), content_type="application/vnd.ms-excel") response['Content-Disposition']='attachment; filename=%s.xls' % form.title return response
def viewForm(request, form_id): """ Form viewing and submission """ try: form_id = int(form_id) form = Form.objects.get(pk=form_id) except (ValueError, Form.DoesNotExist): raise Http404 perm, error_text = hasPerm(request.user, form) if not perm: return render_to_response('customforms/error.html', request, {'error_text': error_text}) fh = FormHandler(form=form, request=request, user=request.user) return fh.get_wizard_view()
def quiz(self, request, tl, one, two, module, extra, prog): custom_form_id = Tag.getProgramTag('quiz_form_id', prog, None) if custom_form_id: cf = Form.objects.get(id=int(custom_form_id)) else: raise ESPError( 'Cannot find an appropriate form for the quiz. Please ask your administrator to create a form and set the quiz_form_id Tag.' ) form_wizard = FormHandler(cf, request, request.user).get_wizard() form_wizard.curr_request = request if request.method == 'POST': form = form_wizard.get_form(0, request.POST, request.FILES) if form.is_valid(): form_wizard.done([form]) self.controller.markCompleted(request.user) return self.goToCore(tl) else: form = form_wizard.get_form(0) return render_to_response(self.baseDir() + 'quiz.html', request, (prog, tl), { 'prog': prog, 'form': form })
def getExcelData(request, form_id): """ Returns the response data as an excel spreadsheet """ try: form_id = int(form_id) except ValueError: return HttpResponse(status=400) form = Form.objects.get(pk=form_id) fh = FormHandler(form=form, request=request) wbk = fh.getResponseExcel() response = HttpResponse(wbk.getvalue(), content_type="application/vnd.ms-excel") response[ 'Content-Disposition'] = 'attachment; filename=%s.xls' % form.title return response
def viewForm(request, form_id): """ Form viewing and submission """ try: form_id = int(form_id) except ValueError: raise Http404 form = Form.objects.get(pk=form_id) perm, error_text = hasPerm(request.user, form) if not perm: return render_to_response('customforms/error.html', {'error_text': error_text}, context_instance=RequestContext(request)) fh = FormHandler(form=form, request=request, user=request.user) return fh.get_wizard_view()
def extraform(self, request, tl, one, two, module, extra, prog): custom_form_id = Tag.getProgramTag('%s_extraform_id' % tl, prog, None) if custom_form_id: cf = Form.objects.get(id=int(custom_form_id)) else: raise ESPError('Cannot find an appropriate form for the quiz. Please ask your administrator to create a form and set the %s_extraform_id Tag.' % tl, log=False) form_wizard = FormHandler(cf, request, request.user).get_wizard() form_wizard.curr_request = request if request.method == 'POST': form = form_wizard.get_form(0, request.POST, request.FILES) if form.is_valid(): # Delete previous responses from this user dmh = DynamicModelHandler(cf) form_model = dmh.createDynModel() form_model.objects.filter(user=request.user).delete() form_wizard.done([form]) bit, created = Record.objects.get_or_create(user=request.user, program=self.program, event=self.event) return self.goToCore(tl) else: # If the user already filled out the form, use their earlier response for the initial values if self.isCompleted(): dmh = DynamicModelHandler(cf) form_model = dmh.createDynModel() prev_results = form_model.objects.filter(user=request.user).order_by('-id') if prev_results.exists(): prev_result_data = {} plain_form = form_wizard.get_form(0) # Load previous results, with a hack for multiple choice questions. for field in plain_form.fields: if isinstance(plain_form.fields[field], forms.MultipleChoiceField): prev_result_data[field] = getattr(prev_results[0], field).split(';') else: prev_result_data[field] = getattr(prev_results[0], field) form_wizard = FormHandler(cf, request, request.user).get_wizard(initial_data={0: prev_result_data}) form = form_wizard.get_form(0) return render_to_response(self.baseDir()+'custom_form.html', request, {'prog':prog, 'form': form, 'qsd_name': tl+':customform_header'})