Files
Pivot/blueprints/gedeelde_drives_bp.py
T
2026-10-14 12:29:29 +02:00

117 lines
4.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""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'))