From ffb02492083f17256a7657e0ef95b40b67e3fdda Mon Sep 17 00:00:00 2001
From: nicod_ <nicod@lerebooteux.fr>
Date: Tue, 6 Jun 2023 15:10:27 +0200
Subject: [PATCH] =?UTF-8?q?Supprimer=20la=20table=20spip=5Fblocks=5Fliens?=
 =?UTF-8?q?=20et=20d=C3=A9placer=20objet/id=5Fobjet=20dans=20spip=5Fblocks?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 base/blocks.php            | 28 +++++++++-------------------
 blocks_administrations.php | 24 +++++++++++++++++++++++-
 paquet.xml                 |  2 +-
 3 files changed, 33 insertions(+), 21 deletions(-)

diff --git a/base/blocks.php b/base/blocks.php
index 864ca34..9b52976 100644
--- a/base/blocks.php
+++ b/base/blocks.php
@@ -47,6 +47,9 @@ function blocks_declarer_tables_objets_sql($tables) {
 		'field'                   => [
 			'id_block'     => 'bigint(21) NOT NULL',
 			'id_blocktype' => 'bigint(21) NOT NULL DEFAULT 0',
+			'objet'        => 'varchar(25) DEFAULT "" NOT NULL',
+			'id_objet'     => 'bigint(21) DEFAULT "0" NOT NULL',
+			'rang_lien'    => 'int(4) DEFAULT "0" NOT NULL',
 			'ancre'        => 'varchar(20) NOT NULL DEFAULT ""',
 			'valeurs'      => 'text NOT NULL DEFAULT ""',
 			'date'         => 'datetime NOT NULL DEFAULT "0000-00-00 00:00:00"',
@@ -56,13 +59,15 @@ function blocks_declarer_tables_objets_sql($tables) {
 		'key'                     => [
 			'PRIMARY KEY'      => 'id_block',
 			'KEY id_blocktype' => 'id_blocktype',
+			'KEY objet'        => 'objet',
+			'KEY id_objet'     => 'id_objet',
 			'KEY statut'       => 'statut',
 		],
 		'titre'                   => 'id_blocktype AS titre',
 		'date'                    => 'date',
-		'champs_editables'        => ['id_blocktype', 'ancre'],
-		'champs_versionnes'       => ['id_blocktype', 'ancre', 'valeurs'],
-		'tables_jointures'        => ['spip_blocks_liens'],
+		'champs_editables'        => ['id_blocktype', 'id_objet', 'objet', 'ancre'],
+		'champs_versionnes'       => ['id_blocktype', 'id_objet', 'objet', 'ancre', 'valeurs'],
+		'tables_jointures'        => ['spip_blocktypes'],
 		'statut_textes_instituer' => [
 			'prepa'  => 'texte_statut_en_cours_redaction',
 			'prop'   => 'texte_statut_propose_evaluation',
@@ -118,7 +123,7 @@ function blocks_declarer_tables_objets_sql($tables) {
 	];
 
 	// jointure potentielle avec tous les objets
-	$tables[]['tables_jointures'][] = 'blocks_liens';
+	$tables[]['tables_jointures'][] = 'blocks';
 
 	return $tables;
 }
@@ -134,21 +139,6 @@ function blocks_declarer_tables_objets_sql($tables) {
  */
 function blocks_declarer_tables_auxiliaires($tables) {
 
-	$tables['spip_blocks_liens'] = [
-		'field' => [
-			'id_block'  => 'bigint(21) DEFAULT "0" NOT NULL',
-			'id_objet'  => 'bigint(21) DEFAULT "0" NOT NULL',
-			'objet'     => 'varchar(25) DEFAULT "" NOT NULL',
-			'rang_lien' => 'int(4) DEFAULT "0" NOT NULL',
-			'vu'        => 'varchar(6) DEFAULT "non" NOT NULL',
-		],
-		'key'   => [
-			'PRIMARY KEY'         => 'id_block,id_objet,objet',
-			// clé unique : un block ne peut être associé qu'à un seul objet
-			'UNIQUE KEY id_block' => 'id_block',
-		],
-	];
-
 	// table de liaison entre blocktypes enfants / parents
 	$tables['spip_blocktypes_liens'] = [
 		'field' => [
diff --git a/blocks_administrations.php b/blocks_administrations.php
index 5821c0b..ba53d83 100644
--- a/blocks_administrations.php
+++ b/blocks_administrations.php
@@ -26,7 +26,7 @@ function blocks_upgrade($nom_meta_base_version, $version_cible) {
 	$maj = [];
 
 	$maj['create'] = [
-		['maj_tables', ['spip_blocks', 'spip_blocks_liens', 'spip_blocktypes', 'spip_blocktypes_liens']],
+		['maj_tables', ['spip_blocks', 'spip_blocktypes', 'spip_blocktypes_liens']],
 		['blocks_installe_config'],
 	];
 
@@ -39,6 +39,12 @@ function blocks_upgrade($nom_meta_base_version, $version_cible) {
 		['maj_tables', ['spip_blocks', 'spip_blocktypes', 'spip_blocktypes_liens']],
 	];
 
+	$maj['1.3.0'] = [
+		['maj_tables', ['spip_blocks', 'spip_blocktypes', 'spip_blocktypes_liens']],
+		['blocks_update_1_3_0'],
+		['sql_drop_table', 'spip_blocks_liens'],
+	];
+
 	include_spip('base/upgrade');
 	maj_plugin($nom_meta_base_version, $version_cible, $maj);
 }
@@ -146,3 +152,19 @@ function blocks_update_1_0_1() {
 	sql_alter('TABLE spip_blocks_liens CHANGE id_bloc id_block bigint(21) NOT NULL DEFAULT 0');
 	sql_alter('TABLE spip_blocktypes CHANGE id_blocs_type id_blocktype bigint(21) NOT NULL AUTO_INCREMENT');
 }
+
+function blocks_update_1_3_0() {
+	// transférer les liens de spip_blocks_liens vers spip_blocks
+	$blocks_liens = sql_allfetsel('*', 'spip_blocks_liens');
+	foreach ($blocks_liens as $blocks_lien) {
+		sql_updateq(
+			'spip_blocks',
+			[
+				'id_objet'  => $blocks_lien['id_objet'],
+				'objet'     => $blocks_lien['objet'],
+				'rang_lien' => $blocks_lien['rang_lien'],
+			],
+			'id_block = ' . $blocks_lien['id_block']
+		);
+	}
+}
diff --git a/paquet.xml b/paquet.xml
index 2a38d5a..3296b87 100644
--- a/paquet.xml
+++ b/paquet.xml
@@ -5,7 +5,7 @@
     compatibilite="[4.2.0;4.2.*]"
     logo="prive/themes/spip/images/blocks-xx.svg"
     documentation=""
-    schema="1.2.0"
+    schema="1.3.0"
 >
 
     <nom>Blocks</nom>
-- 
GitLab