def student_search(request): # check permissions roles = Role.all_roles(request.user.username) allowed = set(['ADVS', 'ADMN', 'GRAD', 'FUND', 'SYSA']) if not(roles & allowed) and not has_formgroup(request): # doesn't have any allowed roles return ForbiddenResponse(request, "Not permitted to do student search.") if 'term' not in request.GET: return ForbiddenResponse(request, "Must provide 'term' query.") term = request.GET['term'] response = HttpResponse(content_type='application/json') # do the query with Haystack # experimentally, score >= 1 seems to correspond to useful things student_qs = SearchQuerySet().models(Person).filter(text=term)[:20] data = [{'value': r.emplid, 'label': r.search_display} for r in student_qs if r and r.score >= 1 and unicode(r.emplid) not in EXCLUDE_EMPLIDS] # non-haystack version of the above query if len(student_qs) == 0: studentQuery = get_query(term, ['userid', 'emplid', 'first_name', 'last_name']) students = Person.objects.filter(studentQuery)[:20] data = [{'value': s.emplid, 'label': s.search_label_value()} for s in students if unicode(s.emplid) not in EXCLUDE_EMPLIDS] if 'nonstudent' in request.GET and 'ADVS' in roles: nonStudentQuery = get_query(term, ['first_name', 'last_name', 'pref_first_name']) nonStudents = NonStudent.objects.filter(nonStudentQuery)[:10] data.extend([{'value': n.slug, 'label': n.search_label_value()} for n in nonStudents]) #data.sort(key = lambda x: x['label']) json.dump(data, response, indent=1) return response
def index(request): userid = request.user.username memberships, excluded = Member.get_memberships(userid) staff_memberships = [ m for m in memberships if m.role in ['INST', 'TA', 'APPR'] ] # for docs link news_list = _get_news_list(userid, 5) roles = Role.all_roles(userid) is_grad = GradStudent.objects.filter( person__userid=userid, current_status__in=STATUS_ACTIVE).exists() has_grads = Supervisor.objects.filter(supervisor__userid=userid, supervisor_type='SEN', removed=False).exists() form_groups = FormGroup.objects.filter( members__userid=request.user.username).exists() has_ras = RAAppointment.objects.filter( hiring_faculty__userid=request.user.username, deleted=False).exists() #messages.add_message(request, messages.SUCCESS, 'Success message.') #messages.add_message(request, messages.WARNING, 'Warning message.') #messages.add_message(request, messages.INFO, 'Info message.') #messages.add_message(request, messages.ERROR, 'Error message.') context = { 'memberships': memberships, 'staff_memberships': staff_memberships, 'news_list': news_list, 'roles': roles, 'is_grad': is_grad, 'has_grads': has_grads, 'has_ras': has_ras, 'excluded': excluded, 'form_groups': form_groups } return render(request, "dashboard/index.html", context)
def index(request): userid = request.user.username memberships, excluded = Member.get_memberships(userid) staff_memberships = [m for m in memberships if m.role in ['INST', 'TA', 'APPR']] # for docs link is_instructor = len([m for m in memberships if m.role == 'INST']) > 0 # For TUGs link news_list = _get_news_list(userid, 5) roles = Role.all_roles(userid) is_grad = GradStudent.objects.filter(person__userid=userid, current_status__in=STATUS_ACTIVE).exists() has_grads = Supervisor.objects.filter(supervisor__userid=userid, supervisor_type='SEN', removed=False).exists() form_groups = FormGroup.objects.filter(members__userid=request.user.username).exists() has_ras = RAAppointment.objects.filter(hiring_faculty__userid=request.user.username, deleted=False).exists() # Only CMPT admins should see the one different TA module. Only non-CMPT TA Admins should see the other. # re-factored to take into account the very few people who should see both (mainly FAS Departmental Admins) cmpt_taadmn = Role.objects_fresh.filter(person__userid=userid, role='TAAD', unit__label__in=['CMPT', 'SEE']).exists() other_taadmn = Role.objects_fresh.filter(person__userid=userid, role='TAAD').exclude(unit__label__in=['CMPT', 'SEE']).exists() context = {'memberships': memberships, 'staff_memberships': staff_memberships, 'news_list': news_list, 'roles': roles, 'is_grad':is_grad, 'has_grads': has_grads, 'has_ras': has_ras, 'excluded': excluded, 'form_groups': form_groups, 'cmpt_taadmn': cmpt_taadmn, 'other_taadmn': other_taadmn, 'is_instructor': is_instructor} return render(request, "dashboard/index.html", context)
def index(request): userid = request.user.username memberships, excluded = Member.get_memberships(userid) staff_memberships = [m for m in memberships if m.role in ['INST', 'TA', 'APPR']] # for docs link is_instructor = len([m for m in memberships if m.role == 'INST']) > 0 # For TUGs link news_list = _get_news_list(userid, 5) roles = Role.all_roles(userid) is_grad = GradStudent.objects.filter(person__userid=userid, current_status__in=STATUS_ACTIVE).exists() has_grads = Supervisor.objects.filter(supervisor__userid=userid, supervisor_type='SEN', removed=False).exists() form_groups = FormGroup.objects.filter(members__userid=request.user.username).exists() has_ras = RAAppointment.objects.filter(hiring_faculty__userid=request.user.username, deleted=False).exists() # Only CMPT admins should see the one different TA module. Only non-CMPT TA Admins should see the other. # re-factored to take into account the very few people who should see both (mainly FAS Departmental Admins) cmpt_taadmn = Role.objects_fresh.filter(person__userid=userid, role='TAAD', unit__label='CMPT').exists() other_taadmn = Role.objects_fresh.filter(person__userid=userid, role='TAAD').exclude(unit__label='CMPT').exists() context = {'memberships': memberships, 'staff_memberships': staff_memberships, 'news_list': news_list, 'roles': roles, 'is_grad':is_grad, 'has_grads': has_grads, 'has_ras': has_ras, 'excluded': excluded, 'form_groups': form_groups, 'cmpt_taadmn': cmpt_taadmn, 'other_taadmn': other_taadmn, 'is_instructor': is_instructor} return render(request, "dashboard/index.html", context)
def config(request): users = Person.objects.filter(userid=request.user.username) if users.count() == 1: user = users[0] else: return NotFoundResponse(request, errormsg="Your account is not known to this system. There is nothing to configure.") # calendar config config = _get_calendar_config(user) if 'token' not in config: caltoken = None else: caltoken = config['token'] # feed config configs = UserConfig.objects.filter(user=user, key="feed-token") if not configs: newstoken = None else: newstoken = configs[0].value['token'] # news config configs = UserConfig.objects.filter(user=user, key="newsitems") # By default, users get emails for news items unless they specifically opted-out. The value here doesn't # change any data, it just displays the same thing as if someone had a UserConfig where they specifically set # email to True. if not configs: newsconfig = {'email': True} else: newsconfig = configs[0].value # advisor note API config advisortoken = None advisor = False if has_role('ADVS', request): advisor = True configs = UserConfig.objects.filter(user=user, key='advisor-token') if len(configs) > 0: advisortoken = configs[0].value['token'] # ID photo agreement instructor = False photo_agreement = False if Member.objects.filter(person=user, role__in=['INST', 'TA']).count() > 0: instructor = True configs = UserConfig.objects.filter(user=user, key='photo-agreement') if len(configs) > 0: photo_agreement = configs[0].value['agree'] # privacy config roles = Role.all_roles(user.userid) roles_with_privacy = [r for r in roles if r in PRIVACY_ROLES] privacy_visible = len(roles_with_privacy) > 0 context={'caltoken': caltoken, 'newstoken': newstoken, 'newsconfig': newsconfig, 'advisor': advisor, 'advisortoken': advisortoken, 'instructor': instructor, 'photo_agreement': photo_agreement, 'userid': user.userid, 'server_url': settings.BASE_ABS_URL, 'privacy_visible': privacy_visible} return render(request, "dashboard/config.html", context)
def search_scholarships_by_student(request, student_id): #check permissions roles = Role.all_roles(request.user.username) allowed = set(['FUND']) if not (roles & allowed): return ForbiddenResponse(request, "Not permitted to search scholarships by student.") scholarships = Scholarship.objects.filter(student__person__emplid=student_id) response = HttpResponse(content_type="application/json") data = [{'value': s.pk, 'display': s.scholarship_type.unit.label + ": " + s.scholarship_type.name + " (" + s.start_semester.name + " to " + s.end_semester.name + ")"} for s in scholarships] json.dump(data, response, indent=1) return response
def index(request): userid = request.user.username memberships, excluded = Member.get_memberships(userid) staff_memberships = [ m for m in memberships if m.role in ['INST', 'TA', 'APPR'] ] # for docs link is_instructor = len([m for m in memberships if m.role == 'INST' ]) > 0 # For TUGs link news_list = _get_news_list(userid, 5) roles = Role.all_roles(userid) is_grad = GradStudent.objects.filter( person__userid=userid, current_status__in=STATUS_ACTIVE).exists() has_grads = Supervisor.objects.filter( supervisor__userid=userid, supervisor_type__in=['SEN', 'COM', 'COS'], removed=False).exists() form_groups = FormGroup.objects.filter( members__userid=request.user.username).exists() has_ras = RAAppointment.objects.filter( hiring_faculty__userid=request.user.username, deleted=False).exists() has_ra_requests = RARequest.objects.filter( Q(supervisor__userid=request.user.username) | Q(author__userid=request.user.username), deleted=False, draft=False).exists() has_reports = AccessRule.objects.filter( person__userid=request.user.username).exists() # Only CMPT admins should see the one different TA module. They can now also see the other module as we hope to # transition them over. cmpt_taadmn = Role.objects_fresh.filter(person__userid=userid, role='TAAD', unit__label='CMPT').exists() context = { 'memberships': memberships, 'staff_memberships': staff_memberships, 'news_list': news_list, 'roles': roles, 'is_grad': is_grad, 'has_grads': has_grads, 'has_ras': has_ras, 'has_ra_requests': has_ra_requests, 'excluded': excluded, 'form_groups': form_groups, 'cmpt_taadmn': cmpt_taadmn, 'is_instructor': is_instructor, 'has_reports': has_reports } return render(request, "dashboard/index.html", context)
def XXX_sims_person_search(request): # check permissions roles = Role.all_roles(request.user.username) allowed = set(['ADVS', 'ADMN', 'GRAD', 'FUND']) if not (roles & allowed): # doesn't have any allowed roles return ForbiddenResponse(request, "Not permitted to do person search.") if 'emplid' not in request.GET: return ForbiddenResponse(request, "Must provide 'emplid' query.") emplid = request.GET['emplid'] response = HttpResponse(content_type='application/json') data = find_person(emplid) json.dump(data, response, indent=1) return response
def student_search(request): # check permissions roles = Role.all_roles(request.user.username) allowed = set(['ADVS', 'ADMN', 'GRAD', 'FUND', 'SYSA']) if not (roles & allowed) and not has_formgroup(request): # doesn't have any allowed roles return ForbiddenResponse(request, "Not permitted to do student search.") if 'term' not in request.GET: return ForbiddenResponse(request, "Must provide 'term' query.") term = request.GET['term'] response = HttpResponse(content_type='application/json') # do the query with Haystack # experimentally, score >= 1 seems to correspond to useful things student_qs = SearchQuerySet().models(Person).filter(text=term)[:20] data = [{ 'value': r.emplid, 'label': r.search_display } for r in student_qs if r and r.score >= 1 and unicode(r.emplid) not in EXCLUDE_EMPLIDS] # non-haystack version of the above query if len(student_qs) == 0: studentQuery = get_query( term, ['userid', 'emplid', 'first_name', 'last_name']) students = Person.objects.filter(studentQuery)[:20] data = [{ 'value': s.emplid, 'label': s.search_label_value() } for s in students if unicode(s.emplid) not in EXCLUDE_EMPLIDS] if 'nonstudent' in request.GET and 'ADVS' in roles: nonStudentQuery = get_query( term, ['first_name', 'last_name', 'pref_first_name']) nonStudents = NonStudent.objects.filter(nonStudentQuery)[:10] data.extend([{ 'value': n.slug, 'label': n.search_label_value() } for n in nonStudents]) #data.sort(key = lambda x: x['label']) json.dump(data, response, indent=1) return response
def XXX_sims_person_search(request): # check permissions roles = Role.all_roles(request.user.username) allowed = set(['ADVS', 'ADMN', 'GRAD', 'FUND']) if not(roles & allowed): # doesn't have any allowed roles return ForbiddenResponse(request, "Not permitted to do person search.") if 'emplid' not in request.GET: return ForbiddenResponse(request, "Must provide 'emplid' query.") emplid = request.GET['emplid'] response = HttpResponse(content_type='application/json') data = find_person(emplid) json.dump(data, response, indent=1) return response
def index(request): userid = request.user.username memberships, excluded = Member.get_memberships(userid) staff_memberships = [m for m in memberships if m.role in ['INST', 'TA', 'APPR']] # for docs link news_list = _get_news_list(userid, 5) roles = Role.all_roles(userid) is_grad = GradStudent.objects.filter(person__userid=userid, current_status__in=STATUS_ACTIVE).count() > 0 has_grads = Supervisor.objects.filter(supervisor__userid=userid, supervisor_type='SEN', removed=False).count() > 0 form_groups = FormGroup.objects.filter(members__userid=request.user.username).count() > 0 #messages.add_message(request, messages.SUCCESS, 'Success message.') #messages.add_message(request, messages.WARNING, 'Warning message.') #messages.add_message(request, messages.INFO, 'Info message.') #messages.add_message(request, messages.ERROR, 'Error message.') context = {'memberships': memberships, 'staff_memberships': staff_memberships, 'news_list': news_list, 'roles': roles, 'is_grad':is_grad, 'has_grads': has_grads, 'excluded': excluded, 'form_groups': form_groups} return render(request, "dashboard/index.html", context)