full system export including blog and groups
This commit is contained in:
149
myriad/manage.py
149
myriad/manage.py
@@ -256,11 +256,11 @@ def remove_home(mid,location):
|
|||||||
|
|
||||||
# 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"
|
||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
@@ -74,3 +75,11 @@ CREATE TABLE stamps (
|
|||||||
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)
|
||||||
|
);
|
||||||
@@ -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 %}
|
||||||
|
|||||||
Reference in New Issue
Block a user