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)
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)
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)
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)
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}