feat: Module fallback redirects and duplicate item modal redirects
This commit is contained in:
+30
-15
@@ -353,7 +353,7 @@ def _enforce_active_session_user():
|
||||
@app.before_request
|
||||
def _enforce_module_access():
|
||||
endpoint = request.endpoint or ''
|
||||
if endpoint == 'static' or endpoint.startswith('static') or request.path.startswith('/api/'):
|
||||
if endpoint == 'static' or endpoint.startswith('static'):
|
||||
return None
|
||||
|
||||
for name, matcher in cfg.MODULES._path_matchers.items():
|
||||
@@ -363,7 +363,18 @@ def _enforce_module_access():
|
||||
'inventory': "Inventar-Modul ist deaktiviert.",
|
||||
'student_cards': "Schülerausweis-Modul ist deaktiviert."
|
||||
}.get(name, f"{name.capitalize()}-Modul ist deaktiviert.")
|
||||
return msg, 403
|
||||
|
||||
if request.path.startswith('/api/') or request.is_json:
|
||||
return jsonify({'ok': False, 'message': msg}), 403
|
||||
|
||||
flash(msg, 'info')
|
||||
|
||||
if name != 'inventory' and cfg.MODULES.is_enabled('inventory'):
|
||||
return redirect(url_for('home'))
|
||||
elif name != 'library' and cfg.MODULES.is_enabled('library'):
|
||||
return redirect(url_for('library_view'))
|
||||
|
||||
return redirect(url_for('my_borrowed_items'))
|
||||
|
||||
""" -----------------------------------------------------------After Request Handlers----------------------------------------------------------------------------- """
|
||||
|
||||
@@ -2619,7 +2630,8 @@ def home():
|
||||
library_module_enabled=cfg.MODULES.is_enabled('library'),
|
||||
student_cards_module_enabled=cfg.MODULES.is_enabled('student_cards'),
|
||||
student_default_borrow_days=cfg.STUDENT_DEFAULT_BORROW_DAYS,
|
||||
student_max_borrow_days=cfg.STUDENT_MAX_BORROW_DAYS
|
||||
student_max_borrow_days=cfg.STUDENT_MAX_BORROW_DAYS,
|
||||
open_item=request.args.get('open_item')
|
||||
)
|
||||
else:
|
||||
permissions = _get_current_user_permissions() or us.build_default_permission_payload('standard_user')
|
||||
@@ -2662,6 +2674,7 @@ def home_admin():
|
||||
student_default_borrow_days=cfg.STUDENT_DEFAULT_BORROW_DAYS,
|
||||
student_max_borrow_days=cfg.STUDENT_MAX_BORROW_DAYS,
|
||||
school_info=_get_school_info_for_export(),
|
||||
open_item=request.args.get('open_item')
|
||||
)
|
||||
|
||||
|
||||
@@ -4667,14 +4680,24 @@ def upload_item():
|
||||
|
||||
# Check if base code is unique for single-item uploads
|
||||
if code_4 and item_count == 1 and not it.is_code_unique(code_4[0]):
|
||||
existing_item = it._get_items_collection().find_one({"code_4": code_4[0]})
|
||||
if existing_item:
|
||||
error_msg = 'Der Code wird bereits verwendet. Umleitung zum Eintrag.'
|
||||
if is_mobile:
|
||||
return jsonify({
|
||||
'success': False,
|
||||
'message': error_msg,
|
||||
'existing_item_id': str(existing_item['_id']),
|
||||
'redirect_to_item': True
|
||||
}), 400
|
||||
|
||||
flash(error_msg, 'info')
|
||||
return redirect(url_for(success_redirect_endpoint, open_item=str(existing_item['_id'])))
|
||||
else:
|
||||
error_msg = 'Der Code wird bereits verwendet. Bitte wählen Sie einen anderen Code.'
|
||||
if is_mobile:
|
||||
return jsonify({'success': False, 'message': error_msg}), 400
|
||||
else:
|
||||
conflicting_items = it.get_item_by_code_4(code_4[0])
|
||||
if conflicting_items:
|
||||
flash('Der Code wird bereits verwendet. Das existierende Element wurde geöffnet.', 'info')
|
||||
return redirect(url_for(success_redirect_endpoint, open_item_modal=str(conflicting_items[0]['_id'])))
|
||||
flash(error_msg, 'error')
|
||||
return redirect(url_for(success_redirect_endpoint))
|
||||
|
||||
@@ -4699,10 +4722,6 @@ def upload_item():
|
||||
error_msg = f'Der Einzelcode "{specific_code}" wird bereits verwendet.'
|
||||
if is_mobile:
|
||||
return jsonify({'success': False, 'message': error_msg}), 400
|
||||
conflicting_items = it.get_item_by_code_4(specific_code)
|
||||
if conflicting_items:
|
||||
flash(f'Der Einzelcode "{specific_code}" wird bereits verwendet. Das existierende Element wurde geöffnet.', 'info')
|
||||
return redirect(url_for(success_redirect_endpoint, open_item_modal=str(conflicting_items[0]['_id'])))
|
||||
flash(error_msg, 'error')
|
||||
return redirect(url_for(success_redirect_endpoint))
|
||||
|
||||
@@ -5834,10 +5853,6 @@ def edit_item(id):
|
||||
|
||||
# Check if code is unique (excluding the current item)
|
||||
if code_4 and not it.is_code_unique(code_4, exclude_id=id):
|
||||
conflicting_items = it.get_item_by_code_4(code_4)
|
||||
if conflicting_items:
|
||||
flash('Der Code wird bereits verwendet. Das existierende Element wurde stattdessen geöffnet.', 'info')
|
||||
return redirect(url_for('home_admin', open_item_modal=str(conflicting_items[0]['_id'])))
|
||||
flash('Der Code wird bereits verwendet. Bitte wählen Sie einen anderen Code.', 'error')
|
||||
return redirect(url_for('home_admin'))
|
||||
|
||||
|
||||
@@ -4614,6 +4614,18 @@ function openItemQuick(id){
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
{% if open_item %}
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function() {
|
||||
if (typeof openEditModalFromServer === 'function') {
|
||||
setTimeout(function() {
|
||||
openEditModalFromServer('{{ open_item }}');
|
||||
}, 500);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
<style>
|
||||
/* Admin/Main Content Container align */
|
||||
|
||||
@@ -3252,12 +3252,6 @@ document.addEventListener('DOMContentLoaded', ()=>{
|
||||
}
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
const openItem = urlParams.get('open_item_modal');
|
||||
if (openItem) {
|
||||
openEditModalFromServer(openItem);
|
||||
}
|
||||
|
||||
// Load saved filters
|
||||
loadFilterState();
|
||||
|
||||
@@ -5722,4 +5716,16 @@ document.addEventListener('DOMContentLoaded', ()=>{
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
{% if open_item %}
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function() {
|
||||
if (typeof openEditModalFromServer === 'function') {
|
||||
setTimeout(function() {
|
||||
openEditModalFromServer('{{ open_item }}');
|
||||
}, 500);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
Reference in New Issue
Block a user