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))
Beispiel #2
0
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)
Beispiel #3
0
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))
Beispiel #4
0
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))
Beispiel #5
0
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)