def __cmp__(a, b):
     anum, astr = split_numal(a.number)
     bnum, bstr = split_numal(b.number)
     cmpnum = cmp(anum, bnum)
     return cmpnum or cmp(astr, bstr)
 def __cmp__(a, b):
     anum, astr = split_numal(a.number)
     bnum, bstr = split_numal(b.number)
     cmpnum = cmp(anum, bnum)
     return cmpnum or cmp(astr, bstr)
Example #3
0
def show_questionnaire(request, runinfo, errors={}):
    """
    Return the QuestionSet template

    Also add the javascript dependency code.
    """
    questions = runinfo.questionset.questions()
    total = len(runinfo.questionset.questionnaire.questionsets())

    qlist = []
    jsinclude = []      # js files to include
    cssinclude = []     # css files to include
    jstriggers = []
    qvalues = {}
    alignment=4
    for question in questions:
        Type = question.get_type()
        _qnum, _qalpha = split_numal(question.number)
        if _qalpha:
            _qalpha_class = ord(_qalpha[-1]) % 2 and 'odd' or 'even'
        qdict = {
            'template' : 'questionnaire/%s.html' % (Type),
            'qnum' : _qnum,
            'qalpha' : _qalpha,
            'qtype' : Type,
            'qnum_class' : (_qnum % 2 == 0) and " qeven" or " qodd",
            'qalpha_class' : _qalpha and (ord(_qalpha[-1]) % 2 \
                                          and ' alodd' or ' aleven') or '',
        }

        if not question.newline():
            alignment = max(alignment, calc_alignment(question.text))

        # add javascript dependency checks
        cd = question.getcheckdict()
        depon = cd.get('requiredif',None) or cd.get('dependent',None)
        if depon:
            # extra args to BooleanParser are not required for toString
            parser = BooleanParser(dep_check)
            qdict['checkstring'] = ' checks="%s"' % parser.toString(depon)
            jstriggers.append('qc_%s' % question.number)
        if 'default' in cd:
            qvalues[question.number] = cd['default']
        if Type in QuestionProcessors:
            qdict.update(QuestionProcessors[Type](request, question))
            if 'alignment' in qdict:
                alignment = max(alignment, qdict['alignment'])
            if 'jsinclude' in qdict:
                if qdict['jsinclude'] not in jsinclude:
                    jsinclude.extend(qdict['jsinclude'])
            if 'cssinclude' in qdict:
                if qdict['cssinclude'] not in cssinclude:
                    cssinclude.extend(qdict['jsinclude'])
            if 'jstriggers' in qdict:
                jstriggers.extend(qdict['jstriggers'])
            if 'qvalue' in qdict:
                qvalues[question.number] = qdict['qvalue']
        qlist.append( (question, qdict) )

    progress = None
    if runinfo.questionset.sortid != 0:
        progress = get_progress(runinfo.questionset.sortid / float(total))

    # initialize qvalues
    for k,v in runinfo.get_cookiedict().items():
        qvalues[k] = v
    if request.POST:
        for k,v in request.POST.items():
            if k.startswith("question_"):
                s = k.split("_")
                if len(s) == 2:
                    qvalues[s[1]] = v

    r = r2r("questionnaire/questionset.html", request,
        questionset=runinfo.questionset,
        runinfo=runinfo,
        errors=errors,
        qlist=qlist,
        progress=progress,
        triggers=jstriggers,
        qvalues=qvalues,
        alignment=alignment,
        jsinclude=jsinclude,
        cssinclude=cssinclude)
    r['Cache-Control'] = 'no-cache'
    r['Expires'] = "Thu, 24 Jan 1980 00:00:00 GMT"
    return r