Gebruikers: massa-actie actief/inactief maken of verwijderen (jezelf wordt overgeslagen) en een knop Verwijderen op het gebruikersformulier; contacten, taken en activiteiten blijven zonder eigenaar, agenda, meldingen en mailboxkoppelingen gaan mee
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
0368b7c1da
commit
5a97f992da
@@ -101,7 +101,7 @@ API_SKIP = {'api_key', 'redirect', '_gotcha', 'website_hp', 'g-recaptcha-respons
|
||||
PUBLIC = {'static', 'login', 'setup', 'api_leads', 'api_products', 'dav', 'dav_wellknown', 'unsubscribe',
|
||||
'api_tectum_woningen', 'api_tectum_woning', 'api_tectum_versie'}
|
||||
PORTAL_PUBLIC = {'portal_login', 'portal_invite'}
|
||||
ADMIN_ONLY = {'settings', 'users', 'user_edit', 'mailbox_edit', 'routines', 'routine_edit', 'routine_run',
|
||||
ADMIN_ONLY = {'settings', 'users', 'user_edit', 'users_bulk', 'user_delete', 'mailbox_edit', 'routines', 'routine_edit', 'routine_run',
|
||||
'routine_delete'}
|
||||
|
||||
|
||||
@@ -918,6 +918,47 @@ def user_edit(uid):
|
||||
return render_template('user_form.html', u=u or {'role': 'user', 'active': 1})
|
||||
|
||||
|
||||
def delete_users(ids):
|
||||
"""Verwijdert gebruikers: hun contacten, taken en activiteiten blijven (zonder eigenaar), hun agenda,
|
||||
meldingen en mailboxkoppelingen gaan mee (foreign keys)."""
|
||||
db().execute(f'DELETE FROM users WHERE id IN {id_list(ids)}', ids)
|
||||
|
||||
|
||||
@app.post('/users/<int:uid>/delete')
|
||||
def user_delete(uid):
|
||||
u = get_or_404('users', uid)
|
||||
if u['id'] == g.user['id']:
|
||||
flash('Je kunt jezelf niet verwijderen.', 'error')
|
||||
return redirect(url_for('user_edit', uid=uid))
|
||||
delete_users([uid])
|
||||
db().commit()
|
||||
flash(f"Gebruiker {u['name']} verwijderd.")
|
||||
return redirect(url_for('users'))
|
||||
|
||||
|
||||
@app.post('/users/bulk')
|
||||
def users_bulk():
|
||||
ids, action = bulk_ids(), request.form.get('action')
|
||||
skipped = g.user['id'] in ids
|
||||
ids = [i for i in ids if i != g.user['id']] # jezelf niet buitensluiten
|
||||
if not ids:
|
||||
flash('Je kunt jezelf niet inactief maken of verwijderen.' if skipped else
|
||||
'Vink eerst een of meer gebruikers aan.', 'error')
|
||||
return bulk_back(url_for('users'))
|
||||
if action in ('activate', 'deactivate'):
|
||||
db().execute(f'UPDATE users SET active=? WHERE id IN {id_list(ids)}', [int(action == 'activate'), *ids])
|
||||
msg = f"{len(ids)} gebruiker(s) op {'actief' if action == 'activate' else 'inactief'} gezet."
|
||||
elif action == 'delete':
|
||||
delete_users(ids)
|
||||
msg = f'{len(ids)} gebruiker(s) verwijderd.'
|
||||
else:
|
||||
flash('Kies een actie.', 'error')
|
||||
return bulk_back(url_for('users'))
|
||||
db().commit()
|
||||
flash(msg + (' Jezelf heb ik overgeslagen.' if skipped else ''))
|
||||
return bulk_back(url_for('users'))
|
||||
|
||||
|
||||
# ---------------------------------------------------------------- dashboard
|
||||
|
||||
@app.route('/')
|
||||
|
||||
Reference in New Issue
Block a user