from datetime import datetime from flask import Blueprint, render_template, request, redirect, url_for, flash, session from database import central_query from blueprints.auth import login_required from rechten import recht_vereist bugreport_bp = Blueprint('bugreport', __name__) @bugreport_bp.route('/', methods=['GET']) @login_required def bugreport(): """Toont het bugreport formulier.""" if 'security_group' not in session: flash('Je moet eerst inloggen om een bug te rapporteren.', 'error') return redirect(url_for('auth.login')) return render_template('bugreport.html') @bugreport_bp.route('/submit', methods=['POST']) @login_required def bugreport_submit(): """Verwerkt het ingezonden bugreport en slaat het op in de database.""" # Gegevens ophalen uit het HTML formulier tijdstip_str = request.form.get('tijdstip') omschrijving = request.form.get('omschrijving') foutcode = request.form.get('foutcode') # Kan leeg zijn (None of lege string) # Automatische gegevens gebruiker_id = session["user"] # Of session.get('email'), afhankelijk van je login-systeem status = 'Nieuw' # Validatie (html5 required is een back-up, server-side validatie is veiliger) if not tijdstip_str or not omschrijving: flash('Tijdstip en omschrijving zijn verplichte velden!', 'error') return redirect(url_for('bugreport.bugreport_page')) try: # Converteren van datetime-local string (YYYY-MM-DDTHH:MM) naar MySQL formaat tijdstip = datetime.strptime(tijdstip_str, '%Y-%m-%dT%H:%M') except ValueError: flash('Ongeldig datum- of tijdformaat ontvangen.', 'error') return redirect(url_for('bugreport.bugreport_page')) # SQL query om de bug op te slaan # Pas de tabelnaam ('bugs') en kolomnamen aan naar jouw exacte database-schema # Centrale database: Bugs (Bugstatus_ID 1 = Nieuw) from tenancy import huidige_school school = huidige_school(verplicht=False) query = """ INSERT INTO Bugs (Timestamp, Omschrijving, Foutcode, Bugstatus_ID, Gebruiker_ID, Gebruikersnaam, School_ID) VALUES (%s, %s, %s, 1, %s, %s, %s) """ params = (tijdstip, omschrijving, foutcode or None, session.get('gebruiker_id'), gebruiker_id, school.id if school else None) try: # Voer de query uit met commit=True om de data op te slaan central_query(query, params, commit=True) # Succesmelding sturen en doorverwijzen naar het dashboard flash('Je bugreport is succesvol ingediend! Bedankt voor je feedback.', 'success') return redirect(url_for('main.dashboard')) except Exception as e: # Log de fout eventueel in de console voor debugging print(f"Database error tijdens bugreport: {e}") # Foutmelding tonen aan de gebruiker flash('Er ging iets mis bij het opslaan in de database. Probeer het later opnieuw.', 'error') return redirect(url_for('bugreport.bugreport_page'))