CPI Ordering System (the old version)
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.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
 
 
 
 
 

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}