From b2663ab4ab29c8fbd0ae1fe48e2b839cba6956ca Mon Sep 17 00:00:00 2001
From: nicod_ <nicod@lerebooteux.fr>
Date: Thu, 23 Jan 2025 21:42:13 +0100
Subject: [PATCH] =?UTF-8?q?refactor:=20D=C3=A9placement=20de=20l'action=20?=
 =?UTF-8?q?de=20suppression=20d'un=20block=20dans=20un=20fichier=20d'inclu?=
 =?UTF-8?q?de=20=C3=A0=20part?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Suppression des blocks enfants en même temps que le block parent
---
 action/editer_block.php    | 22 ++++++++++++++++++++++
 action/supprimer_block.php | 30 +++++++-----------------------
 2 files changed, 29 insertions(+), 23 deletions(-)
 create mode 100644 action/editer_block.php

diff --git a/action/editer_block.php b/action/editer_block.php
new file mode 100644
index 0000000..470f0c8
--- /dev/null
+++ b/action/editer_block.php
@@ -0,0 +1,22 @@
+<?php
+
+function block_supprimer($id_block) {
+
+	if ((int)$id_block && autoriser('supprimer', 'block', $id_block)) {
+
+		$objet = sql_fetsel('*', 'spip_blocks', 'id_block=' . sql_quote($id_block));
+		$qui = (!empty($GLOBALS['visiteur_session']['id_auteur']) ? 'auteur #' . $GLOBALS['visiteur_session']['id_auteur'] : 'IP ' . $GLOBALS['ip']);
+		spip_log("SUPPRESSION block#$id_block par $qui : " . json_encode($objet), "blocks" . _LOG_INFO_IMPORTANTE);
+
+		sql_delete('spip_blocks', 'id_block=' . sql_quote($id_block));
+		include_spip('action/editer_logo');
+		logo_supprimer('spip_blocks', $id_block, 'on');
+		logo_supprimer('spip_blocks', $id_block, 'off');
+
+		$enfants = sql_allfetsel('id_block', 'spip_blocks', 'objet = "block" and id_objet = ' . $id_block);
+		foreach ($enfants as $enfant) {
+			block_supprimer($enfant['id_block']);
+		}
+
+	}
+}
diff --git a/action/supprimer_block.php b/action/supprimer_block.php
index c32ed9a..62bcdb4 100644
--- a/action/supprimer_block.php
+++ b/action/supprimer_block.php
@@ -14,41 +14,25 @@ if (!defined('_ECRIRE_INC_VERSION')) {
 }
 
 /**
- * Action pour supprimer un·e block
+ * Action pour supprimer un block
  *
  * Vérifier l'autorisation avant d'appeler l'action.
  *
  * @param null|int $arg
  *     Identifiant à supprimer.
  *     En absence de id utilise l'argument de l'action sécurisée.
- *
- * @throws \JsonException
  */
 function action_supprimer_block_dist($arg = null) {
 	if (is_null($arg)) {
 		$securiser_action = charger_fonction('securiser_action', 'inc');
 		$arg = $securiser_action();
 	}
-	$arg = intval($arg);
-
-	// cas suppression
-	if (autoriser('supprimer', 'block', $arg)) {
-		if ($arg) {
-			$objet = sql_fetsel('*', 'spip_blocks', 'id_block=' . sql_quote($arg));
-			$qui = (!empty($GLOBALS['visiteur_session']['id_auteur']) ? 'auteur #' . $GLOBALS['visiteur_session']['id_auteur'] : 'IP ' . $GLOBALS['ip']);
-			spip_log("SUPPRESSION block#$arg par $qui : " . json_encode($objet), "suppressions" . _LOG_INFO_IMPORTANTE);
+	$id_block = intval($arg);
 
-			sql_delete('spip_blocks', 'id_block=' . sql_quote($arg));
-			include_spip('action/editer_logo');
-			logo_supprimer('spip_blocks', $arg, 'on');
-			logo_supprimer('spip_blocks', $arg, 'off');
+	include_spip('action/editer_block');
+	block_supprimer($id_block);
 
-			// invalider le cache
-			include_spip('inc/invalideur');
-			suivre_invalideur("id='block/$arg'");
-
-		} else {
-			spip_log("action_supprimer_block_dist $arg pas compris");
-		}
-	}
+	// invalider le cache
+	include_spip('inc/invalideur');
+	suivre_invalideur("id='block/$id_block'");
 }
-- 
GitLab