feat: add edit functionality for predefined filter values in filter management
This commit is contained in:
+35
@@ -8657,6 +8657,41 @@ def remove_filter_value(filter_num, value):
|
||||
|
||||
return redirect(url_for('manage_filters'))
|
||||
|
||||
@app.route('/edit_filter_value/<int:filter_num>/<string:old_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/<int:filter_num>')
|
||||
def get_predefined_filter_values(filter_num):
|
||||
"""
|
||||
|
||||
@@ -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():
|
||||
|
||||
@@ -33,8 +33,11 @@
|
||||
{% if filter1_values %}
|
||||
<div class="list-group">
|
||||
{% for value in filter1_values %}
|
||||
<div class="list-group-item d-flex justify-content-between align-items-center">
|
||||
{{ value }}
|
||||
<div class="list-group-item">
|
||||
<div class="d-flex justify-content-between align-items-center mb-2">
|
||||
<span>{{ value }}</span>
|
||||
<div>
|
||||
<button type="button" class="btn btn-sm btn-secondary me-1" onclick="toggleEdit('edit-1-{{ loop.index }}')">Bearbeiten</button>
|
||||
<form method="POST" action="{{ url_for('remove_filter_value', filter_num=1, value=value) }}" class="d-inline">
|
||||
<button type="submit" class="btn btn-sm btn-danger"
|
||||
onclick="return confirm('Sind Sie sicher, dass Sie den Wert \"' + '{{ value }}'.replace(/'/g, '\\\'') + '\" löschen möchten?');">
|
||||
@@ -42,6 +45,15 @@
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<form id="edit-1-{{ loop.index }}" method="POST" action="{{ url_for('edit_filter_value', filter_num=1, old_value=value) }}" style="display: none;" class="mt-2">
|
||||
<div class="input-group input-group-sm">
|
||||
<input type="text" name="new_value" class="form-control" value="{{ value }}" required>
|
||||
<button type="submit" class="btn btn-primary" onclick="return confirm('Tipp: Das Ändern des Namens aktualisiert auch alle Einträge in der Datenbank, die diesen Filter verwenden. Fortfahren?');">Speichern</button>
|
||||
<button type="button" class="btn btn-secondary" onclick="toggleEdit('edit-1-{{ loop.index }}')">Abbrechen</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% else %}
|
||||
@@ -69,8 +81,11 @@
|
||||
{% if filter2_values %}
|
||||
<div class="list-group">
|
||||
{% for value in filter2_values %}
|
||||
<div class="list-group-item d-flex justify-content-between align-items-center">
|
||||
{{ value }}
|
||||
<div class="list-group-item">
|
||||
<div class="d-flex justify-content-between align-items-center mb-2">
|
||||
<span>{{ value }}</span>
|
||||
<div>
|
||||
<button type="button" class="btn btn-sm btn-secondary me-1" onclick="toggleEdit('edit-2-{{ loop.index }}')">Bearbeiten</button>
|
||||
<form method="POST" action="{{ url_for('remove_filter_value', filter_num=2, value=value) }}" class="d-inline">
|
||||
<button type="submit" class="btn btn-sm btn-danger"
|
||||
onclick="return confirm('Sind Sie sicher, dass Sie den Wert \"' + '{{ value }}'.replace(/'/g, '\\\'') + '\" löschen möchten?');">
|
||||
@@ -78,6 +93,15 @@
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<form id="edit-2-{{ loop.index }}" method="POST" action="{{ url_for('edit_filter_value', filter_num=2, old_value=value) }}" style="display: none;" class="mt-2">
|
||||
<div class="input-group input-group-sm">
|
||||
<input type="text" name="new_value" class="form-control" value="{{ value }}" required>
|
||||
<button type="submit" class="btn btn-primary" onclick="return confirm('Tipp: Das Ändern des Namens aktualisiert auch alle Einträge in der Datenbank, die diesen Filter verwenden. Fortfahren?');">Speichern</button>
|
||||
<button type="button" class="btn btn-secondary" onclick="toggleEdit('edit-2-{{ loop.index }}')">Abbrechen</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% else %}
|
||||
@@ -105,8 +129,11 @@
|
||||
{% if filter3_values %}
|
||||
<div class="list-group">
|
||||
{% for value in filter3_values %}
|
||||
<div class="list-group-item d-flex justify-content-between align-items-center">
|
||||
{{ value }}
|
||||
<div class="list-group-item">
|
||||
<div class="d-flex justify-content-between align-items-center mb-2">
|
||||
<span>{{ value }}</span>
|
||||
<div>
|
||||
<button type="button" class="btn btn-sm btn-secondary me-1" onclick="toggleEdit('edit-3-{{ loop.index }}')">Bearbeiten</button>
|
||||
<form method="POST" action="{{ url_for('remove_filter_value', filter_num=3, value=value) }}" class="d-inline">
|
||||
<button type="submit" class="btn btn-sm btn-danger"
|
||||
onclick="return confirm('Sind Sie sicher, dass Sie den Wert \"' + '{{ value }}'.replace(/'/g, '\\\'') + '\" löschen möchten?');">
|
||||
@@ -114,6 +141,15 @@
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<form id="edit-3-{{ loop.index }}" method="POST" action="{{ url_for('edit_filter_value', filter_num=3, old_value=value) }}" style="display: none;" class="mt-2">
|
||||
<div class="input-group input-group-sm">
|
||||
<input type="text" name="new_value" class="form-control" value="{{ value }}" required>
|
||||
<button type="submit" class="btn btn-primary" onclick="return confirm('Tipp: Das Ändern des Namens aktualisiert auch alle Einträge in der Datenbank, die diesen Filter verwenden. Fortfahren?');">Speichern</button>
|
||||
<button type="button" class="btn btn-secondary" onclick="toggleEdit('edit-3-{{ loop.index }}')">Abbrechen</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% else %}
|
||||
@@ -133,4 +169,15 @@
|
||||
<a href="{{ url_for('home_admin') }}" class="btn btn-secondary">Zurück zur Admin-Übersicht</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function toggleEdit(id) {
|
||||
const el = document.getElementById(id);
|
||||
if (el.style.display === 'none') {
|
||||
el.style.display = 'block';
|
||||
} else {
|
||||
el.style.display = 'none';
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
Reference in New Issue
Block a user