flask app for plurals to publicly share member lists

manage.py 8.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. from flask import (
  2. Blueprint, flash, g, redirect, render_template, request, session, url_for, current_app
  3. )
  4. from werkzeug.utils import secure_filename
  5. import os, uuid
  6. from myriad.auth import login_required
  7. from myriad.db import get_db
  8. bp = Blueprint('manage', __name__, url_prefix='/manage')
  9. @bp.route('/new', methods=('GET', 'POST'))
  10. @login_required
  11. def new():
  12. if request.method == 'POST':
  13. name = request.form['name']
  14. bio = request.form['bio']
  15. user_id = g.user[0]
  16. db = get_db()
  17. db.execute("INSERT INTO member (user_id, member_name, bio) VALUES (?, ?, ?)",(user_id, name, bio))
  18. db.commit()
  19. return redirect(url_for('home.full_list'))
  20. return render_template('manage/new.html')
  21. @bp.route("/delete/<mid>")
  22. @login_required
  23. def delete(mid):
  24. db = get_db()
  25. db.execute("DELETE FROM member WHERE id=(?)",(mid,))
  26. db.commit()
  27. return redirect(url_for('home.full_list'))
  28. @bp.route("/edit/<mid>", methods=('GET', 'POST'))
  29. @login_required
  30. def edit(mid):
  31. db = get_db()
  32. if request.method == "POST":
  33. if "name" in request.form:
  34. name = request.form['name']
  35. bio = request.form['bio']
  36. subtitle = request.form['subtitle']
  37. privacy = request.form["privacy"]
  38. db.execute("UPDATE member SET member_name=(?), bio=(?), subtitle=(?), public=(?) WHERE id=(?)",(name, bio, subtitle, privacy, mid))
  39. db.commit()
  40. if "file" in request.files:
  41. # here we are just saving the uploaded file to the icons folder.
  42. # we're not going hard on security because we expect there to only be 1 admin
  43. # but the filename will always be changed to a random string of numbers and letters known as uuid
  44. file = request.files["file"]
  45. filename = str(uuid.uuid4()) + "." + file.filename.split(".")[1]
  46. file.save(os.path.join(current_app.config["ICON_UPLOAD_FOLDER"], filename))
  47. db.execute("INSERT INTO icons (member_id, icon_location) VALUES (?, ?)", (mid, filename),)
  48. db.commit()
  49. if "c9" in request.form:
  50. c9 = request.form["c9"]
  51. c10 = request.form["c10"]
  52. c11 = request.form["c11"]
  53. c12 = request.form["c12"]
  54. c13 = request.form["c13"]
  55. c14 = request.form["c14"]
  56. c15 = request.form["c15"]
  57. c16 = request.form["c16"]
  58. c21 = request.form["c21"]
  59. c22 = request.form["c22"]
  60. db.execute("UPDATE member SET card_border=(?), card_bg=(?), heading_bg=(?), heading_border=(?), heading_name=(?), heading_subtitle=(?), card_text=(?), icon_border=(?), a1=(?), a2=(?) WHERE id=(?)",(c9, c10, c11, c12, c13, c14, c15, c16, c21, c22, mid))
  61. db.commit()
  62. if "gid_add" in request.form:
  63. gid = request.form["gid_add"]
  64. db.execute("INSERT INTO group_members (group_id,member_id) VALUES (?,?)",(gid,mid))
  65. db.commit()
  66. elif "gid_remove" in request.form:
  67. gid = request.form["gid_remove"]
  68. db.execute("DELETE FROM group_members WHERE group_id=(?) AND member_id=(?)",(gid,mid))
  69. db.commit()
  70. member = db.execute("SELECT * FROM member WHERE id=(?)",(mid,)).fetchone()
  71. icons = db.execute("SELECT * FROM icons WHERE member_id=(?)",(mid,)).fetchall()
  72. groups = db.execute("SELECT * FROM groups").fetchall()
  73. member_groups = db.execute("SELECT * FROM group_members WHERE member_id=(?)",(mid,)).fetchall()
  74. unjoined_groups = []
  75. joined_groups = []
  76. joined_ids = []
  77. for group in member_groups:
  78. joined_ids.append(group[1])
  79. for group in groups:
  80. if group[0] in joined_ids:
  81. joined_groups.append(group)
  82. else:
  83. unjoined_groups.append(group)
  84. return render_template("manage/edit.html", member=member, icons=icons, unjoined_groups=unjoined_groups, joined_groups=joined_groups)
  85. @bp.route("/set_main_icon/<mid>/<icon_id>")
  86. @login_required
  87. def set_main_icon(mid, icon_id):
  88. db = get_db()
  89. db.execute("UPDATE member SET main_icon=(?) WHERE id=(?)",(icon_id, mid))
  90. db.commit()
  91. return redirect(url_for("manage.edit", mid=mid))
  92. @bp.route("/delete_icon/<mid>/<icon_id>")
  93. @login_required
  94. def delete_icon(mid, icon_id):
  95. db = get_db()
  96. icon = db.execute("SELECT icon_location FROM icons WHERE id=(?)",(icon_id,)).fetchone()
  97. db.execute("DELETE FROM icons WHERE id=(?)",(icon_id,))
  98. db.commit()
  99. os.remove(os.path.join(current_app.config["ICON_UPLOAD_FOLDER"], icon[0]))
  100. return redirect(url_for("manage.edit", mid=mid))
  101. @bp.route("/add_to_front/<mid>")
  102. @login_required
  103. def add_to_front(mid):
  104. db = get_db()
  105. db.execute("UPDATE member SET front=(?) WHERE id=(?)",(1, mid))
  106. db.commit()
  107. return redirect(url_for('home.full_list'))
  108. @bp.route("/remove_front/<mid>")
  109. @login_required
  110. def remove_front(mid):
  111. db = get_db()
  112. db.execute("UPDATE member SET front=(?) WHERE id=(?)",(0, mid))
  113. db.commit()
  114. return redirect(url_for('home.full_list'))
  115. @bp.route("/add_to_home/<mid>")
  116. @login_required
  117. def add_to_home(mid):
  118. db = get_db()
  119. db.execute("UPDATE member SET homepage=(?) WHERE id=(?)",(1, mid))
  120. db.commit()
  121. return redirect(url_for('home.full_list'))
  122. @bp.route("/remove_home/<mid>")
  123. @login_required
  124. def remove_home(mid):
  125. db = get_db()
  126. db.execute("UPDATE member SET homepage=(?) WHERE id=(?)",(0, mid))
  127. db.commit()
  128. return redirect(url_for('home.full_list'))
  129. @bp.route("/reset_theme/<mid>")
  130. @login_required
  131. def reset_theme(mid):
  132. c9 = "#99dfff"
  133. c10 = "#e6f7ff"
  134. c11 = "#b3e7ff"
  135. c12 = "#008bcc"
  136. c13 = "black"
  137. c14 = "black"
  138. c15 = "black"
  139. c16 = "#008bcc"
  140. c21 = "#008bcc"
  141. c22 = "#026897"
  142. db = get_db()
  143. db.execute("UPDATE member SET card_border=(?), card_bg=(?), heading_bg=(?), heading_border=(?), heading_name=(?), heading_subtitle=(?), card_text=(?), icon_border=(?), a1=(?), a2=(?) WHERE id=(?)",(c9, c10, c11, c12, c13, c14, c15, c16, c21, c22, mid))
  144. db.commit()
  145. return redirect(url_for("manage.edit", mid=mid))
  146. @bp.route("/assets")
  147. @login_required
  148. def assets():
  149. db = get_db()
  150. icons = db.execute("SELECT * FROM icons").fetchall()
  151. icon_storage = os.listdir(current_app.config["ICON_UPLOAD_FOLDER"])
  152. i_storage = []
  153. for icon in icon_storage:
  154. in_database = False
  155. for i in icons:
  156. if i[2] == icon:
  157. in_database = True
  158. if not in_database:
  159. i_storage.append(icon)
  160. unlinked_icons = []
  161. for i in icons:
  162. in_storage = False
  163. if i[2] in icon_storage:
  164. in_storage = True
  165. if not in_storage:
  166. unlinked_icons.append(i)
  167. return render_template("manage/assets.html", icons=unlinked_icons, icon_storage=i_storage)
  168. @bp.route("/delete_idb")
  169. @login_required
  170. def delete_idb():
  171. db = get_db()
  172. icons = db.execute("SELECT * FROM icons").fetchall()
  173. icon_storage = os.listdir(current_app.config["ICON_UPLOAD_FOLDER"])
  174. for i in icons:
  175. in_storage = False
  176. if i[2] in icon_storage:
  177. in_storage = True
  178. if not in_storage:
  179. db.execute("DELETE FROM icons WHERE id=(?)", (i[0],))
  180. db.commit()
  181. return redirect(url_for("manage.assets"))
  182. @bp.route("/delete_ifiles")
  183. @login_required
  184. def delete_ifiles():
  185. db = get_db()
  186. icons = db.execute("SELECT * FROM icons").fetchall()
  187. icon_storage = os.listdir(current_app.config["ICON_UPLOAD_FOLDER"])
  188. for icon in icon_storage:
  189. in_database = False
  190. for i in icons:
  191. if i[2] == icon:
  192. in_database = True
  193. if not in_database:
  194. os.remove(os.path.join(current_app.config["ICON_UPLOAD_FOLDER"], icon))
  195. return redirect(url_for("manage.assets"))
  196. @bp.route("/groups", methods=('GET', 'POST'))
  197. @login_required
  198. def groups():
  199. db = get_db()
  200. if request.method == "POST":
  201. name = request.form['name']
  202. desc = request.form['desc']
  203. db.execute("INSERT INTO groups (group_name, group_description) VALUES (?, ?)",(name, desc))
  204. db.commit()
  205. groups = db.execute("SELECT * FROM groups").fetchall()
  206. return render_template("manage/groups.html", groups=groups)
  207. @bp.route("/group_edit/<gid>", methods=("GET", "POST"))
  208. @login_required
  209. def group_edit(gid):
  210. db = get_db()
  211. if request.method == "POST":
  212. name = request.form["name"]
  213. desc = request.form["desc"]
  214. privacy = request.form["privacy"]
  215. db.execute("UPDATE groups SET group_name=(?), group_description=(?), public=(?) WHERE id=(?)",(name, desc, privacy, gid))
  216. db.commit()
  217. return redirect(url_for("manage.groups"))