feat(settings): agregar opcion global para habilitar o deshabilitar saludo y selector de rol en dashboard

This commit is contained in:
2026-09-23 20:18:43 -03:00
parent 63511b9311
commit a188c3bd8f
7 changed files with 154 additions and 3 deletions
+47 -1
View File
@@ -1832,13 +1832,18 @@ def get_all_settings():
'sync_interval_minutes': int(SystemSetting.get_value('moodle_sync_interval_minutes', 15))
}
ui_config = {
'show_role_banner': SystemSetting.get_value('dashboard_role_banner_enabled', 'true') in ['true', 'True', '1', True]
}
return jsonify({
'status': 'success',
'settings': {
'smtp': smtp_config,
'auth_providers': auth_providers,
'google_oauth': google_oauth,
'moodle': moodle_config
'moodle': moodle_config,
'ui': ui_config
}
}), 200
@@ -2021,6 +2026,47 @@ def update_auth_providers():
}), 200
@api_admin_bp.route('/settings/ui', methods=['POST'])
@jwt_required
def update_ui_settings():
"""Habilita o deshabilita elementos de interfaz de usuario, como el banner de saludo institucional y selector de roles."""
from app.models.setting import SystemSetting
from app.models.audit_log import AuditLog
acting_user = getattr(g, 'jwt_user', None)
if not (acting_user and (acting_user.is_admin() or getattr(acting_user, 'role', '').upper() == 'ADMIN')):
return jsonify({'error': 'Forbidden', 'message': 'Solo administradores pueden modificar las preferencias de interfaz.'}), 403
data = request.get_json(silent=True) or request.form.to_dict() or {}
show_banner_input = data.get('show_role_banner')
if show_banner_input is None:
show_banner_input = data.get('dashboard_role_banner_enabled')
show_val = 'true' if show_banner_input in [True, 'true', '1', 'on', 1] else 'false'
SystemSetting.set_value('dashboard_role_banner_enabled', show_val, 'Mostrar banner de saludo y selector de rol en Dashboard', category='ui')
try:
audit = AuditLog(
user_id=acting_user.id,
user_email=acting_user.email,
action='UPDATE_UI_SETTINGS',
module='settings',
details=f"Preferencia de interfaz actualizada: banner_saludo_rol={show_val}"
)
db.session.add(audit)
db.session.commit()
except Exception:
pass
return jsonify({
'status': 'success',
'message': 'Preferencia de interfaz guardada correctamente.',
'ui': {
'show_role_banner': show_val == 'true'
}
}), 200
@api_admin_bp.route('/settings/demo-mode', methods=['GET', 'POST'])
@jwt_required
def toggle_demo_mode_api():