basic member blogs
still trying to figure out how to maximize customisability (html & css) of member pages as much as how we have them on neocities
This commit is contained in:
16
README.md
16
README.md
@@ -24,17 +24,15 @@ do not deploy this way, the packaged flask server is not secure. production inst
|
|||||||
- create `config.py` in the instance folder and customise the following settings to your needs
|
- create `config.py` in the instance folder and customise the following settings to your needs
|
||||||
|
|
||||||
```
|
```
|
||||||
REGISTRATION = True
|
REGISTRATION = True # Make sure to disable in production
|
||||||
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}
|
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'} # Can be anything you want
|
||||||
ICON_UPLOAD_FOLDER = 'myriad/static/icons'
|
ICON_UPLOAD_FOLDER = 'myriad/static/icons' # where member icons will be stored
|
||||||
BLINKIES_UPLOAD_FOLDER = 'myriad/static/blinkies'
|
BLINKIES_UPLOAD_FOLDER = 'myriad/static/blinkies' # where site assets "blinkies" will be stored
|
||||||
STAMPS_UPLOAD_FOLDER = 'myriad/static/stamps'
|
STAMPS_UPLOAD_FOLDER = 'myriad/static/stamps' # where site assets "stamps" will be stored
|
||||||
|
INLINE_UPLOAD_FOLDER = 'myriad/static/inline' # where site assets "misc inline" will be stored
|
||||||
|
MISC_UPLOAD_FOLDER = 'myriad/static/misc' # where other small images will be stored
|
||||||
```
|
```
|
||||||
|
|
||||||
- registration should only be set to True in a development situation (in production set it to False one you have set up your administration account). this would mean that anyone can make an account and edit your system
|
|
||||||
- feel free to adjust allowed file extensions however you choose
|
|
||||||
- upload folders don't need to be changed
|
|
||||||
|
|
||||||
# usage
|
# usage
|
||||||
|
|
||||||
- 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
|
||||||
|
|||||||
@@ -30,4 +30,7 @@ def create_app(test_config=None):
|
|||||||
from . import manage
|
from . import manage
|
||||||
app.register_blueprint(manage.bp)
|
app.register_blueprint(manage.bp)
|
||||||
|
|
||||||
|
from . import blog
|
||||||
|
app.register_blueprint(blog.bp)
|
||||||
|
|
||||||
return app
|
return app
|
||||||
|
|||||||
41
myriad/blog.py
Normal file
41
myriad/blog.py
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
from flask import (
|
||||||
|
Blueprint, flash, g, redirect, render_template, request, session, url_for, current_app
|
||||||
|
)
|
||||||
|
from werkzeug.utils import secure_filename
|
||||||
|
import os, uuid
|
||||||
|
|
||||||
|
from myriad.auth import login_required
|
||||||
|
from myriad.db import get_db
|
||||||
|
|
||||||
|
bp = Blueprint('blog', __name__, url_prefix='/blog')
|
||||||
|
|
||||||
|
@bp.route('/')
|
||||||
|
def blog():
|
||||||
|
db = get_db()
|
||||||
|
posts = db.execute("SELECT * FROM blog ORDER BY created DESC").fetchall()
|
||||||
|
members = db.execute("SELECT id,member_name FROM member").fetchall()
|
||||||
|
member_ids={}
|
||||||
|
for member in members:
|
||||||
|
member_ids[member[0]] = member[1]
|
||||||
|
|
||||||
|
return render_template('blog/blog.html', blog=posts, member_ids=member_ids)
|
||||||
|
|
||||||
|
@bp.route('/new', methods=('GET', 'POST'))
|
||||||
|
@login_required
|
||||||
|
def new():
|
||||||
|
db = get_db()
|
||||||
|
members = db.execute("SELECT id,member_name FROM member").fetchall()
|
||||||
|
|
||||||
|
if request.method == 'POST':
|
||||||
|
title = request.form['title']
|
||||||
|
content = request.form['content']
|
||||||
|
mid = request.form["mid"]
|
||||||
|
|
||||||
|
db.execute("INSERT INTO blog (member_id, title, content) VALUES (?, ?, ?)",(mid, title, content))
|
||||||
|
db.commit()
|
||||||
|
|
||||||
|
return redirect(url_for('blog.blog'))
|
||||||
|
|
||||||
|
|
||||||
|
return render_template('blog/new.html', members=members)
|
||||||
|
|
||||||
@@ -42,3 +42,11 @@ def full_list():
|
|||||||
icons[member[0]] = None
|
icons[member[0]] = None
|
||||||
|
|
||||||
return render_template('full.html', memberlist=members, icons=icons)
|
return render_template('full.html', memberlist=members, icons=icons)
|
||||||
|
|
||||||
|
@bp.route('/member/<mid>')
|
||||||
|
def page(mid):
|
||||||
|
db = get_db()
|
||||||
|
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()
|
||||||
|
|
||||||
|
return render_template('page.html', member=member, blog=blog)
|
||||||
@@ -3,7 +3,7 @@ DROP TABLE IF EXISTS member;
|
|||||||
DROP TABLE IF EXISTS icons;
|
DROP TABLE IF EXISTS icons;
|
||||||
DROP TABLE IF EXISTS groups;
|
DROP TABLE IF EXISTS groups;
|
||||||
DROP TABLE IF EXISTS group_members;
|
DROP TABLE IF EXISTS group_members;
|
||||||
DROP TABLE IF EXISTS pages;
|
DROP TABLE IF EXISTS blog;
|
||||||
|
|
||||||
CREATE TABLE user (
|
CREATE TABLE user (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
@@ -60,9 +60,11 @@ CREATE TABLE group_members (
|
|||||||
FOREIGN KEY (member_id) REFERENCES member (id)
|
FOREIGN KEY (member_id) REFERENCES member (id)
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE pages (
|
CREATE TABLE blog (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
member_id INTEGER NOT NULL,
|
member_id INTEGER NOT NULL,
|
||||||
page_location TEXT NOT NULL,
|
created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
title TEXT,
|
||||||
|
content TEXT,
|
||||||
FOREIGN KEY (member_id) REFERENCES member (id)
|
FOREIGN KEY (member_id) REFERENCES member (id)
|
||||||
);
|
);
|
||||||
@@ -14,8 +14,13 @@
|
|||||||
{% if g.user %}
|
{% if g.user %}
|
||||||
<div class="heading">Manage</div>
|
<div class="heading">Manage</div>
|
||||||
<div class="navitem">> <a href="{{ url_for('manage.new') }}">Add New Member</a></div>
|
<div class="navitem">> <a href="{{ url_for('manage.new') }}">Add New Member</a></div>
|
||||||
|
<div class="navitem">> <a href="">Site Assets</a></div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
<div class="heading">Blog</div>
|
||||||
|
{% if g.user %}<div class="navitem">> <a href="{{ url_for('blog.new') }}">New Post</a></div>{% endif %}
|
||||||
|
<div class="navitem">> <a href="{{ url_for('blog.blog') }}">View All Posts</a></div>
|
||||||
|
|
||||||
<div class="heading">Administration</div>
|
<div class="heading">Administration</div>
|
||||||
{% if g.user %}
|
{% if g.user %}
|
||||||
<div class="navitem">> <a href="{{ url_for('auth.logout') }}">Log out</a></div>
|
<div class="navitem">> <a href="{{ url_for('auth.logout') }}">Log out</a></div>
|
||||||
|
|||||||
19
myriad/templates/blog/blog.html
Normal file
19
myriad/templates/blog/blog.html
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
|
{% block header %}
|
||||||
|
<div class="title">{% block title %}System Blog{% endblock %}</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
{% for post in blog %}
|
||||||
|
<div class="post">
|
||||||
|
<div class="title">{{post[3]}}</div>
|
||||||
|
<div class="timestamp">{{post[2]}} - <a href="{{ url_for('home.page', mid=post[1]) }}">{{member_ids[post[1]]}}</a></div>
|
||||||
|
<div class="content">
|
||||||
|
{{post[4]}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
24
myriad/templates/blog/new.html
Normal file
24
myriad/templates/blog/new.html
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
|
{% block header %}
|
||||||
|
<div class="title">{% block title %}New Blog Post{% endblock %}</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<form method="post">
|
||||||
|
<label for="title">Title</label>
|
||||||
|
<input name="title" id="title"><br>
|
||||||
|
<label for="content">Content</label>
|
||||||
|
<textarea name="content" id="content"></textarea><br>
|
||||||
|
<label for="mid">Choose a member:</label>
|
||||||
|
<select name="mid" id="mid">
|
||||||
|
{% for member in members %}
|
||||||
|
<option value="{{member[0]}}">{{member[1]}}</option>
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
|
||||||
|
{{ error }}
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
{{ member[5]|safe }}
|
{{ member[5]|safe }}
|
||||||
</div>
|
</div>
|
||||||
<br class="clear" />
|
<br class="clear" />
|
||||||
{% if g.user %}<div class="heading links">{% if member[8]==0 %}<a href="{{ url_for('manage.add_to_front', mid=member[0]) }}">Add to Front</a>{% else %}<a href="{{ url_for('manage.remove_front', mid=member[0]) }}">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]) }}">Pin to Homepage</a>{% else %}<a href="{{ url_for('manage.remove_home', mid=member[0]) }}">Unpin from Homepage</a>{% endif %}</div>{% endif %}
|
<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]) }}">Add to Front</a>{% else %}<a href="{{ url_for('manage.remove_front', mid=member[0]) }}">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]) }}">Pin to Homepage</a>{% else %}<a href="{{ url_for('manage.remove_home', mid=member[0]) }}">Unpin from Homepage</a>{% endif %}{% endif %}</div>
|
||||||
<!-- <img src="/geo/dsgame.webp" class="dsgame"> -->
|
<!-- <img src="/geo/dsgame.webp" class="dsgame"> -->
|
||||||
<br class="clear" />
|
<br class="clear" />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -2,9 +2,12 @@
|
|||||||
{% block title %}Welcome{% endblock %}
|
{% block title %}Welcome{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
|
{% if front_list|length > 0 %}
|
||||||
<div id="frontbanner" class="heading">
|
<div id="frontbanner" class="heading">
|
||||||
<b>currently fronting: </b> {% for member in front_list %} {{ member[3] }} {% if front_list.index(member) != front_list|length -1 %}&{% endif %} {% endfor %}
|
<b>currently fronting: </b> {% for member in front_list %} <a href="{{ url_for('home.page', mid=member[0]) }}">{{ member[3] }}</a> {% if front_list.index(member) != front_list|length -1 %}&{% endif %} {% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% for member in home_pins %}
|
{% for member in home_pins %}
|
||||||
|
|
||||||
@@ -57,7 +60,7 @@
|
|||||||
{{ member[5]|safe }}
|
{{ member[5]|safe }}
|
||||||
</div>
|
</div>
|
||||||
<br class="clear" />
|
<br class="clear" />
|
||||||
{% if g.user %}<div class="heading links">{% if member[8]==0 %}<a href="{{ url_for('manage.add_to_front', mid=member[0]) }}">Add to Front</a>{% else %}<a href="{{ url_for('manage.remove_front', mid=member[0]) }}">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]) }}">Pin to Homepage</a>{% else %}<a href="{{ url_for('manage.remove_home', mid=member[0]) }}">Unpin from Homepage</a>{% endif %}</div>{% endif %}
|
<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]) }}">Add to Front</a>{% else %}<a href="{{ url_for('manage.remove_front', mid=member[0]) }}">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]) }}">Pin to Homepage</a>{% else %}<a href="{{ url_for('manage.remove_home', mid=member[0]) }}">Unpin from Homepage</a>{% endif %}{% endif %}</div>
|
||||||
<!-- <img src="/geo/dsgame.webp" class="dsgame"> -->
|
<!-- <img src="/geo/dsgame.webp" class="dsgame"> -->
|
||||||
<br class="clear" />
|
<br class="clear" />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
21
myriad/templates/page.html
Normal file
21
myriad/templates/page.html
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{% extends 'base.html' %}
|
||||||
|
{% block title %}{{ member[3] }}{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<div class="heading big">{{member[3]}}'s blog</div>
|
||||||
|
<div id="blog">
|
||||||
|
|
||||||
|
{% for post in blog %}
|
||||||
|
<div class="post">
|
||||||
|
<div class="title">{{post[3]}}</div>
|
||||||
|
<div class="timestamp">{{post[2]}}</div>
|
||||||
|
<div class="content">
|
||||||
|
{{post[4]}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
Reference in New Issue
Block a user