def update_officer(officer_id): auth.check_login() name = request.form['name'] year = request.form['year'] major = request.form['major'] position = request.form['position'] quote = request.form['quote'] description = request.form['description'] href = '#' + request.form['name'] if helpers.check_file_in_request(request): try: image_url = helpers.save_request_file(request, OFFICER_IMAGE_FOLDER) except ValueError as e: flash('Exception: ' + str(e)) return redirect(url_for('admin_panel')) query = ( 'update officers ' 'set name=?, year=?, major=?, position=?, quote=?, description=?, href=?, image_url=? ' 'where id=?' ) query_db(query, [name, year, major, position, quote, description, href, image_url, officer_id]) else: query = ( 'update officers ' 'set name=?, year=?, major=?, position=?, quote=?, description=?, href=? ' 'where id=?' ) query_db(query, [name, year, major, position, quote, description, href, officer_id]) flash('Updated ' + name) # TODO: think about doing all of these redirects javascript-side return redirect(url_for('admin_panel'))
def admin_panel(): auth.check_login() events = query_db('select * from events order by unix_time desc') officers = query_db('select * from officers order by id') families = query_db('select * from families order by id') files = query_db('select * from files order by id') members = query_db('select * from members order by name') event_checkins = query_db('select * from event_checkins order by eventID') leaderboard = query_db('select * from members order by checkins desc') scrapbookPath = join(ROOT, SCRAPBOOK_FOLDER) scrapbookFolders = [ dir for dir in listdir(scrapbookPath) if isdir(join(scrapbookPath, dir)) ] scrapbookSemesterImages = {} for folder in scrapbookFolders: directoryPath = join(ROOT, SCRAPBOOK_FOLDER, folder) scrapbookSemesterImages[folder] = [ f for f in listdir(directoryPath) if isfile(join(directoryPath, f)) ] return render_template('admin.html', events=events, officers=officers, families=families, files=files, members=members, check_valid_checkin=check_valid_checkin, leaderboard=leaderboard, scrapbookSemesterImages=scrapbookSemesterImages)
def edit_family(family_id): auth.check_login() family_name = request.form['family_name'] family_head1 = request.form['family_head1'] family_head2 = request.form['family_head2'] description = request.form['description'] if helpers.check_file_in_request(request): try: image_url = helpers.save_request_file(request, FAMILY_IMAGE_FOLDER) except ValueError as e: flash('Exception: ' + str(e)) return redirect(url_for('admin_panel')) query = ( 'update families ' 'set family_name=?, family_head1=?, family_head2=?, description=?, image_url=? ' 'where id=?' ) query_db(query, [family_name, family_head1, family_head2, description, image_url, family_id]) else: query = ( 'update families ' 'set family_name=?, family_head1=?, family_head2=?, description=?' 'where id=?' ) query_db(query, [family_name, family_head1, family_head2, description, family_id]) flash('Updated ' + family_name) return redirect(url_for('admin_panel'))
def update_checkin(member_id): auth.check_login() name = request.form['name'] checkins = request.form['checkins'] returning = (int(checkins) > 0) eventName = request.form['eventName'] eventID = int(request.form['eventID']) if check_valid_checkin(eventID, member_id): query = ('update members ' 'set checkins=checkins+1 ' 'where id=?') query_db(query, (member_id, )) query = ('insert into event_checkins values (?,?,?,?)') query_db(query, (eventID, eventName, member_id, name)) if returning: query = ( 'update events ' 'set attendance=attendance+1, returning_attendance=returning_attendance+1 ' 'where id=?') else: query = ( 'update events ' 'set attendance=attendance+1, new_attendance=new_attendance+1 ' 'where id=?') query_db(query, (eventID, )) return "Checked in" return "Already checked in for this event"
def add_officer(): auth.check_login() try: image = helpers.file_from_request(request) except ValueError as e: flash('Exception: ' + str(e)) return redirect(url_for('admin_panel')) image_url = helpers.save_request_file(request, OFFICER_IMAGE_FOLDER) name = request.form['name'] year = request.form['year'] major = request.form['major'] position = request.form['position'] quote = request.form['quote'] description = request.form['description'] # TODO: this doesn't need to be part of the model href = '#' + request.form['name'] query = 'insert into officers (name, year, major, quote, description, image_url, position, href)'\ 'values (?, ?, ?, ?, ?, ?, ?, ?)' query_db(query, [name, year, major, quote, description, image_url, position, href]) flash('New officer successfully posted') return redirect(url_for('admin_panel'))
def add_late_jars(): auth.check_login() difficulty = request.form['difficulty'] jar = request.form['newLateJar'] query = 'insert into late_jars (difficulty, jar) values (?, ?)' query_db(query, [difficulty, jar]) flash('New late jar added') return redirect(url_for('admin_panel'))
def roll(): """Return a random easy or hard late jar.""" auth.check_login() """ easyLateJars = ["Change your pfp to your first one for at least 3 days", "Dance to https://www.youtube.com/watch?v=qqmmc7pl9Do", "Everyone comment on your first pfp", "Instagram live yourself for like at least 10 minutes (and tell cab beforehand when you'll do it)", "Let Andrew/Daniel/Avery caption your next TASA profile pic", "Let your co choose your zoom background for a day (must be appropriate)", "Make a lookbook with 5 outfits -- commentary required", "Make a post and compliment every single cabinet member", "Lipsync a music video (low quality, 2 minutes)", "Watch an anime episode with Tiff OR kdrama with steph OR loona vids with brandon and ash", "Take over the tabling hour shifts of a cabinet member of your choice", "Paint your nails a color of the exec's choice using nail polish / marker", "Play Jeffrey or Nick or Marg's brother in a game of chess", "Watch shanie's twitch stream for minimum 20 mins and be active in chat", "Change zoom profile pic to picture of exec's choice for a week", "Be vanessa's hype man for a day", "Coffee chat with andrew", "Take a shot of anything with terrance/will", "Go thru marg's hinge likes and provide commentary with her"] hardLateJars = ["Make 5 tik toks (and share username on a social media platform of your choice)", "Act a scene from a movie or drama", "Write a FANFICTION and post it in Cabinet FB group", "Post at least 1 short vlog a day for a week on the cabinet page", "Recreate https://www.facebook.com/groups/1343933772408499/permalink/2750477481754114", "Send a meme to everyone on cabinet that you think they'd like", "Time lapse yourself doing a chloe ting/emi wong/blogilates workout (10 minutes minimum)", "Make a video of yourself doing an impression of everyone on cab and upload to facebook group", "Workout with terrance over zoom (min 10 mins)", "Record yourself rapping 8 bars about anything (must be written by you)"] """ choices = None if request.form['level'] == 'Easy': choices = query_db('select * from late_jars where difficulty = "Easy" order by id') choices = [row[2] for row in choices] else: choices = query_db('select * from late_jars where difficulty = "Hard" order by id') choices = [row[2] for row in choices] rolledLateJars = "" chosen = [] for i in range(int(request.form['quantity'])): currentNum = str(i+1) rolled = random.choice(choices) while rolled in chosen: rolled = random.choice(choices) rolledLateJars += "(" + currentNum + ") " + rolled + "\n" chosen.append(rolled) flash(rolledLateJars) return redirect(url_for('admin_panel'))
def add_file(): auth.check_login() name = request.form['name'] file_url = request.form['file_url'] query = 'insert into files (name, file_url)'\ 'values (?, ?)' query_db(query, [name, file_url]) flash('New file successfully posted') return redirect(url_for('admin_panel'))
def add_event(): auth.check_login() try: url = request.form['link'] # Facebook event url example: # https://www.facebook.com/events/1201801539835081/ # Match the numbers between /s fb_event_id = re.match(r'.*/([0-9]+)/?$', url) if fb_event_id: fb_event_id = fb_event_id.group(1) else: raise Exception('Bad URL') res = fb_events.get_event(fb_event_id) title = res['name'] if res['is_online']: location = "Online" else: location = res.get('place', {'name': ''})['name'] time_str, unix_time = helpers.convert_time(res['start_time']) # get cover photo image = fb_events.get_cover_photo(res) # just resave it as a jpg image_ext = '.jpg' file_name = helpers.generate_random_filename(image_ext) image_url, image_path = helpers.create_file_paths( IMAGE_FOLDER, file_name) image.save(image_path, format='JPEG', quality=95, optimize=True, progressive=True) exists_query = 'SELECT * FROM events WHERE link = ?' event = query_db(exists_query, [url], True) if event is None: query = 'INSERT INTO events (title, time, location, link, image_url, unix_time)'\ 'VALUES (?, ?, ?, ?, ?, ?)' query_db(query, [title, time_str, location, url, image_url, unix_time]) flash("New event was successfully posted.") else: query = 'UPDATE events SET title = ?, time = ?, location = ?, image_url = ?, unix_time = ? WHERE link = ?' query_db(query, [title, time_str, location, image_url, unix_time, url]) flash("Event successfully updated.") return redirect(url_for('admin_panel')) except Exception as e: flash('Exception: ' + str(e)) return redirect(url_for('admin_panel'))
def admin_panel(): auth.check_login() events = query_db('select * from events order by unix_time desc') officers = query_db('select * from officers order by id') families = query_db('select * from families order by id') files = query_db('select * from files order by id') members = query_db('select * from members order by name') event_checkins = query_db('select * from event_checkins order by eventID') leaderboard = query_db('select * from members order by checkins desc') lateJars = query_db('select * from late_jars order by id') return render_template('admin.html', events=events, officers=officers, families=families, files=files, members=members, check_valid_checkin=check_valid_checkin, leaderboard=leaderboard, lateJars=lateJars)
def add_general_member(): auth.check_login() name = request.form['name'] year = request.form['year'] email = request.form['email'] findable = request.form['findable'] checkins = 0 query = 'insert into members (name, year, email, findable, checkins) values (?, ?, ?, ?, ?)' query_db(query, [name, year, email, findable, checkins]) flash('New member added') return redirect(url_for('admin_panel'))
def delete_image(semFolder, imageName): """Deletes the scrapbook image from the directory""" print('hello') auth.check_login() print('hello') filePath = join(ROOT, SCRAPBOOK_FOLDER, semFolder, imageName) print(filePath) try: os.remove(filePath) except OSError as e: print("Error: %s - %s." % (e.filename, e.strerror)) return 'Deleted file'
def add_picture(): """Adds an image to the selected semester folder.""" auth.check_login() try: image = helpers.file_from_request(request) except ValueError as e: flash('Exception: ' + str(e)) return redirect(url_for('admin_panel')) semToAddTo = request.form['semester'] helpers.save_request_file(request, SCRAPBOOK_FOLDER + semToAddTo + '/') flash('New scrapbook image successfully posted') return redirect(url_for('admin_panel'))
def update_member(member_id): auth.check_login() name = request.form['name'] year = request.form['year'] email = request.form['email'] findable = request.form['findable'] checkins = request.form['checkins'] query = ('update members ' 'set name=?, year=?, email=?, findable=?, checkins=? ' 'where id=?') query_db(query, [name, year, email, findable, checkins, member_id]) flash('Updated ' + name) # TODO: think about doing all of these redirects javascript-side return redirect(url_for('admin_panel'))
def download_checkin_info(): auth.check_login() query = 'SELECT e.eventName, m.name FROM event_checkins as e, members as m WHERE m.id = e.memberID' lst = query_db(query) event_dict = collections.defaultdict(list) member_dict = collections.defaultdict(list) for entry in lst: event_dict[entry[0]].append(entry[1]) member_dict[entry[1]].append(entry[0]) event_lst = [] member_lst = [] for k, v in event_dict.items(): event_lst.append([k] + v) for k, v in member_dict.items(): member_lst.append([k] + v) event_csv_string = [] member_csv_string = [] for csvLine in event_lst: event_csv_string += [",".join(csvLine)] for csvLine in member_lst: member_csv_string += [",".join(csvLine)] event_csv_string = "\n".join(event_csv_string) member_csv_string = "\n".join(member_csv_string) memory_file = io.BytesIO() with zipfile.ZipFile(memory_file, 'w') as zf: data = zipfile.ZipInfo('membersperevent.csv') data.date_time = time.localtime(time.time())[:6] data.compress_type = zipfile.ZIP_DEFLATED zf.writestr(data, event_csv_string) data = zipfile.ZipInfo('eventspermember.csv') data.date_time = time.localtime(time.time())[:6] data.compress_type = zipfile.ZIP_DEFLATED zf.writestr(data, member_csv_string) memory_file.seek(0) return send_file(memory_file, attachment_filename='checkins.zip', as_attachment=True)
def add_family(): auth.check_login() try: image = helpers.file_from_request(request) except ValueError as e: flash('Exception: ' + str(e)) return redirect(url_for('admin_panel')) image_url = helpers.save_request_file(request, FAMILY_IMAGE_FOLDER) family_name = request.form['family_name'] family_head1 = request.form['family_head1'] family_head2 = request.form['family_head2'] description = request.form['description'] query = 'insert into families (family_name, family_head1, family_head2, description, image_url)'\ 'values (?, ?, ?, ?, ?)' query_db(query, [family_name, family_head1, family_head2, description, image_url]) flash('New family successfully posted') return redirect(url_for('admin_panel'))
def delete_all_members(): auth.check_login() query_db('delete from members') query_db('delete from event_checkins') return "Reset general members"
def delete_member(member_id): auth.check_login() query = 'delete from members where id = ?' query_db(query, (member_id,)) return 'Deleted member'
def delete_file(file_id): auth.check_login() query = 'delete from files where id = ?' query_db(query, (file_id,)) return 'Deleted file'
def delete_event(event_id): auth.check_login() query = 'delete from events where id = ?' query_db(query, (event_id,)) return 'Deleted event'
def delete_family(family_id): auth.check_login() query = 'delete from families where id = ?' query_db(query, (family_id,)) return 'Deleted family'
def delete_jar(jar_id): auth.check_login() query = 'delete from late_jars where id = ?' query_db(query, (jar_id,)) return 'Deleted Late Jar'
def delete_officer(officer_id): auth.check_login() query = 'delete from officers where id = ?' query_db(query, (officer_id,)) return 'Deleted officer'