Skip to content

Commit c2d9cce

Browse files
feat: Update dashboard templates and routes for card settings
- Update card settings in dashboard templates to use the new `card_settings` variable - Update routes to use the `CardSettings` model instead of `DashboardSettings`
1 parent fc387a8 commit c2d9cce

27 files changed

Lines changed: 157 additions & 117 deletions

src/models.py

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class User(db.Model, UserMixin):
3232

3333
# Backref renamed to avoid conflict
3434
dashboard_settings = db.relationship('DashboardSettings', backref='user', uselist=False)
35+
card_settings = db.relationship('CardSettings', backref='user', uselist=False)
3536

3637
class DashboardSettings(db.Model):
3738
__tablename__ = 'dashboard_settings'
@@ -40,7 +41,14 @@ class DashboardSettings(db.Model):
4041
user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
4142

4243
speedtest_cooldown = db.Column(db.Integer, default=3600)
43-
number_of_speedtests = db.Column(db.Integer, default=3)
44+
number_of_speedtests = db.Column(db.Integer, default=1)
45+
46+
47+
class FeatureTogglesSettings(db.Model):
48+
__tablename__ = 'FeatureToggles'
49+
50+
id = db.Column(db.Integer, primary_key=True)
51+
user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
4452

4553
# Feature Toggles
4654
is_cpu_info_enabled = db.Column(db.Boolean, default=True)
@@ -49,6 +57,12 @@ class DashboardSettings(db.Model):
4957
is_network_info_enabled = db.Column(db.Boolean, default=True)
5058
is_process_info_enabled = db.Column(db.Boolean, default=True)
5159

60+
class CardSettings(db.Model):
61+
__tablename__ = 'CardSettings'
62+
63+
id = db.Column(db.Integer, primary_key=True)
64+
user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
65+
5266
# Card Toggles
5367
is_user_card_enabled = db.Column(db.Boolean, default=True)
5468
is_server_card_enabled = db.Column(db.Boolean, default=True)
@@ -122,17 +136,13 @@ class SmptEamilPasswordConfig(db.Model):
122136
print("Creating tables")
123137
db.create_all()
124138

125-
# Initialize default settings
126-
general_settings = GeneralSettings.query.first()
127-
if not general_settings:
128-
db.session.add(GeneralSettings())
129-
db.session.commit()
130-
131139
# initialize default dashboard settings for users
132140
users = User.query.all()
133141
for user in users:
134142
if not user.dashboard_settings:
135143
db.session.add(DashboardSettings(user_id=user.id))
144+
db.session.add(CardSettings(user_id=user.id))
145+
db.session.add(FeatureTogglesSettings(user_id=user.id))
136146
db.session.commit()
137147

138148
pre_defined_users_json = "src/assets/predefine_user.json"
@@ -147,12 +157,20 @@ class SmptEamilPasswordConfig(db.Model):
147157
db.session.add(user)
148158
db.session.commit()
149159

160+
# Initialize default settings
161+
general_settings = GeneralSettings.query.first()
162+
if not general_settings:
163+
db.session.add(GeneralSettings())
164+
db.session.commit()
165+
150166
# ibject for all templates
151167
@app.context_processor
152168
def inject_settings():
153169
if current_user.is_anonymous:
154-
return dict(settings=None)
155-
settings = DashboardSettings.query.filter_by(user_id=current_user.id).first() # Retrieve user-specific settings from DB
170+
return dict(settings=None, card_settings=None)
156171
general_settings = GeneralSettings.query.first()
157-
all_settings = dict(settings=settings, general_settings=general_settings)
172+
card_settings = CardSettings.query.filter_by(user_id=current_user.id).first()
173+
settings = DashboardSettings.query.filter_by(user_id=current_user.id).first() # Retrieve user-specific settings from DB
174+
feature_toggles_settings = FeatureTogglesSettings.query.filter_by(user_id=current_user.id).first()
175+
all_settings = dict(settings=settings, general_settings=general_settings, card_settings=card_settings, feature_toggles_settings=feature_toggles_settings)
158176
return all_settings

src/routes/auth.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
from src.scripts.email_me import send_smpt_email
77
from src.config import app, db
8-
from src.models import User, DashboardSettings
8+
from src.models import User, DashboardSettings, CardSettings, FeatureTogglesSettings
99
from src.utils import render_template_from_file
1010
from src.routes.helper import get_email_addresses
1111

@@ -111,6 +111,10 @@ def signup():
111111

112112
db.session.add(new_user)
113113
db.session.commit()
114+
db.session.add(DashboardSettings(user_id=new_user.id))
115+
db.session.add(CardSettings(user_id=new_user.id))
116+
db.session.add(FeatureTogglesSettings(user_id=new_user.id))
117+
db.session.commit()
114118
flash('Account created successfully, please log in.')
115119
return redirect(url_for('login'))
116120

src/routes/cpu_info.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@
55

66
from src.config import app
77
from src.utils import get_cpu_core_count, get_cpu_frequency, cpu_usage_percent, get_cpu_temp, get_cached_value
8-
from src.models import DashboardSettings
8+
from src.models import DashboardSettings, FeatureTogglesSettings
99

1010
cpu_info_bp = blueprints.Blueprint("cpu_usage", __name__)
1111

1212
@app.route("/cpu_usage")
1313
@login_required
1414
def cpu_usage():
15-
settings = DashboardSettings.query.first()
16-
if not settings.is_cpu_info_enabled:
15+
feature_toggles_settings = FeatureTogglesSettings.query.first()
16+
if not feature_toggles_settings.is_cpu_info_enabled:
1717
flash("You do not have permission to view this page.", "danger")
1818
return render_template("error/permission_denied.html")
1919

src/routes/dashbaord.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from flask_login import login_required, current_user
44

55
from src.config import app
6-
from src.models import SpeedTestResult, DashboardSettings, SystemInfo
6+
from src.models import SpeedTestResult, DashboardSettings, CardSettings
77
from src.utils import datetimeformat, get_system_info
88

99
dashboard_bp = blueprints.Blueprint("dashboard", __name__)

src/routes/disk_info.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44
from flask_login import login_required
55
from src.config import app
66
from src.utils import get_cached_value, get_disk_free, get_disk_total, get_disk_used, get_disk_usage_percent
7-
from src.models import DashboardSettings
7+
from src.models import DashboardSettings, FeatureTogglesSettings
88

99
disk_info_bp = blueprints.Blueprint("disk_usage", __name__)
1010

1111
@app.route("/disk_usage")
1212
@login_required
1313
def disk_usage():
14-
settings = DashboardSettings.query.first()
15-
if not settings.is_disk_info_enabled:
14+
feature_toggles_settings = FeatureTogglesSettings.query.first()
15+
if not feature_toggles_settings.is_disk_info_enabled:
1616
flash("You do not have permission to view this page.", "danger")
1717
return render_template("error/permission_denied.html")
1818
disk_total = get_cached_value("disk_total", get_disk_total)

src/routes/memory_info.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@
44

55
from src.config import app
66
from src.utils import get_cached_value, get_memory_percent, get_memory_available, get_memory_used, get_swap_memory_info
7-
from src.models import DashboardSettings
7+
from src.models import DashboardSettings, FeatureTogglesSettings
88

99
memory_info_bp = blueprints.Blueprint("memory_usage", __name__)
1010

1111

1212
@app.route("/memory_usage")
1313
@login_required
1414
def memory_usage():
15-
settings = DashboardSettings.query.first()
16-
if not settings.is_memory_info_enabled:
15+
feature_toggles_settings = FeatureTogglesSettings.query.first()
16+
if not feature_toggles_settings.is_memory_info_enabled:
1717
flash("You do not have permission to view this page.", "danger")
1818
return render_template("error/permission_denied.html")
1919
memory_available = get_cached_value("memory_available", get_memory_available)

src/routes/network_info.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
from flask_login import login_required
44
from src.config import app
55
from src.utils import get_established_connections
6-
from src.models import DashboardSettings
6+
from src.models import DashboardSettings, FeatureTogglesSettings
77

88
network_info_bp = blueprints.Blueprint("network_stats", __name__)
99

1010
@app.route("/network_stats")
1111
@login_required
1212
def network_stats():
13-
settings = DashboardSettings.query.first()
14-
if not settings.is_network_info_enabled:
13+
feature_toggles_settings = FeatureTogglesSettings.query.first()
14+
if not feature_toggles_settings.is_network_info_enabled:
1515
flash("You do not have permission to view this page.", "danger")
1616
return render_template("error/permission_denied.html")
1717
net_io = psutil.net_io_counters()

src/routes/process.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@
33
from flask_login import login_required, current_user
44
from src.config import app
55
from src.utils import get_top_processes, render_template_from_file
6-
from src.models import DashboardSettings
6+
from src.models import DashboardSettings, FeatureTogglesSettings
77
from src.scripts.email_me import send_smpt_email
88

99
process_bp = blueprints.Blueprint("process", __name__)
1010

1111
@app.route("/process", methods=["GET", "POST"])
1212
@login_required
1313
def process():
14-
settings = DashboardSettings.query.first()
15-
if not settings.is_process_info_enabled:
14+
feature_toggles_settings = FeatureTogglesSettings.query.first()
15+
if not feature_toggles_settings.is_process_info_enabled:
1616
flash("You do not have permission to view this page.", "danger")
1717
return render_template("error/permission_denied.html")
1818
if current_user.user_level != "admin":

src/routes/settings.py

Lines changed: 47 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import datetime
22
from flask import render_template, request, flash, blueprints, redirect, url_for
33
from src.config import app, db
4-
from src.models import DashboardSettings, User, GeneralSettings
4+
from src.models import DashboardSettings, User, GeneralSettings, CardSettings
55
from flask_login import login_required, current_user
66
from src.utils import render_template_from_file
77
from src.scripts.email_me import send_smpt_email
@@ -62,24 +62,24 @@ def feature_toggles():
6262
@app.route('/settings/card-toggles', methods=['GET', 'POST'])
6363
@login_required
6464
def card_toggles():
65-
settings = DashboardSettings.query.filter_by(user_id=current_user.id).first() # Retrieve user-specific settings from DB
65+
card_settings = CardSettings.query.filter_by(user_id=current_user.id).first() # Retrieve user-specific settings from DB
6666
if request.method == 'POST':
67-
settings.is_user_card_enabled = 'is_user_card_enabled' in request.form
68-
settings.is_server_card_enabled = 'is_server_card_enabled' in request.form
69-
settings.is_battery_card_enabled = 'is_battery_card_enabled' in request.form
70-
settings.is_cpu_core_card_enabled = 'is_cpu_core_card_enabled' in request.form
71-
settings.is_cpu_usage_card_enabled = 'is_cpu_usage_card_enabled' in request.form
72-
settings.is_cpu_temp_card_enabled = 'is_cpu_temp_card_enabled' in request.form
73-
settings.is_dashboard_memory_card_enabled = 'is_dashboard_memory_card_enabled' in request.form
74-
settings.is_memory_usage_card_enabled = 'is_memory_usage_card_enabled' in request.form
75-
settings.is_disk_usage_card_enabled = 'is_disk_usage_card_enabled' in request.form
76-
settings.is_system_uptime_card_enabled = 'is_system_uptime_card_enabled' in request.form
77-
settings.is_network_statistic_card_enabled = 'is_network_statistic_card_enabled' in request.form
78-
settings.is_speedtest_enabled = 'is_speedtest_enabled' in request.form
67+
card_settings.is_user_card_enabled = 'is_user_card_enabled' in request.form
68+
card_settings.is_server_card_enabled = 'is_server_card_enabled' in request.form
69+
card_settings.is_battery_card_enabled = 'is_battery_card_enabled' in request.form
70+
card_settings.is_cpu_core_card_enabled = 'is_cpu_core_card_enabled' in request.form
71+
card_settings.is_cpu_usage_card_enabled = 'is_cpu_usage_card_enabled' in request.form
72+
card_settings.is_cpu_temp_card_enabled = 'is_cpu_temp_card_enabled' in request.form
73+
card_settings.is_dashboard_memory_card_enabled = 'is_dashboard_memory_card_enabled' in request.form
74+
card_settings.is_memory_usage_card_enabled = 'is_memory_usage_card_enabled' in request.form
75+
card_settings.is_disk_usage_card_enabled = 'is_disk_usage_card_enabled' in request.form
76+
card_settings.is_system_uptime_card_enabled = 'is_system_uptime_card_enabled' in request.form
77+
card_settings.is_network_statistic_card_enabled = 'is_network_statistic_card_enabled' in request.form
78+
card_settings.is_speedtest_enabled = 'is_speedtest_enabled' in request.form
7979
db.session.commit()
8080
flash('Card toggles updated successfully!', 'success')
8181
return redirect(url_for('card_toggles'))
82-
return render_template('card_toggles.html', settings=settings)
82+
return render_template('card_toggles.html', card_settings=card_settings)
8383

8484
@app.route("/settings", methods=["GET", "POST"])
8585
@login_required
@@ -90,40 +90,40 @@ def settings():
9090
flash("Please contact your administrator for more information.", "danger")
9191
return render_template("error/permission_denied.html")
9292

93-
# Fetch the settings from the database
94-
settings = DashboardSettings.query.filter_by(user_id=current_user.id).first()
93+
# # Fetch the settings from the database
94+
# settings = DashboardSettings.query.filter_by(user_id=current_user.id).first()
9595

96-
if settings:
97-
if request.method == "POST":
98-
# Update settings only if the form field is provided, otherwise keep the current value
99-
if "speedtest_cooldown" in request.form:
100-
settings.speedtest_cooldown = int(request.form["speedtest_cooldown"])
101-
if "number_of_speedtests" in request.form:
102-
settings.number_of_speedtests = int(request.form["number_of_speedtests"])
96+
# if settings:
97+
# if request.method == "POST":
98+
# # Update settings only if the form field is provided, otherwise keep the current value
99+
# if "speedtest_cooldown" in request.form:
100+
# settings.speedtest_cooldown = int(request.form["speedtest_cooldown"])
101+
# if "number_of_speedtests" in request.form:
102+
# settings.number_of_speedtests = int(request.form["number_of_speedtests"])
103103

104-
# Feature settings
105-
settings.is_cpu_info_enabled = "is_cpu_info_enabled" in request.form
106-
settings.is_memory_info_enabled = "is_memory_info_enabled" in request.form
107-
settings.is_disk_info_enabled = "is_disk_info_enabled" in request.form
108-
settings.is_network_info_enabled = "is_network_info_enabled" in request.form
109-
settings.is_process_info_enabled = "is_process_info_enabled" in request.form
104+
# # Feature settings
105+
# settings.is_cpu_info_enabled = "is_cpu_info_enabled" in request.form
106+
# settings.is_memory_info_enabled = "is_memory_info_enabled" in request.form
107+
# settings.is_disk_info_enabled = "is_disk_info_enabled" in request.form
108+
# settings.is_network_info_enabled = "is_network_info_enabled" in request.form
109+
# settings.is_process_info_enabled = "is_process_info_enabled" in request.form
110110

111-
# Card settings
112-
settings.is_user_card_enabled = "is_user_card_enabled" in request.form
113-
settings.is_server_card_enabled = "is_server_card_enabled" in request.form
114-
settings.is_battery_card_enabled = "is_battery_card_enabled" in request.form
115-
settings.is_cpu_core_card_enabled = "is_cpu_core_card_enabled" in request.form
116-
settings.is_cpu_usage_card_enabled = "is_cpu_usage_card_enabled" in request.form
117-
settings.is_cpu_temp_card_enabled = "is_cpu_temp_card_enabled" in request.form
118-
settings.is_dashboard_memory_card_enabled = "is_dashboard_memory_card_enabled" in request.form
119-
settings.is_memory_usage_card_enabled = "is_memory_usage_card_enabled" in request.form
120-
settings.is_disk_usage_card_enabled = "is_disk_usage_card_enabled" in request.form
121-
settings.is_system_uptime_card_enabled = "is_system_uptime_card_enabled" in request.form
122-
settings.is_network_statistic_card_enabled = "is_network_statistic_card_enabled" in request.form
123-
settings.is_speedtest_enabled = "is_speedtest_enabled" in request.form
111+
# # Card settings
112+
# settings.is_user_card_enabled = "is_user_card_enabled" in request.form
113+
# settings.is_server_card_enabled = "is_server_card_enabled" in request.form
114+
# settings.is_battery_card_enabled = "is_battery_card_enabled" in request.form
115+
# settings.is_cpu_core_card_enabled = "is_cpu_core_card_enabled" in request.form
116+
# settings.is_cpu_usage_card_enabled = "is_cpu_usage_card_enabled" in request.form
117+
# settings.is_cpu_temp_card_enabled = "is_cpu_temp_card_enabled" in request.form
118+
# settings.is_dashboard_memory_card_enabled = "is_dashboard_memory_card_enabled" in request.form
119+
# settings.is_memory_usage_card_enabled = "is_memory_usage_card_enabled" in request.form
120+
# settings.is_disk_usage_card_enabled = "is_disk_usage_card_enabled" in request.form
121+
# settings.is_system_uptime_card_enabled = "is_system_uptime_card_enabled" in request.form
122+
# settings.is_network_statistic_card_enabled = "is_network_statistic_card_enabled" in request.form
123+
# settings.is_speedtest_enabled = "is_speedtest_enabled" in request.form
124124

125-
# Commit the changes to the database
126-
db.session.commit()
127-
flash("Settings updated successfully!", "success")
125+
# # Commit the changes to the database
126+
# db.session.commit()
127+
# flash("Settings updated successfully!", "success")
128128

129-
return render_template("settings.html", settings=settings)
129+
return render_template("settings.html", settings=settings)

src/routes/user.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import datetime
22
from flask import render_template, redirect, url_for, request, blueprints, flash, blueprints
3-
from flask_login import LoginManager, login_required, current_user
3+
from flask_login import login_required, current_user
44
from werkzeug.security import generate_password_hash
55

66
from src.config import app, db
7-
from src.models import User
7+
from src.models import User, DashboardSettings, CardSettings, FeatureTogglesSettings
88
from src.utils import render_template_from_file
99
from src.scripts.email_me import send_smpt_email
1010
from src.routes.helper import get_email_addresses
@@ -37,6 +37,7 @@ def add_user():
3737
receive_email_alerts=receive_email_alerts
3838
)
3939

40+
# Send email alerts to admins
4041
admin_email_address = get_email_addresses(user_level='admin', receive_email_alerts=True)
4142
if admin_email_address:
4243
subject = "New User Alert"
@@ -50,22 +51,32 @@ def add_user():
5051
html_body = render_template_from_file("src/templates/email_templates/new_user_create.html", **context)
5152
send_smpt_email(admin_email_address, subject, html_body, is_html=True)
5253

54+
# Send welcome email to new user
5355
subject = "Welcome to the systemGuard"
5456
context = {
5557
"username": new_user.username,
5658
"email": new_user.email,
5759
}
5860
html_body = render_template_from_file("src/templates/email_templates/welcome.html", **context)
5961
send_smpt_email(email, subject, html_body, is_html=True)
60-
62+
63+
# Add and commit the new user to get the correct user ID
6164
db.session.add(new_user)
65+
db.session.commit() # Commit to generate the ID
66+
67+
print("new user", new_user.id) # Now the ID should be available
68+
69+
# Now you can use the new user's ID to create related settings
70+
db.session.add(DashboardSettings(user_id=new_user.id))
71+
db.session.add(CardSettings(user_id=new_user.id))
72+
db.session.add(FeatureTogglesSettings(user_id=new_user.id))
6273
db.session.commit()
74+
6375
flash('User created successfully!', 'success')
6476
return redirect(url_for('view_users'))
6577

6678
return render_template('add_user.html')
6779

68-
6980
@app.route('/users')
7081
@login_required
7182
def view_users():

0 commit comments

Comments
 (0)