示例#1
0
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'))
示例#2
0
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)
示例#3
0
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'))
示例#4
0
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"
示例#5
0
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'))
示例#6
0
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'))
示例#7
0
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'))
示例#8
0
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'))
示例#9
0
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'))
示例#10
0
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)
示例#11
0
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'))
示例#12
0
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'
示例#13
0
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'))
示例#14
0
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'))
示例#15
0
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)
示例#16
0
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'))
示例#17
0
def delete_all_members():
    auth.check_login()
    query_db('delete from members')
    query_db('delete from event_checkins')
    return "Reset general members"
示例#18
0
def delete_member(member_id):
    auth.check_login()
    query = 'delete from members where id = ?'
    query_db(query, (member_id,))
    return 'Deleted member'
示例#19
0
def delete_file(file_id):
    auth.check_login()

    query = 'delete from files where id = ?'
    query_db(query, (file_id,))
    return 'Deleted file'
示例#20
0
def delete_event(event_id):
    auth.check_login()
    query = 'delete from events where id = ?'
    query_db(query, (event_id,))
    return 'Deleted event'
示例#21
0
def delete_family(family_id):
    auth.check_login()
    query = 'delete from families where id = ?'
    query_db(query, (family_id,))
    return 'Deleted family'
示例#22
0
def delete_jar(jar_id):
    auth.check_login()
    query = 'delete from late_jars where id = ?'
    query_db(query, (jar_id,))
    return 'Deleted Late Jar'
示例#23
0
def delete_officer(officer_id):
    auth.check_login()
    query = 'delete from officers where id = ?'
    query_db(query, (officer_id,))
    return 'Deleted officer'