Example #1
0
    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
                                  })
Example #2
0
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)
Example #3
0
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)
Example #4
0
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)
Example #5
0
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)
Example #6
0
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
Example #7
0
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()
Example #8
0
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
                                  })
Example #10
0
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
Example #11
0
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'})