def get_members_info(): members = [m['uid'] for m in ldap_get_current_students()] member_list = [] number_onfloor = 0 for member_uid in members: uid = member_uid[0].decode('utf-8') name = ldap_get_name(uid) active = ldap_is_active(uid) onfloor = ldap_is_onfloor(uid) room_number = ldap_get_room_number(uid) room = room_number if room_number != "N/A" else "" hp = ldap_get_housing_points(uid) member_list.append({ "uid": uid, "name": name, "active": active, "onfloor": onfloor, "room": room, "hp": hp }) if onfloor: number_onfloor += 1 return member_list, number_onfloor
def render_template(request, template_name, **kwargs): user_name = request.headers.get('x-webauth-user') # TODO maybe use the webauth request decorator if EvalSettings.query.first() is None: db.session.add(EvalSettings()) db.session.flush() db.session.commit() lockdown = EvalSettings.query.first().site_lockdown is_active = ldap_is_active(user_name) is_alumni = ldap_is_alumni(user_name) is_eboard = ldap_is_eboard(user_name) is_financial = ldap_is_financial_director(user_name) is_eval = ldap_is_eval_director(user_name) is_intromember = ldap_is_intromember(user_name) if is_eval: lockdown = False return flask_render_template(template_name, lockdown=lockdown, is_active=is_active, is_alumni=is_alumni, is_eboard=is_eboard, is_eval_director=is_eval, is_financial_director=is_financial, is_intromember=is_intromember, **kwargs)
def member_management_make_user_active(user_dict=None): log = logger.new(request=request, auth_dict=user_dict) if not ldap_is_current_student(user_dict['account']) or ldap_is_active(user_dict['account']): return "must be current student and not active", 403 ldap_set_active(user_dict['account']) log.info("Make user {} active".format(user_dict['username'])) clear_members_cache() return jsonify({"success": True}), 200
def edit_uid(uid, flask_request, username): log = logger.new(request=flask_request, auth_dict={'username': username}) post_data = flask_request.get_json() account = ldap_get_member(uid) active_member = post_data['activeMember'] current_account = ldap_get_member(username) if ldap_is_eval_director(current_account): room_number = post_data['roomNumber'] onfloor_status = post_data['onfloorStatus'] housing_points = post_data['housingPoints'] log.info('Edit {} - Room: {} On-Floor: {} Points: {}'.format( uid, post_data['roomNumber'], post_data['onfloorStatus'], post_data['housingPoints'])) ldap_set_roomnumber(account, room_number) if onfloor_status: # If a OnFloorStatusAssigned object exists, don't make another if not ldap_is_member_of_group(account, "onfloor"): db.session.add(OnFloorStatusAssigned(uid, datetime.now())) ldap_add_member_to_group(account, "onfloor") else: for ofs in OnFloorStatusAssigned.query.filter(OnFloorStatusAssigned.uid == uid): db.session.delete(ofs) db.session.flush() db.session.commit() if ldap_is_member_of_group(account, "onfloor"): ldap_remove_member_from_group(account, "onfloor") ldap_set_housingpoints(account, housing_points) # Only update if there's a diff log.info('Set {} Active: {}'.format(uid, active_member)) if ldap_is_active(account) != active_member: if active_member: ldap_set_active(account) else: ldap_set_inactive(account) if active_member: db.session.add(SpringEval(uid)) else: SpringEval.query.filter( SpringEval.uid == uid and SpringEval.active).update( { 'active': False }) clear_members_cache()
def member_management_make_user_active(): log = logger.new(request=request) uid = request.headers.get('x-webauth-user') account = ldap_get_member(uid) if not ldap_is_current_student(account) or ldap_is_active(account): return "must be current student and not active", 403 ldap_set_active(account) log.info("Make user {} active".format(uid)) clear_members_cache() return jsonify({"success": True}), 200
def __get_ofm__(): # check that everyone in onfloor has onfloorstatus onfloors = [ uids['uid'][0].decode('utf-8') for uids in ldap_get_onfloor_members() ] ofm = [{ 'uid': m.uid, 'time': m.onfloor_granted, 'points': ldap_get_housing_points(m.uid) } for m in OnFloorStatusAssigned.query.all( ) if ldap_is_active(m.uid) or CurrentCoops.query.filter( CurrentCoops.uid == m.uid and CurrentCoops.active).first() is not None] # Add everyone who has a discrepancy in LDAP and OnFloorStatusAssigned for member in onfloors: if OnFloorStatusAssigned.query.filter( OnFloorStatusAssigned.uid == member).first() is None: ofsa = OnFloorStatusAssigned(member, datetime.min) active = ldap_is_active(ofsa.uid) coop = CurrentCoops.query.filter( CurrentCoops.uid == ofsa.uid).first() coop = coop != None and coop.active if active or coop: ofm.append({ 'uid': ofsa.uid, 'time': ofsa.onfloor_granted, 'points': ldap_get_housing_points(ofsa.uid) }) # sort by housing points then by time in queue ofm.sort(key=lambda m: m['time']) ofm.sort(key=lambda m: m['points'], reverse=True) return ofm
def wrapped_func(*args, **kwargs): user_name = request.headers.get('x-webauth-user') account = ldap_get_member(user_name) is_active = ldap_is_active(account) is_alumni = ldap_is_alumni(account) is_eboard = ldap_is_eboard(account) is_financial = ldap_is_financial_director(account) is_eval = ldap_is_eval_director(account) return func({"user_name": user_name, "is_active": is_active, "is_alumni": is_alumni, "is_eboard": is_eboard, "is_financial": is_financial, "is_eval": is_eval}, *args, **kwargs)
def get_housing_queue(): ofm = [ { 'uid': m.uid, 'time': m.onfloor_granted, 'points': ldap_get_housing_points(m.uid) } for m in models.OnFloorStatusAssigned.query.all() if ldap_is_active(m.uid)] # sort by housing points then by time in queue ofm.sort(key=lambda m: m['time']) ofm.sort(key=lambda m: m['points'], reverse=True) queue = [m['uid'] for m in ofm if ldap_get_room_number(m['uid']) == "N/A" and ldap_is_current_student(m['uid'])] return queue
def edit_uid(uid, user_name, post_data): active_member = post_data['activeMember'] if ldap_is_eval_director(user_name): logger.info('backend', action="edit %s room: %s onfloor: %s housepts %s" % (uid, post_data['roomNumber'], post_data['onfloorStatus'], post_data['housingPoints'])) room_number = post_data['roomNumber'] onfloor_status = post_data['onfloorStatus'] housing_points = post_data['housingPoints'] ldap_set_roomnumber(uid, room_number) if onfloor_status: # If a OnFloorStatusAssigned object exists, don't make another if not ldap_is_member_of_group(uid, "onfloor"): db.session.add(OnFloorStatusAssigned(uid, datetime.now())) ldap_add_member_to_group(uid, "onfloor") else: for ofs in OnFloorStatusAssigned.query.filter( OnFloorStatusAssigned.uid == uid): db.session.delete(ofs) db.session.flush() db.session.commit() if ldap_is_member_of_group(uid, "onfloor"): ldap_remove_member_from_group(uid, "onfloor") ldap_set_housingpoints(uid, housing_points) # Only update if there's a diff logger.info('backend', action="edit %s active: %s" % (uid, active_member)) if ldap_is_active(uid) != active_member: if active_member: ldap_set_active(uid) else: ldap_set_inactive(uid) if active_member: db.session.add(SpringEval(uid)) else: SpringEval.query.filter(SpringEval.uid == uid and SpringEval.active).update( {'active': False}) clear_active_members_cache()
def render_template(request, template_name, **kwargs): user_name = request.headers.get('x-webauth-user') # TODO maybe use the webauth request decorator if EvalSettings.query.first() is None: db.session.add(EvalSettings()) db.session.flush() db.session.commit() account = ldap_get_member(user_name) lockdown = EvalSettings.query.first().site_lockdown accepting_dues = EvalSettings.query.first().accept_dues_until > date.today() is_active = ldap_is_active(account) is_alumni = ldap_is_alumni(account) is_eboard = ldap_is_eboard(account) is_financial = ldap_is_financial_director(account) is_eval = ldap_is_eval_director(account) is_intromember = ldap_is_intromember(account) is_rtp = ldap_is_rtp(account) cm_review = len(CommitteeMeeting.query.filter( CommitteeMeeting.approved == False).all()) # pylint: disable=singleton-comparison ts_review = len(TechnicalSeminar.query.filter( TechnicalSeminar.approved == False).all()) # pylint: disable=singleton-comparison admin_warning = lockdown if is_eboard or is_rtp: lockdown = False return flask_render_template( template_name, lockdown=lockdown, admin_warning=admin_warning, accepting_dues=accepting_dues, is_active=is_active, is_alumni=is_alumni, is_eboard=is_eboard, is_eval_director=is_eval, is_financial_director=is_financial, is_intromember=is_intromember, is_rtp=is_rtp, pending_review=(cm_review + ts_review), **kwargs)
def render_template(template_name, user_dict=None, **kwargs): if EvalSettings.query.first() is None: db.session.add(EvalSettings()) db.session.flush() db.session.commit() lockdown = EvalSettings.query.first().site_lockdown accepting_dues = EvalSettings.query.first().accept_dues_until > date.today( ) is_active = ldap_is_active(user_dict['account']) is_alumni = ldap_is_alumni(user_dict['account']) is_eboard = ldap_is_eboard(user_dict['account']) is_financial = ldap_is_financial_director(user_dict['account']) is_eval = ldap_is_eval_director(user_dict['account']) is_intromember = ldap_is_intromember(user_dict['account']) is_rtp = ldap_is_rtp(user_dict['account']) cm_review = len( CommitteeMeeting.query.filter( CommitteeMeeting.approved == False).all()) # pylint: disable=singleton-comparison ts_review = len( TechnicalSeminar.query.filter( TechnicalSeminar.approved == False).all()) # pylint: disable=singleton-comparison admin_warning = lockdown if is_eboard or is_rtp: lockdown = False return flask_render_template(template_name, lockdown=lockdown, admin_warning=admin_warning, accepting_dues=accepting_dues, is_active=is_active, is_alumni=is_alumni, is_eboard=is_eboard, is_eval_director=is_eval, is_financial_director=is_financial, is_intromember=is_intromember, is_rtp=is_rtp, pending_review=(cm_review + ts_review), **kwargs)
def get_members_info(): members = [account for account in ldap_get_current_students()] member_list = [] for account in members: uid = account.uid name = account.cn active = ldap_is_active(account) onfloor = ldap_is_onfloor(account) room = ldap_get_roomnumber(account) hp = account.housingPoints member_list.append({ "uid": uid, "name": name, "active": active, "onfloor": onfloor, "room": room, "hp": hp }) return member_list
def display_dashboard(): log = logger.new(user_name=request.headers.get("x-webauth-user"), request_id=str(uuid.uuid4())) log.info('frontend', action='display dashboard') # get user data user_name = request.headers.get('x-webauth-user') can_vote = get_voting_members() data = dict() data['username'] = user_name data['name'] = ldap_get_name(user_name) # Member Status data['active'] = ldap_is_active(user_name) # On-Floor Status data['onfloor'] = ldap_is_onfloor(user_name) # Voting Status data['voting'] = bool(user_name in can_vote) # freshman shit if ldap_is_intromember(user_name): data['freshman'] = get_freshman_data(user_name) else: data['freshman'] = False spring = {} c_meetings = [ m.meeting_id for m in MemberCommitteeAttendance.query.filter( MemberCommitteeAttendance.uid == user_name) ] spring['committee_meetings'] = len(c_meetings) h_meetings = [(m.meeting_id, m.attendance_status) for m in MemberHouseMeetingAttendance.query.filter( MemberHouseMeetingAttendance.uid == user_name)] spring['hm_missed'] = len([h for h in h_meetings if h[1] == "Absent"]) data['spring'] = spring # only show housing if member has onfloor status if ldap_is_onfloor(user_name): housing = dict() housing['points'] = ldap_get_housing_points(user_name) housing['room'] = ldap_get_room_number(user_name) if housing['room'] == "N/A": housing['queue_pos'] = "%s / %s" % (get_queue_position(user_name), get_queue_length()) else: housing['queue_pos'] = "N/A" else: housing = None data['housing'] = housing data['major_projects'] = [{ 'id': p.id, 'name': p.name, 'status': p.status, 'description': p.description } for p in MajorProject.query.filter(MajorProject.uid == user_name)] data['major_projects_count'] = len(data['major_projects']) spring['mp_status'] = "Failed" for mp in data['major_projects']: if mp['status'] == "Pending": spring['mp_status'] = 'Pending' continue if mp['status'] == "Passed": spring['mp_status'] = 'Passed' break conditionals = [{ 'date_created': c.date_created, 'date_due': c.date_due, 'description': c.description, 'status': c.status } for c in Conditional.query.filter(Conditional.uid == user_name)] data['conditionals'] = conditionals data['conditionals_len'] = len(conditionals) cm_attendance = [{ 'type': m.committee, 'datetime': m.timestamp.date() } for m in CommitteeMeeting.query.filter( CommitteeMeeting.id.in_(c_meetings))] hm_attendance = [{ 'reason': m.excuse, 'datetime': HouseMeeting.query.filter(HouseMeeting.id == m.meeting_id).first().date } for m in MemberHouseMeetingAttendance.query.filter( MemberHouseMeetingAttendance.uid == user_name).filter( MemberHouseMeetingAttendance.attendance_status == "Absent")] data['cm_attendance'] = cm_attendance data['cm_attendance_len'] = len(cm_attendance) data['hm_attendance'] = hm_attendance data['hm_attendance_len'] = len(hm_attendance) return render_template(request, 'dashboard.html', **data)
def member_management_getuserinfo(uid, user_dict=None): log = logger.new(request=request, auth_dict=user_dict) log.info('Get {}\'s Information'.format(uid)) if not ldap_is_eval_director( user_dict['account']) and not ldap_is_financial_director( user_dict['account']): return "must be eval or financial director", 403 acct = None if uid.isnumeric(): acct = FreshmanAccount.query.filter(FreshmanAccount.id == uid).first() # missed hm def get_hm_date(hm_id): return HouseMeeting.query.filter( HouseMeeting.id == hm_id). \ first().date.strftime("%Y-%m-%d") # if fid if acct: missed_hm = [{ 'date': get_hm_date(hma.meeting_id), 'id': hma.meeting_id, 'excuse': hma.excuse, 'status': hma.attendance_status } for hma in FreshmanHouseMeetingAttendance.query.filter( FreshmanHouseMeetingAttendance.fid == acct.id and ( FreshmanHouseMeetingAttendance.attendance_status != attendance_enum.Attended))] hms_missed = [] for hm in missed_hm: if hm['status'] != "Attended": hms_missed.append(hm) return jsonify({ 'id': acct.id, 'name': acct.name, 'eval_date': acct.eval_date.strftime("%Y-%m-%d"), 'missed_hm': hms_missed, 'onfloor_status': acct.onfloor_status, 'room_number': acct.room_number, 'sig_missed': acct.signatures_missed }), 200 account = ldap_get_member(uid) if ldap_is_eval_director(ldap_get_member(user_dict['username'])): missed_hm = [{ 'date': get_hm_date(hma.meeting_id), 'id': hma.meeting_id, 'excuse': hma.excuse, 'status': hma.attendance_status } for hma in MemberHouseMeetingAttendance.query.filter( MemberHouseMeetingAttendance.uid == uid and ( MemberHouseMeetingAttendance.attendance_status != attendance_enum.Attended))] hms_missed = [] for hm in missed_hm: if hm['status'] != "Attended": hms_missed.append(hm) return jsonify({ 'name': account.cn, 'room_number': account.roomNumber, 'onfloor_status': ldap_is_onfloor(account), 'housing_points': account.housingPoints, 'active_member': ldap_is_active(account), 'missed_hm': hms_missed, 'user': '******' }), 200 return jsonify({ 'name': account.cn, 'active_member': ldap_is_active(account), 'user': '******' }), 200
def member_management_getuserinfo(uid): log = logger.new(user_name=request.headers.get("x-webauth-user"), request_id=str(uuid.uuid4())) log.info('api', action='retrieve user info') user_name = request.headers.get('x-webauth-user') if not ldap_is_eval_director(user_name) and not ldap_is_financial_director( user_name): return "must be eval or financial director", 403 acct = None if uid.isnumeric(): acct = FreshmanAccount.query.filter(FreshmanAccount.id == uid).first() # missed hm def get_hm_date(hm_id): return HouseMeeting.query.filter( HouseMeeting.id == hm_id). \ first().date.strftime("%Y-%m-%d") # if fid if acct: missed_hm = [{ 'date': get_hm_date(hma.meeting_id), 'id': hma.meeting_id, 'excuse': hma.excuse, 'status': hma.attendance_status } for hma in FreshmanHouseMeetingAttendance.query.filter( FreshmanHouseMeetingAttendance.fid == acct.id and ( FreshmanHouseMeetingAttendance.attendance_status != attendance_enum.Attended))] hms_missed = [] for hm in missed_hm: if hm['status'] != "Attended": hms_missed.append(hm) return jsonify({ 'id': acct.id, 'name': acct.name, 'eval_date': acct.eval_date.strftime("%Y-%m-%d"), 'missed_hm': hms_missed, 'onfloor_status': acct.onfloor_status, 'room_number': acct.room_number, 'sig_missed': acct.signatures_missed }), 200 if ldap_is_eval_director(user_name): missed_hm = [{ 'date': get_hm_date(hma.meeting_id), 'id': hma.meeting_id, 'excuse': hma.excuse, 'status': hma.attendance_status } for hma in MemberHouseMeetingAttendance.query.filter( MemberHouseMeetingAttendance.uid == uid and ( MemberHouseMeetingAttendance.attendance_status != attendance_enum.Attended))] hms_missed = [] for hm in missed_hm: if hm['status'] != "Attended": hms_missed.append(hm) return jsonify({ 'name': ldap_get_name(uid), 'room_number': ldap_get_room_number(uid), 'onfloor_status': ldap_is_onfloor(uid), 'housing_points': ldap_get_housing_points(uid), 'active_member': ldap_is_active(uid), 'missed_hm': hms_missed, 'user': '******' }), 200 else: return jsonify({ 'name': ldap_get_name(uid), 'active_member': ldap_is_active(uid), 'user': '******' }), 200
def display_dashboard(user_dict=None): log = logger.new(request=request, auth_dict=user_dict) log.info('display dashboard') # Get the list of voting members. can_vote = get_voting_members() data = dict() data['username'] = user_dict['account'].uid data['active'] = ldap_is_active(user_dict['account']) data['bad_standing'] = ldap_is_bad_standing(user_dict['account']) data['onfloor'] = ldap_is_onfloor(user_dict['account']) data['voting'] = bool(user_dict['account'].uid in can_vote) data['voting_count'] = { "Voting Members": len(can_vote), "Active Members": len(ldap_get_active_members()) } # freshman shit if ldap_is_intromember(user_dict['account']): data['freshman'] = get_freshman_data(user_dict['account'].uid) else: data['freshman'] = False spring = {} c_meetings = get_cm(user_dict['account']) spring['committee_meetings'] = len(c_meetings) spring['req_meetings'] = req_cm(user_dict['account']) h_meetings = [(m.meeting_id, m.attendance_status) for m in get_hm(user_dict['account'])] spring['hm_missed'] = len([h for h in h_meetings if h[1] == "Absent"]) eval_entry = SpringEval.query.filter( SpringEval.uid == user_dict['account'].uid, SpringEval.date_created > start_of_year(), SpringEval.active == True).first() # pylint: disable=singleton-comparison if eval_entry is not None: spring['status'] = eval_entry.status else: spring['status'] = None data['spring'] = spring # only show housing if member has onfloor status if ldap_is_onfloor(user_dict['account']): housing = dict() housing['points'] = user_dict['account'].housingPoints housing['room'] = user_dict['account'].roomNumber housing['queue_pos'] = get_queue_position(user_dict['account'].uid) else: housing = None data['housing'] = housing data['major_projects'] = [{ 'id': p.id, 'name': p.name, 'status': p.status, 'description': p.description } for p in MajorProject.query.filter( MajorProject.uid == user_dict['account'].uid, MajorProject.date > start_of_year())] data['major_projects_count'] = len(data['major_projects']) spring['mp_status'] = "Failed" for mp in data['major_projects']: if mp['status'] == "Pending": spring['mp_status'] = 'Pending' continue if mp['status'] == "Passed": spring['mp_status'] = 'Passed' break conditionals = [{ 'date_created': c.date_created, 'date_due': c.date_due, 'description': c.description, 'status': c.status } for c in Conditional.query.filter( Conditional.uid == user_dict['account'].uid, Conditional.date_due > start_of_year())] data['conditionals'] = conditionals data['conditionals_len'] = len(conditionals) hm_attendance = [{ 'reason': m.excuse, 'datetime': m.date } for m in MemberHouseMeetingAttendance.query.outerjoin( HouseMeeting, MemberHouseMeetingAttendance.meeting_id == HouseMeeting.id).with_entities( MemberHouseMeetingAttendance.excuse, HouseMeeting.date).filter( MemberHouseMeetingAttendance.uid == user_dict['account'].uid, MemberHouseMeetingAttendance.attendance_status == "Absent", HouseMeeting.date > start_of_year())] data['cm_attendance'] = c_meetings data['cm_attendance_len'] = len(c_meetings) data['hm_attendance'] = hm_attendance data['hm_attendance_len'] = len(hm_attendance) return render_template('dashboard.html', **data)
def member_management_edituser(uid): log = logger.new(user_name=request.headers.get("x-webauth-user"), request_id=str(uuid.uuid4())) log.info('api', action='edit uid user') user_name = request.headers.get('x-webauth-user') if not ldap_is_eval_director(user_name) and not ldap_is_financial_director( user_name): return "must be eval director", 403 post_data = request.get_json() if not uid.isdigit(): active_member = post_data['activeMember'] if ldap_is_eval_director(user_name): logger.info( 'backend', action="edit %s room: %s onfloor: %s housepts %s" % (uid, post_data['roomNumber'], post_data['onfloorStatus'], post_data['housingPoints'])) room_number = post_data['roomNumber'] onfloor_status = post_data['onfloorStatus'] housing_points = post_data['housingPoints'] ldap_set_roomnumber(uid, room_number) if onfloor_status: ldap_add_member_to_group(uid, "onfloor") else: ldap_remove_member_from_group(uid, "onfloor") ldap_set_housingpoints(uid, housing_points) # Only update if there's a diff logger.info('backend', action="edit %s active: %s" % (uid, active_member)) if ldap_is_active(uid) != active_member: if active_member: ldap_set_active(uid) else: ldap_set_inactive(uid) if active_member: db.session.add(SpringEval(uid)) else: SpringEval.query.filter(SpringEval.uid == uid and SpringEval.active).update( {'active': False}) clear_active_members_cache() else: logger.info( 'backend', action="edit freshman account %s room: %s onfloor: %s eval_date: %s" % (uid, post_data['roomNumber'], post_data['onfloorStatus'], post_data['evalDate'])) name = post_data['name'] room_number = post_data['roomNumber'] onfloor_status = post_data['onfloorStatus'] eval_date = post_data['evalDate'] FreshmanAccount.query.filter(FreshmanAccount.id == uid).update({ 'name': name, 'eval_date': datetime.strptime(eval_date, "%Y-%m-%d"), 'onfloor_status': onfloor_status, 'room_number': room_number }) db.session.flush() db.session.commit() return jsonify({"success": True}), 200