From aac2b60517cf94456f1346727e50fb9faef106d1 Mon Sep 17 00:00:00 2001 From: jessikitty Date: Fri, 25 Sep 2026 00:48:03 +1000 Subject: [PATCH] Implement site settings backend and bulk visibility apply --- app/routes/admin.py | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/app/routes/admin.py b/app/routes/admin.py index 8c26dd8..64ee799 100644 --- a/app/routes/admin.py +++ b/app/routes/admin.py @@ -5,6 +5,7 @@ from app import db from app.models.user import User from app.models.set import Set from app.models.instruction import Instruction +from app.models.site_setting import SiteSetting, VISIBILITIES from sqlalchemy import func from datetime import datetime, timedelta @@ -218,8 +219,33 @@ def delete_set(set_id): def site_settings(): """Site-wide settings configuration.""" if request.method == 'POST': - # This is a placeholder for future site settings - # You could store settings in a database table or config file + action = request.form.get('action', 'save') + + if action == 'apply_visibility': + # Bulk-apply one visibility to every existing set. Handy right + # after an upgrade, when old sets are all still public. + target = request.form.get('bulk_visibility', '') + if target not in VISIBILITIES: + flash('Unknown visibility setting.', 'danger') + return redirect(url_for('admin.site_settings')) + changed = Set.query.update({Set.visibility: target}, + synchronize_session=False) + db.session.commit() + flash(f'Set {changed} existing set(s) to {target}.', 'success') + return redirect(url_for('admin.site_settings')) + + SiteSetting.set('allow_registration', + request.form.get('allow_registration') == 'on') + SiteSetting.set('home_redirect_dashboard', + request.form.get('home_redirect_dashboard') == 'on') + + default_visibility = request.form.get('default_visibility', 'private') + if default_visibility not in VISIBILITIES: + default_visibility = 'private' + SiteSetting.set('default_visibility', default_visibility) + + db.session.commit() + SiteSetting.clear_cache() flash('Settings updated successfully', 'success') return redirect(url_for('admin.site_settings')) @@ -231,7 +257,16 @@ def site_settings(): 'total_storage': db.session.query(func.sum(Instruction.file_size)).scalar() or 0 } - return render_template('admin/settings.html', stats=stats) + visibility_counts = dict( + db.session.query(Set.visibility, func.count(Set.id)) + .group_by(Set.visibility).all() + ) + + return render_template('admin/settings.html', + stats=stats, + settings=SiteSetting.all_settings(), + visibilities=VISIBILITIES, + visibility_counts=visibility_counts) @admin_bp.route('/api/stats') @@ -332,6 +367,7 @@ def bulk_import(): year_released=set_data.get('year', datetime.now().year), piece_count=set_data.get('pieces', 0), image_url=set_data.get('image', {}).get('imageURL'), + visibility=SiteSetting.get('default_visibility', 'private'), user_id=user_id, is_moc=False )