Compare commits
16 Commits
71cc1d0357
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
19efec79d6 | ||
|
|
213a9659b2 | ||
|
|
f7cede9033 | ||
|
|
15ee5ec622 | ||
|
|
bfbe54df03 | ||
|
|
4c3279ef29 | ||
|
|
c70c4f2922 | ||
|
|
c973e4b83a | ||
| 609f84f878 | |||
|
|
3aa3780aef | ||
|
|
e7a7a90c89 | ||
|
|
7022614d2e | ||
|
|
35af9dd6b7 | ||
|
|
9ca401c2cb | ||
| d73107453b | |||
|
|
3f03525e8e |
@@ -31,6 +31,9 @@ THEMES_FOLDER = 'myriad/static/themes' # all the theme css files are here
|
|||||||
TMP_FOLDER = 'myriad/static/tmp' # required for exports
|
TMP_FOLDER = 'myriad/static/tmp' # required for exports
|
||||||
SYSTEM_NAME = 'Myriad' # will be shown in the title bar
|
SYSTEM_NAME = 'Myriad' # will be shown in the title bar
|
||||||
PAGES_NAME = 'Read More...' # will be shown in the nav bar if using custom pages
|
PAGES_NAME = 'Read More...' # will be shown in the nav bar if using custom pages
|
||||||
|
HOMEPAGE = """
|
||||||
|
<marquee>Welcome to the demo of Myriad!</marquee>
|
||||||
|
"""
|
||||||
SECRET_KEY = "dev" # CHANGE THIS - see wiki for details
|
SECRET_KEY = "dev" # CHANGE THIS - see wiki for details
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -76,3 +79,7 @@ the other option is to export the entire system to json or zip file. **importing
|
|||||||
|
|
||||||
- The software here is free to use, and there's no requirement to link back
|
- The software here is free to use, and there's no requirement to link back
|
||||||
- Edit the styles and functionality to suit your needs. I'm sure some of you out there are far better with CSS than us
|
- Edit the styles and functionality to suit your needs. I'm sure some of you out there are far better with CSS than us
|
||||||
|
|
||||||
|
# Preview
|
||||||
|
|
||||||
|
Check out the [sample instance](https://myriad.cubes.link/) (it is bare bones at the moment but gives a general idea of how things look)
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ def create_app():
|
|||||||
app.register_blueprint(blog.bp)
|
app.register_blueprint(blog.bp)
|
||||||
|
|
||||||
@app.context_processor
|
@app.context_processor
|
||||||
def utility_processor():
|
def utility_processor():
|
||||||
def get_themes():
|
def get_themes():
|
||||||
themes = os.listdir(app.config["THEMES_FOLDER"])
|
themes = os.listdir(app.config["THEMES_FOLDER"])
|
||||||
return themes
|
return themes
|
||||||
@@ -60,9 +60,9 @@ def create_app():
|
|||||||
try:
|
try:
|
||||||
icon_id = member[6]
|
icon_id = member[6]
|
||||||
icon_name = db.execute("SELECT * FROM icons WHERE id=(?)",(icon_id,)).fetchone()
|
icon_name = db.execute("SELECT * FROM icons WHERE id=(?)",(icon_id,)).fetchone()
|
||||||
|
return icon_name[2]
|
||||||
except TypeError:
|
except TypeError:
|
||||||
return 'any.jpg'
|
return None
|
||||||
return icon_name[2]
|
|
||||||
|
|
||||||
def get_member_icons(mid):
|
def get_member_icons(mid):
|
||||||
db = get_db()
|
db = get_db()
|
||||||
|
|||||||
@@ -5,14 +5,19 @@ from werkzeug.exceptions import abort
|
|||||||
|
|
||||||
from myriad.auth import login_required
|
from myriad.auth import login_required
|
||||||
from myriad.db import get_db
|
from myriad.db import get_db
|
||||||
from myriad.utilities import get_pages
|
from myriad.utilities import get_pages, error404
|
||||||
|
|
||||||
bp = Blueprint('home', __name__)
|
bp = Blueprint('home', __name__)
|
||||||
|
|
||||||
@bp.route('/')
|
@bp.route('/')
|
||||||
def index():
|
def index():
|
||||||
db = get_db()
|
db = get_db()
|
||||||
fronters = db.execute("SELECT * FROM member WHERE front=(?) ORDER BY member_name",(1,)).fetchall()
|
|
||||||
|
if g.user:
|
||||||
|
fronters = db.execute("SELECT * FROM member WHERE front=(?) ORDER BY member_name",(1,)).fetchall()
|
||||||
|
else:
|
||||||
|
fronters = db.execute("SELECT * FROM member WHERE front=(?) AND public=(?) ORDER BY member_name",(1,1)).fetchall()
|
||||||
|
|
||||||
homepage = db.execute("SELECT * FROM member WHERE homepage=(?) ORDER BY member_name COLLATE NOCASE",(1,)).fetchall()
|
homepage = db.execute("SELECT * FROM member WHERE homepage=(?) ORDER BY member_name COLLATE NOCASE",(1,)).fetchall()
|
||||||
|
|
||||||
latest_start = db.execute("SELECT start_time FROM front_log ORDER BY start_time DESC").fetchone()
|
latest_start = db.execute("SELECT start_time FROM front_log ORDER BY start_time DESC").fetchone()
|
||||||
@@ -32,7 +37,9 @@ def index():
|
|||||||
elif latest_start and not latest_end:
|
elif latest_start and not latest_end:
|
||||||
latest = latest_start[0]
|
latest = latest_start[0]
|
||||||
|
|
||||||
return render_template('index.html', front_list=fronters, home_pins=homepage, last_updated=latest)
|
homepage_text = current_app.config["HOMEPAGE"]
|
||||||
|
|
||||||
|
return render_template('index.html', front_list=fronters, home_pins=homepage, last_updated=latest, homepage_text=homepage_text)
|
||||||
|
|
||||||
@bp.route('/full')
|
@bp.route('/full')
|
||||||
def full_list():
|
def full_list():
|
||||||
@@ -44,23 +51,38 @@ def full_list():
|
|||||||
@bp.route('/member/<mid>')
|
@bp.route('/member/<mid>')
|
||||||
def page(mid):
|
def page(mid):
|
||||||
db = get_db()
|
db = get_db()
|
||||||
try:
|
|
||||||
member = db.execute("SELECT * FROM member WHERE id=(?)",(mid,)).fetchone()
|
member = db.execute("SELECT * FROM member WHERE id=(?)",(mid,)).fetchone()
|
||||||
blog = db.execute("SELECT * FROM blog WHERE member_id=(?) ORDER BY created DESC",(mid,)).fetchall()
|
if not member:
|
||||||
icon = db.execute("SELECT icon_location FROM icons WHERE id=(?)",(member[6],)).fetchone()
|
member = db.execute("SELECT * FROM member WHERE custom_url=(?)",(mid,)).fetchone()
|
||||||
all_icons = db.execute("SELECT icon_location FROM icons WHERE member_id=(?)",(mid,)).fetchall()
|
mid = member[0]
|
||||||
blinkies = db.execute("SELECT blinkie_location FROM blinkies WHERE member_id=(?)",(mid,)).fetchall()
|
if not member:
|
||||||
stamps = db.execute("SELECT stamp_location FROM stamps WHERE member_id=(?)",(mid,)).fetchall()
|
return error404()
|
||||||
blog_public = db.execute("SELECT * FROM blog WHERE member_id=(?) AND public=(?)",(mid,1)).fetchall()
|
|
||||||
sections = db.execute("SELECT * FROM sections WHERE member_id=(?) ORDER BY position ASC",(mid,)).fetchall()
|
blog = db.execute("SELECT * FROM blog WHERE member_id=(?) ORDER BY created DESC",(mid,)).fetchall()
|
||||||
groups = db.execute("SELECT * FROM group_members WHERE member_id=(?)",(mid,)).fetchall()
|
icon = db.execute("SELECT icon_location FROM icons WHERE id=(?)",(member[6],)).fetchone()
|
||||||
except TypeError:
|
all_icons = db.execute("SELECT icon_location FROM icons WHERE member_id=(?)",(mid,)).fetchall()
|
||||||
return "Not Found <br> <a href='/'>Go Home</a>", 404
|
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()
|
||||||
|
blog_public = db.execute("SELECT * FROM blog WHERE member_id=(?) AND public=(?)",(mid,1)).fetchall()
|
||||||
|
sections = db.execute("SELECT * FROM sections WHERE member_id=(?) ORDER BY position ASC",(mid,)).fetchall()
|
||||||
|
groups = db.execute("SELECT * FROM group_members WHERE member_id=(?)",(mid,)).fetchall()
|
||||||
|
|
||||||
blog_public_show = False
|
blog_public_show = False
|
||||||
if len(blog_public) > 0:
|
if len(blog_public) > 0:
|
||||||
blog_public_show = True
|
blog_public_show = True
|
||||||
|
|
||||||
|
profile_public = member[9]
|
||||||
|
if not g.user and profile_public == 0:
|
||||||
|
return error404()
|
||||||
|
|
||||||
|
page_public = member[21]
|
||||||
|
if page_public == 2:
|
||||||
|
return error404()
|
||||||
|
elif not g.user and page_public == 0:
|
||||||
|
return error404()
|
||||||
|
|
||||||
|
|
||||||
return render_template('page.html', member=member, blog=blog, icon=icon, all_icons=all_icons, blinkies=blinkies, stamps=stamps, blog_public_show=blog_public_show, sections=sections, groups=groups)
|
return render_template('page.html', member=member, blog=blog, icon=icon, all_icons=all_icons, blinkies=blinkies, stamps=stamps, blog_public_show=blog_public_show, sections=sections, groups=groups)
|
||||||
|
|
||||||
@bp.route("/groups")
|
@bp.route("/groups")
|
||||||
@@ -91,7 +113,7 @@ def group_page(gid):
|
|||||||
m = db.execute("SELECT * FROM member WHERE id=(?)",(member[2],)).fetchone()
|
m = db.execute("SELECT * FROM member WHERE id=(?)",(member[2],)).fetchone()
|
||||||
members.append(m)
|
members.append(m)
|
||||||
except TypeError:
|
except TypeError:
|
||||||
return "Not Found <br> <a href='/'>Go Home</a>", 404
|
return error404()
|
||||||
return render_template('group_page.html', group=group, members=members)
|
return render_template('group_page.html', group=group, members=members)
|
||||||
|
|
||||||
@bp.route("/page/<pid>")
|
@bp.route("/page/<pid>")
|
||||||
@@ -100,7 +122,7 @@ def custom_page(pid):
|
|||||||
try:
|
try:
|
||||||
page = db.execute("SELECT * FROM pages WHERE id=(?)",(pid,)).fetchone()
|
page = db.execute("SELECT * FROM pages WHERE id=(?)",(pid,)).fetchone()
|
||||||
except TypeError:
|
except TypeError:
|
||||||
return "Not Found <br> <a href='/'>Go Home</a>", 404
|
return error404()
|
||||||
return render_template('custom_page.html', page=page)
|
return render_template('custom_page.html', page=page)
|
||||||
|
|
||||||
@bp.route("/page")
|
@bp.route("/page")
|
||||||
|
|||||||
@@ -82,6 +82,25 @@ def edit(mid):
|
|||||||
|
|
||||||
edit_location = "details"
|
edit_location = "details"
|
||||||
|
|
||||||
|
if "enable_page" in request.form:
|
||||||
|
page_public = request.form["enable_page"]
|
||||||
|
|
||||||
|
db.execute("UPDATE member SET public_page=(?) WHERE id=(?)",(page_public, mid))
|
||||||
|
db.commit()
|
||||||
|
|
||||||
|
edit_location="enable_page"
|
||||||
|
|
||||||
|
if "custom_url" in request.form:
|
||||||
|
custom_url = request.form["custom_url"].strip()
|
||||||
|
|
||||||
|
try:
|
||||||
|
db.execute("UPDATE member SET custom_url=(?) WHERE id=(?)",(custom_url, mid))
|
||||||
|
db.commit()
|
||||||
|
except sqlite3.IntegrityError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
edit_location="custom_url"
|
||||||
|
|
||||||
if "page_settings" in request.form:
|
if "page_settings" in request.form:
|
||||||
show_groups = "show_groups" in request.form
|
show_groups = "show_groups" in request.form
|
||||||
show_blog = "show_blog" in request.form
|
show_blog = "show_blog" in request.form
|
||||||
@@ -171,7 +190,15 @@ def edit(mid):
|
|||||||
edit_location = "sections"
|
edit_location = "sections"
|
||||||
|
|
||||||
|
|
||||||
member = db.execute("SELECT * FROM member WHERE id=(?)",(mid,)).fetchone()
|
try:
|
||||||
|
member = db.execute("SELECT * FROM member WHERE id=(?)",(mid,)).fetchone()
|
||||||
|
except:
|
||||||
|
try:
|
||||||
|
member = db.execute("SELECT * FROM member WHERE custom_url=(?)",(mid,)).fetchone()
|
||||||
|
except:
|
||||||
|
return "Not Found <br> <a href='/'>Go Home</a>", 404
|
||||||
|
|
||||||
|
|
||||||
icons = db.execute("SELECT * FROM icons WHERE member_id=(?)",(mid,)).fetchall()
|
icons = db.execute("SELECT * FROM icons WHERE member_id=(?)",(mid,)).fetchall()
|
||||||
blinkies = db.execute("SELECT * FROM blinkies WHERE member_id=(?)",(mid,)).fetchall()
|
blinkies = db.execute("SELECT * FROM blinkies WHERE member_id=(?)",(mid,)).fetchall()
|
||||||
stamps = db.execute("SELECT * FROM stamps WHERE member_id=(?)",(mid,)).fetchall()
|
stamps = db.execute("SELECT * FROM stamps WHERE member_id=(?)",(mid,)).fetchall()
|
||||||
@@ -388,9 +415,9 @@ def import_member(member):
|
|||||||
description = member["description"]
|
description = member["description"]
|
||||||
|
|
||||||
if member["privacy"] == "public":
|
if member["privacy"] == "public":
|
||||||
privacy = 1
|
m_privacy = 1
|
||||||
else:
|
else:
|
||||||
privacy = 0
|
m_privacy = 0
|
||||||
|
|
||||||
theme = member["theme"]
|
theme = member["theme"]
|
||||||
homepage = member["homepage-pin"]
|
homepage = member["homepage-pin"]
|
||||||
@@ -462,7 +489,7 @@ def import_member(member):
|
|||||||
name,
|
name,
|
||||||
subtitle,
|
subtitle,
|
||||||
description,
|
description,
|
||||||
privacy,
|
m_privacy,
|
||||||
theme,
|
theme,
|
||||||
homepage,
|
homepage,
|
||||||
main_icon_id,
|
main_icon_id,
|
||||||
@@ -867,7 +894,6 @@ def export_system_full():
|
|||||||
icons = db.execute("SELECT icon_location FROM icons").fetchall()
|
icons = db.execute("SELECT icon_location FROM icons").fetchall()
|
||||||
blinkies = db.execute("SELECT blinkie_location FROM blinkies").fetchall()
|
blinkies = db.execute("SELECT blinkie_location FROM blinkies").fetchall()
|
||||||
stamps = db.execute("SELECT stamp_location FROM stamps").fetchall()
|
stamps = db.execute("SELECT stamp_location FROM stamps").fetchall()
|
||||||
misc = os.listdir(current_app.config["MISC_UPLOAD_FOLDER"])
|
|
||||||
|
|
||||||
data = {}
|
data = {}
|
||||||
data["members"] = []
|
data["members"] = []
|
||||||
@@ -905,8 +931,6 @@ def export_system_full():
|
|||||||
for stamp in stamps:
|
for stamp in stamps:
|
||||||
sname = stamp[0]
|
sname = stamp[0]
|
||||||
zipf.write(current_app.config["STAMPS_UPLOAD_FOLDER"] + "/" + sname)
|
zipf.write(current_app.config["STAMPS_UPLOAD_FOLDER"] + "/" + sname)
|
||||||
#for misc_file in misc:
|
|
||||||
#zipf.write(current_app.config["MISC_UPLOAD_FOLDER"] + "/" + misc_file)
|
|
||||||
|
|
||||||
return send_file("static/tmp/"+zip_name, as_attachment=True)
|
return send_file("static/tmp/"+zip_name, as_attachment=True)
|
||||||
|
|
||||||
@@ -947,8 +971,19 @@ def assets():
|
|||||||
else:
|
else:
|
||||||
file.save(os.path.join(current_app.config["MISC_UPLOAD_FOLDER"], fname+str(i)+"."+ftype))
|
file.save(os.path.join(current_app.config["MISC_UPLOAD_FOLDER"], fname+str(i)+"."+ftype))
|
||||||
|
|
||||||
|
if "images_zip" in request.files:
|
||||||
|
images_file = request.files["images_zip"]
|
||||||
|
with zipfile.ZipFile(images_file, "r") as zipf:
|
||||||
|
for f in zipf.namelist():
|
||||||
|
zipf.extract(f)
|
||||||
|
|
||||||
|
# Get icon names from the database and icon files from the disk
|
||||||
icons = db.execute("SELECT * FROM icons").fetchall()
|
icons = db.execute("SELECT * FROM icons").fetchall()
|
||||||
icon_storage = os.listdir(current_app.config["ICON_UPLOAD_FOLDER"])
|
icon_storage = os.listdir(current_app.config["ICON_UPLOAD_FOLDER"])
|
||||||
|
|
||||||
|
# Do the same for stamps and blinkies now that I'm organizing these too
|
||||||
|
blinkies = db.execute("SELECT * FROM blinkies").fetchall()
|
||||||
|
blinkie_storage = os.listdir(current_app.config["BLINKIES_UPLOAD_FOLDER"])
|
||||||
|
|
||||||
i_storage = []
|
i_storage = []
|
||||||
for icon in icon_storage:
|
for icon in icon_storage:
|
||||||
@@ -967,11 +1002,11 @@ def assets():
|
|||||||
if not in_storage:
|
if not in_storage:
|
||||||
unlinked_icons.append(i)
|
unlinked_icons.append(i)
|
||||||
|
|
||||||
blinkies = os.listdir(current_app.config["BLINKIES_UPLOAD_FOLDER"])
|
#blinkies = os.listdir(current_app.config["BLINKIES_UPLOAD_FOLDER"])
|
||||||
stamps = os.listdir(current_app.config["STAMPS_UPLOAD_FOLDER"])
|
#stamps = os.listdir(current_app.config["STAMPS_UPLOAD_FOLDER"])
|
||||||
images = os.listdir(current_app.config["MISC_UPLOAD_FOLDER"])
|
images = os.listdir(current_app.config["MISC_UPLOAD_FOLDER"])
|
||||||
|
|
||||||
return render_template("manage/assets.html", icons=unlinked_icons, icon_storage=i_storage, blinkies=blinkies, stamps=stamps, images=images)
|
return render_template("manage/assets.html", icons=unlinked_icons, icon_storage=i_storage, images=images)
|
||||||
|
|
||||||
@bp.route("/delete_idb")
|
@bp.route("/delete_idb")
|
||||||
@login_required
|
@login_required
|
||||||
@@ -1009,6 +1044,23 @@ def delete_ifiles():
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@bp.route("/delete/misc/<filename>")
|
||||||
|
@login_required
|
||||||
|
def delete_misc(filename):
|
||||||
|
os.remove(os.path.join(current_app.config["MISC_UPLOAD_FOLDER"], filename))
|
||||||
|
return redirect(url_for("manage.assets"))
|
||||||
|
|
||||||
|
@bp.route("/export/misc")
|
||||||
|
@login_required
|
||||||
|
def export_misc():
|
||||||
|
misc = os.listdir(current_app.config["MISC_UPLOAD_FOLDER"])
|
||||||
|
zip_name = "myriad_assets.zip"
|
||||||
|
zip_path = current_app.config["TMP_FOLDER"] + "/" + zip_name
|
||||||
|
with zipfile.ZipFile(zip_path, "w") as zipf:
|
||||||
|
for misc_file in misc:
|
||||||
|
zipf.write(current_app.config["MISC_UPLOAD_FOLDER"] + "/" + misc_file)
|
||||||
|
return send_file("static/tmp/"+zip_name, as_attachment=True)
|
||||||
|
|
||||||
# GROUPS
|
# GROUPS
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -39,6 +39,8 @@ CREATE TABLE member (
|
|||||||
blinkies_title TEXT DEFAULT "Blinkies",
|
blinkies_title TEXT DEFAULT "Blinkies",
|
||||||
stamps_title TEXT DEFAULT "Stamps",
|
stamps_title TEXT DEFAULT "Stamps",
|
||||||
groups_title TEXT DEFAULT "Groups",
|
groups_title TEXT DEFAULT "Groups",
|
||||||
|
public_page BOOLEAN NOT NULL DEFAULT 1,
|
||||||
|
custom_url TEXT UNIQUE,
|
||||||
FOREIGN KEY (user_id) REFERENCES user (id),
|
FOREIGN KEY (user_id) REFERENCES user (id),
|
||||||
FOREIGN KEY (main_icon) REFERENCES icons (id)
|
FOREIGN KEY (main_icon) REFERENCES icons (id)
|
||||||
);
|
);
|
||||||
@@ -110,7 +112,8 @@ CREATE TABLE pages (
|
|||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
title TEXT,
|
title TEXT,
|
||||||
content TEXT,
|
content TEXT,
|
||||||
position INTEGER
|
position INTEGER,
|
||||||
|
public BOOLEAN NOT NULL DEFAULT 1
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE custom_urls (
|
CREATE TABLE custom_urls (
|
||||||
|
|||||||
@@ -46,7 +46,14 @@
|
|||||||
{% if pins %}
|
{% if pins %}
|
||||||
<div class="heading">Pinned</div>
|
<div class="heading">Pinned</div>
|
||||||
{% for pin in pins %}
|
{% for pin in pins %}
|
||||||
<div class="navitem">> <a href="{{ url_for('home.page', mid=pin[0]) }}">{{pin[3]|safe}}</a></div>
|
{% if pin[21] == 2 %}
|
||||||
|
{% set view_page = False %}
|
||||||
|
{% elif not g.user and pin[21] == 0 %}
|
||||||
|
{% set view_page = False %}
|
||||||
|
{% else %}
|
||||||
|
{% set view_page = True %}
|
||||||
|
{% endif %}
|
||||||
|
{% if view_page %}<div class="navitem">> {% if pin[22] %}<a href="{{ url_for('home.page', mid=pin[22]) }}">{{ pin[3]|safe }}</a>{%else%}<a href="{{ url_for('home.page', mid=pin[0]) }}">{{ pin[3]|safe }}</a>{%endif%}</div>{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|||||||
@@ -22,18 +22,33 @@
|
|||||||
{% for member in memberlist %}
|
{% for member in memberlist %}
|
||||||
|
|
||||||
{% if not g.user and member[9]==0 %}
|
{% if not g.user and member[9]==0 %}
|
||||||
|
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|
||||||
|
{% if member[21] == 2 %}
|
||||||
|
{% set view_page = False %}
|
||||||
|
{% elif not g.user and member[21] == 0 %}
|
||||||
|
{% set view_page = False %}
|
||||||
|
{% else %}
|
||||||
|
{% set view_page = True %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if not g.user and not view_page %}
|
||||||
|
{% set hide_links = True %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<div class="profile {{member[10]}}" id="m{{ member[0] }}">
|
<div class="profile {{member[10]}}" id="m{{ member[0] }}">
|
||||||
<div class="heading">{% if member[9]==0 %}<img class="minilock" src="{{ url_for('static', filename='lock.png') }}">{% endif %}<b>{{ member[3]|safe }}</b> {{ member[4]|safe }}</div>
|
<div class="heading">{% if member[9]==0 %}<img class="minilock" src="{{ url_for('static', filename='lock.png') }}">{% endif %}<b>{{ member[3]|safe }}</b> {{ member[4]|safe }}</div>
|
||||||
{% set icon = get_member_icon(member[0]) %}
|
{% set icon = get_member_icon(member[0]) %}
|
||||||
<img src="{{ url_for('static', filename='icons/'+icon) }}" class="icon">
|
{% if icon %}
|
||||||
|
<img class="icon" src="{{ url_for('static', filename='icons/'+icon) }}">
|
||||||
|
{% else %}
|
||||||
|
<img class="icon" src="{{ url_for('static', filename='any.jpg') }}">
|
||||||
|
{% endif %}
|
||||||
<div class="bio">
|
<div class="bio">
|
||||||
{{ member[5].replace('\n', '<br>')|safe }}
|
{{ member[5].replace('\n', '<br>')|safe }}
|
||||||
</div>
|
</div>
|
||||||
<br class="clear" />
|
<br class="clear" />
|
||||||
<div class="heading links"><a href="{{ url_for('home.page', mid=member[0]) }}">View Page</a>{% if g.user %} ☆ {% if member[8]==0 %}<a href="{{ url_for('manage.add_to_front', mid=member[0],location='full') }}">Add to Front</a>{% else %}<a href="{{ url_for('manage.remove_front', mid=member[0],location='full') }}">Remove from Front</a>{% endif %} ☆ <a href="{{ url_for('manage.edit', mid=member[0]) }}">Edit</a> ☆ {% if member[7]==0 %}<a href="{{ url_for('manage.add_to_home', mid=member[0],location='full') }}">Pin to Homepage</a>{% else %}<a href="{{ url_for('manage.remove_home', mid=member[0],location='full') }}">Unpin from Homepage</a>{% endif %}{% endif %}</div>
|
{% if not hide_links %}<div class="heading links">{% if view_page %}{% if member[22] %}<a href="{{ url_for('home.page', mid=member[22]) }}">View Page</a>{%else%}<a href="{{ url_for('home.page', mid=member[0]) }}">View Page</a>{% endif %}{% endif %}{% if g.user %} ☆ {% if member[8]==0 %}<a href="{{ url_for('manage.add_to_front', mid=member[0],location='full') }}">Add to Front</a>{% else %}<a href="{{ url_for('manage.remove_front', mid=member[0],location='full') }}">Remove from Front</a>{% endif %} ☆ <a href="{{ url_for('manage.edit', mid=member[0]) }}">Edit</a> ☆ {% if member[7]==0 %}<a href="{{ url_for('manage.add_to_home', mid=member[0],location='full') }}">Pin to Homepage</a>{% else %}<a href="{{ url_for('manage.remove_home', mid=member[0],location='full') }}">Unpin from Homepage</a>{% endif %}{% endif %}</div>{% endif %}
|
||||||
<!-- <img src="/geo/dsgame.webp" class="dsgame"> -->
|
|
||||||
<br class="clear" />
|
<br class="clear" />
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -16,6 +16,18 @@
|
|||||||
{% if not g.user and member[9]==0 %}
|
{% if not g.user and member[9]==0 %}
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|
||||||
|
{% if member[21] == 2 %}
|
||||||
|
{% set view_page = False %}
|
||||||
|
{% elif not g.user and member[21] == 0 %}
|
||||||
|
{% set view_page = False %}
|
||||||
|
{% else %}
|
||||||
|
{% set view_page = True %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if not g.user and not view_page %}
|
||||||
|
{% set hide_links = True %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
<div class="profile {{member[10]}}" id="m{{ member[0] }}">
|
<div class="profile {{member[10]}}" id="m{{ member[0] }}">
|
||||||
<div class="heading">{% if member[9]==0 %}<img class="minilock" src="{{ url_for('static', filename='lock.png') }}">{% endif %}<b>{{ member[3]|safe }}</b> {{ member[4]|safe }}</div>
|
<div class="heading">{% if member[9]==0 %}<img class="minilock" src="{{ url_for('static', filename='lock.png') }}">{% endif %}<b>{{ member[3]|safe }}</b> {{ member[4]|safe }}</div>
|
||||||
@@ -25,7 +37,7 @@
|
|||||||
{{ member[5].replace('\n', '<br>')|safe }}
|
{{ member[5].replace('\n', '<br>')|safe }}
|
||||||
</div>
|
</div>
|
||||||
<br class="clear" />
|
<br class="clear" />
|
||||||
<div class="heading links"><a href="{{ url_for('home.page', mid=member[0]) }}">View Page</a>{% if g.user %} ☆ {% if member[8]==0 %}<a href="{{ url_for('manage.add_to_front', mid=member[0],location='home') }}">Add to Front</a>{% else %}<a href="{{ url_for('manage.remove_front', mid=member[0],location='home') }}">Remove from Front</a>{% endif %} ☆ <a href="{{ url_for('manage.edit', mid=member[0]) }}">Edit</a> ☆ {% if member[7]==0 %}<a href="{{ url_for('manage.add_to_home', mid=member[0],location='home') }}">Pin to Homepage</a>{% else %}<a href="{{ url_for('manage.remove_home', mid=member[0],location='home') }}">Unpin from Homepage</a>{% endif %}{% endif %}</div>
|
{% if not hide_links %}<div class="heading links">{% if view_page %}{% if member[22] %}<a href="{{ url_for('home.page', mid=member[22]) }}">View Page</a>{%else%}<a href="{{ url_for('home.page', mid=member[0]) }}">View Page</a>{% endif %}{% endif %}{% if g.user %} ☆ {% if member[8]==0 %}<a href="{{ url_for('manage.add_to_front', mid=member[0],location='home') }}">Add to Front</a>{% else %}<a href="{{ url_for('manage.remove_front', mid=member[0],location='home') }}">Remove from Front</a>{% endif %} ☆ <a href="{{ url_for('manage.edit', mid=member[0]) }}">Edit</a> ☆ {% if member[7]==0 %}<a href="{{ url_for('manage.add_to_home', mid=member[0],location='home') }}">Pin to Homepage</a>{% else %}<a href="{{ url_for('manage.remove_home', mid=member[0],location='home') }}">Unpin from Homepage</a>{% endif %}{% endif %}</div>{% endif %}
|
||||||
<br class="clear" />
|
<br class="clear" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
{% for group in groups %}
|
{% for group in groups %}
|
||||||
{% if not g.user and group[3]==0 %}
|
{% if not g.user and group[3]==0 %}
|
||||||
|
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="heading big"><a href="{{ url_for('home.group_page', gid=group[0]) }}">{{group[1]}}</a></div>
|
<div class="heading big"><a href="{{ url_for('home.group_page', gid=group[0]) }}">{{group[1]}}</a></div>
|
||||||
<div class="maintext">
|
<div class="maintext">
|
||||||
@@ -14,7 +15,16 @@
|
|||||||
{% for member in group_members[group[0]] %}
|
{% for member in group_members[group[0]] %}
|
||||||
{% if not g.user and member[9]==0 %}
|
{% if not g.user and member[9]==0 %}
|
||||||
{% else %}
|
{% else %}
|
||||||
✰ <a href="{{ url_for('home.page', mid=member[0]) }}">{{ member[3]|safe }}</a> <br>
|
|
||||||
|
{% if member[21] == 2 %}
|
||||||
|
{% set view_page = False %}
|
||||||
|
{% elif not g.user and member[21] == 0 %}
|
||||||
|
{% set view_page = False %}
|
||||||
|
{% else %}
|
||||||
|
{% set view_page = True %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
✰ {% if view_page %}<a href="{{ url_for('home.page', mid=member[0]) }}">{% endif %}{{ member[3]|safe }}{% if view_page %}</a>{% endif %} <br>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -6,29 +6,59 @@
|
|||||||
|
|
||||||
<div id="frontbanner" class="heading">
|
<div id="frontbanner" class="heading">
|
||||||
{% if front_list|length > 0 %}
|
{% if front_list|length > 0 %}
|
||||||
<b>currently fronting: </b> {% for member in front_list %}{% if not g.user and member[9]==0 %}{% else %}<a href="{{ url_for('home.page', mid=member[0]) }}">{{ member[3]|safe }}</a> {% if front_list.index(member) != front_list|length -1 %}&{% endif %}{% endif %} {% endfor %}
|
<b>currently fronting: </b>
|
||||||
|
{% for member in front_list %}
|
||||||
|
{% if member[21] == 2 %}
|
||||||
|
{% set a_tags = False %}
|
||||||
|
{% elif not g.user and member[21] == 0 %}
|
||||||
|
{% set a_tags = False %}
|
||||||
|
{% else %}
|
||||||
|
{% set a_tags = True %}
|
||||||
|
{% endif %}
|
||||||
|
{% if member[22] %}
|
||||||
|
{% if a_tags %}<a href="{{ url_for('home.page', mid=member[22]) }}">{% endif %}{{ member[3]|safe }}{% if a_tags %}</a>{% endif %}
|
||||||
|
{%else%}{% if a_tags %}<a href="{{ url_for('home.page', mid=member[0]) }}">{% endif %}{{ member[3]|safe }}{% if a_tags %}</a>{% endif %}
|
||||||
|
{%endif%}
|
||||||
|
{% if front_list.index(member) != front_list|length -1 %}& {% endif %}{% endfor %}
|
||||||
{% else %}
|
{% else %}
|
||||||
<i><sub>There are currently no members listed as fronting</sub></i>
|
<i><sub>There are currently no members listed as fronting</sub></i>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if last_updated %}<br><i><sub>last updated: {{ get_datetime_str(last_updated) }}</sub></i>{% endif %}
|
{% if last_updated %}<br><i><sub>last updated: {{ get_datetime_str(last_updated) }}</sub></i>{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{% if homepage_text %}<p>{{ homepage_text|safe }}</p>{% endif %}
|
||||||
|
|
||||||
{% for member in home_pins %}
|
{% for member in home_pins %}
|
||||||
|
|
||||||
{% if not g.user and member[9]==0 %}
|
{% if not g.user and member[9]==0 %}
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|
||||||
|
{% if member[21] == 2 %}
|
||||||
|
{% set view_page = False %}
|
||||||
|
{% elif not g.user and member[21] == 0 %}
|
||||||
|
{% set view_page = False %}
|
||||||
|
{% else %}
|
||||||
|
{% set view_page = True %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if not g.user and not view_page %}
|
||||||
|
{% set hide_links = True %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
<div class="profile {{member[10]}}" id="m{{ member[0] }}">
|
<div class="profile {{member[10]}}" id="m{{ member[0] }}">
|
||||||
<div class="heading">{% if member[9]==0 %}<img class="minilock" src="{{ url_for('static', filename='lock.png') }}">{% endif %}<b>{{ member[3]|safe }}</b> {{ member[4]|safe }}</div>
|
<div class="heading">{% if member[9]==0 %}<img class="minilock" src="{{ url_for('static', filename='lock.png') }}">{% endif %}<b>{{ member[3]|safe }}</b> {{ member[4]|safe }}</div>
|
||||||
{% set icon = get_member_icon(member[0]) %}
|
{% set icon = get_member_icon(member[0]) %}
|
||||||
<img src="{{ url_for('static', filename='icons/'+icon) }}" class="icon">
|
{% if icon %}
|
||||||
|
<img class="icon" src="{{ url_for('static', filename='icons/'+icon) }}">
|
||||||
|
{% else %}
|
||||||
|
<img class="icon" src="{{ url_for('static', filename='any.jpg') }}">
|
||||||
|
{% endif %}
|
||||||
<div class="bio">
|
<div class="bio">
|
||||||
{{ member[5].replace('\n', '<br>')|safe }}
|
{{ member[5].replace('\n', '<br>')|safe }}
|
||||||
</div>
|
</div>
|
||||||
<br class="clear" />
|
<br class="clear" />
|
||||||
<div class="heading links"><a href="{{ url_for('home.page', mid=member[0]) }}">View Page</a>{% if g.user %} ☆ {% if member[8]==0 %}<a href="{{ url_for('manage.add_to_front', mid=member[0],location='home') }}">Add to Front</a>{% else %}<a href="{{ url_for('manage.remove_front', mid=member[0],location='home') }}">Remove from Front</a>{% endif %} ☆ <a href="{{ url_for('manage.edit', mid=member[0]) }}">Edit</a> ☆ {% if member[7]==0 %}<a href="{{ url_for('manage.add_to_home', mid=member[0],location='home') }}">Pin to Homepage</a>{% else %}<a href="{{ url_for('manage.remove_home', mid=member[0],location='home') }}">Unpin from Homepage</a>{% endif %}{% endif %}</div>
|
{% if not hide_links %}<div class="heading links">{% if view_page %}{% if member[22] %}<a href="{{ url_for('home.page', mid=member[22]) }}">View Page</a>{%else%}<a href="{{ url_for('home.page', mid=member[0]) }}">View Page</a>{% endif %}{% endif %}{% if g.user %} ☆ {% if member[8]==0 %}<a href="{{ url_for('manage.add_to_front', mid=member[0],location='home') }}">Add to Front</a>{% else %}<a href="{{ url_for('manage.remove_front', mid=member[0],location='home') }}">Remove from Front</a>{% endif %} ☆ <a href="{{ url_for('manage.edit', mid=member[0]) }}">Edit</a> ☆ {% if member[7]==0 %}<a href="{{ url_for('manage.add_to_home', mid=member[0],location='home') }}">Pin to Homepage</a>{% else %}<a href="{{ url_for('manage.remove_home', mid=member[0],location='home') }}">Unpin from Homepage</a>{% endif %}{% endif %}</div>{% endif %}
|
||||||
<!-- <img src="/geo/dsgame.webp" class="dsgame"> -->
|
|
||||||
<br class="clear" />
|
<br class="clear" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -63,12 +63,24 @@
|
|||||||
<img class="mng_img" src="{{ url_for('static', filename='misc/'+image) }}">
|
<img class="mng_img" src="{{ url_for('static', filename='misc/'+image) }}">
|
||||||
<br class="clear" />
|
<br class="clear" />
|
||||||
{% set imgurl = url_for('static', filename='misc/'+image) %}
|
{% set imgurl = url_for('static', filename='misc/'+image) %}
|
||||||
<a href="" onclick="copyURL('{{imgurl}}')">Copy Image URL</a> ☆ <a href="">Delete</a>
|
<a style="color:blue;cursor:pointer;" onclick="copyURL('{{imgurl}}')">Copy Source</a>
|
||||||
|
☆
|
||||||
|
<a href="{{ url_for('manage.delete_misc', filename=image) }}">Delete</a>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<p><a href="{{ url_for('manage.export_misc') }}">Export all assets to zip</a></p>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<p>Import assets from a zip folder</p>
|
||||||
|
<form method="post" enctype="multipart/form-data" id="images_zip">
|
||||||
|
<input type="file" name="images_zip" class="mobile-edit">
|
||||||
|
<input type="submit" value="Upload ZIP">
|
||||||
|
</form>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
function copyURL(a) {
|
function copyURL(a) {
|
||||||
navigator.clipboard.writeText(a);
|
navigator.clipboard.writeText(a);
|
||||||
|
|||||||
@@ -6,8 +6,7 @@
|
|||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
{% if member[22] %}<a href="{{ url_for('home.page', mid=member[22]) }}">View {{member[3]|safe}}'s page</a>{%else%}<a href="{{ url_for('home.page', mid=member[0]) }}">View {{member[3]|safe}}'s page</a>{%endif%}
|
||||||
<a href="{{url_for('home.page', mid=member[0])}}">View {{member[3]|safe}}'s page</a>
|
|
||||||
<br class="clear" />
|
<br class="clear" />
|
||||||
|
|
||||||
<div class="heading">Edit Details</div>
|
<div class="heading">Edit Details</div>
|
||||||
@@ -26,6 +25,8 @@
|
|||||||
<option value="{{theme_name}}" {% if theme_name==member[10] %}selected{% endif %}>{{theme_name}}</option>
|
<option value="{{theme_name}}" {% if theme_name==member[10] %}selected{% endif %}>{{theme_name}}</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select><br><br>
|
</select><br><br>
|
||||||
|
<p>Public: this member's profile will be visible in lists to anyone with access to the site</p>
|
||||||
|
<p>Private: this member's profile will be hidden, only visible to logged in users</p>
|
||||||
<input type="radio" id="public" name="privacy" value=1 {% if member[9]==1 %}checked{% endif %}>
|
<input type="radio" id="public" name="privacy" value=1 {% if member[9]==1 %}checked{% endif %}>
|
||||||
<label for="public">Public</label><br>
|
<label for="public">Public</label><br>
|
||||||
<input type="radio" id="private" name="privacy" value=0 {% if member[9]==0 %}checked{% endif %}>
|
<input type="radio" id="private" name="privacy" value=0 {% if member[9]==0 %}checked{% endif %}>
|
||||||
@@ -34,6 +35,37 @@
|
|||||||
</form>
|
</form>
|
||||||
|
|
||||||
<div class="heading">Public Page Settings</div>
|
<div class="heading">Public Page Settings</div>
|
||||||
|
|
||||||
|
<p>Enable public page for this member? These settings are non-destructive and can be reverted at any time.</p>
|
||||||
|
<p>Public: member's customizable page can be viewed by anyone with access to the site</p>
|
||||||
|
<p>Private: member's page is viewable by users logged in to the site</p>
|
||||||
|
<p>Disabled: a custom page is not enabled for this member</p>
|
||||||
|
|
||||||
|
{% set public_page = member[21] %}
|
||||||
|
<form method="post" id="enable_page">
|
||||||
|
<input type="radio" id="page_public" name="enable_page" value=1 {% if public_page == 1 %}checked{% endif %}>
|
||||||
|
<label for="page_public">Public</label><br>
|
||||||
|
<input type="radio" id="page_private" name="enable_page" value=0 {% if public_page == 0 %}checked{% endif %}>
|
||||||
|
<label for="page_private">Private</label><br>
|
||||||
|
<input type="radio" id="page_disabled" name="enable_page" value=2 {% if public_page == 2 %}checked{% endif %}>
|
||||||
|
<label for="page_disabled">Disabled</label><br>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<p>Set a custom URL for your page. This has to be unique. Trying to set a custom URL that is already in use
|
||||||
|
won't work.
|
||||||
|
</p>
|
||||||
|
{% if member[22] %}{% set customurl = member[22] %}{% else %}{% set customurl = "" %}{% endif %}
|
||||||
|
<form method="post" id="custom_url">
|
||||||
|
<label for="custom_url">Custom URL</label>
|
||||||
|
<input name="custom_url" id="custom_url" value="{{ customurl }}"><br>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
<p>Select which sections to show on this member's public page</p>
|
<p>Select which sections to show on this member's public page</p>
|
||||||
<form method="post" id="page_settings">
|
<form method="post" id="page_settings">
|
||||||
<input type="checkbox" id="show_groups" name="show_groups" {% if member[15] %}checked{% endif %}>
|
<input type="checkbox" id="show_groups" name="show_groups" {% if member[15] %}checked{% endif %}>
|
||||||
|
|||||||
@@ -7,10 +7,6 @@
|
|||||||
|
|
||||||
<div class="container {{member[10]}}">
|
<div class="container {{member[10]}}">
|
||||||
|
|
||||||
{% if not g.user and member[9]==0 %}
|
|
||||||
permission denied
|
|
||||||
{% else %}
|
|
||||||
|
|
||||||
{% if g.user %}
|
{% if g.user %}
|
||||||
<a href="{{url_for('manage.edit', mid=member[0])}}">Edit member</a> ☆ {% if member[8]==0 %}<a href="{{ url_for('manage.add_to_front', mid=member[0],location='mid') }}">Add to Front</a>{% else %}<a href="{{ url_for('manage.remove_front', mid=member[0],location='mid') }}">Remove from Front</a>{% endif %} ☆ {% if member[7]==0 %}<a href="{{ url_for('manage.add_to_home', mid=member[0],location='mid') }}">Pin to Homepage</a>{% else %}<a href="{{ url_for('manage.remove_home', mid=member[0],location='mid') }}">Unpin from Homepage</a>{% endif %}
|
<a href="{{url_for('manage.edit', mid=member[0])}}">Edit member</a> ☆ {% if member[8]==0 %}<a href="{{ url_for('manage.add_to_front', mid=member[0],location='mid') }}">Add to Front</a>{% else %}<a href="{{ url_for('manage.remove_front', mid=member[0],location='mid') }}">Remove from Front</a>{% endif %} ☆ {% if member[7]==0 %}<a href="{{ url_for('manage.add_to_home', mid=member[0],location='mid') }}">Pin to Homepage</a>{% else %}<a href="{{ url_for('manage.remove_home', mid=member[0],location='mid') }}">Unpin from Homepage</a>{% endif %}
|
||||||
<br class="clear" />
|
<br class="clear" />
|
||||||
@@ -18,8 +14,9 @@
|
|||||||
|
|
||||||
{% if member[8]==1 %}<div class="heading"><i>Currently Fronting</i></div>{% endif %}
|
{% if member[8]==1 %}<div class="heading"><i>Currently Fronting</i></div>{% endif %}
|
||||||
|
|
||||||
{% if icon %}
|
{% set main_icon = get_member_icon(member[0]) %}
|
||||||
<img class="icon" src="{{ url_for('static', filename='icons/'+icon[0]) }}">
|
{% if main_icon %}
|
||||||
|
<img class="icon" src="{{ url_for('static', filename='icons/'+main_icon) }}">
|
||||||
{% else %}
|
{% else %}
|
||||||
<img class="icon" src="{{ url_for('static', filename='any.jpg') }}">
|
<img class="icon" src="{{ url_for('static', filename='any.jpg') }}">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -104,9 +101,6 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@@ -1,6 +1,9 @@
|
|||||||
import datetime, re
|
import datetime, re
|
||||||
from myriad.db import get_db
|
from myriad.db import get_db
|
||||||
|
|
||||||
|
def error404():
|
||||||
|
return "Not Found <br> <a href='#' onclick='history.back()'>Go Back</a>", 404
|
||||||
|
|
||||||
def server_time():
|
def server_time():
|
||||||
raw = datetime.datetime.now()
|
raw = datetime.datetime.now()
|
||||||
real = raw.strftime("%d/%m/%Y, %H:%M:%S")
|
real = raw.strftime("%d/%m/%Y, %H:%M:%S")
|
||||||
|
|||||||
Reference in New Issue
Block a user