"""Google › Gedeelde drives: overzicht, leden en rechten beheren.""" import time from flask import Blueprint, render_template, request, redirect, url_for, flash from blueprints.auth import login_required from rechten import recht_vereist, log from services import gedeelde_drives_service as gd gedeelde_drives_bp = Blueprint('gedeelde_drives', __name__) @gedeelde_drives_bp.route('/', methods=['GET']) @login_required @recht_vereist('gedeelde_drives') def overzicht(): drives, fout, opgehaald, gekozen, leden = [], None, None, None, [] did = request.args.get('drive') or '' vervang, lid, lid_van = None, (request.args.get('lid') or '').strip().lower(), None try: if lid: lid_van = gd.drives_van(lid) elif request.args.get('oud'): oud, nieuw = request.args.get('oud').strip().lower(), (request.args.get('nieuw') or '').strip().lower() vervang = {'oud': oud, 'nieuw': nieuw, 'drives': gd.drives_van(oud)} elif did: gekozen, leden = gd.drive(did) else: drives, t = gd.overzicht(vernieuw=bool(request.args.get('vernieuw'))) opgehaald = time.strftime('%d-%m-%Y %H:%M', time.localtime(t)) if request.args.get('vernieuw'): return redirect(url_for('gedeelde_drives.overzicht')) except gd.DriveFout as e: fout = str(e) except Exception as e: fout = gd.vriendelijk(e) return render_template('gedeelde_drives.html', drives=drives, fout=fout, opgehaald=opgehaald, gekozen=gekozen, leden=leden, rollen=gd.ROLLEN, vervang=vervang, resultaat=None, lid=lid, lid_van=lid_van) @gedeelde_drives_bp.route('/vervangen', methods=['POST']) @login_required @recht_vereist('gedeelde_drives') def vervangen(): oud, nieuw = request.form.get('oud'), request.form.get('nieuw') try: res = gd.vervang(oud, nieuw, request.form.getlist('drive'), request.form.get('verwijderen') == '1', request.form.get('melding') == '1') except gd.DriveFout as e: flash(str(e), "error") return redirect(url_for('gedeelde_drives.overzicht', oud=oud, nieuw=nieuw)) ok = sum(1 for r in res if r['ok']) log(f"Gedeelde drives: {oud} vervangen door {nieuw} op {ok} drive(s)") return render_template('gedeelde_drives.html', drives=[], fout=None, opgehaald=None, gekozen=None, leden=[], rollen=gd.ROLLEN, vervang={'oud': oud, 'nieuw': nieuw, 'drives': []}, resultaat=res, lid='', lid_van=None) def _terug(): return redirect(url_for('gedeelde_drives.overzicht', drive=request.form.get('drive'))) @gedeelde_drives_bp.route('/lid/toevoegen', methods=['POST']) @login_required @recht_vereist('gedeelde_drives') def lid_toevoegen(): did, email, rol = request.form.get('drive'), request.form.get('email'), request.form.get('rol') try: gd.lid_toevoegen(did, email, rol, request.form.get('melding') == '1') log(f"Gedeelde drive {request.form.get('naam')}: {email} toegevoegd als {gd.ROL_NAAM.get(rol)}") flash(f"{email} toegevoegd als {gd.ROL_NAAM.get(rol)}.", "success") except gd.DriveFout as e: flash(str(e), "error") return _terug() @gedeelde_drives_bp.route('/lid/wijzigen', methods=['POST']) @login_required @recht_vereist('gedeelde_drives') def lid_wijzigen(): rol = request.form.get('rol') try: gd.lid_wijzigen(request.form.get('drive'), request.form.get('perm'), rol) log(f"Gedeelde drive {request.form.get('naam')}: {request.form.get('email')} → {gd.ROL_NAAM.get(rol)}") flash(f"{request.form.get('email')} is nu {gd.ROL_NAAM.get(rol)}.", "success") except gd.DriveFout as e: flash(str(e), "error") return _terug() @gedeelde_drives_bp.route('/lid/verwijderen', methods=['POST']) @login_required @recht_vereist('gedeelde_drives') def lid_verwijderen(): try: gd.lid_verwijderen(request.form.get('drive'), request.form.get('perm')) log(f"Gedeelde drive {request.form.get('naam')}: {request.form.get('email')} verwijderd") flash(f"{request.form.get('email')} verwijderd uit de drive.", "success") except gd.DriveFout as e: flash(str(e), "error") return _terug() @gedeelde_drives_bp.route('/nieuw', methods=['POST']) @login_required @recht_vereist('gedeelde_drives') def nieuw(): naam = request.form.get('naam') try: did = gd.drive_maken(naam, (request.form.get('beheerder') or '').strip() or None) log(f"Gedeelde drive {naam} aangemaakt") flash(f"Gedeelde drive '{naam}' aangemaakt.", "success") return redirect(url_for('gedeelde_drives.overzicht', drive=did)) except gd.DriveFout as e: flash(str(e), "error") return redirect(url_for('gedeelde_drives.overzicht'))