Ver código fonte

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
cube 4 dias atrás
pai
commit
7c6aabb1aa

+ 7
- 9
README.md Ver arquivo

@@ -24,17 +24,15 @@ do not deploy this way, the packaged flask server is not secure. production inst
24 24
 - create `config.py` in the instance folder and customise the following settings to your needs
25 25
 
26 26
 ```
27
-REGISTRATION = True
28
-ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}
29
-ICON_UPLOAD_FOLDER = 'myriad/static/icons'
30
-BLINKIES_UPLOAD_FOLDER = 'myriad/static/blinkies'
31
-STAMPS_UPLOAD_FOLDER = 'myriad/static/stamps'
27
+REGISTRATION = True # Make sure to disable in production
28
+ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'} # Can be anything you want
29
+ICON_UPLOAD_FOLDER = 'myriad/static/icons' # where member icons will be stored
30
+BLINKIES_UPLOAD_FOLDER = 'myriad/static/blinkies' # where site assets "blinkies" will be stored
31
+STAMPS_UPLOAD_FOLDER = 'myriad/static/stamps' # where site assets "stamps" will be stored
32
+INLINE_UPLOAD_FOLDER = 'myriad/static/inline' # where site assets "misc inline" will be stored
33
+MISC_UPLOAD_FOLDER = 'myriad/static/misc' # where other small images will be stored
32 34
 ```
33 35
 
34
-- 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
35
-- feel free to adjust allowed file extensions however you choose
36
-- upload folders don't need to be changed
37
-
38 36
 # usage
39 37
 
40 38
 - the software here is free to use, and there's no requirement to link back

+ 3
- 0
myriad/__init__.py Ver arquivo

@@ -30,4 +30,7 @@ def create_app(test_config=None):
30 30
     from . import manage
31 31
     app.register_blueprint(manage.bp)
32 32
 
33
+    from . import blog
34
+    app.register_blueprint(blog.bp)
35
+
33 36
     return app

+ 41
- 0
myriad/blog.py Ver arquivo

@@ -0,0 +1,41 @@
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
+
7
+from myriad.auth import login_required
8
+from myriad.db import get_db
9
+
10
+bp = Blueprint('blog', __name__, url_prefix='/blog')
11
+
12
+@bp.route('/')
13
+def blog():
14
+    db = get_db()
15
+    posts = db.execute("SELECT * FROM blog ORDER BY created DESC").fetchall()
16
+    members = db.execute("SELECT id,member_name FROM member").fetchall()
17
+    member_ids={}
18
+    for member in members:
19
+        member_ids[member[0]] = member[1]
20
+
21
+    return render_template('blog/blog.html', blog=posts, member_ids=member_ids)
22
+
23
+@bp.route('/new', methods=('GET', 'POST'))
24
+@login_required
25
+def new():
26
+    db = get_db()
27
+    members = db.execute("SELECT id,member_name FROM member").fetchall()
28
+
29
+    if request.method == 'POST':
30
+        title = request.form['title']
31
+        content = request.form['content']
32
+        mid = request.form["mid"]
33
+
34
+        db.execute("INSERT INTO blog (member_id, title, content) VALUES (?, ?, ?)",(mid, title, content))
35
+        db.commit()
36
+
37
+        return redirect(url_for('blog.blog'))
38
+        
39
+    
40
+    return render_template('blog/new.html', members=members)
41
+

+ 9
- 1
myriad/home.py Ver arquivo

@@ -41,4 +41,12 @@ def full_list():
41 41
             else:
42 42
                 icons[member[0]] = None
43 43
 
44
-    return render_template('full.html', memberlist=members, icons=icons)
44
+    return render_template('full.html', memberlist=members, icons=icons)
45
+
46
+@bp.route('/member/<mid>')
47
+def page(mid):
48
+    db = get_db()
49
+    member = db.execute("SELECT * FROM member WHERE id=(?)",(mid,)).fetchone()
50
+    blog = db.execute("SELECT * FROM blog WHERE member_id=(?) ORDER BY created DESC",(mid,)).fetchall()
51
+
52
+    return render_template('page.html', member=member, blog=blog)

+ 5
- 3
myriad/schema.sql Ver arquivo

@@ -3,7 +3,7 @@ DROP TABLE IF EXISTS member;
3 3
 DROP TABLE IF EXISTS icons;
4 4
 DROP TABLE IF EXISTS groups;
5 5
 DROP TABLE IF EXISTS group_members;
6
-DROP TABLE IF EXISTS pages;
6
+DROP TABLE IF EXISTS blog;
7 7
 
8 8
 CREATE TABLE user (
9 9
   id INTEGER PRIMARY KEY AUTOINCREMENT,
@@ -60,9 +60,11 @@ CREATE TABLE group_members (
60 60
   FOREIGN KEY (member_id) REFERENCES member (id)
61 61
 );
62 62
 
63
-CREATE TABLE pages (
63
+CREATE TABLE blog (
64 64
   id INTEGER PRIMARY KEY AUTOINCREMENT,
65 65
   member_id INTEGER NOT NULL,
66
-  page_location TEXT NOT NULL,
66
+  created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
67
+  title TEXT,
68
+  content TEXT,
67 69
   FOREIGN KEY (member_id) REFERENCES member (id)
68 70
 );

+ 5
- 0
myriad/templates/base.html Ver arquivo

@@ -14,8 +14,13 @@
14 14
     {% if g.user %}
15 15
     <div class="heading">Manage</div>
16 16
     <div class="navitem">> <a href="{{ url_for('manage.new') }}">Add New Member</a></div>
17
+    <div class="navitem">> <a href="">Site Assets</a></div>
17 18
     {% endif %}
18 19
 
20
+    <div class="heading">Blog</div>
21
+    {% if g.user %}<div class="navitem">> <a href="{{ url_for('blog.new') }}">New Post</a></div>{% endif %}
22
+    <div class="navitem">> <a href="{{ url_for('blog.blog') }}">View All Posts</a></div>
23
+
19 24
     <div class="heading">Administration</div>
20 25
     {% if g.user %}
21 26
       <div class="navitem">> <a href="{{ url_for('auth.logout') }}">Log out</a></div>

+ 19
- 0
myriad/templates/blog/blog.html Ver arquivo

@@ -0,0 +1,19 @@
1
+{% extends 'base.html' %}
2
+
3
+{% block header %}
4
+  <div class="title">{% block title %}System Blog{% endblock %}</div>
5
+{% endblock %}
6
+
7
+{% block content %}
8
+  
9
+  {% for post in blog %}
10
+    <div class="post">
11
+        <div class="title">{{post[3]}}</div>
12
+        <div class="timestamp">{{post[2]}} - <a href="{{ url_for('home.page', mid=post[1]) }}">{{member_ids[post[1]]}}</a></div>
13
+        <div class="content">
14
+            {{post[4]}}
15
+        </div>
16
+    </div>
17
+  {% endfor %}
18
+
19
+{% endblock %}

+ 24
- 0
myriad/templates/blog/new.html Ver arquivo

@@ -0,0 +1,24 @@
1
+{% extends 'base.html' %}
2
+
3
+{% block header %}
4
+  <div class="title">{% block title %}New Blog Post{% endblock %}</div>
5
+{% endblock %}
6
+
7
+{% block content %}
8
+  <form method="post">
9
+    <label for="title">Title</label>
10
+    <input name="title" id="title"><br>
11
+    <label for="content">Content</label>
12
+    <textarea name="content" id="content"></textarea><br>
13
+    <label for="mid">Choose a member:</label>
14
+    <select name="mid" id="mid">
15
+      {% for member in members %}
16
+      <option value="{{member[0]}}">{{member[1]}}</option>
17
+      {% endfor %}
18
+    </select> 
19
+    <input type="submit" value="Submit">
20
+  </form>
21
+
22
+  {{ error }}
23
+
24
+{% endblock %}

+ 1
- 1
myriad/templates/full.html Ver arquivo

@@ -63,7 +63,7 @@
63 63
             {{ member[5]|safe }} 
64 64
         </div>
65 65
         <br class="clear" />
66
-        {% 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 %} &#9734 <a href="{{ url_for('manage.edit', mid=member[0]) }}">Edit</a> &#9734 {% 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 %}
66
+        <div class="heading links"><a href="{{ url_for('home.page', mid=member[0]) }}">View Page</a>{% if g.user %} &#9734 {% 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 %} &#9734 <a href="{{ url_for('manage.edit', mid=member[0]) }}">Edit</a> &#9734 {% 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>
67 67
         <!-- <img src="/geo/dsgame.webp" class="dsgame"> -->
68 68
         <br class="clear" />
69 69
     </div>

+ 5
- 2
myriad/templates/index.html Ver arquivo

@@ -2,9 +2,12 @@
2 2
 {% block title %}Welcome{% endblock %}
3 3
 
4 4
 {% block content %}
5
+
6
+  {% if front_list|length > 0 %}
5 7
   <div id="frontbanner" class="heading">
6
-    <b>currently fronting: </b> {% for member in front_list %} {{ member[3] }} {% if front_list.index(member) != front_list|length -1 %}&{% endif %} {% endfor %}
8
+    <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 %}
7 9
   </div>
10
+  {% endif %}
8 11
 
9 12
   {% for member in home_pins %}
10 13
 
@@ -57,7 +60,7 @@
57 60
             {{ member[5]|safe }} 
58 61
         </div>
59 62
         <br class="clear" />
60
-        {% 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 %} &#9734 <a href="{{ url_for('manage.edit', mid=member[0]) }}">Edit</a> &#9734 {% 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 %}
63
+        <div class="heading links"><a href="{{ url_for('home.page', mid=member[0]) }}">View Page</a>{% if g.user %} &#9734 {% 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 %} &#9734 <a href="{{ url_for('manage.edit', mid=member[0]) }}">Edit</a> &#9734 {% 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>
61 64
         <!-- <img src="/geo/dsgame.webp" class="dsgame"> -->
62 65
         <br class="clear" />
63 66
     </div>

+ 21
- 0
myriad/templates/page.html Ver arquivo

@@ -0,0 +1,21 @@
1
+{% extends 'base.html' %}
2
+{% block title %}{{ member[3] }}{% endblock %}
3
+
4
+{% block content %}
5
+
6
+    <div class="heading big">{{member[3]}}'s blog</div>
7
+        <div id="blog">
8
+
9
+            {% for post in blog %}
10
+            <div class="post">
11
+                <div class="title">{{post[3]}}</div>
12
+                <div class="timestamp">{{post[2]}}</div>
13
+                <div class="content">
14
+                    {{post[4]}}
15
+                </div>
16
+            </div>
17
+            {% endfor %}
18
+
19
+        </div>
20
+
21
+{% endblock %}