views.py 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. # -*- coding: utf-8 -*-
  2. import sys
  3. from flask import (Blueprint, render_template, current_app, request, redirect,
  4. url_for, flash, __version__ as flask_version)
  5. from flaskbb import __version__ as flaskbb_version
  6. from flaskbb.decorators import admin_required
  7. from flaskbb.extensions import db
  8. from flaskbb.user.models import User, Group
  9. from flaskbb.forum.models import Post, Topic, Forum, Category
  10. from flaskbb.admin.forms import (AddUserForm, EditUserForm, AddGroupForm,
  11. EditGroupForm, ForumForm, CategoryForm)
  12. admin = Blueprint("admin", __name__)
  13. @admin.route("/")
  14. @admin_required
  15. def overview():
  16. python_version = "%s.%s" % (sys.version_info[0], sys.version_info[1])
  17. user_count = User.query.count()
  18. topic_count = Topic.query.count()
  19. post_count = Post.query.count()
  20. return render_template("admin/overview.html",
  21. python_version=python_version,
  22. flask_version=flask_version,
  23. flaskbb_version=flaskbb_version,
  24. user_count=user_count,
  25. topic_count=topic_count,
  26. post_count=post_count)
  27. @admin.route("/users")
  28. @admin_required
  29. def users():
  30. page = request.args.get("page", 1, type=int)
  31. users = User.query.\
  32. paginate(page, current_app.config['USERS_PER_PAGE'], False)
  33. return render_template("admin/users.html", users=users)
  34. @admin.route("/groups")
  35. @admin_required
  36. def groups():
  37. page = request.args.get("page", 1, type=int)
  38. groups = Group.query.\
  39. paginate(page, current_app.config['USERS_PER_PAGE'], False)
  40. return render_template("admin/groups.html", groups=groups)
  41. @admin.route("/categories")
  42. @admin_required
  43. def categories():
  44. page = request.args.get("page", 1, type=int)
  45. categories = Category.query.\
  46. paginate(page, current_app.config['USERS_PER_PAGE'], False)
  47. return render_template("admin/categories.html", categories=categories)
  48. @admin.route("/forums")
  49. @admin_required
  50. def forums():
  51. page = request.args.get("page", 1, type=int)
  52. forums = Forum.query.\
  53. paginate(page, current_app.config['USERS_PER_PAGE'], False)
  54. return render_template("admin/forums.html", forums=forums)
  55. @admin.route("/users/<int:user_id>/edit", methods=["GET", "POST"])
  56. @admin_required
  57. def edit_user(user_id):
  58. user = User.query.filter_by(id=user_id).first()
  59. secondary_group_query = Group.query.filter(
  60. db.not_(Group.id == user.primary_group_id),
  61. db.not_(Group.banned == True),
  62. db.not_(Group.guest == True))
  63. form = EditUserForm(user)
  64. form.secondary_groups.query = secondary_group_query
  65. if form.validate_on_submit():
  66. user.username = form.username.data
  67. user.email = form.email.data
  68. user.birthday = form.birthday.data
  69. user.gender = form.gender.data
  70. user.website = form.website.data
  71. user.location = form.location.data
  72. user.signature = form.signature.data
  73. user.avatar = form.avatar.data
  74. user.notes = form.notes.data
  75. user.primary_group_id = form.primary_group.data.id
  76. # Don't override the password
  77. if form.password.data:
  78. user.password = form.password.data
  79. user.save(groups=form.secondary_groups.data)
  80. flash("User successfully edited", "success")
  81. return redirect(url_for("admin.edit_user", user_id=user.id))
  82. else:
  83. form.username.data = user.username
  84. form.email.data = user.email
  85. form.birthday.data = user.birthday
  86. form.gender.data = user.gender
  87. form.website.data = user.website
  88. form.location.data = user.location
  89. form.signature.data = user.signature
  90. form.avatar.data = user.avatar
  91. form.notes.data = user.notes
  92. form.primary_group.data = user.primary_group
  93. form.secondary_groups.data = user.secondary_groups
  94. return render_template("admin/edit_user.html", form=form)
  95. @admin.route("/users/<int:user_id>/delete")
  96. @admin_required
  97. def delete_user(user_id):
  98. user = User.query.filter_by(id=user_id).first()
  99. user.delete()
  100. flash("User successfully deleted", "success")
  101. return redirect(url_for("admin.users"))
  102. @admin.route("/users/add", methods=["GET", "POST"])
  103. @admin_required
  104. def add_user():
  105. form = AddUserForm()
  106. if form.validate_on_submit():
  107. form.save()
  108. flash("User successfully added.", "success")
  109. return redirect(url_for("admin.users"))
  110. return render_template("admin/edit_user.html", form=form)
  111. @admin.route("/groups/<int:group_id>/edit", methods=["GET", "POST"])
  112. @admin_required
  113. def edit_group(group_id):
  114. group = Group.query.filter_by(id=group_id).first()
  115. form = EditGroupForm(group)
  116. if form.validate_on_submit():
  117. form.populate_obj(group)
  118. group.save()
  119. flash("Group successfully edited.", "success")
  120. return redirect(url_for("admin.groups", group_id=group.id))
  121. else:
  122. form.name.data = group.name
  123. form.description.data = group.description
  124. form.admin.data = group.admin
  125. form.super_mod.data = group.super_mod
  126. form.mod.data = group.mod
  127. form.guest.data = group.guest
  128. form.banned.data = group.banned
  129. form.editpost.data = group.editpost
  130. form.deletepost.data = group.deletepost
  131. form.deletetopic.data = group.deletetopic
  132. form.posttopic.data = group.posttopic
  133. form.postreply.data = group.postreply
  134. return render_template("admin/edit_group.html", form=form)
  135. @admin.route("/groups/<int:group_id>/delete")
  136. @admin_required
  137. def delete_group(group_id):
  138. group = Group.query.filter_by(id=group_id).first()
  139. group.delete()
  140. flash("Group successfully deleted.", "success")
  141. return redirect(url_for("admin.groups"))
  142. @admin.route("/groups/add", methods=["GET", "POST"])
  143. @admin_required
  144. def add_group():
  145. form = AddGroupForm()
  146. if form.validate_on_submit():
  147. form.save()
  148. flash("Group successfully added.", "success")
  149. return redirect(url_for("admin.groups"))
  150. return render_template("admin/edit_group.html", form=form)
  151. @admin.route("/forums/<int:forum_id>/edit", methods=["GET", "POST"])
  152. @admin_required
  153. def edit_forum(forum_id):
  154. forum = Forum.query.filter_by(id=forum_id).first()
  155. form = ForumForm()
  156. if form.validate_on_submit():
  157. forum.title = form.title.data
  158. forum.description = form.description.data
  159. forum.position = form.position.data
  160. forum.category_id = form.category.data.id
  161. forum.save()
  162. flash("Forum successfully edited.", "success")
  163. return redirect(url_for("admin.edit_forum", forum_id=forum.id))
  164. else:
  165. form.title.data = forum.title
  166. form.description.data = forum.description
  167. form.position.data = forum.position
  168. form.category.data = forum.category
  169. #form.moderators.data = forum.moderators
  170. return render_template("admin/edit_forum.html", form=form)
  171. @admin.route("/forums/<int:forum_id>/delete")
  172. @admin_required
  173. def delete_forum(forum_id):
  174. forum = Forum.query.filter_by(id=forum_id).first()
  175. forum.delete()
  176. flash("Forum successfully deleted.", "success")
  177. return redirect(url_for("admin.forums"))
  178. @admin.route("/forums/add", methods=["GET", "POST"])
  179. @admin_required
  180. def add_forum():
  181. form = ForumForm()
  182. if form.validate_on_submit():
  183. form.save()
  184. flash("Forum successfully added.", "success")
  185. return redirect(url_for("admin.forums"))
  186. return render_template("admin/edit_forum.html", form=form)
  187. @admin.route("/categories/<int:category_id>/edit", methods=["GET", "POST"])
  188. @admin_required
  189. def edit_category(category_id):
  190. category = Category.query.filter_by(id=category_id).first()
  191. form = CategoryForm()
  192. if form.validate_on_submit():
  193. form.populate_obj(category)
  194. category.save()
  195. flash("Category successfully edited.", "success")
  196. return redirect(url_for("admin.edit_category", category_id=category.id))
  197. else:
  198. form.title.data = category.title
  199. form.description.data = category.description
  200. form.position.data = category.position
  201. return render_template("admin/edit_category.html", form=form)
  202. @admin.route("/categories/<int:category_id>/delete")
  203. @admin_required
  204. def delete_category(category_id):
  205. category = Category.query.filter_by(id=category_id).first()
  206. category.delete()
  207. flash("Category successfully deleted.", "success")
  208. return redirect(url_for("admin.categories"))
  209. @admin.route("/categories/add", methods=["GET", "POST"])
  210. @admin_required
  211. def add_category():
  212. form = CategoryForm()
  213. if form.validate_on_submit():
  214. form.save()
  215. flash("Category successfully added.", "success")
  216. return redirect(url_for("admin.categories"))
  217. return render_template("admin/edit_category.html", form=form)