117 lines
4.7 KiB
Python
117 lines
4.7 KiB
Python
"""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'))
|