Esempio n. 1
0
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
Esempio n. 2
0
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)
Esempio n. 3
0
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)
Esempio n. 4
0
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)
Esempio n. 5
0
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)
Esempio n. 6
0
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)
Esempio n. 7
0
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
Esempio n. 8
0
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
Esempio n. 9
0
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)
Esempio n. 10
0
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
Esempio n. 11
0
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
Esempio n. 12
0
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
Esempio n. 13
0
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)