From f0b112b34c068a9149123029d3d004b64f49affe Mon Sep 17 00:00:00 2001 From: AIIrondev Date: Fri, 21 Aug 2026 13:20:34 +0200 Subject: [PATCH] Klass implementation --- Web/app.py | 93 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 57 insertions(+), 36 deletions(-) diff --git a/Web/app.py b/Web/app.py index de05efa..f9d9da4 100755 --- a/Web/app.py +++ b/Web/app.py @@ -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 '' )