parameciofm/paramecio/modules/admin2/ausers.py

146 lines
5.4 KiB
Python

from paramecio.modules.admin2.models.admin import UserAdmin2
from paramecio.modules.admin2.app import admin_app
from paramecio.modules.admin2.libraries.config import modules_admin, modules_admin_icons
from paramecio.libraries.mtemplates import PTemplate, env_theme
from paramecio.libraries.i18n import I18n, PGetText
import paramecio.modules.admin2.libraries.i18n as i18n_lang
import os
#from paramecio.libraries.lists import SimpleList
from paramecio.libraries.generate_admin_class import GenerateAdminClass
from paramecio.libraries.db.formsutils import show_form
from paramecio.libraries.db.coreforms import SelectForm
from paramecio.libraries.db.coreforms import PasswordForm
from paramecio.libraries.db.coreforms import HiddenForm
from paramecio.wsgiapp import app
from paramecio.libraries.db.webmodel import WebModel
from paramecio.modules.admin2.models.admin import UserAdmin2, PrivilegesModule2
from paramecio.libraries.urls import add_get_parameters
from paramecio.modules.admin2.libraries.config import modules_admin
env=env_theme(__file__)
t=PTemplate(env)
i18n=I18n('admin2')
gtext=PGetText(__file__)
_=gtext.gettext
#t.env.directories=admin_t.env.directories
"""
tpl_path=os.path.dirname(__file__).replace('/admin', '')+'/templates/admin'
if t.env.directories[1]!=tpl_path:
t.env.directories.insert(1, tpl_path)
"""
#modules_admin.append(['menu_users', 'people-circle', True])
modules_admin['admin_app.admin_users']=[_('Admin users'), 'people-circle', ['admin_app.admin_permissions']]
modules_admin_icons['admin_app.admin_users']='<symbol id="people-circle" viewBox="0 0 16 16"><path d="M11 6a3 3 0 1 1-6 0 3 3 0 0 1 6 0z"/><path fill-rule="evenodd" d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8zm8-7a7 7 0 0 0-5.468 11.37C3.242 11.226 4.805 10 8 10s4.757 1.225 5.468 2.37A7 7 0 0 0 8 1z"/></symbol>'
@admin_app.get('/ausers', name="admin_app.admin_users")
@admin_app.post('/ausers', name="admin_app.admin_users")
def admin_users(session={}):
#i18n=I18n('admin2')
db=WebModel.connection()
user_admin=UserAdmin2(db)
user_admin.fields['privileges'].name_form=SelectForm
user_admin.fields['dark_theme'].name_form=SelectForm
user_admin.fields['double_auth'].name_form=SelectForm
user_admin.create_forms(['username', 'password', 'email', 'privileges', 'lang', 'dark_theme', 'double_auth'])
user_admin.forms['privileges'].arr_select={0: I18n.lang('admin', 'without_privileges', 'Without privileges'), 1: I18n.lang('admin', 'selected_privileges', 'Selected privileges'), 2: I18n.lang('admin', 'administrator', 'Administrator')}
user_admin.forms['dark_theme'].arr_select={0: i18n.tlang('Light theme'), 1: i18n.tlang('Dark theme')}
user_admin.forms['double_auth'].arr_select={0: i18n.tlang('No'), 1: i18n.tlang('Yes')}
user_admin.fields['password'].protected=False
url=app.get_url('admin_app.admin_users')
admin=GenerateAdminClass(user_admin, url, t)
admin.list.fields_showed=['username', 'email', 'double_auth', 'privileges', 'last_login']
admin.list.search_fields=['username']
admin.arr_fields_edit=['username', 'password', 'repeat_password', 'email', 'privileges', 'lang', 'dark_theme', 'double_auth']
admin.list.arr_extra_options=[user_options]
slist=admin.show()
db.close()
return t.load_template('users.phtml', title=i18n.tlang('Admin users'), tlang=i18n.tlang, module_selected='admin_app.admin_users', slist=slist, session=session)
@admin_app.get('/ausers/permissions/<user_id:int>', name="admin_app.admin_permissions")
@admin_app.post('/ausers/permissions/<user_id:int>', name="admin_app.admin_permissions")
def admin_permissions(user_id, session={}):
db=WebModel.connection()
user_admin=UserAdmin2(db)
arr_user=user_admin.select_a_row(user_id, ['username'])
if arr_user:
priv=PrivilegesModule2(db)
url=app.get_url('admin_app.admin_permissions', user_id=user_id)
admin=GenerateAdminClass(priv, url, t)
admin.list.fields_showed=['module']
admin.list.search_fields=['module']
priv.fields['module'].name_form=SelectForm
arr_modules={k:v[0] for k, v in modules_admin.items()}
priv.fields['user_id'].name_form=HiddenForm
priv.fields['user_id'].extra_parameters=[]
priv.fields['user_id'].default_value=user_id
priv.create_forms()
priv.set_conditions('WHERE user_id=%s', [user_id])
priv.forms['module'].arr_select=arr_modules
#print(user_id)
#with db.query('select *')
privileges_admin=admin.show()
else:
arr_user={'username': i18n.tlang('User not found')}
privileges_admin=''
db.close()
return t.load_template('access.phtml', title=i18n.tlang('Users permissions'), privileges_admin=privileges_admin, user=arr_user, module_selected='admin_app.admin_users')
def user_options(url, id, arr_row):
options=[]
options.append('<a href="'+add_get_parameters(url, op_admin=1, id=id)+'">'+I18n.lang('common', 'edit', 'Edit')+'</a>')
if not arr_row['privileges']:
options.append(f'<a href="{app.get_url('admin_app.admin_permissions', user_id=id)}">'+i18n.tlang('User access')+'</a>')
options.append('<a href="'+add_get_parameters(url, op_admin=3, id=id)+'">'+I18n.lang('common', 'delete', 'Delete')+'</a>')
return options