def post_ban_reply(ban_uid): reply_form = AppealReplyForm(request.form) ban = Ban.objects(uid=ban_uid).first() if ban is None: abort(404) if not user_can_post(current_user, ban): abort(403) appeal = ban.appeal if request.method == "POST" and reply_form.validate(): last_reply = AppealReply.objects(ban=ban).order_by('-created').first() # If the user just posted a reply, treat this as an edit of his previous post. if last_reply and last_reply.creator.name == current_user.name: last_reply.text += "\n- - -\n" + reply_form.text.data last_reply.edits.append(AppealEdit(text=last_reply.text, user=current_user.to_dbref())) last_reply.save() return redirect(url_for('bans.view_ban', ban_uid=ban_uid)) else: reply = AppealReply(creator=current_user.to_dbref(), text=reply_form.text.data, ban=ban) reply.edits.append(AppealEdit(text=reply_form.text.data, user=current_user.to_dbref())) reply.save() appeal.replies.append(reply) appeal.last = datetime.datetime.utcnow() ban.save() BanNotification.send_notifications(ban, action="reply") return redirect(url_for('bans.view_ban', ban_uid=ban_uid))
def view_ban(ban_uid): ban = Ban.objects(uid=ban_uid).first() if ban is None: abort(404) appeal = ban.appeal if ban.appeal.state == 'closed_time': if ban.appeal.unlock_time and ban.appeal.unlock_time < datetime.datetime.utcnow( ): ban.appeal.state = 'open' ban.save() replies = AppealReply.objects(ban=ban).order_by('+created') notes = Note.objects(target=ban.target, active=True) can_post = user_can_post(current_user, ban) alts = [] if current_user.can("view alts"): user_ips = PlayerIpsModel.objects(player=ban.target).first() if user_ips: alts = PlayerIpsModel.objects(ips__in=user_ips.ips, player__ne=ban.target) unlock_time_form = AppealUnlockTimeForm() if appeal.unlock_time: unlock_time_form.date.data = appeal.unlock_time unban_time_form = BanUnbanTimeForm() if ban.removed_time: unban_time_form.date.data = ban.removed_time js_state_manager.get_manager().update( {'ban': { 'watching': current_user in ban.watching, 'id': ban.uid }}) return render_template('bans_unified_view.html', ban_id=ban_uid, ban_object=ban, appeal_object=appeal, notes=notes, reply_form=AppealReplyForm(), edit_form=BanReasonEditForm(), reply_edit_form=AppealReplyTextEditForm(), unlock_time_form=unlock_time_form, unban_time_form=unban_time_form, replies=replies, can_post=can_post, alts=alts)
def post_ban_reply(ban_uid): reply_form = AppealReplyForm(request.form) ban = Ban.objects(uid=ban_uid).first() if ban is None: abort(404) if not user_can_post(current_user, ban): abort(403) appeal = ban.appeal if request.method == "POST" and reply_form.validate(): last_reply = AppealReply.objects(ban=ban).order_by('-created').first() # If the user just posted a reply, treat this as an edit of his previous post. if last_reply and last_reply.creator.name == current_user.name: last_reply.text += "\n- - -\n" + reply_form.text.data last_reply.edits.append( AppealEdit(text=last_reply.text, user=current_user.to_dbref())) last_reply.save() return redirect(url_for('bans.view_ban', ban_uid=ban_uid)) else: reply = AppealReply(creator=current_user.to_dbref(), text=reply_form.text.data, ban=ban) reply.edits.append( AppealEdit(text=reply_form.text.data, user=current_user.to_dbref())) reply.save() appeal.replies.append(reply) appeal.last = datetime.datetime.utcnow() ban.save() BanNotification.send_notifications(ban, action="reply") return redirect(url_for('bans.view_ban', ban_uid=ban_uid))
def appeal_reply_edit(appeal_reply_id): edit_form = AppealReplyTextEditForm(request.form) appeal_reply = AppealReply.objects(id=appeal_reply_id).first() if appeal_reply is None: abort(404) if not (current_user.has_permission("bans.appeal.manage") or (current_user.is_authenticated() and current_user == appeal_reply.creator)): abort(403) if request.method == "POST" and edit_form.validate(): appeal_reply.text = edit_form.text.data appeal_reply.edits.append(AppealEdit(text=edit_form.text.data, user=current_user.to_dbref())) appeal_reply.save() return redirect(url_for('bans.view_ban', ban_uid=appeal_reply.ban.uid))
def appeal_reply_edit(appeal_reply_id): edit_form = AppealReplyTextEditForm(request.form) appeal_reply = AppealReply.objects(id=appeal_reply_id).first() if appeal_reply is None: abort(404) if not (current_user.has_permission("bans.appeal.manage") or (current_user.is_authenticated() and current_user == appeal_reply.creator)): abort(403) if request.method == "POST" and edit_form.validate(): appeal_reply.text = edit_form.text.data appeal_reply.edits.append( AppealEdit(text=edit_form.text.data, user=current_user.to_dbref())) appeal_reply.save() return redirect(url_for('bans.view_ban', ban_uid=appeal_reply.ban.uid))
def view_ban(ban_uid): ban = Ban.objects(uid=ban_uid).first() if ban is None: abort(404) appeal = ban.appeal if ban.appeal.state == 'closed_time': if ban.appeal.unlock_time and ban.appeal.unlock_time < datetime.datetime.utcnow(): ban.appeal.state = 'open' ban.save() replies = AppealReply.objects(ban=ban).order_by('+created') notes = Note.objects(target=ban.target, active=True) can_post = user_can_post(current_user, ban) alts = [] if current_user.can("view alts"): user_ips = PlayerIpsModel.objects(player=ban.target).first() if user_ips: alts = PlayerIpsModel.objects(ips__in=user_ips.ips, player__ne=ban.target) unlock_time_form = AppealUnlockTimeForm() if appeal.unlock_time: unlock_time_form.date.data = appeal.unlock_time unban_time_form = BanUnbanTimeForm() if ban.removed_time: unban_time_form.date.data = ban.removed_time js_state_manager.get_manager().update({ 'ban': { 'watching': current_user in ban.watching, 'id': ban.uid } }) return render_template('bans_unified_view.html', ban_id=ban_uid, ban_object=ban, appeal_object=appeal, notes=notes, reply_form=AppealReplyForm(), edit_form=BanReasonEditForm(), reply_edit_form=AppealReplyTextEditForm(), unlock_time_form=unlock_time_form, unban_time_form=unban_time_form, replies=replies, can_post=can_post, alts=alts)