This commit is contained in:
+57
-36
@@ -3312,13 +3312,13 @@ def library_view():
|
||||
def library_loans_admin():
|
||||
"""Admin overview for library borrowings and damaged library items."""
|
||||
if 'username' not in session:
|
||||
flash('Ihnen ist es nicht gestattet auf dieser Internetanwendung, die eben besuchte Adrrese zu nutzen, versuchen sie es erneut nach dem sie sich mit einem berechtigten Nutzer angemeldet haben!', 'error')
|
||||
flash('Ihnen ist es nicht gestattet auf dieser Internetanwendung, die eben besuchte Adrrese zu nutzen, versuchen sie es erneut nach dem sie sich mit einem berechtigten Nutzer angemeldet haben!','error')
|
||||
return redirect(url_for('login'))
|
||||
|
||||
current_permissions = us.get_effective_permissions(session['username'])
|
||||
|
||||
if not current_permissions['pages'].get('library_loans_admin', False):
|
||||
flash('Ihnen ist es nicht gestattet auf dieser Internetanwendung, die eben besuchte Adrrese zu nutzen, versuchen sie es erneut nach dem sie sich mit einem berechtigten Nutzer angemeldet haben!', 'error')
|
||||
flash('Ihnen ist es nicht gestattet auf dieser Internetanwendung, die eben besuchte Adrrese zu nutzen, versuchen sie es erneut nach dem sie sich mit einem berechtigten Nutzer angemeldet haben!','error')
|
||||
return redirect(url_for('library_view'))
|
||||
|
||||
if not cfg.MODULES.is_enabled('library'):
|
||||
@@ -3336,6 +3336,15 @@ def library_loans_admin():
|
||||
def fmt_money(value):
|
||||
return _format_money_value(value)
|
||||
|
||||
def safe_decrypt(val):
|
||||
"""Helper to decrypt strings that start with enc:: or standard encrypted strings."""
|
||||
if not val or not isinstance(val, str):
|
||||
return val or ''
|
||||
try:
|
||||
return decrypt_text(val)
|
||||
except Exception:
|
||||
return val
|
||||
|
||||
client = None
|
||||
try:
|
||||
client = MongoClient(MONGODB_HOST, MONGODB_PORT)
|
||||
@@ -3343,6 +3352,7 @@ def library_loans_admin():
|
||||
items_col = db['items']
|
||||
ausleihungen_col = db['ausleihungen']
|
||||
users_col = db['users']
|
||||
student_cards_col = db['student_cards']
|
||||
|
||||
library_items = list(items_col.find(
|
||||
{'ItemType': {'$in': LIBRARY_ITEM_TYPES}, 'Deleted': {'$ne': True}},
|
||||
@@ -3357,37 +3367,42 @@ def library_loans_admin():
|
||||
active_records = list(ausleihungen_col.find(
|
||||
{'Item': {'$in': item_ids}, 'Status': {'$in': ['active', 'planned', 'completed']}},
|
||||
{'User': 1, 'Item': 1, 'Status': 1, 'Start': 1, 'End': 1, 'Period': 1, 'Notes': 1, 'InvoiceData': 1,
|
||||
'Klasse': 1, 'Class': 1, 'school_class': 1}
|
||||
'Klasse': 1, 'klasse': 1, 'Class': 1, 'school_class': 1}
|
||||
).sort('Start', -1))
|
||||
|
||||
user_map = {}
|
||||
if active_records:
|
||||
raw_users = list({r.get('User') for r in active_records if r.get('User')})
|
||||
decrypted_users = []
|
||||
for ru in raw_users:
|
||||
try:
|
||||
du = decrypt_text(ru) if ru else ''
|
||||
if du:
|
||||
decrypted_users.append(du)
|
||||
except Exception:
|
||||
pass
|
||||
class_map = {}
|
||||
student_cards = list(student_cards_col.find({}, {'SchülerName': 1, 'Klasse': 1, 'AusweisId': 1}))
|
||||
for sc in student_cards:
|
||||
dec_cls = safe_decrypt(sc.get('Klasse'))
|
||||
if not dec_cls:
|
||||
continue
|
||||
|
||||
query_identifiers = list(set(raw_users + decrypted_users))
|
||||
if query_identifiers:
|
||||
user_docs = list(users_col.find(
|
||||
{'$or': [
|
||||
{'Username': {'$in': query_identifiers}},
|
||||
{'Name': {'$in': query_identifiers}},
|
||||
{'User': {'$in': query_identifiers}}
|
||||
]},
|
||||
{'Username': 1, 'Name': 1, 'User': 1, 'Klasse': 1, 'Class': 1, 'school_class': 1}
|
||||
))
|
||||
for u in user_docs:
|
||||
cls = u.get('Klasse') or u.get('Class') or u.get('school_class') or ''
|
||||
if cls:
|
||||
if u.get('Username'): user_map[u['Username']] = cls
|
||||
if u.get('Name'): user_map[u['Name']] = cls
|
||||
if u.get('User'): user_map[u['User']] = cls
|
||||
dec_name = safe_decrypt(sc.get('SchülerName'))
|
||||
raw_name = sc.get('SchülerName')
|
||||
ausweis_id = sc.get('AusweisId')
|
||||
|
||||
if dec_name:
|
||||
class_map[dec_name.strip().lower()] = dec_cls
|
||||
class_map[dec_name] = dec_cls
|
||||
if raw_name:
|
||||
class_map[raw_name] = dec_cls
|
||||
if ausweis_id:
|
||||
class_map[str(ausweis_id).strip().lower()] = dec_cls
|
||||
|
||||
users = list(users_col.find({}, {'Username': 1, 'Name': 1, 'User': 1, 'Klasse': 1, 'klasse': 1, 'Class': 1,
|
||||
'school_class': 1}))
|
||||
for u in users:
|
||||
raw_cls = u.get('Klasse') or u.get('klasse') or u.get('Class') or u.get('school_class') or ''
|
||||
dec_cls = safe_decrypt(raw_cls)
|
||||
if not dec_cls:
|
||||
continue
|
||||
|
||||
for key in [u.get('Username'), u.get('Name'), u.get('User')]:
|
||||
if key:
|
||||
dec_key = safe_decrypt(key)
|
||||
class_map[key] = dec_cls
|
||||
class_map[dec_key] = dec_cls
|
||||
class_map[dec_key.strip().lower()] = dec_cls
|
||||
|
||||
active_item_ids = set()
|
||||
loan_entries = []
|
||||
@@ -3407,14 +3422,20 @@ def library_loans_admin():
|
||||
damage_reports = item_doc.get('DamageReports', []) or []
|
||||
|
||||
raw_user = record.get('User', '')
|
||||
decrypted_user = decrypt_text(raw_user) if raw_user else ''
|
||||
decrypted_user = safe_decrypt(raw_user)
|
||||
|
||||
direct_class = (
|
||||
safe_decrypt(record.get('Klasse'))
|
||||
or safe_decrypt(record.get('klasse'))
|
||||
or safe_decrypt(record.get('Class'))
|
||||
or safe_decrypt(record.get('school_class'))
|
||||
)
|
||||
|
||||
user_class = (
|
||||
record.get('Klasse')
|
||||
or record.get('Class')
|
||||
or record.get('school_class')
|
||||
or user_map.get(raw_user, '')
|
||||
or user_map.get(decrypted_user, '')
|
||||
direct_class
|
||||
or class_map.get(decrypted_user)
|
||||
or class_map.get(decrypted_user.strip().lower())
|
||||
or class_map.get(raw_user)
|
||||
or ''
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user