from flask import flash, redirect, render_template, url_for from flask_breadcrumbs import register_breadcrumb from app import db, hashids from app.models import Role, User, UserSettingJobStatusMailNotificationLevel from app.users.forms import EditNotificationSettingsForm from app.users.forms import EditProfileSettingsForm from . import bp from .forms import AdminEditUserForm from app.users.utils import ( user_endpoint_arguments_constructor as user_eac, user_dynamic_list_constructor as user_dlc ) @bp.route('') @register_breadcrumb(bp, '.', 'admin_panel_settingsAdministration') def index(): return redirect(url_for('.users')) @bp.route('/users') @register_breadcrumb(bp, '.users', 'groupUsers') def users(): users = [x.to_json_serializeable(backrefs=True) for x in User.query.all()] return render_template( 'admin/users.html.j2', users=users, title='Users' ) @bp.route('/users/') @register_breadcrumb(bp, '.users.entity', '', dynamic_list_constructor=user_dlc) def user(user_id): user = User.query.get_or_404(user_id) return render_template('admin/user.html.j2', title='User', user=user) @bp.route('/users//edit', methods=['GET', 'POST']) @register_breadcrumb(bp, '.users.entity.edit', 'Edit', endpoint_arguments_constructor=user_eac) def edit_user(user_id): user = User.query.get_or_404(user_id) admin_edit_user_form = AdminEditUserForm( data={'confirmed': user.confirmed, 'role': user.role.hashid}, prefix='admin-edit-user-form' ) edit_profile_settings_form = EditProfileSettingsForm( user, data=user.to_json_serializeable(), prefix='edit-profile-settings-form' ) edit_notification_settings_form = EditNotificationSettingsForm( data=user.to_json_serializeable(), prefix='edit-notification-settings-form' ) if (admin_edit_user_form.submit.data and admin_edit_user_form.validate()): user.confirmed = admin_edit_user_form.confirmed.data role_id = hashids.decode(admin_edit_user_form.role.data) user.role = Role.query.get(role_id) db.session.commit() flash('Your changes have been saved') return redirect(url_for('.edit_user', user_id=user.id)) if (edit_profile_settings_form.submit.data and edit_profile_settings_form.validate()): user.email = edit_profile_settings_form.email.data user.username = edit_profile_settings_form.username.data db.session.commit() flash('Your changes have been saved') return redirect(url_for('.edit_user', user_id=user.id)) if (edit_notification_settings_form.submit.data and edit_notification_settings_form.validate()): user.setting_job_status_mail_notification_level = \ UserSettingJobStatusMailNotificationLevel[ edit_notification_settings_form.job_status_mail_notification_level.data # noqa ] db.session.commit() flash('Your changes have been saved') return redirect(url_for('.edit_user', user_id=user.id)) return render_template( 'admin/edit_user.html.j2', admin_edit_user_form=admin_edit_user_form, edit_profile_settings_form=edit_profile_settings_form, edit_notification_settings_form=edit_notification_settings_form, title='Edit user', user=user )