import db from ..flow.ensure_flow_schema import ensure_flow_schema from .element_descendant_ids import element_descendant_ids def flow_nodes_referencing_element(slug, element_id): """Nombre de nœuds de la Logique de la scène (déclencheur "clic sur cet élément", action "Modifier cet élément"/"Activer cet onglet", condition de collision — Phase 5...) qui référencent cet élément OU L'UN DE SES DESCENDANTS — donc qui seraient supprimés SI on supprimait cet élément (voir delete_element.py). Utilisé pour prévenir l'utilisateur AVANT qu'il confirme la suppression (voir la modale de confirmation dans screen_edit.html), plutôt que de les supprimer en silence.""" ensure_flow_schema(slug) conn = db.connect(slug) row = conn.execute("SELECT screen_id FROM _screen_elements WHERE id = ?", (element_id,)).fetchone() if not row: conn.close() return 0 ids = element_descendant_ids(conn, row["screen_id"], element_id) placeholders = ",".join("?" * len(ids)) count = conn.execute( f"""SELECT COUNT(*) AS c FROM _flow_nodes WHERE trigger_element_id IN ({placeholders}) OR target_element_id IN ({placeholders}) OR cond_element_a IN ({placeholders}) OR cond_element_b IN ({placeholders})""", ids + ids + ids + ids, ).fetchone()["c"] conn.close() return count