import deform from pyramid.httpexceptions import HTTPFound from pyramid.renderers import render from pyramid.security import remember, forget from pyramid.view import view_config from ordr2.models import User, Role from ordr2.schemas.account import UserSchema # user log in and log out @view_config( context='ordr2:resources.Admin', permission='view', renderer='ordr2:templates/admin/admin_section.jinja2' ) def admin_section(context, request): ''' display the admin section ''' new_users = request.dbsession.query(User).filter_by(role=Role.NEW).count() if new_users: plural = 's' if new_users > 1 else '' request.flash( 'info', '{} new user{} have registered.'.format(new_users, plural), '''Please take a look at them and confirm or reject the registration by setting the role accordingly. This message will disappear when all new registrations have been processed.'''.format( request.resource_url(context, 'users', query={'role': 'new'}) ) ) return {} @view_config( context='ordr2:resources.UserList', permission='view', renderer='ordr2:templates/admin/user_list.jinja2' ) def user_list(context, request): ''' display the user list ''' users = context.items() roles = [(role.value.lower(), role.value.capitalize()) for role in Role] return {'users':users, 'roles':roles} @view_config( context='ordr2:resources.UserList', name = 'changeview', permission='view', request_method='POST' ) def change_column_view(context, request): ''' changes the columns to display ''' display = { 'first': False, 'last': False, 'email': False } columns = [col for key, col in request.POST.items() if key == 'display'] display.update({ column: True for column in columns }) request.session['display']['users'] = display return HTTPFound(context.url()) @view_config( context='ordr2:resources.UserAccount', permission='edit', request_method='GET', renderer='ordr2:templates/admin/user_edit.jinja2' ) def user_account_form(context, request): form = UserSchema.as_form(request) form_data = { 'user_name': context.model.user_name, 'first_name': context.model.first_name, 'last_name': context.model.last_name, 'email': context.model.email, 'role': context.model.role.name } form.set_appstruct(form_data) return {'form': form} @view_config( context='ordr2:resources.Account', name='settingsx', permission='settings', request_method='POST', renderer='ordr2:templates/account/settings.jinja2' ) def settingsx_form_processing(context, request): ''' display the user settings form ''' form = SettingsSchema.as_form(request) data = request.POST.items() try: appstruct = form.validate(data) except deform.ValidationFailure as e: return {'form': form} # form validation sucessful, change settings request.user.first_name = appstruct['general']['first_name'] request.user.last_name = appstruct['general']['last_name'] request.user.email = appstruct['general']['email'] if appstruct['change_password']['new_password']: request.user.set_password(appstruct['change_password']['new_password']) if len(appstruct['change_password']['new_password']) < 8: request.flash( 'warning', 'You should really consider using a longer password.' ) request.flash('success', 'Your account information has been updated.') return {'form': form}