full system export including blog and groups

This commit is contained in:
cube
2026-03-30 13:16:26 +01:00
parent 6888dd36e5
commit 96253f469e
3 changed files with 155 additions and 22 deletions

View File

@@ -255,13 +255,13 @@ def remove_home(mid,location):
return redirect(url_for('home.full_list')) return redirect(url_for('home.full_list'))
# DATA EXPORTS # DATA EXPORTS
@bp.route("/export_fields/<mid>") def generate_json(mid):
@login_required
def export_fields(mid):
db = get_db() db = get_db()
member = db.execute("SELECT * FROM member WHERE id=(?)",(mid,)).fetchone() member = db.execute("SELECT * FROM member WHERE id=(?)",(mid,)).fetchone()
groups_r = db.execute("SELECT group_id FROM group_members WHERE member_id=(?)",(mid,)).fetchall()
blog_r = db.execute("SELECT * FROM blog WHERE member_id=(?)",(mid,)).fetchall()
if member[9] == 1: if member[9] == 1:
privacy = "public" privacy = "public"
else: else:
@@ -269,16 +269,75 @@ def export_fields(mid):
date_created = member[2].strftime("%d/%m/%Y, %H:%M:%S") date_created = member[2].strftime("%d/%m/%Y, %H:%M:%S")
groups = []
for group in groups_r:
groups.append(group[0])
blog = []
for post in blog_r:
d_c = post[2].strftime("%d/%m/%Y, %H:%M:%S")
if post[5] == 1:
priv = "public"
else:
priv = "private"
p = {
"id":post[0],
"member-id":post[1],
"date-created":d_c,
"date-format":"d/m/Y, H:M:S",
"title":post[3],
"content":post[4],
"privacy":priv
}
blog.append(p)
data = { data = {
"date-created":date_created, "date-created":date_created,
"date-format":"d/m/Y, H:M:S", "date-format":"d/m/Y, H:M:S",
"name":member[3], "name":member[3],
"subtitle":member[4], "subtitle":member[4],
"description":member[5], "description":member[5],
"privacy":privacy "privacy":privacy,
"theme":member[10],
"groups":groups,
"blog":blog
} }
filename = str(member[0]) + "-" + member[3] + ".json" return data
def generate_json_groups():
db = get_db()
groups_r = db.execute("SELECT * FROM groups").fetchall()
groups = []
for group in groups_r:
if group[3] == 1:
priv = "public"
else:
priv = "private"
g = {
"id":group[0],
"name":group[1],
"description":group[2],
"privacy":priv
}
groups.append(g)
return groups
@bp.route("/export_fields/<mid>")
@login_required
def export_fields(mid):
db = get_db()
member = db.execute("SELECT * FROM member WHERE id=(?)",(mid,)).fetchone()
data = generate_json(mid)
filename = str(mid) + "-" + member[3] + ".json"
full_path = current_app.config["TMP_FOLDER"] + "/" + filename full_path = current_app.config["TMP_FOLDER"] + "/" + filename
with open(full_path, 'w') as f: with open(full_path, 'w') as f:
json.dump(data, f) json.dump(data, f)
@@ -347,21 +406,7 @@ def export_member(mid):
blinkies = db.execute("SELECT blinkie_location FROM blinkies WHERE member_id=(?)",(mid,)).fetchall() blinkies = db.execute("SELECT blinkie_location FROM blinkies WHERE member_id=(?)",(mid,)).fetchall()
stamps = db.execute("SELECT stamp_location FROM stamps WHERE member_id=(?)",(mid,)).fetchall() stamps = db.execute("SELECT stamp_location FROM stamps WHERE member_id=(?)",(mid,)).fetchall()
if member[9] == 1: data = generate_json(mid)
privacy = "public"
else:
privacy = "private"
date_created = member[2].strftime("%d/%m/%Y, %H:%M:%S")
data = {
"date-created":date_created,
"date-format":"d/m/Y, H:M:S",
"name":member[3],
"subtitle":member[4],
"description":member[5],
"privacy":privacy
}
data_name = str(member[0]) + "-" + member[3] + ".json" data_name = str(member[0]) + "-" + member[3] + ".json"
data_full_path = current_app.config["TMP_FOLDER"] + "/" + data_name data_full_path = current_app.config["TMP_FOLDER"] + "/" + data_name
@@ -385,6 +430,70 @@ def export_member(mid):
return send_file("static/tmp/"+zip_name, as_attachment=True) return send_file("static/tmp/"+zip_name, as_attachment=True)
@bp.route("/export_system")
@login_required
def export_system():
db = get_db()
members = db.execute("SELECT * FROM member").fetchall()
groups_r = db.execute("SELECT * FROM groups").fetchall()
data = {}
count = 0
for member in members:
d = generate_json(member[0])
data[count] = d
count+=1
groups = generate_json_groups()
data["groups"] = groups
filename = "myriad_system_textonly.json"
file_full_path = current_app.config["TMP_FOLDER"] + "/" + filename
with open(file_full_path, 'w') as f:
json.dump(data, f)
return send_file("static/tmp/"+filename, as_attachment=True)
@bp.route("/export_system_full")
@login_required
def export_system_full():
db = get_db()
members = db.execute("SELECT * FROM member").fetchall()
icons = db.execute("SELECT icon_location FROM icons").fetchall()
blinkies = db.execute("SELECT blinkie_location FROM blinkies").fetchall()
stamps = db.execute("SELECT stamp_location FROM stamps").fetchall()
data = {}
count = 0
for member in members:
d = generate_json(member[0])
data[count] = d
count+=1
groups = generate_json_groups()
data["groups"] = groups
filename = "myriad_system.json"
file_full_path = current_app.config["TMP_FOLDER"] + "/" + filename
with open(file_full_path, 'w') as f:
json.dump(data, f)
zip_name = "myriad_system.zip"
zip_path = current_app.config["TMP_FOLDER"] + "/" + zip_name
with zipfile.ZipFile(zip_path, "w") as zipf:
zipf.write(file_full_path)
for icon in icons:
iname = icon[0]
zipf.write(current_app.config["ICON_UPLOAD_FOLDER"] + "/" + iname)
for blinkie in blinkies:
bname = blinkie[0]
zipf.write(current_app.config["BLINKIES_UPLOAD_FOLDER"] + "/" + bname)
for stamp in stamps:
sname = stamp[0]
zipf.write(current_app.config["STAMPS_UPLOAD_FOLDER"] + "/" + sname)
return send_file("static/tmp/"+zip_name, as_attachment=True)
# ASSETS # ASSETS

View File

@@ -6,6 +6,7 @@ DROP TABLE IF EXISTS group_members;
DROP TABLE IF EXISTS blog; DROP TABLE IF EXISTS blog;
DROP TABLE IF EXISTS blinkies; DROP TABLE IF EXISTS blinkies;
DROP TABLE IF EXISTS stamps; DROP TABLE IF EXISTS stamps;
DROP TABLE IF EXISTS sections;
CREATE TABLE user ( CREATE TABLE user (
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
@@ -73,4 +74,12 @@ CREATE TABLE stamps (
member_id INTEGER NOT NULL, member_id INTEGER NOT NULL,
stamp_location TEXT NOT NULL, stamp_location TEXT NOT NULL,
FOREIGN KEY (member_id) REFERENCES member (id) FOREIGN KEY (member_id) REFERENCES member (id)
);
CREATE TABLE sections (
id INTEGER PRIMARY KEY AUTOINCREMENT,
member_id INTEGER NOT NULL,
title TEXT,
content TEXT,
FOREIGN KEY (member_id) REFERENCES member (id)
); );

View File

@@ -6,7 +6,22 @@
{% block content %} {% block content %}
<div class="container"> <div class="container">
<div class="heading">Backup</div>
<a href="{{ url_for('manage.export_system') }}">Export entire system TEXT ONLY</a><br>
<a href="{{ url_for('manage.export_system_full') }}">Export entire system WITH ATTACHMENTS</a>
<hr>
<a>Import system from JSON</a><br>
<a>Import system from ZIP</a>
<hr>
<a class="danger">Clear database</a> WARNING: this action is permanent and irreversible<br>
<br><br>
<div class="heading big pink">WIP ZONE</div>
<div class="heading">Site Users</div> <div class="heading">Site Users</div>
<div class="maintext">These are the usernames that can log in to the site</div> <div class="maintext">These are the usernames that can log in to the site</div>
{% for user in users %} {% for user in users %}