Пример #1
0
def survey_review_single(request, tl, program, instance):
    """ View a single survey response. """
    try:
        prog = Program.by_prog_inst(program, instance)
    except Program.DoesNotExist:
        #raise Http404
        raise ESPError(), "Can't find the program %s/%s" % (program, instance)

    user = ESPUser(request.user)

    survey_response = None
    ints = request.REQUEST.items()
    if len(ints) == 1:
        srs = SurveyResponse.objects.filter(id=ints[0][0])
        if len(srs) == 1:
            survey_response = srs[0]
    if survey_response is None:
        raise ESPError(
            False
        ), 'Ideally this page should give you some way to pick an individual response. For now I guess you should go back to <a href="review">reviewing the whole survey</a>.'

    if tl == 'manage' and user.isAdmin(prog):
        answers = survey_response.answers.order_by('content_type', 'object_id',
                                                   'question')
        classes_only = False
        other_responses = None
    elif tl == 'teach':
        subject_ct = ContentType.objects.get(app_label="program",
                                             model="classsubject")
        section_ct = ContentType.objects.get(app_label="program",
                                             model="classsection")
        class_ids = [x["id"] for x in user.getTaughtClasses().values('id')]
        section_ids = [x["id"] for x in user.getTaughtSections().values('id')]
        answers = survey_response.answers.filter(
            content_type__in=[subject_ct, section_ct],
            object_id__in=(class_ids + section_ids)).order_by(
                'content_type', 'object_id', 'question')
        classes_only = True
        other_responses = SurveyResponse.objects.filter(
            answers__content_type=subject_ct,
            answers__object_id__in=class_ids).order_by('id').distinct()
    else:
        raise ESPError(
            False
        ), 'You need to be a teacher or administrator of this program to review survey responses.'

    context = {
        'user': user,
        'program': prog,
        'response': survey_response,
        'answers': answers,
        'classes_only': classes_only,
        'other_responses': other_responses
    }

    return render_to_response('survey/review_single.html', request, context)
Пример #2
0
def survey_review_single(request, tl, program, instance):
    """ View a single survey response. """
    try:
        prog = Program.by_prog_inst(program, instance)
    except Program.DoesNotExist:
        #raise Http404
        raise ESPError(), "Can't find the program %s/%s" % (program, instance)

    user = ESPUser(request.user)

    survey_response = None
    ints = request.REQUEST.items()
    if len(ints) == 1:
        srs = SurveyResponse.objects.filter(id=ints[0][0])
        if len(srs) == 1:
            survey_response = srs[0]
    if survey_response is None:
        raise ESPError(
            False
        ), 'Ideally this page should give you some way to pick an individual response. For now I guess you should go back to <a href="review">reviewing the whole survey</a>.'

    if tl == 'manage' and user.isAdmin(prog.anchor):
        answers = survey_response.answers.order_by('anchor', 'question')
        classes_only = False
    elif tl == 'teach':
        class_anchors = [
            x['anchor'] for x in user.getTaughtClasses().values('anchor')
        ]
        answers = survey_response.answers.filter(
            anchor__in=class_anchors).order_by('anchor', 'question')
        classes_only = True
    else:
        raise ESPError(
            False
        ), 'You need to be a teacher or administrator of this program to review survey responses.'

    context = {
        'user': user,
        'program': prog,
        'response': survey_response,
        'answers': answers,
        'classes_only': classes_only
    }

    return render_to_response('survey/review_single.html', request,
                              prog.anchor, context)
Пример #3
0
def get_survey_info(request, tl, program, instance):
    try:
        prog = Program.by_prog_inst(program, instance)
    except Program.DoesNotExist:
        raise Http404

    user = ESPUser(request.user)

    if (tl == 'teach' and user.isTeacher()):
        surveys = prog.getSurveys().filter(category='learn').select_related()
    elif (tl == 'manage' and user.isAdmin(prog)):
        #   Meerp, no problem... I took care of it.   -Michael
        surveys = prog.getSurveys().select_related()
        if request.REQUEST.has_key('teacher_id'):
            t_id = int(request.REQUEST['teacher_id'])
            teachers = ESPUser.objects.filter(id=t_id)
            if len(teachers) > 0:
                user = teachers[0]
                if user.isTeacher():
                    surveys = prog.getSurveys().filter(
                        category='learn').select_related()
                else:
                    user = ESPUser(request.user)
    else:
        raise ESPError(
            False
        ), 'You need to be a teacher or administrator of this program to review survey responses.'

    if request.REQUEST.has_key('survey_id'):
        try:
            s_id = int(request.REQUEST['survey_id'])
            surveys = surveys.filter(
                id=s_id
            )  # We want to filter, not get: ID could point to a survey that doesn't exist for this program, or at all
        except ValueError:
            pass

    if len(surveys) < 1:
        raise ESPError(False), "Sorry, no such survey exists for this program!"

    return (user, prog, surveys)
Пример #4
0
def top_classes(request, tl, program, instance):
    try:
        prog = Program.by_prog_inst(program, instance)
    except Program.DoesNotExist:
        raise Http404

    user = ESPUser(request.user)

    if (tl == 'manage' and user.isAdmin(prog)):
        surveys = prog.getSurveys().filter(category='learn').select_related()
    else:
        raise ESPError(
            False
        ), 'You need to be a teacher or administrator of this program to review survey responses.'

    if request.REQUEST.has_key('survey_id'):
        try:
            s_id = int(request.REQUEST['survey_id'])
            surveys = surveys.filter(
                id=s_id
            )  # We want to filter, not get: ID could point to a survey that doesn't exist for this program, or at all
        except ValueError:
            pass

    if len(surveys) < 1:
        raise ESPError(False), 'Sorry, no such survey exists for this program!'

    if len(surveys) > 1:
        return render_to_response(
            'survey/choose_survey.html', request, {
                'surveys': surveys,
                'error': request.POST
            }
        )  # if request.POST, then we shouldn't have more than one survey any more...

    survey = surveys[0]

    if tl == 'manage':
        classes = prog.classes()
        rating_questions = survey.questions.filter(
            name__contains='overall rating')
        if len(rating_questions) < 1:
            raise ESPError(
                False
            ), 'Couldn\'t find an "overall rating" question in this survey.'
        rating_question = rating_questions[0]

        rating_cut = 0.0
        try:
            rating_cut = float(
                rating_question.get_params()['number_of_ratings']) - 1
        except ValueError:
            pass
        if request.REQUEST.has_key('rating_cut'):
            try:
                rating_cut = float(request.REQUEST['rating_cut'])
            except ValueError:
                pass

        num_cut = 1
        if request.REQUEST.has_key('num_cut'):
            try:
                num_cut = int(request.REQUEST['num_cut'])
            except ValueError:
                pass

        categories = prog.class_categories.all().order_by('category')

        subject_ct = ContentType.objects.get(app_label="program",
                                             model="classsubject")

        perclass_data = []
        initclass_data = [{
            'class':
            x,
            'ratings': [
                x.answer
                for x in Answer.objects.filter(object_id=x.id,
                                               content_type=subject_ct,
                                               question=rating_question)
            ]
        } for x in classes]
        for c in initclass_data:
            c['numratings'] = len(c['ratings'])
            if c['numratings'] < num_cut:
                continue
            c['avg'] = sum(c['ratings']) * 1.0 / c['numratings']
            if c['avg'] < rating_cut:
                continue
            teachers = list(c['class'].get_teachers())
            c['teacher'] = teachers[0]
            c['numteachers'] = len(teachers)
            if c['numteachers'] > 1:
                c['coteachers'] = teachers[1:]
            del c['ratings']
            perclass_data.append(c)
    context = {
        'survey': survey,
        'program': prog,
        'perclass_data': perclass_data,
        'rating_cut': rating_cut,
        'num_cut': num_cut,
        'categories': categories
    }

    return render_to_response('survey/top_classes.html', request, context)
Пример #5
0
def get_primary_nav(context):
    try:
        user = context['user']
    except KeyError:
        user = AnonymousUser()

    try:
        request = context['request']
    except KeyError:
        return {}

    path = request.path
    
    path_list = path.strip('/').split('/')
    
    if path_list[0] not in known_navlinks:
        return {}

    page_setup = {}
    curuser = ESPUser(user)
    
    is_admin = curuser.isAdmin()
    
    is_onsite = curuser.isOnsite()

    if is_onsite and is_admin:
        cache_key = 'NAVBAR__%s' % urlencode(path)
    else:
        cache_key = None

    try:
        retVal = cache.get(cache_key)
    except:
        retVal = None

    if retVal and cache_key:
        return {'page_setup': retVal,
                'user':       curuser}
    
    
    # if we are at a level 2 site, like /myesp/home/
    if len(path_list) == 2 and path.lower() in [ x[2] for x in sections.values() ]:
        page_setup['navlinks'] = []
        page_setup['buttonlocation'] = 'lev2'
        page_setup['stylesheet']     = [ x for x in basic_navlinks if sections[x][0] == path_list[0]][0]+'2'
        for section in basic_navlinks:
            page_setup['navlinks'].append({'id'       : section,
                                           'alt'      : sections[section][1],
                                           'highlight': path.lower() == sections[section][2],
                                           'href'     : sections[section][2]})
            if path.lower() == sections[section][2]:
                page_setup['section'] = {'id': section+'/lev2', 'alt': sections[section][1]}
                context['page_section'] = page_setup['section']
        if is_admin:
            section = 'admin'
            page_setup['navlinks'].append({'id'       : section,
                                           'alt'      : sections[section][1],
                                           'highlight': path.lower() == sections[section][2],
                                           'href'     : sections[section][2]})
        if is_onsite:
            section = 'onsite'
            page_setup['navlinks'].append({'id'       : section,
                                           'alt'      : sections[section][1],
                                           'highlight': path.lower() == sections[section][2],
                                           'href'     : sections[section][2]})
        if cache_key:
            cache.set(cache_key, page_setup, 99999)
            
        return {'page_setup': page_setup,
                'user':       curuser}
    
    # this is now level 3
    elif path_list[0] in [ x[0] for x in sections.values() ]:
        page_setup['navlinks'] = []
        page_setup['stylesheet'] = [ x for x in basic_navlinks if sections[x][0] == path_list[0]][0]+'3'

        for section in basic_navlinks:
            if path_list[0] == sections[section][0] and sections[section][4]:
                
                page_setup['section'] = {'id': section+'/lev3',
                                         'alt': sections[section][1],
                                         'cursection': section}
                context['page_section'] = page_setup['section']
                current_section = section
                
        for section in basic_navlinks:
            if path_list[0] == sections[section][0]:
                curbuttonloc = 'lev3'
            elif section in sections[current_section][3]:
                curbuttonloc = current_section + '/lev3'
            else:
                curbuttonloc = 'lev3'
                
            page_setup['navlinks'].append({'id'       : section,
                                           'alt'      : sections[section][1],
                                           'highlight': path_list[0] == sections[section][0] and sections[section][4],
                                           'href'     : sections[section][2],
                                           'buttonloc': curbuttonloc})
            

        if is_admin:
            section = 'admin'
            page_setup['navlinks'].append({'id'       : section,
                                           'alt'      : sections[section][1],
                                           'highlight': False,
                                           'href'     : sections[section][2],
                                           'buttonloc': 'lev2'})
        if is_onsite:
            section = 'onsite'
            page_setup['navlinks'].append({'id'       : section,
                                           'alt'      : sections[section][1],
                                           'highlight': False,
                                           'href'     : sections[section][2],
                                           'buttonloc': 'lev2'})

        if cache_key:
            cache.set(cache_key, page_setup, 99999)
            
        return {'page_setup': page_setup,
                'user':       curuser}

    return {'user': curuser}