Example #1
0
def changepassword_submit():
    '''Input new password into database'''
    password = request.form['password']
    if password == '':
        fail('Please input valid password.', 'password')
        return redirect(url_for('.changepassword'))
    user = User(request.form['id'])
    try:
        user.password = password
    except PasswordTooShort:
        fail('Password must be at least six digits.', 'password')
        return redirect(url_for('.changepassword'))

    parameters = {
        'target_name':
        '%s (%s, %s)' %
        (user.nickname, user.passportname, user.grade_and_class),
        'performer_name':
        current_user.studentid
    }
    email.send(('*****@*****.**', ), 'Admin changed password',
               render_email_template('adminchangepassword', parameters))
    flash(
        user.nickname + '\'s password has been successfully set to ' +
        password + '.', 'password')
    return redirect(url_for('.changepassword'))
Example #2
0
def newact_submit(club):
    '''Input new activity's information into database'''
    try:
        a = Activity.new()
        a.name = request.form['name']
        if not a.name:
            fail('Please enter the name of the new activity.', 'newact')
            return redirect(url_for('.newact', club=club.callsign))
        a.club = club
        a.description = FormattedText.handle(current_user, club,
                                             request.form['description'])
        a.post = FormattedText(0)
        try:
            actdate = date(int(request.form['year']),
                           int(request.form['month']),
                           int(request.form['day']))
        except ValueError:
            fail('Invalid date.', 'newact')
            return redirect(url_for('.newact', club=club.callsign))
        if actdate < date.today():
            fail('Please enter a date not eariler than today.', 'newact')
            return redirect(url_for('.newact', club=club.callsign))
        a.date = actdate
        time = ActivityTime[request.form['act_type'].upper()]
        is_other_act = time in [ActivityTime.UNKNOWN, ActivityTime.OTHERS]
        a.time = time
        a.location = request.form['location']
        time_type = request.form['time_type']
        try:
            cas = int(request.form['cas'])
        except ValueError:
            fail('Invalid CAS hours.', 'newact')
            return redirect(url_for('.newact', club=club.callsign))
        if cas < 0:
            fail('Invalid CAS hours.', 'newact')
            return redirect(url_for('.newact', club=club.callsign))
        if time_type == 'hours':
            a.cas = cas
        else:
            a.cas = cas / 60
        if (time == ActivityTime.OTHERS or time == ActivityTime.UNKNOWN) and \
                request.form['has_selection'] == 'yes':
            choices = request.form['selections'].split(';')
            a.selections = [choice.strip() for choice in choices]
        else:
            a.selections = []
        a.create()
        flash(a.name + ' has been successfully created.', 'newact')
    except ValueError:
        fail('Please input all information to create a new activity.',
             'newact')
    else:
        for member in club.teacher_and_members:
            parameters = {'member': member, 'club': club, 'act': a,
                          'is_other_act': is_other_act}
            contents = render_email_template('newact', parameters)
            member.email_user(a.name + ' - ' + club.name, contents)
            member.notify_user(club.name + ' is going to host ' + a.name +
                               ' on ' + actdate.strftime('%b-%d-%y') + '.')
    return redirect(url_for('.newact', club=club.callsign))
Example #3
0
def changeclubinfo_submit(club):
    '''Change club's info'''
    intro = request.form['intro']
    if len(intro) > 90:
        fail('Your intro is too long.', 'clubinfo')
        return redirect(url_for('.changeclubinfo', club=club.callsign))
    elif request.form['intro'] != '':
        club.intro = request.form['intro']

    desc = request.form['description'].strip()
    if desc and desc != club.description.raw:
        club.description = FormattedText.handle(current_user, club,
                                                request.form['description'])
    if request.files['picture'].filename != '':
        try:
            club.picture = Upload.handle(current_user, club,
                                         request.files['picture'])
        except UploadNotSupported:
            fail('Please upload the correct file type.', 'clubinfo')
            return redirect(url_for('.changeclubinfo', club=club.callsign))
    teacher_email = request.form['email']
    if teacher_email != club.teacher.studentid:
        club.teacher = User.find_teacher(teacher_email)
    location = request.form['location']
    if location != club.location and location != '':
        club.location = location
    for member in club.teacher_and_members:
        parameters = {'user': member, 'club': club}
        contents = render_email_template('changeclubinfo', parameters)
        member.email_user('Change Club Info - ' + club.name, contents)
        member.notify_user(club.name + '\'s information has been changed.')
    flash('The information about club has been successfully submitted.',
          'clubinfo')
    return redirect(url_for('.changeclubinfo', club=club.callsign))
Example #4
0
def adjustmember_submit(club):
    '''Input adjustment of club members'''
    member = User(request.form['uid'])
    true_or_fail(current_user != member,
                 'You cannot expel yourself.', 'expelled')
    if form_is_valid():
        club.remove_member(member)
        parameters = {'member': member, 'club': club}
        contents = render_email_template('adjustmember', parameters)
        member.email_user('Member Adjustment - ' + club.name, contents)
        member.notify_user('You have been moved out of ' + club.name + '.')
        flash(member.nickname + ' has been expelled.', 'expelled')
    return redirect(url_for('.adjustmember', club=club.callsign))
Example #5
0
def memberinfo_notify_members(club):
    '''Allow club leader to notify members'''
    notify_contents = request.form['contents']
    if not notify_contents:
        flash('Please input something.', 'notify_members')
        return redirect(url_for('.memberinfo', club=club.callsign))
    for member in club.members:
        member.notify_user(notify_contents)
        parameters = {'member': member, 'club': club, 'notify_contents': notify_contents}
        contents = render_email_template('notifymembers', parameters)
        member.email_user('Notification - ' + club.name, contents)
    flash('You have successfully notified members.', 'notify_members')
    return redirect(url_for('.memberinfo', club=club.callsign))
Example #6
0
def contactcreators_submit():
    '''Send advice to us'''
    sender_name = request.form['name']
    sender_contact = request.form['contact']
    content = request.form['content']
    parameters = {
        'sender_name': sender_name,
        'sender_contact': sender_contact,
        'content': content
    }
    contents = render_email_template('contactcreators', parameters)
    email.send(('*****@*****.**', ), 'Contact Creators', contents)
    flash('The information has been successfully sent to creators.',
          'contact_creators')
    return redirect(url_for('.contactcreators'))
Example #7
0
def contactadmin_submit():
    '''Submit complaints'''
    content = request.form['content']
    parameters = {
        'sender_name':
        '%s (%s, %s)' % (current_user.nickname, current_user.passportname,
                         current_user.grade_and_class),
        'sender_contact':
        current_user.email + ' ' + str(current_user.phone),
        'content':
        content
    }
    contents = render_email_template('contactadmin', parameters)
    email.send(('*****@*****.**', ), 'Contact Admin', contents)
    flash('The information has been successfully sent to adminstrators.',
          'contact_admin')
    return redirect(url_for('.contactadmin'))
Example #8
0
def registerhm_submit(club):
    '''Submit HongMei signup info to database'''
    register = request.form.getlist('register')
    plan = ''
    for reg in register:
        act = Activity(reg)
        true_or_fail(act.club == club, 'wtf? Please enter a valid activity.',
                     'reghm')
        if form_is_valid():
            act.signup(current_user)
            plan += 'Date: ' + act.date.strftime('%b-%d-%y') + '\n\n' + \
                'Content: ' + act.name + '\n\n'
    if form_is_valid():
        parameters = {'user': current_user, 'club': club, 'plan': plan}
        contents = render_email_template('registerhm', parameters)
        current_user.email_user('HongMei Plan - ' + club.name, contents)
        flash('Your application has been successfully submitted.', 'reghm')
    return redirect(url_for('.registerhm', club=club.callsign))
Example #9
0
def newleader_submit(club):
    '''Change leader in database'''
    leader_old = club.leader
    members_obj = club.members
    leader_name = request.form['leader']
    for member_obj in members_obj:
        if leader_name == member_obj.passportname:
            club.leader = member_obj
            break
    else:
        assert False, 'wtf?'
    for member in club.teacher_and_members:
        parameters = {'user': member, 'club': club, 'leader_old': leader_old}
        contents = render_email_template('newleader', parameters)
        member.email_user('New Leader - ' + club.name, contents)
        member.notify_user(club.leader.nickname +
                           ' becomes the new leader of ' + club.name + '.')
    return render_template('club/success.jinja2')
Example #10
0
def hongmei_invite_submit(activity):
    '''Input invitation result into database'''
    invite = request.form.getlist('invite')
    for each in invite:
        member = User(each)
        true_or_fail(member in activity.club.members,
                     member.nickname + ' is not a member of this club.',
                     'invite_hm')
        if form_is_valid():
            activity.signup(member)
            parameters = {'member': member, 'activity': activity}
            contents = render_email_template('invitehm', parameters)
            member.email_user('HongMei Invitation - ' + activity.club.name,
                              contents)
            member.notify_user('You have been invited to HongMei activity - ' +
                               activity.name + ' on ' +
                               activity.date.strftime('%b-%d-%y') + '.')
    flash('These members have been successfully invited.', 'invite_hm')
    return redirect(url_for('.hongmei_invite', activity=activity.callsign))
Example #11
0
def clubintro_submit(club):
    '''Add new member'''
    true_or_fail(current_user.type == UserType.STUDENT,
                 'You may not join clubs.', 'join')
    true_or_fail(club.joinmode == ClubJoinMode.FREE_JOIN,
                 'You may not join this club.', 'join')
    if form_is_valid():
        try:
            club.add_member(current_user)
        except AlreadyExists:
            fail('You are already in %s.' % club.name, 'join')
            return redirect(url_for('.clubintro', club=club.callsign))
        parameters = {'club': club, 'current_user': current_user}
        contents = render_email_template('joinclubs', parameters)
        club.leader.email_user('New Club Member - ' + club.name, contents)
        club.leader.notify_user('%s has joined %s.'
                                % (current_user.nickname, club.name))
        flash('You have successfully joined ' + club.name + '.', 'join')
    return redirect(url_for('.clubintro', club=club.callsign))
Example #12
0
def quitclub_submit():
    '''Delete connection between user and club in database'''
    club = Club(request.form['clubs'])
    if current_user == club.leader:
        fail('You cannot quit a club you lead.', 'quit')
        return redirect(url_for('.quitclub'))
    try:
        club.remove_member(current_user)
    except NoRow:
        fail('You are not a member of ' + club.name + '.', 'quit')
    else:
        reason = request.form['reason']
        parameters = {'user': current_user, 'club': club, 'reason': reason}
        contents = render_email_template('quitclub', parameters)
        club.leader.email_user('Quit Club - ' + current_user.nickname,
                               contents)
        club.leader.notify_user(current_user.nickname + ' has quit ' +
                                club.name + '.')
        flash('You have successfully quitted ' + club.name + '.', 'quit')
    return redirect(url_for('.quitclub'))
Example #13
0
def invitemember(club):
    '''Allow club leader to invite member'''
    true_or_fail(club.joinmode == ClubJoinMode.BY_INVITATION,
                 'You cannot invite members when the join mode is not '
                 'by invitation.', 'invite_member')
    if form_is_valid():
        new_member = User.find_user(request.form['gradeclass'],
                                    request.form['passportname'])
        if new_member is None:
            fail('Please input correct user info to invite.', 'invite_member')
        else:
            parameters = {'club': club, 'member': new_member}
            contents = render_email_template('invitemember', parameters)
            new_member.email_user('Invitation - ' + club.name, contents)
            if new_member in club.members:
                fail('%s is already in the club.' % new_member.nickname,
                     'invite_member')
            else:
                club.send_invitation(new_member)
                flash('The invitation has been sent to %s.'
                      % new_member.nickname, 'invite_member')
    return redirect(url_for('.adjustmember', club=club.callsign))
Example #14
0
def notifyall_submit():
    '''Allow admin to notify all club leaders and members'''
    grade = request.form.get('grade', '')
    ntype = request.form.get('ntype', '')
    notify_contents = request.form['contents']
    if not notify_contents:
        flash('Please input something.', 'notify_all')
        return redirect(url_for('.personal'))

    if grade == '9-10':
        grade = ['9', '10']
    elif grade == '11-12':
        grade = ['11', '12']
    elif grade == 'all':
        grade = None
    else:
        flash('Invalid grade selection.', 'notify_all')
        return redirect(url_for('.personal'))

    notifylist = set()
    for club in Club.allclubs(grade_limit=grade):
        if ntype == 'leaderonly':
            notifylist.add(club.leader)
        elif ntype == 'all':
            notifylist.add(club.leader)
            notifylist.add(club.teacher)
            notifylist = notifylist.union(club.members)
        else:
            flash('Invalid grade selection.', 'notify_all')
            return redirect(url_for('.personal'))

    for user in notifylist:
        user.notify_user(notify_contents)
        parameters = {'user': user, 'notify_contents': notify_contents}
        contents = render_email_template('notifyall', parameters)
        user.email_user('Notification from admin', contents)
    flash('You have successfully notified them.', 'notify_all')
    return redirect(url_for('.personal'))