Skip to content
Extraits de code Groupes Projets
blocks_administrations.php 4,21 ko
Newer Older
<?php
/**
 * Fichier gérant l'installation et désinstallation du plugin Blocks
 *
 * @plugin     Blocks
 * @copyright  2023
 * @author     nicod_
 * @licence    GNU/GPL
 * @package    SPIP\Blocks\Installation
 */

if (!defined('_ECRIRE_INC_VERSION')) {
	return;
}

/**
 * Fonction d'installation et de mise à jour du plugin Blocks.
 *
 * @param string $nom_meta_base_version
 *     Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
 * @param string $version_cible
 *     Version du schéma de données dans ce plugin (déclaré dans paquet.xml)
 * @return void
 **/
function blocks_upgrade($nom_meta_base_version, $version_cible) {
	$maj = [];

	$maj['create'] = [
		['maj_tables', ['spip_blocks', 'spip_blocktypes', 'spip_blocktypes_liens']],
		['blocks_installe_config'],
	];
nicod's avatar
nicod a validé
		['blocks_update_1_0_1'],
		['maj_tables', ['spip_blocks', 'spip_blocks_liens', 'spip_blocktypes']],
	];

nicod's avatar
nicod a validé
	$maj['1.2.0'] = [
		['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'],
	];

	$maj['2.0.0'] = [
		['sql_alter', 'TABLE spip_blocks DROP INDEX id_blocktype'],
		['maj_tables', ['spip_blocks']],
		['blocks_update_2_0_0'],
	];

	include_spip('base/upgrade');
	maj_plugin($nom_meta_base_version, $version_cible, $maj);
}

/**
 * Fonction de désinstallation du plugin Blocks.
 *
 * @param string $nom_meta_base_version
 *     Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
 * @return void
 **/
function blocks_vider_tables($nom_meta_base_version) {

	sql_drop_table('spip_blocks');
	sql_drop_table('spip_blocks_liens');
	sql_drop_table('spip_blocktypes');

	# Nettoyer les liens courants (le génie optimiser_base_disparus se chargera de nettoyer toutes les tables de liens)
	sql_delete('spip_documents_liens', sql_in('objet', ['block', 'blocktype']));
	sql_delete('spip_mots_liens', sql_in('objet', ['block', 'blocktype']));
	sql_delete('spip_auteurs_liens', sql_in('objet', ['block', 'blocktype']));
	# Nettoyer les versionnages et forums
	sql_delete('spip_versions', sql_in('objet', ['block', 'blocktype']));
	sql_delete('spip_versions_fragments', sql_in('objet', ['block', 'blocktype']));
	sql_delete('spip_forum', sql_in('objet', ['block', 'blocktype']));

	effacer_meta($nom_meta_base_version);
}

function blocks_installe_config() {
	// associer par défaut les blocks aux articles
	ecrire_config('blocks/objets',
		[
nicod's avatar
nicod a validé
			0 => 'spip_articles',
nicod's avatar
nicod a validé

nicod's avatar
nicod a validé
function blocks_update_1_0_1() {
nicod's avatar
nicod a validé
	// renommage des tables
	sql_alter('TABLE spip_blocs RENAME TO spip_blocks');
	sql_alter('TABLE spip_blocs_liens RENAME TO spip_blocks_liens');
	sql_alter('TABLE spip_blocs_types RENAME TO spip_blocktypes');

	sql_alter('TABLE spip_blocks CHANGE id_bloc id_block bigint(21) NOT NULL AUTO_INCREMENT');
	sql_alter('TABLE spip_blocks CHANGE id_blocs_type id_blocktype bigint(21) NOT NULL DEFAULT 0');
	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']
		);
	}
	// Le statut prop disparait au profit de prepa
	sql_updateq('spip_blocks',['statut' => 'prepa'],'statut = "prop"');

function blocks_update_2_0_0() {
	// on modifie id_blocktype en renseignant directement l'identifiant du blocktype
	$blocktypes = sql_allfetsel('id_blocktype, identifiant', 'spip_blocktypes');
	foreach ($blocktypes as $blocktype) {
		sql_updateq(
			'spip_blocks',
			[
				'blocktype' => $blocktype['identifiant'],
			],
			'id_blocktype = ' . $blocktype['id_blocktype']
		);
	}
	// on n'a plus besoin de cette colonne
	sql_alter('TABLE spip_blocks DROP id_blocktype');
}