contentdb/app/views/users.py

62 lines
1.9 KiB
Python
Raw Normal View History

2018-03-18 19:05:53 +01:00
from flask import *
from flask_user import *
from flask_login import login_user, logout_user
from flask.ext import menu
from app import app
from app.models import *
from flask_wtf import FlaskForm
2018-03-24 20:37:33 +01:00
from flask_user.forms import RegisterForm
from wtforms import *
from wtforms.validators import *
from .utils import rank_required
2018-03-24 20:37:33 +01:00
2018-03-18 19:05:53 +01:00
class MyRegisterForm(RegisterForm):
2018-03-20 04:31:49 +01:00
display_name = StringField("Display name")
2018-03-18 19:05:53 +01:00
# Define the User profile form
class UserProfileForm(FlaskForm):
2018-03-20 04:31:49 +01:00
display_name = StringField("Display name")
2018-03-24 20:37:33 +01:00
rank = SelectField("Rank", [InputRequired()], choices=UserRank.choices(), coerce=UserRank.coerce, default=UserRank.NEW_MEMBER)
2018-03-21 23:03:37 +01:00
submit = SubmitField("Save")
2018-03-18 19:05:53 +01:00
2018-03-24 20:24:34 +01:00
@app.route("/users/", methods=["GET"])
@rank_required(UserRank.MODERATOR)
2018-03-24 20:24:34 +01:00
def user_list_page():
users = User.query.all()
return render_template("users/list.html", users=users)
2018-03-20 20:07:20 +01:00
2018-03-24 20:24:34 +01:00
@app.route("/users/<username>/", methods=["GET", "POST"])
2018-03-20 20:07:20 +01:00
def user_profile_page(username):
user = User.query.filter_by(username=username).first()
if not user:
abort(404)
2018-03-18 19:05:53 +01:00
2018-03-20 20:07:20 +01:00
form = None
2018-03-24 20:37:33 +01:00
if user == current_user or user.checkPerm(current_user, Permission.CHANGE_RANK):
2018-03-18 19:05:53 +01:00
# Initialize form
2018-03-24 20:37:33 +01:00
form = UserProfileForm(formdata=request.form, obj=user)
2018-03-18 19:05:53 +01:00
# Process valid POST
2018-03-21 23:03:37 +01:00
if request.method=="POST" and form.validate():
2018-03-18 19:05:53 +01:00
# Copy form fields to user_profile fields
2018-03-24 20:37:33 +01:00
if user == current_user:
user.display_name = form["display_name"].data
if user.checkPerm(current_user, Permission.CHANGE_RANK):
newRank = form["rank"].data
if current_user.rank.atLeast(newRank):
user.rank = form["rank"].data
else:
flash("Can't promote a user to a rank higher than yourself!", "error")
2018-03-18 19:05:53 +01:00
# Save user_profile
db.session.commit()
# Redirect to home page
2018-03-24 20:37:33 +01:00
return redirect(url_for("user_profile_page", username=username))
2018-03-18 19:05:53 +01:00
# Process GET or invalid POST
2018-03-21 23:03:37 +01:00
return render_template("users/user_profile_page.html",
2018-03-18 19:05:53 +01:00
user=user, form=form)