125 lines
4.8 KiB
Python
125 lines
4.8 KiB
Python
"""Google › Verzendlijsten: Google Groepen van de school bekijken, aanmaken en aanpassen (leden en rollen)."""
|
||
from flask import Blueprint, render_template, request, flash, redirect, url_for, session
|
||
|
||
from blueprints.auth import login_required
|
||
from rechten import recht_vereist, log
|
||
from services.verzendlijsten_service import (VerzendlijstenService, VerzendlijstFout, ROLLEN, WIE_MAILT, adressen)
|
||
from tenancy import huidige_school
|
||
|
||
verzendlijsten_bp = Blueprint('verzendlijsten', __name__)
|
||
|
||
|
||
@verzendlijsten_bp.route("/", methods=["GET"])
|
||
@login_required
|
||
@recht_vereist('verzendlijsten')
|
||
def overzicht():
|
||
lijsten, fout = [], None
|
||
try:
|
||
lijsten = VerzendlijstenService().alle()
|
||
except Exception as e:
|
||
fout = str(e)
|
||
return render_template("verzendlijsten.html", lijsten=lijsten, fout=fout,
|
||
domeinen=huidige_school().domeinen, wie_mailt=WIE_MAILT)
|
||
|
||
|
||
@verzendlijsten_bp.route("/nieuw", methods=["POST"])
|
||
@login_required
|
||
@recht_vereist('verzendlijsten')
|
||
def nieuw():
|
||
deel = (request.form.get('adres') or '').strip().lower()
|
||
domein = (request.form.get('domein') or '').strip().lower()
|
||
email = deel if '@' in deel else f"{deel}@{domein}"
|
||
svc = VerzendlijstenService()
|
||
try:
|
||
svc.aanmaken(email, request.form.get('naam'), request.form.get('beschrijving'))
|
||
except VerzendlijstFout as e:
|
||
flash(str(e), "error")
|
||
return redirect(url_for('verzendlijsten.overzicht'))
|
||
log(f"Verzendlijst aangemaakt: {email}")
|
||
melding = f"Verzendlijst {email} aangemaakt."
|
||
wie = request.form.get('wie_mailt')
|
||
if wie:
|
||
try:
|
||
svc.zet_wie_mailt(email, wie)
|
||
except VerzendlijstFout as e:
|
||
melding += f" 'Wie mag mailen' kon niet ingesteld worden: {e}"
|
||
flash(melding + " Google kan er een minuutje over doen voor ze overal zichtbaar is.", "success")
|
||
return redirect(url_for('verzendlijsten.detail', email=email))
|
||
|
||
|
||
@verzendlijsten_bp.route("/<email>", methods=["GET"])
|
||
@login_required
|
||
@recht_vereist('verzendlijsten')
|
||
def detail(email):
|
||
svc = VerzendlijstenService()
|
||
try:
|
||
groep = svc.groep(email)
|
||
leden = svc.leden(email)
|
||
except VerzendlijstFout as e:
|
||
flash(str(e), "error")
|
||
return redirect(url_for('verzendlijsten.overzicht'))
|
||
return render_template("verzendlijst.html", groep=groep, leden=leden, rollen=ROLLEN,
|
||
wie_mailt=WIE_MAILT, huidig_wie=svc.wie_mailt(email))
|
||
|
||
|
||
@verzendlijsten_bp.route("/<email>/bewerken", methods=["POST"])
|
||
@login_required
|
||
@recht_vereist('verzendlijsten')
|
||
def bewerken(email):
|
||
svc = VerzendlijstenService()
|
||
try:
|
||
svc.bijwerken(email, request.form.get('naam'), request.form.get('beschrijving'))
|
||
if request.form.get('wie_mailt'):
|
||
svc.zet_wie_mailt(email, request.form.get('wie_mailt'))
|
||
log(f"Verzendlijst aangepast: {email}")
|
||
flash("Verzendlijst bijgewerkt.", "success")
|
||
except VerzendlijstFout as e:
|
||
flash(str(e), "error")
|
||
return redirect(url_for('verzendlijsten.detail', email=email))
|
||
|
||
|
||
@verzendlijsten_bp.route("/<email>/leden/toevoegen", methods=["POST"])
|
||
@login_required
|
||
@recht_vereist('verzendlijsten')
|
||
def leden_toevoegen(email):
|
||
goed, ongeldig = adressen(request.form.get('adressen'))
|
||
if ongeldig:
|
||
flash("Geen geldig e-mailadres, overgeslagen: " + ", ".join(ongeldig), "warning")
|
||
if goed:
|
||
gelukt, fouten = VerzendlijstenService().leden_toevoegen(email, goed, request.form.get('rol') or 'MEMBER')
|
||
if gelukt:
|
||
log(f"Verzendlijst {email}: {gelukt} lid/leden toegevoegd")
|
||
flash(f"{gelukt} lid/leden toegevoegd.", "success")
|
||
for adres, fout in fouten:
|
||
flash(f"{adres}: {fout}", "error")
|
||
elif not ongeldig:
|
||
flash("Vul minstens één e-mailadres in.", "error")
|
||
return redirect(url_for('verzendlijsten.detail', email=email))
|
||
|
||
|
||
@verzendlijsten_bp.route("/<email>/leden/rol", methods=["POST"])
|
||
@login_required
|
||
@recht_vereist('verzendlijsten')
|
||
def lid_rol(email):
|
||
lid = request.form.get('lid') or ''
|
||
try:
|
||
VerzendlijstenService().lid_rol(email, lid, request.form.get('rol'))
|
||
flash(f"Rol van {lid} aangepast.", "success")
|
||
except VerzendlijstFout as e:
|
||
flash(str(e), "error")
|
||
return redirect(url_for('verzendlijsten.detail', email=email))
|
||
|
||
|
||
@verzendlijsten_bp.route("/<email>/leden/verwijderen", methods=["POST"])
|
||
@login_required
|
||
@recht_vereist('verzendlijsten')
|
||
def lid_verwijderen(email):
|
||
lid = request.form.get('lid') or ''
|
||
try:
|
||
VerzendlijstenService().lid_verwijderen(email, lid)
|
||
log(f"Verzendlijst {email}: {lid} verwijderd")
|
||
flash(f"{lid} uit de verzendlijst gehaald.", "success")
|
||
except VerzendlijstFout as e:
|
||
flash(str(e), "error")
|
||
return redirect(url_for('verzendlijsten.detail', email=email))
|