You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
3.7 KiB
117 lines
3.7 KiB
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 <a href="{}">take a look at them</a> 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}
|
|
|