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'))
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))
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))
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))
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))
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'))
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'))
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))
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')
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))
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))
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'))
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))
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'))