from flask import Blueprint, render_template, request from flask_login import login_required from jinja2_fragments import render_block from extensions import db from flask import current_app settings_bp = Blueprint('settings', __name__) @settings_bp.route("/settings") @login_required def settings(): # Detect HTMX via header since we don't have the global htmx object here is_htmx = request.headers.get('HX-Request') == 'true' if is_htmx: return render_block(current_app.jinja_env, 'settings.html', 'content') return render_template('settings.html') @settings_bp.route("/settings/tab/people") @login_required def settings_people(): people = db.get_people() return render_template('partials/settings/people.html', people=people) @settings_bp.route("/settings/tab/exercises") @login_required def settings_exercises(): exercises = db.get_all_exercises() all_attributes = db.exercises.get_attributes_by_category() categories_list = db.exercises.get_all_attribute_categories() # Format options for custom_select formatted_options = {} for cat, attrs in all_attributes.items(): formatted_options[cat] = [{"id": a['attribute_id'], "attribute_id": a['attribute_id'], "name": a['name'], "category_id": a['category_id']} for a in attrs] return render_template('partials/settings/exercises.html', exercises=exercises, all_attributes=formatted_options, categories_list=categories_list) @settings_bp.route("/settings/tab/export") @login_required def settings_export(): return render_template('partials/settings/export.html') @settings_bp.route("/settings/tab/activity") @login_required def settings_activity(): return render_template('partials/settings/activity.html') @settings_bp.route("/settings/activity_logs") @login_required def settings_activity_logs(): limit = 50 offset = request.args.get('offset', 0, type=int) logs = db.activityRequest.get_recent_logs(limit=limit, offset=offset) # Check if there are more logs to load has_more = len(logs) == limit return render_template('partials/activity_logs.html', logs=logs, offset=offset, has_more=has_more)