From cfec33b362cf8a8b7f88c2447345727bfacb9c97 Mon Sep 17 00:00:00 2001 From: AIIrondev Date: Wed, 12 Aug 2026 22:29:45 +0200 Subject: [PATCH] Slight clean up of old functions that are not in use anymore, and inclution of Image uploading for the library uploading process --- Web/app.py | 168 -------------------------------- Web/templates/upload_admin.html | 4 +- 2 files changed, 3 insertions(+), 169 deletions(-) diff --git a/Web/app.py b/Web/app.py index 6153564..a687ca4 100755 --- a/Web/app.py +++ b/Web/app.py @@ -6216,174 +6216,6 @@ def bulk_delete_items(): if client: client.close() - -@app.route('/edit_item/', methods=['POST']) -def edit_item(id): - """ - Route for editing an existing inventory item. - - Args: - id (str): ID of the item to edit - - Returns: - flask.Response: Redirect to admin homepage with status message - """ - if 'username' not in session: - flash('Nicht angemeldet.', 'error') - return redirect(url_for('login')) - - current_permissions = us.get_effective_permissions(session['username']) - - if not current_permissions['actions'].get('can_edit', False): - flash('Ihnen fehlen die nötigen Berechtigungen, um diese Aktion auszuführen.', 'error') - return redirect(url_for('home_admin')) - - if not cfg.MODULES.is_enabled('inventory'): - flash('Bibliotheks-Modul ist deaktiviert.', 'error') - return redirect(url_for('library_view')) - - fs = get_gridfs() - - name = sanitize_form_value(request.form.get('name')) - ort = sanitize_form_value(request.form.get('ort')) - beschreibung = sanitize_form_value(request.form.get('beschreibung')) - - filter1 = sanitize_form_value(request.form.getlist('filter')) - filter2 = sanitize_form_value(request.form.getlist('filter2')) - filter3 = sanitize_form_value(request.form.getlist('filter3')) - - # Expand special "all values" selections for predefined filters. - filter1 = expand_filter_selection(filter1, 1) - filter2 = expand_filter_selection(filter2, 2) - - anschaffungs_jahr = sanitize_form_value(request.form.get('anschaffungsjahr')) - anschaffungs_kosten = sanitize_form_value(request.form.get('anschaffungskosten')) - code_4 = sanitize_form_value(request.form.get('code_4')) - isbn_raw = sanitize_form_value(request.form.get('isbn', '')) - reservierbar = 'reservierbar' in request.form - - item_isbn = '' - item_type = 'general' - if cfg.MODULES.is_enabled('library'): - item_isbn = normalize_and_validate_isbn(isbn_raw) - if isbn_raw and not item_isbn: - flash('Ungültige ISBN. Bitte ISBN-10 oder ISBN-13 verwenden.', 'error') - return redirect(url_for('home_admin')) - if item_isbn: - item_type = 'book' - - if code_4 and not it.is_code_unique(code_4, exclude_id=id): - flash('Der Code wird bereits verwendet. Bitte wählen Sie einen anderen Code.', 'error') - return redirect(url_for('home_admin')) - - current_item = it.get_item(id) - if not current_item: - flash('Element nicht gefunden', 'error') - return redirect(url_for('home_admin')) - - verfuegbar = current_item.get('Verfuegbar', True) - - images_to_keep = request.form.getlist('existing_images') - - original_images = current_item.get('Images', []) - - images = [img for img in original_images if img in images_to_keep] - - new_images = request.files.getlist('new_images') - - for image in new_images: - if image and image.filename: - is_allowed, error_message = allowed_file(image.filename, image) - - if is_allowed: - try: - secure_name = secure_filename(image.filename) - - image.seek(0) - image_bytes = image.read() - - if not image_bytes: - app.logger.error(f"Failed to read image in edit_item (0 bytes) for {secure_name}") - continue - - optimized_io = io.BytesIO() - with Image.open(io.BytesIO(image_bytes)) as img: - if img.mode not in ('RGB', 'RGBA'): - img = img.convert('RGBA') - - max_width = 500 - if img.width > max_width: - ratio = max_width / img.width - new_size = (max_width, int(img.height * ratio)) - img = img.resize(new_size, Image.Resampling.LANCZOS) - - img.save(optimized_io, format='WEBP', quality=85, optimize=True) - - optimized_io.seek(0) - new_filename = f"{uuid.uuid4().hex}_{int(time.time())}.webp" - - fs.put( - optimized_io, - filename=new_filename, - content_type='image/webp', - metadata={ - 'original_filename': secure_name, - 'upload_context': 'edit_item', - 'item_id': id - } - ) - - images.append(new_filename) - - except Exception as e: - app.logger.error(f"Error processing new image in edit_item: {str(e)}") - else: - flash(error_message, 'error') - return redirect(url_for('home_admin')) - - predefined_locations = it.get_predefined_locations() - if ort and ort not in predefined_locations: - it.add_predefined_location(ort) - - result = it.update_item( - id=id, - name=name, - ort=ort, - beschreibung=beschreibung, - images=images, - verfuegbar=verfuegbar, - filter1=filter1, - filter2=filter2, - filter3=filter3, - ansch_jahr=anschaffungs_jahr, - ansch_kost=anschaffungs_kosten, - code_4=code_4, - reservierbar=reservierbar, - isbn=item_isbn, - item_type=item_type - ) - - if result: - flash('Element erfolgreich aktualisiert (und ggf. Gruppe synchronisiert)', 'success') - else: - flash('Fehler beim Aktualisieren des Elements', 'error') - - return redirect(url_for('home_admin')) - -def is_library_item(item): - """ - Prüft, ob ein Artikel ein Bibliotheks-Item ist. - - 'other', None oder Leerstring -> Inventarsystem (False) - - Jeder andere Medientyp ('Buch', 'CD', etc.) -> Bibliothek (True) - """ - if not item: - return False - item_type = item.get('ItemType', 'other') - if not item_type: - return False - return item_type.strip().lower() != 'other' - - @app.route('/item_edit/', methods=['GET', 'POST']) def item_edit(id): if 'username' not in session: diff --git a/Web/templates/upload_admin.html b/Web/templates/upload_admin.html index 23e0018..f9380a0 100755 --- a/Web/templates/upload_admin.html +++ b/Web/templates/upload_admin.html @@ -954,8 +954,10 @@ + + -
+
Erlaubte Formate: JPG, JPEG, PNG, GIF, MP4, MOV, AVI, MKV, WEBM, FLV, M4V, 3GP