diff --git a/Web/app.py b/Web/app.py index 551b5d2..2d732a9 100755 --- a/Web/app.py +++ b/Web/app.py @@ -8657,6 +8657,41 @@ def remove_filter_value(filter_num, value): return redirect(url_for('manage_filters')) +@app.route('/edit_filter_value//', methods=['POST']) +def edit_filter_value(filter_num, old_value): + """ + Edit a predefined value from the specified filter. + + Args: + filter_num (int): Filter number (1, 2 or 3) + old_value (str): Value to edit + + Returns: + flask.Response: Redirect to filter management page + """ + if 'username' not in session or not us.check_admin(session['username']): + return jsonify({'success': False, 'error': 'Not authorized'}), 403 + + new_value = sanitize_form_value(request.form.get('new_value')) + + if not new_value: + flash('Bitte geben Sie einen neuen Wert ein', 'error') + return redirect(url_for('manage_filters')) + + if new_value == FILTER_SELECT_ALL_TOKEN: + flash('Dieser Wert ist reserviert und kann nicht als Filterwert gespeichert werden.', 'error') + return redirect(url_for('manage_filters')) + + # Update the value from the filter + success = it.edit_predefined_filter_value(filter_num, old_value, new_value) + + if success: + flash(f'Wert "{old_value}" wurde in "{new_value}" bei Filter {filter_num} geändert', 'success') + else: + flash(f'Fehler beim Ändern des Wertes oder Wert existiert bereits in Filter {filter_num}', 'error') + + return redirect(url_for('manage_filters')) + @app.route('/get_predefined_filter_values/') def get_predefined_filter_values(filter_num): """ diff --git a/Web/items.py b/Web/items.py index c113d81..72438c1 100755 --- a/Web/items.py +++ b/Web/items.py @@ -794,6 +794,52 @@ def remove_predefined_filter_value(filter_num, value): return result.modified_count > 0 +def edit_predefined_filter_value(filter_num, old_value, new_value): + """ + Edit a predefined value from a filter and update all matching items. + + Args: + filter_num (int): Filter number (1 for Unterrichtsfach, 2 for Jahrgangsstufe) + old_value (str): Value to replace + new_value (str): New value + + Returns: + bool: True if value was updated, False otherwise + """ + client = MongoClient(cfg.MONGODB_HOST, cfg.MONGODB_PORT) + db = client[cfg.MONGODB_DB] + filter_presets = db['filter_presets'] + + # Check if the new value already exists + existing = filter_presets.find_one({ + 'filter_num': filter_num, + 'values': new_value + }) + + if existing and old_value != new_value: + client.close() + return False + + # Update the value in the filter + result = filter_presets.update_one( + {'filter_num': filter_num, 'values': old_value}, + {'$set': {'values.$': new_value}} + ) + + if result.modified_count > 0: + items = db['items'] + filter_field = 'Filter' if filter_num == 1 else f'Filter{filter_num}' + + # Also update all items that use this filter + items.update_many( + {filter_field: old_value}, + {'$set': {filter_field: new_value}} + ) + + client.close() + return result.modified_count > 0 + + # === LOCATION MANAGEMENT === def get_predefined_locations(): diff --git a/Web/templates/manage_filters.html b/Web/templates/manage_filters.html index 306d78a..cb71d42 100755 --- a/Web/templates/manage_filters.html +++ b/Web/templates/manage_filters.html @@ -33,13 +33,25 @@ {% if filter1_values %}
{% for value in filter1_values %} -
- {{ value }} -
- +
+
+ {{ value }} +
+ + + + +
+
+
{% endfor %} @@ -69,13 +81,25 @@ {% if filter2_values %}
{% for value in filter2_values %} -
- {{ value }} -
- +
+
+ {{ value }} +
+ + + + +
+
+
{% endfor %} @@ -105,13 +129,25 @@ {% if filter3_values %}
{% for value in filter3_values %} -
- {{ value }} -
- +
+
+ {{ value }} +
+ + + + +
+
+
{% endfor %} @@ -133,4 +169,15 @@ Zurück zur Admin-Übersicht
+ + {% endblock %}