Skip to content
Extraits de code Groupes Projets
blocks_administrations.php 4,16 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_blocks_liens', 'spip_blocktypes']],
		['blocks_installe_config'],
	];
	$maj['1.1.0'] = [
		['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'],

		['maj_tables', ['spip_blocks', 'spip_blocks_liens', 'spip_blocktypes']],
	];

	$maj['1.1.1'] = [
		['maj_tables', ['spip_blocks']],
	];

	$maj['1.1.2'] = [
		['maj_tables', ['spip_blocktypes']],
	];

	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() {
	include_spip('blocks_fonctions');

	// associer par défaut aux articles
	ecrire_config('blocks/objets',
		[
			0 => 'spip_articles'
	// un type de block de démo : titre + texte
nicod's avatar
nicod a validé
			'titre'       => 'Démo texte simple',
			'identifiant' => 'demo_simple',
			'saisies'     => blocks_serialize([
				[
					'options'     =>
						[
							'nom'             => 'titre',
							'label'           => 'Titre',
							'conteneur_class' => 'pleine_largeur',
							'obligatoire'     => 'oui',
						],
					'identifiant' => uniqid('@'),
					'saisie'      => 'input',
				],
				[
					'options'     =>
						[
							'nom'              => 'texte',
							'label'            => 'Texte',
							'conteneur_class'  => 'pleine_largeur',
							'rows'             => '10',
							'inserer_barre'    => 'edition',
							'previsualisation' => 'on',
						],
					'identifiant' => uniqid('@'),
					'saisie'      => 'textarea',
				],
			]),
		]
	);
	// un type de block de démo : articles liés à un mot clé
		[
			'titre'       => 'Démo articles par mot clé',
			'identifiant' => 'demo_article_motcle',
			'saisies'     => blocks_serialize([
				[
					'options'     =>
						[
nicod's avatar
nicod a validé
							'nom'         => 'id_mot',
							'label'       => 'Mot clé',
							'obligatoire' => 'oui',
						],
					'identifiant' => uniqid('@'),
					'saisie'      => 'mot',
				],
			]),
		]
	);