Browse Source

Started working on #21. Still in early stages

sh4nks 11 years ago
parent
commit
491f24f303

+ 27 - 0
flaskbb/admin/models.py

@@ -0,0 +1,27 @@
+from flask import current_app
+from flaskbb.extensions import db
+
+
+class Settings(db.Model):
+    __tablename__ = "settings"
+
+    id = db.Column(db.Integer, primary_key=True)
+    key = db.Column(db.String, unique=True)
+    value = db.Column(db.String)
+
+    def save(self):
+        db.session.add(self)
+        db.session.commit()
+
+    @classmethod
+    def update(cls):
+        current_app.config.update(cls.get_all())
+
+    @classmethod
+    def get_all(cls):
+        settings = {}
+        all_settings = cls.query.all()
+        for setting in all_settings:
+            settings[setting.key.upper()] = setting.value
+
+        return settings

+ 6 - 0
flaskbb/admin/views.py

@@ -47,6 +47,12 @@ def overview():
                            post_count=post_count)
 
 
+@admin.route("/settings")
+@admin_required
+def settings():
+    return render_template("admin/settings.html")
+
+
 @admin.route("/users", methods=['GET', 'POST'])
 @admin_required
 def users():

+ 2 - 2
flaskbb/plugins/portal/templates/index.html

@@ -85,7 +85,8 @@
           <div class="panel-heading">
             <h3 class="panel-title">News</h3>
           </div>
-          <div class="panel-body">
+          <div class="panel-body" style="padding-top: 0px">
+
           {% for topic in news %}
             <h1><a href="{{ topic.url }}">{{ topic.title }}</a></h1>
             <ul class="portal-info">
@@ -96,7 +97,6 @@
             <div class="portal-content">
                 {{ topic.first_post.content | markup | safe }}<br />
             </div>
-
             {% if not loop.last %}<hr>{% endif %}
           {% endfor %}
 

+ 10 - 4
flaskbb/plugins/portal/views.py

@@ -1,12 +1,11 @@
-from flask import Blueprint, current_app
+# -*- coding: utf-8 -*-
+from flask import Blueprint, current_app, flash
 from flaskbb.utils.helpers import render_template
 from flaskbb.forum.models import Topic, Post
 from flaskbb.user.models import User
 from flaskbb.utils.helpers import time_diff, get_online_users
 
 
-FORUM_IDS = [1, 2]
-
 portal = Blueprint("portal", __name__, template_folder="templates")
 
 
@@ -16,7 +15,14 @@ def inject_portal_link():
 
 @portal.route("/")
 def index():
-    news = Topic.query.filter(Topic.forum_id.in_(FORUM_IDS)).all()
+    try:
+        forum_ids = current_app.config["PLUGIN_PORTAL_FORUM_IDS"]
+    except KeyError:
+        forum_ids = [1]
+        flash("Please install the plugin first to configure the forums "
+              "which should be displayed", "warning")
+
+    news = Topic.query.filter(Topic.forum_id.in_(forum_ids)).all()
     recent_topics = Topic.query.order_by(Topic.date_created).limit(5).offset(0)
 
     user_count = User.query.count()

+ 1 - 0
flaskbb/templates/admin/admin_layout.html

@@ -8,6 +8,7 @@
             <ul class="nav sidenav">
                 <li class="nav-header">Options</li>
                 {{ navlink('admin.overview', 'Overview') }}
+                {{ navlink('admin.settings', 'Settings') }}
                 {{ navlink('admin.users', 'Users') }}
                 {{ navlink('admin.groups', 'Groups') }}
                 {{ navlink('admin.forums', 'Forums') }}

+ 7 - 0
flaskbb/templates/admin/settings.html

@@ -0,0 +1,7 @@
+{% extends theme("admin/admin_layout.html") %}
+{% block admin_content %}
+{% from theme('macros.html') import render_pagination %}
+
+<legend>Settings</legend>
+
+{% endblock %}

+ 20 - 1
flaskbb/utils/populate.py

@@ -11,10 +11,10 @@
 from datetime import datetime
 from collections import OrderedDict
 
+from flaskbb.admin.models import Settings
 from flaskbb.user.models import User, Group
 from flaskbb.forum.models import Post, Topic, Forum, Category
 
-
 GROUPS = OrderedDict((
     ('Administrator', {
         'description': 'The Administrator Group',
@@ -115,6 +115,25 @@ GROUPS = OrderedDict((
 ))
 
 
+DEFAULT_SETTINGS = {
+    "project_title": "FlaskBB",
+    "project_subtitle": "A lightweight forum software in flask",
+    "default_theme": "bootstrap4",
+    "tracker_length": 7,
+    "title_length": 15,
+    "online_last_minutes": 15,
+    "users_per_page": 10,
+    "topics_per_page": 10,
+    "posts_per_page": 10
+}
+
+
+def create_default_settings():
+    for key, value in DEFAULT_SETTINGS.items():
+            setting = Settings(key=key, value=value)
+            setting.save()
+
+
 def create_default_groups():
     """
     This will create the 5 default groups

+ 3 - 1
manage.py

@@ -21,7 +21,8 @@ from flask.ext.migrate import MigrateCommand
 from flaskbb import create_app
 from flaskbb.extensions import db
 from flaskbb.utils.populate import (create_test_data, create_welcome_forum,
-                                    create_admin_user, create_default_groups)
+                                    create_admin_user, create_default_groups,
+                                    create_default_settings)
 
 # Use the development configuration if available
 try:
@@ -76,6 +77,7 @@ def createall(dropdb=False, createdb=False):
 
     app.logger.info("Creating test data...")
     create_test_data()
+    create_default_settings()
 
 
 @manager.option('-u', '--username', dest='username')