Simplification : renommer bloc en block, et blocs_type en blocktype

master
nicod_ 4 weeks ago
parent b83f3992ea
commit c15a772a6a

@ -7,6 +7,6 @@ Cf TODO.md
Chaque type de bloc a un identifiant unique (slug), qui permet de chercher un squelette dans le path sous la forme blocks/identifiant.html, sinon on prend blocks/dist.html\
Dans le privé, on cherche d'abord blocks_prive/identifiant.html, ce qui permet d'avoir un affichage différent dans l'espace privé du site public (espace plus réduit en largeur, pas les même css ou js chargés)
Dans les squelettes du site public, ajouter simplement #GENERER_BLOCS pour générer tous les blocs d'un objet.\
La balise reconnait le contexte de la boucle en court, sinon on peut utiliser #GENERER_BLOCS{objet,#ID_OBJET}
Dans les squelettes du site public, ajouter simplement #GENERER_BLOCKS pour générer tous les blocs d'un objet.\
La balise reconnait le contexte de la boucle en court, sinon on peut utiliser #GENERER_BLOCKS{objet,#ID_OBJET}

@ -1,44 +1,44 @@
# Todo
[ ] Trouver un nom moins générique que blocks / blocs ?
[ ] Trouver un nom moins générique que blocks ?
## blocs
## blocks
[ ] Utiliser les crayons pour éditer un bloc côté public (cf branche dev/crayons)
[ ] Utiliser les crayons pour éditer un block côté public (cf branche dev/crayons)
[ ] Appliquer |propre automatiquement sur les textarea ?
[ ] Ne plus gérer de status de blocs mais gérer deux configs de blocs pour un objet, une publiée une prépa
[ ] Ne plus gérer de status de blocks mais gérer deux configs de blocks pour un objet, une publiée une prépa
[ ] Gérer un champ "ancre" sur chaque bloc, pour pouvoir faire un lien dessus depuis un autre endroit
[ ] Gérer un champ "ancre" sur chaque block, pour pouvoir faire un lien dessus depuis un autre endroit
[ ] Pouvoir détacher un bloc d'un objet et le rattacher à un autre objet ?
[ ] Pouvoir détacher un block d'un objet et le rattacher à un autre objet ?
[ ] Afficher les blocs sous les objets liés : largeur limitée, affichage simplifié + preview en popin ?
[ ] Afficher les blocks sous les objets liés : largeur limitée, affichage simplifié + preview en popin ?
-> problème chargement css / js du site public...
[ ] Gérer des logos de blocs ou les désactiver ?
[ ] Gérer des logos de blocks ou les désactiver ?
[ ] Charger un fichier .css.html depuis les pipelines insert_head, pour utiliser des paramètres du bloc dans une feuille de style ?
[ ] Charger un fichier .css.html depuis les pipelines insert_head, pour utiliser des paramètres du block dans une feuille de style ?
## blocs_types
## blocktypes
### Technique
[ ] Gérer des types de blocs conteneurs, qui peuvent contenir des blocs
[ ] Gérer des types de blocks conteneurs, qui peuvent contenir des blocks
[ ] Gérer les saisies de type fichier : associer les fichiers comme des documents du bloc ?
[ ] Gérer les saisies de type fichier : associer les fichiers comme des documents du block ?
[ ] Ajout d'un champ pour des css persos sur chaque type de bloc ? css spécifiques pour le privé ?
[ ] Ajout d'un champ pour des css persos sur chaque type de block ? css spécifiques pour le privé ?
Ou bien charger (privé et public) un blocks/identifiant.css ou scss ?
[ ] Dans la liste des blocs_types, indiquer s'il y a un squelette détecté ou pas
[ ] Dans la liste des blocktypes, indiquer s'il y a un squelette détecté ou pas
### UX
[ ] Saisie blocs_types plus visuelle, avec description / utilisation de leurs logos comme illustrations d'exemples de mise en page ? (cf compositions)
[ ] Saisie blocktypes plus visuelle, avec description / utilisation de leurs logos comme illustrations d'exemples de mise en page ? (cf compositions)
[ ] Créer quelques blocs types à l'installation
[ ] Créer quelques blocks types à l'installation
- Texte simple avec titre optionnel
- Galerie d'images avec params de mise en page
- autres ?

@ -14,7 +14,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function action_ordonner_liens_blocs_dist() {
function action_ordonner_liens_blocks_dist() {
action_ordonner_liens_dist();
}

@ -1,6 +1,6 @@
<?php
/**
* Utilisation de l'action supprimer pour l'objet bloc
* Utilisation de l'action supprimer pour l'objet block
*
* @plugin Blocks
* @copyright 2023
@ -14,7 +14,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
}
/**
* Action pour supprimer un·e bloc
* Action pour supprimer un·e block
*
* Vérifier l'autorisation avant d'appeler l'action.
*
@ -22,7 +22,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
* Identifiant à supprimer.
* En absence de id utilise l'argument de l'action sécurisée.
**/
function action_supprimer_bloc_dist($arg = null) {
function action_supprimer_block_dist($arg = null) {
if (is_null($arg)) {
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
@ -30,24 +30,24 @@ function action_supprimer_bloc_dist($arg = null) {
$arg = intval($arg);
// cas suppression
if (autoriser('supprimer', 'bloc', $arg)) {
if (autoriser('supprimer', 'block', $arg)) {
if ($arg) {
$objet = sql_fetsel('*', 'spip_blocs', 'id_bloc=' . sql_quote($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 bloc#$arg par $qui : " . json_encode($objet), "suppressions" . _LOG_INFO_IMPORTANTE);
spip_log("SUPPRESSION block#$arg par $qui : " . json_encode($objet), "suppressions" . _LOG_INFO_IMPORTANTE);
sql_delete('spip_blocs', 'id_bloc=' . sql_quote($arg));
sql_delete('spip_blocs_liens', 'id_bloc=' . sql_quote($arg));
sql_delete('spip_blocks', 'id_block=' . sql_quote($arg));
sql_delete('spip_blocks_liens', 'id_block=' . sql_quote($arg));
include_spip('action/editer_logo');
logo_supprimer('spip_blocs', $arg, 'on');
logo_supprimer('spip_blocs', $arg, 'off');
logo_supprimer('spip_blocks', $arg, 'on');
logo_supprimer('spip_blocks', $arg, 'off');
// invalider le cache
include_spip('inc/invalideur');
suivre_invalideur("id='bloc/$arg'");
suivre_invalideur("id='block/$arg'");
} else {
spip_log("action_supprimer_bloc_dist $arg pas compris");
spip_log("action_supprimer_block_dist $arg pas compris");
}
}
}

@ -1,6 +1,6 @@
<?php
/**
* Utilisation de l'action supprimer pour l'objet blocs_type
* Utilisation de l'action supprimer pour l'objet blocktype
*
* @plugin Blocks
* @copyright 2023
@ -14,7 +14,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
}
/**
* Action pour supprimer un·e blocs_type
* Action pour supprimer un·e blocktype
*
* Vérifier l'autorisation avant d'appeler l'action.
*
@ -22,7 +22,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
* Identifiant à supprimer.
* En absence de id utilise l'argument de l'action sécurisée.
**/
function action_supprimer_blocs_type_dist($arg = null) {
function action_supprimer_blocktype_dist($arg = null) {
$need_confirm = false;
if (is_null($arg)) {
$securiser_action = charger_fonction('securiser_action', 'inc');
@ -32,27 +32,27 @@ function action_supprimer_blocs_type_dist($arg = null) {
$arg = intval($arg);
if ($need_confirm) {
$ok = confirmer_supprimer_blocs_type_avant_action(_T('blocs_type:confirmer_supprimer_blocs_type'), _T('item_oui') . '! ' . _T('blocs_type:supprimer_blocs_type'));
$ok = confirmer_supprimer_blocktype_avant_action(_T('blocktype:confirmer_supprimer_blocktype'), _T('item_oui') . '! ' . _T('blocktype:supprimer_blocktype'));
}
// cas suppression
if (autoriser('supprimer', 'blocs_type', $arg)) {
if (autoriser('supprimer', 'blocktype', $arg)) {
if ($arg) {
$objet = sql_fetsel('*', 'spip_blocs_types', 'id_blocs_type=' . sql_quote($arg));
$objet = sql_fetsel('*', 'spip_blocktypes', 'id_blocktype=' . sql_quote($arg));
$qui = (!empty($GLOBALS['visiteur_session']['id_auteur']) ? 'auteur #' . $GLOBALS['visiteur_session']['id_auteur'] : 'IP ' . $GLOBALS['ip']);
spip_log("SUPPRESSION blocs_type#$arg par $qui : " . json_encode($objet), "suppressions" . _LOG_INFO_IMPORTANTE);
spip_log("SUPPRESSION blocktype#$arg par $qui : " . json_encode($objet), "suppressions" . _LOG_INFO_IMPORTANTE);
sql_delete('spip_blocs_types', 'id_blocs_type=' . sql_quote($arg));
sql_delete('spip_blocktypes', 'id_blocktype=' . sql_quote($arg));
include_spip('action/editer_logo');
logo_supprimer('spip_blocs_types', $arg, 'on');
logo_supprimer('spip_blocs_types', $arg, 'off');
logo_supprimer('spip_blocktypes', $arg, 'on');
logo_supprimer('spip_blocktypes', $arg, 'off');
// invalider le cache
include_spip('inc/invalideur');
suivre_invalideur("id='blocs_type/$arg'");
suivre_invalideur("id='blocktype/$arg'");
} else {
spip_log("action_supprimer_blocs_type_dist $arg pas compris");
spip_log("action_supprimer_blocktype_dist $arg pas compris");
}
}
}
@ -64,7 +64,7 @@ function action_supprimer_blocs_type_dist($arg = null) {
* @param string|null $url_action
* @return bool
*/
function confirmer_supprimer_blocs_type_avant_action($titre, $titre_bouton, $url_action = null) {
function confirmer_supprimer_blocktype_avant_action($titre, $titre_bouton, $url_action = null) {
if (!$url_action) {
$url_action = self();

@ -24,8 +24,8 @@ if (!defined('_ECRIRE_INC_VERSION')) {
*/
function blocks_declarer_tables_interfaces($interfaces) {
$interfaces['table_des_tables']['blocs'] = 'blocs';
$interfaces['table_des_tables']['blocs_types'] = 'blocs_types';
$interfaces['table_des_tables']['blocks'] = 'blocks';
$interfaces['table_des_tables']['blocktypes'] = 'blocktypes';
return $interfaces;
}
@ -41,27 +41,27 @@ function blocks_declarer_tables_interfaces($interfaces) {
*/
function blocks_declarer_tables_objets_sql($tables) {
$tables['spip_blocs'] = [
'type' => 'bloc',
$tables['spip_blocks'] = [
'type' => 'block',
'principale' => 'oui',
'field' => [
'id_bloc' => 'bigint(21) NOT NULL',
'id_blocs_type' => 'bigint(21) NOT NULL DEFAULT 0',
'id_block' => 'bigint(21) NOT NULL',
'id_blocktype' => 'bigint(21) NOT NULL DEFAULT 0',
'valeurs' => 'text NOT NULL DEFAULT ""',
'date' => 'datetime NOT NULL DEFAULT "0000-00-00 00:00:00"',
'statut' => 'varchar(20) DEFAULT "0" NOT NULL',
'maj' => 'timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP',
],
'key' => [
'PRIMARY KEY' => 'id_bloc',
'KEY id_blocs_type' => 'id_blocs_type',
'PRIMARY KEY' => 'id_block',
'KEY id_blocktype' => 'id_blocktype',
'KEY statut' => 'statut',
],
'titre' => 'id_blocs_type AS titre',
'titre' => 'id_blocktype AS titre',
'date' => 'date',
'champs_editables' => ['id_blocs_type'],
'champs_versionnes' => ['valeurs', 'id_blocs_type'],
'tables_jointures' => ['spip_blocs_liens'],
'champs_editables' => ['id_blocktype'],
'champs_versionnes' => ['valeurs', 'id_blocktype'],
'tables_jointures' => ['spip_blocks_liens'],
'statut_textes_instituer' => [
'prepa' => 'texte_statut_en_cours_redaction',
'prop' => 'texte_statut_propose_evaluation',
@ -78,16 +78,16 @@ function blocks_declarer_tables_objets_sql($tables) {
'exception' => ['statut', 'tout'],
],
],
'texte_changer_statut' => 'bloc:texte_changer_statut_bloc',
'texte_changer_statut' => 'block:texte_changer_statut_block',
'page' => false,
];
$tables['spip_blocs_types'] = [
'type' => 'blocs_type',
$tables['spip_blocktypes'] = [
'type' => 'blocktype',
'principale' => 'oui',
'table_objet_surnoms' => ['blocstype'], // table_objet('blocs_type') => 'blocs_types'
'table_objet_surnoms' => ['blockstype'], // table_objet('blocktype') => 'blocktypes'
'field' => [
'id_blocs_type' => 'bigint(21) NOT NULL',
'id_blocktype' => 'bigint(21) NOT NULL',
'titre' => 'text NOT NULL DEFAULT ""',
'description' => 'text NOT NULL DEFAULT ""',
'identifiant' => 'text NOT NULL DEFAULT ""',
@ -95,7 +95,7 @@ function blocks_declarer_tables_objets_sql($tables) {
'maj' => 'timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP',
],
'key' => [
'PRIMARY KEY' => 'id_blocs_type',
'PRIMARY KEY' => 'id_blocktype',
'UNIQUE KEY identifiant' => 'identifiant',
],
'titre' => 'titre AS titre, "" AS lang',
@ -107,7 +107,7 @@ function blocks_declarer_tables_objets_sql($tables) {
];
// jointure potentielle avec tous les objets
$tables[]['tables_jointures'][] = 'blocs_liens';
$tables[]['tables_jointures'][] = 'blocks_liens';
return $tables;
}
@ -123,17 +123,17 @@ function blocks_declarer_tables_objets_sql($tables) {
*/
function blocks_declarer_tables_auxiliaires($tables) {
$tables['spip_blocs_liens'] = [
$tables['spip_blocks_liens'] = [
'field' => [
'id_bloc' => 'bigint(21) DEFAULT "0" NOT NULL',
'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_bloc,id_objet,objet',
'UNIQUE KEY id_bloc' => 'id_bloc',
'PRIMARY KEY' => 'id_block,id_objet,objet',
'UNIQUE KEY id_block' => 'id_block',
],
];

@ -1,3 +1,3 @@
<p><code>Bloc de démo simple, affichage sur le site public</code></p>
<p><code>Block de démo simple, affichage sur le site public</code></p>
[<h2>(#TITRE)</h2>]
[(#TEXTE|propre)]

@ -1,5 +1,5 @@
<BOUCLE(BLOCS) {id_bloc} {statut?}>
#SET{saisies, #INFO_SAISIES{blocs_types,#ID_BLOCS_TYPE}|blocks_deserialize}
<BOUCLE(BLOCKS) {id_block} {statut?}>
#SET{saisies, #INFO_SAISIES{blocktypes,#ID_BLOCKTYPE}|blocks_deserialize}
#SET{valeurs, #VALEURS|blocks_deserialize}
[(#VOIR_SAISIES{#GET{saisies}, #GET{valeurs}})]
</BOUCLE>

@ -26,10 +26,23 @@ function blocks_upgrade($nom_meta_base_version, $version_cible) {
$maj = [];
$maj['create'] = [
['maj_tables', ['spip_blocs', 'spip_blocs_liens', 'spip_blocs_types']],
['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']],
];
include_spip('base/upgrade');
maj_plugin($nom_meta_base_version, $version_cible, $maj);
}
@ -43,18 +56,18 @@ function blocks_upgrade($nom_meta_base_version, $version_cible) {
**/
function blocks_vider_tables($nom_meta_base_version) {
sql_drop_table('spip_blocs');
sql_drop_table('spip_blocs_liens');
sql_drop_table('spip_blocs_types');
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', ['bloc', 'blocs_type']));
sql_delete('spip_mots_liens', sql_in('objet', ['bloc', 'blocs_type']));
sql_delete('spip_auteurs_liens', sql_in('objet', ['bloc', 'blocs_type']));
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', ['bloc', 'blocs_type']));
sql_delete('spip_versions_fragments', sql_in('objet', ['bloc', 'blocs_type']));
sql_delete('spip_forum', sql_in('objet', ['bloc', 'blocs_type']));
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);
}
@ -70,9 +83,9 @@ function blocks_installe_config() {
],
);
// un type de bloc de démo : titre + texte
// un type de block de démo : titre + texte
sql_insertq(
'spip_blocs_types',
'spip_blocktypes',
[
'titre' => 'Démo texte simple',
'identifiant' => 'demo_simple',
@ -105,9 +118,9 @@ function blocks_installe_config() {
]
);
// un type de bloc de démo : articles liés à un mot clé
// un type de block de démo : articles liés à un mot clé
sql_insertq(
'spip_blocs_types',
'spip_blocktypes',
[
'titre' => 'Démo articles par mot clé',
'identifiant' => 'demo_article_motcle',

@ -21,10 +21,10 @@ function blocks_autoriser() {
}
// -----------------
// Objet blocs
// Objet blocks
/**
* Autorisation de voir un élément de menu (blocs)
* Autorisation de voir un élément de menu (blocks)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
@ -33,12 +33,12 @@ function blocks_autoriser() {
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_blocs_menu_dist($faire, $type, $id, $qui, $opt) {
function autoriser_blocks_menu_dist($faire, $type, $id, $qui, $opt) {
return autoriser('webmestre', '', '', $qui);
}
/**
* Autorisation de voir (blocs)
* Autorisation de voir (blocks)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
@ -47,12 +47,12 @@ function autoriser_blocs_menu_dist($faire, $type, $id, $qui, $opt) {
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_blocs_voir_dist($faire, $type, $id, $qui, $opt) {
function autoriser_blocks_voir_dist($faire, $type, $id, $qui, $opt) {
return true;
}
/**
* Autorisation de voir (bloc)
* Autorisation de voir (block)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
@ -61,12 +61,12 @@ function autoriser_blocs_voir_dist($faire, $type, $id, $qui, $opt) {
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_bloc_voir_dist($faire, $type, $id, $qui, $opt) {
function autoriser_block_voir_dist($faire, $type, $id, $qui, $opt) {
return true;
}
/**
* Autorisation de créer (bloc)
* Autorisation de créer (block)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
@ -75,12 +75,12 @@ function autoriser_bloc_voir_dist($faire, $type, $id, $qui, $opt) {
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_bloc_creer_dist($faire, $type, $id, $qui, $opt) {
function autoriser_block_creer_dist($faire, $type, $id, $qui, $opt) {
return in_array($qui['statut'], ['0minirezo', '1comite']);
}
/**
* Autorisation de modifier (bloc)
* Autorisation de modifier (block)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
@ -89,12 +89,12 @@ function autoriser_bloc_creer_dist($faire, $type, $id, $qui, $opt) {
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_bloc_modifier_dist($faire, $type, $id, $qui, $opt) {
function autoriser_block_modifier_dist($faire, $type, $id, $qui, $opt) {
return in_array($qui['statut'], ['0minirezo', '1comite']);
}
/**
* Autorisation de supprimer (bloc)
* Autorisation de supprimer (block)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
@ -103,14 +103,14 @@ function autoriser_bloc_modifier_dist($faire, $type, $id, $qui, $opt) {
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_bloc_supprimer_dist($faire, $type, $id, $qui, $opt) {
function autoriser_block_supprimer_dist($faire, $type, $id, $qui, $opt) {
return ($qui['statut'] == '0minirezo' and !$qui['restreint'])
or (blocks_autoriser_statuts('bloc', $id, $qui, $opt)
and $auteurs = blocks_auteurs_objet('bloc', $id) and in_array($qui['id_auteur'], $auteurs));
or (blocks_autoriser_statuts('block', $id, $qui, $opt)
and $auteurs = blocks_auteurs_objet('block', $id) and in_array($qui['id_auteur'], $auteurs));
}
/**
* Autorisation de créer l'élément (bloc) dans un blocs_types
* Autorisation de créer l'élément (block) dans un blocktypes
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
@ -119,12 +119,12 @@ function autoriser_bloc_supprimer_dist($faire, $type, $id, $qui, $opt) {
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_blocstype_creerblocdans_dist($faire, $type, $id, $qui, $opt) {
return ($id and autoriser('voir', 'blocs_types', $id) and autoriser('creer', 'bloc'));
function autoriser_blockstype_creerblockdans_dist($faire, $type, $id, $qui, $opt) {
return ($id and autoriser('voir', 'blocktypes', $id) and autoriser('creer', 'block'));
}
/**
* Autorisation de lier/délier l'élément (blocs)
* Autorisation de lier/délier l'élément (blocks)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
@ -133,17 +133,17 @@ function autoriser_blocstype_creerblocdans_dist($faire, $type, $id, $qui, $opt)
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_associerblocs_dist($faire, $type, $id, $qui, $opt) {
function autoriser_associerblocks_dist($faire, $type, $id, $qui, $opt) {
return ($qui['statut'] == '0minirezo' and !$qui['restreint'])
or (blocks_autoriser_statuts('bloc', $id, $qui, $opt)
and $auteurs = blocks_auteurs_objet('bloc', $id) and in_array($qui['id_auteur'], $auteurs));
or (blocks_autoriser_statuts('block', $id, $qui, $opt)
and $auteurs = blocks_auteurs_objet('block', $id) and in_array($qui['id_auteur'], $auteurs));
}
// -----------------
// Objet blocs_types
// Objet blocktypes
/**
* Autorisation de voir un élément de menu (blocstypes)
* Autorisation de voir un élément de menu (blockstypes)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
@ -152,12 +152,12 @@ function autoriser_associerblocs_dist($faire, $type, $id, $qui, $opt) {
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_blocstypes_menu_dist($faire, $type, $id, $qui, $opt) {
function autoriser_blockstypes_menu_dist($faire, $type, $id, $qui, $opt) {
return true;
}
/**
* Autorisation de voir (blocstypes)
* Autorisation de voir (blockstypes)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
@ -166,12 +166,12 @@ function autoriser_blocstypes_menu_dist($faire, $type, $id, $qui, $opt) {
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_blocstypes_voir_dist($faire, $type, $id, $qui, $opt) {
function autoriser_blockstypes_voir_dist($faire, $type, $id, $qui, $opt) {
return true;
}
/**
* Autorisation de voir (blocstype)
* Autorisation de voir (blockstype)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
@ -180,12 +180,12 @@ function autoriser_blocstypes_voir_dist($faire, $type, $id, $qui, $opt) {
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_blocstype_voir_dist($faire, $type, $id, $qui, $opt) {
function autoriser_blockstype_voir_dist($faire, $type, $id, $qui, $opt) {
return true;
}
/**
* Autorisation de créer (blocstype)
* Autorisation de créer (blockstype)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
@ -194,12 +194,12 @@ function autoriser_blocstype_voir_dist($faire, $type, $id, $qui, $opt) {
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_blocstype_creer_dist($faire, $type, $id, $qui, $opt) {
function autoriser_blockstype_creer_dist($faire, $type, $id, $qui, $opt) {
return autoriser('webmestre', '', '', $qui);
}
/**
* Autorisation de modifier (blocstype)
* Autorisation de modifier (blockstype)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
@ -208,12 +208,12 @@ function autoriser_blocstype_creer_dist($faire, $type, $id, $qui, $opt) {
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_blocstype_modifier_dist($faire, $type, $id, $qui, $opt) {
function autoriser_blockstype_modifier_dist($faire, $type, $id, $qui, $opt) {
return autoriser('webmestre', '', '', $qui);
}
/**
* Autorisation de supprimer (blocstype)
* Autorisation de supprimer (blockstype)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
@ -222,8 +222,8 @@ function autoriser_blocstype_modifier_dist($faire, $type, $id, $qui, $opt) {
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_blocstype_supprimer_dist($faire, $type, $id, $qui, $opt) {
if (!sql_countsel('spip_blocs', 'id_blocs_type = '.(int)$id)) {
function autoriser_blockstype_supprimer_dist($faire, $type, $id, $qui, $opt) {
if (!sql_countsel('spip_blocks', 'id_blocktype = '.(int)$id)) {
return autoriser('webmestre', '', '', $qui);
}
return false;

@ -34,7 +34,7 @@ function blocks_deserialize($data) {
}
/**
* Compile la balise `#GENERER_BLOCK` qui génère l'affiche d'un bloc'
* Compile la balise `#GENERER_BLOCK` qui génère l'affiche d'un block'
*
* @balise
* @param Champ $p Pile au niveau de la balise
@ -46,44 +46,44 @@ function blocks_deserialize($data) {
* ```
*/
function balise_GENERER_BLOCK_dist($p) {
if (!($id_bloc = interprete_argument_balise(1, $p))) {
if (!($id_block = interprete_argument_balise(1, $p))) {
if ($p->id_boucle) {
$id_bloc = champ_sql($p->boucles[$p->id_boucle]->primary, $p);
$id_block = champ_sql($p->boucles[$p->id_boucle]->primary, $p);
}
}
if (!$id_bloc) {
if (!$id_block) {
$msg = _T('zbug_balise_sans_argument', ['balise' => ' GENERER_BLOCK']);
erreur_squelette($msg, $p);
$p->interdire_scripts = true;
return $p;
}
$p->code = "_block_charger_block($id_bloc)";
$p->code = "_block_charger_block($id_block)";
$p->interdire_scripts = false;
return $p;
}
function _block_charger_block($id_bloc) {
function _block_charger_block($id_block) {
$retour = '';
$where = ['b.id_bloc = ' . (int)$id_bloc];
$where = ['b.id_block = ' . (int)$id_block];
if (!test_espace_prive()) {
$where[] = 'b.statut = ' . sql_quote('publie');
}
if ($infos = sql_fetsel(
'b.valeurs, bt.saisies, bt.identifiant',
'spip_blocs_types bt join spip_blocs b using(id_blocs_type)',
'spip_blocktypes bt join spip_blocks b using(id_blocktype)',
$where
)) {
$contexte = [
'id_bloc' => $id_bloc,
'id_block' => $id_block,
];
// transmettre les valeurs saisies dans le bloc au squelette
$saisies_bloc_type = blocks_deserialize($infos['saisies']);
// transmettre les valeurs saisies dans le block au squelette
$saisies_blocktype = blocks_deserialize($infos['saisies']);
if ($valeurs_saisies = blocks_deserialize($infos['valeurs'])) {
include_spip('inc/saisies_lister');
$saisies_par_nom = saisies_lister_par_nom($saisies_bloc_type);
$saisies_par_nom = saisies_lister_par_nom($saisies_blocktype);
foreach ($saisies_par_nom as $nom => $saisie) {
$contexte[$nom] = $valeurs_saisies[$nom] ?? null;
}
@ -96,7 +96,7 @@ function _block_charger_block($id_bloc) {
}
/**
* Compile la balise `#GENERER_BLOCKS` qui génère l'affiche des blocs liés à un objet
* Compile la balise `#GENERER_BLOCKS` qui génère l'affiche des blocks liés à un objet
*
* @balise
* @param Champ $p Pile au niveau de la balise
@ -140,48 +140,48 @@ function _block_charger_blocks($objet, $id_objet) {
if (!test_espace_prive()) {
$where[] = 'b.statut = ' . sql_quote('publie');
}
$blocs = sql_allfetsel(
'b.id_bloc',
'spip_blocs_liens bl join spip_blocs b using(id_bloc)',
$blocks = sql_allfetsel(
'b.id_block',
'spip_blocks_liens bl join spip_blocks b using(id_block)',
$where,
'',
'bl.rang_lien'
);
foreach ($blocs as $bloc) {
$retour .= _block_charger_block($bloc['id_bloc']);
foreach ($blocks as $block) {
$retour .= _block_charger_block($block['id_block']);
}
return $retour;
}
/**
* Générer le titre d'un bloc
* Générer le titre d'un block
* composé de son type et du titre de l'objet auquel il est lié
*
* @param $id_bloc
* @param $id_block
* @return mixed|string
*/
function generer_TITRE_BLOC($id_bloc) {
function generer_TITRE_BLOCK($id_block) {
if ($infos = sql_fetsel(
'bt.titre, bl.objet, bl.rang_lien, bl.id_objet',
'spip_blocs b join spip_blocs_types bt using(id_blocs_type) left join spip_blocs_liens bl using(id_bloc)',
'b.id_bloc = ' . (int)$id_bloc
'spip_blocks b join spip_blocktypes bt using(id_blocktype) left join spip_blocks_liens bl using(id_block)',
'b.id_block = ' . (int)$id_block
)) {
$titre = $infos['titre'];
if ($infos['id_objet'] && $infos['objet']) {
$titre = generer_objet_info($infos['id_objet'], $infos['objet'], 'titre') . ' - ' . $titre . ' #' . $infos['rang_lien'];
}
} else {
$titre = _T('bloc:titre_bloc') . ' ' . $id_bloc;
$titre = _T('block:titre_block') . ' ' . $id_block;
}
return $titre;
}
/**
* Chercher le squelette correspondant à un bloc par son identifiant
* Chercher le squelette correspondant à un block par son identifiant
*
* @param string $identifiant Identifiant du bloc
* @param string $identifiant Identifiant du block
* @param bool $force_public Forcer une recherche du squelette public
* @param bool $chemin_complet Retourne le chemin complet du squelette
* @return string Chemin du squelette trouvé

@ -19,7 +19,7 @@ function blocks_header_prive($flux) {
}
/**
* Afficher la gestion des blocs sur la vue des objets
* Afficher la gestion des blocks sur la vue des objets
*
* @pipeline afficher_contenu_objet
* @param array $flux Données du pipeline
@ -34,12 +34,12 @@ function blocks_afficher_contenu_objet($flux) {
&& in_array(table_objet_sql($objet), $objets)
) {
$texte = recuperer_fond(
'prive/squelettes/inclure/blocs_objet',
'prive/squelettes/inclure/blocks_objet',
[
'objet' => $objet,
'id_objet' => $id_objet
],
['ajax' => 'blocs_objet']
['ajax' => 'blocks_objet']
);
if ($p = strpos($flux['data'], '<!--affiche_milieu-->')) {
$flux['data'] = substr_replace($flux['data'], $texte, $p, 0);
@ -64,12 +64,12 @@ function blocks_affiche_enfants($flux) {
) {
$id_objet = $flux['args']['id_objet'];
if ($e['type'] === 'blocs_type') {
if ($e['type'] === 'blocktype') {
$flux['data'] .= recuperer_fond(
'prive/objets/liste/blocs',
'prive/objets/liste/blocks',
[
'titre' => _T('bloc:titre_blocs'),
'id_blocs_type' => $id_objet,
'titre' => _T('block:titre_blocks'),
'id_blocktype' => $id_objet,
]
);
@ -86,12 +86,12 @@ function blocks_affiche_enfants($flux) {
* @return array Données du pipeline
**/
function blocks_objet_compte_enfants($flux) {
if ($flux['args']['objet'] == 'blocs_type' and $id_blocs_type = intval($flux['args']['id_objet'])) {
if ($flux['args']['objet'] == 'blocktype' and $id_blocktype = intval($flux['args']['id_objet'])) {
// juste les publiés ?
if (array_key_exists('statut', $flux['args']) and ($flux['args']['statut'] == 'publie')) {
$flux['data']['blocs'] = sql_countsel('spip_blocs', 'id_blocs_type= ' . intval($id_blocs_type) . " AND (statut = 'publie')");
$flux['data']['blocks'] = sql_countsel('spip_blocks', 'id_blocktype= ' . intval($id_blocktype) . " AND (statut = 'publie')");
} else {
$flux['data']['blocs'] = sql_countsel('spip_blocs', 'id_blocs_type= ' . intval($id_blocs_type) . " AND (statut <> 'poubelle')");
$flux['data']['blocks'] = sql_countsel('spip_blocks', 'id_blocktype= ' . intval($id_blocktype) . " AND (statut <> 'poubelle')");
}
}
return $flux;
@ -110,8 +110,8 @@ function blocks_objet_compte_enfants($flux) {
function blocks_optimiser_base_disparus($flux) {
include_spip('action/editer_liens');
$flux['data'] += objet_optimiser_liens(['bloc' => '*'], '*');
$flux['data'] += objet_optimiser_liens(['block' => '*'], '*');
sql_delete('spip_blocs', "statut='poubelle' AND maj < " . $flux['args']['date']);
sql_delete('spip_blocks', "statut='poubelle' AND maj < " . $flux['args']['date']);
return $flux;
}

@ -1,3 +1,3 @@
<p><code>Bloc de démo simple, affichage dans l'espace privé</code></p>
<p><code>Block de démo simple, affichage dans l'espace privé</code></p>
[<h2>(#TITRE)</h2>]
[(#TEXTE|propre)]

@ -1,5 +1,5 @@
.sp-icone-bloc {
.sp-icone-block {
background-color: white;
border-radius: 50%;
display: inline-flex;
@ -15,31 +15,31 @@
align-items: center;
}
.liste_items.blocs {
.liste_items.blocks {
}
.liste_items.blocs .item.bloc {
.liste_items.blocks .item.block {
position: relative;
border:1px solid var(--spip-color-gray-light);
border-radius:5px;
margin-bottom: 1rem;
padding: 0;
}
.liste_items.blocs .item:hover {
.liste_items.blocks .item:hover {
background-color: transparent;
}
.liste_items.blocs .item.bloc .objetbloc__header {
.liste_items.blocks .item.block .objetblock__header {
position: relative;
padding: calc(var(--spip-list-spacing-y) / 2) calc(var(--spip-list-spacing-x) / 2);
border-bottom: 1px solid var(--spip-color-gray-lighter);;
}
.liste_items.blocs .item.bloc .objetbloc__content {
.liste_items.blocks .item.block .objetblock__content {
padding: calc(var(--spip-list-spacing-y) / 2) calc(var(--spip-list-spacing-x) / 2);
}
.liste_items.blocs .actions {
.liste_items.blocks .actions {
position: absolute;
top: 50%;
transform: translateY(-50%);
@ -49,27 +49,27 @@
margin: 0;
z-index: 1;
}
.liste_items.blocs .actions button,
.liste_items.blocs .actions .btn {
.liste_items.blocks .actions button,
.liste_items.blocks .actions .btn {
cursor: pointer;
background-color: var(--spip-color-gray-lightest);
border: none;
margin: 0;
}
.liste_items.blocs .actions button:hover,
.liste_items.blocs .actions .btn:hover {
.liste_items.blocks .actions button:hover,
.liste_items.blocks .actions .btn:hover {
background-color: var(--spip-color-gray-lighter);
}
.liste_items.blocs .actions .puce_objet_popup {
.liste_items.blocks .actions .puce_objet_popup {
display: flex;
}
.liste_items.blocs .actions .move {
.liste_items.blocks .actions .move {
cursor:move;
}
.item.deplacer-bloc-placeholder { background-color: var(--spip-color-theme-lighter); }
.item.deplacer-block-placeholder { background-color: var(--spip-color-theme-lighter); }
.liste_items.blocs .objetbloc__content .formulaire_editer_bloc {
.liste_items.blocks .objetblock__content .formulaire_editer_block {
margin: 0;
}

@ -11,7 +11,7 @@
[(#SAISIE{choisir_objets, objets,
label=<:blocks:cfg_objets_label:/>, explication=<:blocks:cfg_objets_explication:/>,
exclus=#LISTE{spip_blocs,spip_blocs_types}
exclus=#LISTE{spip_blocks,spip_blocktypes}
})]
<p class="boutons">

@ -9,15 +9,15 @@
#GENERER_SAISIES{#ENV{_saisies}}
</div>
[(#ENV{id_blocs_type}|non)
[(#ENV{id_blocktype}|non)
<p class="boutons">
<button type="submit" class="submit" name="choisir" value="1"><:bloc:bouton_choisir:/></button>
<button type="submit" class="submit" name="choisir" value="1"><:block:bouton_choisir:/></button>
</p>
]
[(#ENV{id_blocs_type}|oui)
[(#ENV{id_blocktype}|oui)
<p class="boutons boutons-flex">
[(#ENV{include}|oui)<a href="#ENV{redirect}" class="submit btn btn_secondaire"><:bouton_annuler:/></a>]
<button type="submit" class="submit btn" name="ajouter" value="1">[(#ENV{id_bloc}|?{<:bloc:bouton_enregistrer:/>,<:bloc:bouton_ajouter:/>})]</button>
<button type="submit" class="submit btn" name="ajouter" value="1">[(#ENV{id_block}|?{<:block:bouton_enregistrer:/>,<:block:bouton_ajouter:/>})]</button>
</p>
]

@ -1,6 +1,6 @@
<?php
/**
* Gestion du formulaire de d'édition de bloc
* Gestion du formulaire de d'édition de block
*
* @plugin Blocks
* @copyright 2023
@ -20,23 +20,23 @@ include_spip('inc/editer');
/**
* Identifier le formulaire en faisant abstraction des paramètres qui ne représentent pas l'objet edité
*
* @param int|string $id_bloc Identifiant du bloc. 'new' pour un nouveau bloc.
* @param int|string $id_block Identifiant du block. 'new' pour un nouveau block.
* @param string|null $objet Type d'objet à associer (article, rubrique,...)
* @param int|null $id_objet Id de l'objet à associer
* @param string|null $retour URL de redirection après le traitement
* @param string|null $include Indique si le formulaire est ouvert en inclusion
* @return string Hash du formulaire
*/
function formulaires_editer_bloc_identifier_dist($id_bloc = 'new', $objet = null, $id_objet = null, $retour = null, $include = null) {
return serialize([intval($id_bloc), $objet, $id_objet]);
function formulaires_editer_block_identifier_dist($id_block = 'new', $objet = null, $id_objet = null, $retour = null, $include = null) {
return serialize([intval($id_block), $objet, $id_objet]);
}
/**
* Chargement du formulaire d'édition de bloc
* Chargement du formulaire d'édition de block
*
* Déclarer les champs postés et y intégrer les valeurs par défaut
*
* @param int|string $id_bloc Identifiant du bloc. 'new' pour un nouveau bloc.
* @param int|string $id_block Identifiant du block. 'new' pour un nouveau block.
* @param string|null $objet Type d'objet à associer (article, rubrique,...)
* @param int|null $id_objet Id de l'objet à associer
* @param string|null $retour URL de redirection après le traitement
@ -44,15 +44,15 @@ function formulaires_editer_bloc_identifier_dist($id_bloc = 'new', $objet = null
* @return array Environnement du formulaire
* @uses formulaires_editer_objet_charger()
*/
function formulaires_editer_bloc_charger_dist($id_bloc = 'new', $objet = null, $id_objet = null, $retour = null, $include = null) {
if ((int)$id_bloc) {
$id_blocs_type = (int)sql_getfetsel('id_blocs_type', 'spip_blocs', 'id_bloc = ' . $id_bloc);
$infos = sql_fetsel('id_objet, objet', 'spip_blocs_liens', 'id_bloc = ' . $id_bloc);
function formulaires_editer_block_charger_dist($id_block = 'new', $objet = null, $id_objet = null, $retour = null, $include = null) {
if ((int)$id_block) {
$id_blocktype = (int)sql_getfetsel('id_blocktype', 'spip_blocks', 'id_block = ' . $id_block);
$infos = sql_fetsel('id_objet, objet', 'spip_blocks_liens', 'id_block = ' . $id_block);
$objet = $infos['objet'];
$id_objet = $infos['id_objet'];
$valeurs = formulaires_editer_objet_charger('bloc', $id_bloc, $id_blocs_type, 0, $retour, '');
$valeurs = formulaires_editer_objet_charger('block', $id_block, $id_blocktype, 0, $retour, '');
} else {
$id_blocs_type = _request('id_blocs_type');
$id_blocktype = _request('id_blocktype');
}
if (!$objet || !(int)$id_objet) {
return null;
@ -61,42 +61,42 @@ function formulaires_editer_bloc_charger_dist($id_bloc = 'new', $objet = null, $
$valeurs['include'] = (bool)$include;
$valeurs['redirect'] = $retour;
if ($id_blocs_type) {
// charger les saisies du type de bloc
$saisies_bloc_type = [];
if ($saisies_json = sql_getfetsel('saisies', 'spip_blocs_types', 'id_blocs_type = ' . $id_blocs_type)) {
$saisies_bloc_type = blocks_deserialize($saisies_json);
if ($id_blocktype) {
// charger les saisies du type de block
$saisies_blocktype = [];
if ($saisies_json = sql_getfetsel('saisies', 'spip_blocktypes', 'id_blocktype = ' . $id_blocktype)) {
$saisies_blocktype = blocks_deserialize($saisies_json);
}
if (!$saisies_bloc_type) {
$saisies_bloc_type = [
if (!$saisies_blocktype) {
$saisies_blocktype = [
[
'saisie' => 'explication',
'options' => [
'nom' => 'saisies_vides',
'texte' => _T('blocs_type:aucune_saisie'),
'texte' => _T('blocktype:aucune_saisie'),
],
],
];
}
$valeurs['_saisies'] = saisies_inserer(
$saisies_bloc_type,
$saisies_blocktype,
[
'saisie' => 'hidden',
'options' => [
'nom' => 'id_blocs_type',
'nom' => 'id_blocktype',
'obligatoire' => 'oui',
],
],
0
);
$valeurs['id_blocs_type'] = $id_blocs_type;
$valeurs['id_blocktype'] = $id_blocktype;
// charger les valeurs déjà saisies
$valeurs_saisies = blocks_deserialize($valeurs['valeurs'] ?? null);
include_spip('inc/saisies_lister');
$saisies_par_nom = saisies_lister_par_nom($saisies_bloc_type);
$saisies_par_nom = saisies_lister_par_nom($saisies_blocktype);
foreach ($saisies_par_nom as $nom => $saisie) {
if ((int)$id_bloc) {
if ((int)$id_block) {
$valeurs[$nom] = (_request($nom) ? _request($nom) : ($valeurs_saisies[$nom] ?? ''));
} else {
$valeurs[$nom] = '';
@ -107,11 +107,11 @@ function formulaires_editer_bloc_charger_dist($id_bloc = 'new', $objet = null, $
$valeurs['_saisies'] = [
[
'saisie' => 'blocs_types',
'saisie' => 'blocktypes',
'options' => [
'nom' => 'id_blocs_type',
'nom' => 'id_blocktype',
'obligatoire' => 'oui',
'label' => _T('bloc:champ_id_blocs_type_label'),
'label' => _T('block:champ_id_blocktype_label'),
],
],
];
@ -121,11 +121,11 @@ function formulaires_editer_bloc_charger_dist($id_bloc = 'new', $objet = null, $
}
/**
* Vérifications du formulaire d'édition de bloc
* Vérifications du formulaire d'édition de block
*
* Vérifier les champs postés et signaler d'éventuelles erreurs
*
* @param int|string $id_bloc Identifiant du bloc. 'new' pour un nouveau bloc.
* @param int|string $id_block Identifiant du block. 'new' pour un nouveau block.
* @param string|null $objet Type d'objet à associer (article, rubrique,...)
* @param int|null $id_objet Id de l'objet à associer
* @param string|null $retour URL de redirection après le traitement
@ -133,28 +133,28 @@ function formulaires_editer_bloc_charger_dist($id_bloc = 'new', $objet = null, $
* @return array Tableau des erreurs
* @uses formulaires_editer_objet_verifier()
*/
function formulaires_editer_bloc_verifier_dist($id_bloc = 'new', $objet = null, $id_objet = null, $retour = null, $include = null) {
if ((int)$id_bloc) {
$id_blocs_type = (int)sql_getfetsel('id_blocs_type', 'spip_blocs', 'id_bloc = ' . $id_bloc);
function formulaires_editer_block_verifier_dist($id_block = 'new', $objet = null, $id_objet = null, $retour = null, $include = null) {
if ((int)$id_block) {
$id_blocktype = (int)sql_getfetsel('id_blocktype', 'spip_blocks', 'id_block = ' . $id_block);
} else {
$id_blocs_type = _request('id_blocs_type');
$id_blocktype = _request('id_blocktype');
}
$erreurs = [];
if (_request('choisir') && !$id_blocs_type) {
$erreurs['id_blocs_type'] = _T('info_obligatoire');
if (_request('choisir') && !$id_blocktype) {
$erreurs['id_blocktype'] = _T('info_obligatoire');
}
if (_request('ajouter')) {
if ($id_blocs_type) {
// charger les saisies du type de bloc
$saisies_bloc_type = [];
if ($saisies_json = sql_getfetsel('saisies', 'spip_blocs_types', 'id_blocs_type = ' . $id_blocs_type)) {
$saisies_bloc_type = blocks_deserialize($saisies_json);
if ($id_blocktype) {
// charger les saisies du type de block
$saisies_blocktype = [];
if ($saisies_json = sql_getfetsel('saisies', 'spip_blocktypes', 'id_blocktype = ' . $id_blocktype)) {
$saisies_blocktype = blocks_deserialize($saisies_json);
}
$erreurs = saisies_verifier($saisies_bloc_type);
$erreurs = saisies_verifier($saisies_blocktype);
} else {
$erreurs['id_blocs_type'] = _T('info_obligatoire');
$erreurs['id_blocktype'] = _T('info_obligatoire');
}
}
@ -162,11 +162,11 @@ function formulaires_editer_bloc_verifier_dist($id_bloc = 'new', $objet = null,
}
/**
* Traitement du formulaire d'édition de bloc
* Traitement du formulaire d'édition de block
*
* Traiter les champs postés
*
* @param int|string $id_bloc Identifiant du bloc. 'new' pour un nouveau bloc.
* @param int|string $id_block Identifiant du block. 'new' pour un nouveau block.
* @param string|null $objet Type d'objet à associer (article, rubrique,...)
* @param int|null $id_objet Id de l'objet à associer
* @param string|null $retour URL de redirection après le traitement
@ -174,37 +174,37 @@ function formulaires_editer_bloc_verifier_dist($id_bloc = 'new', $objet = null,
* @return array Retours des traitements
* @uses formulaires_editer_objet_traiter()
*/
function formulaires_editer_bloc_traiter_dist($id_bloc = 'new', $objet = null, $id_objet = null, $retour = null, $include = null) {
if ((int)$id_bloc) {
$id_blocs_type = (int)sql_getfetsel('id_blocs_type', 'spip_blocs', 'id_bloc = ' . $id_bloc);
$infos = sql_fetsel('id_objet, objet', 'spip_blocs_liens', 'id_bloc = ' . $id_bloc);
function formulaires_editer_block_traiter_dist($id_block = 'new', $objet = null, $id_objet = null, $retour = null, $include = null) {
if ((int)$id_block) {
$id_blocktype = (int)sql_getfetsel('id_blocktype', 'spip_blocks', 'id_block = ' . $id_block);
$infos = sql_fetsel('id_objet, objet', 'spip_blocks_liens', 'id_block = ' . $id_block);
$objet = $infos['objet'];
$id_objet = $infos['id_objet'];
$creation = false;
} else {
$id_blocs_type = _request('id_blocs_type');
$id_blocktype = _request('id_blocktype');
$creation = true;
}
$retours = [];
if ($id_blocs_type && $objet && (int)$id_objet && _request('ajouter')) {
if ($id_blocktype && $objet && (int)$id_objet && _request('ajouter')) {
$retours = formulaires_editer_objet_traiter('bloc', $id_bloc, $id_blocs_type, 0, $retour, '');
$retours = formulaires_editer_objet_traiter('block', $id_block, $id_blocktype, 0, $retour, '');
if ($id_bloc = $retours['id_bloc']) {
if ($id_block = $retours['id_block']) {
// mettre à jour le bloc avec les valeurs saisies
$saisies_bloc_type = [];
if ($saisies_json = sql_getfetsel('saisies', 'spip_blocs_types', 'id_blocs_type = ' . $id_blocs_type)) {
$saisies_bloc_type = blocks_deserialize($saisies_json);
// mettre à jour le block avec les valeurs saisies
$saisies_blocktype = [];
if ($saisies_json = sql_getfetsel('saisies', 'spip_blocktypes', 'id_blocktype = ' . $id_blocktype)) {
$saisies_blocktype = blocks_deserialize($saisies_json);
}
include_spip('inc/saisies_lister');
$valeurs = [];
$saisies_par_nom = saisies_lister_par_nom($saisies_bloc_type);
$saisies_par_nom = saisies_lister_par_nom($saisies_blocktype);
foreach ($saisies_par_nom as $nom => $saisie) {
$valeurs[$nom] = _request($nom);
}
sql_updateq('spip_blocs', ['valeurs' => blocks_serialize($valeurs)], 'id_bloc = ' . $id_bloc);
sql_updateq('spip_blocks', ['valeurs' => blocks_serialize($valeurs)], 'id_block = ' . $id_block);
// associer à l'objet
if (autoriser('modifier', $objet, $id_objet)) {
@ -213,7 +213,7 @@ function formulaires_editer_bloc_traiter_dist($id_bloc = 'new', $objet = null, $
if($creation) {
$rang = sql_getfetsel(
'max(rang_lien)',
'spip_blocs_liens',
'spip_blocks_liens',
[
'objet = '.sql_quote($objet),
'id_objet = '.$id_objet
@ -221,16 +221,16 @@ function formulaires_editer_bloc_traiter_dist($id_bloc = 'new', $objet = null, $
);
$qualif = ['rang_lien' => $rang + 1];
}
objet_associer(['bloc' => $id_bloc], [$objet => $id_objet], $qualif);
objet_associer(['block' => $id_block], [$objet => $id_objet], $qualif);
}
// un bloc est automatiquement publié lors de sa création
// un block est automatiquement publié lors de sa création
if($creation){
objet_instituer('bloc',$id_bloc,['statut' => 'publie']);
objet_instituer('block',$id_block,['statut' => 'publie']);
}
if ($include && isset($retours['redirect'])) {
$retours['redirect'] = ancre_url($retours['redirect'], 'bloc' . $id_bloc);
$retours['redirect'] = ancre_url($retours['redirect'], 'block' . $id_block);
}
}

@ -1,11 +1,11 @@
<div class='formulaire_spip formulaire_editer formulaire_#FORM formulaire_#FORM-#ENV{id_blocs_type,nouveau}'>
<div class='formulaire_spip formulaire_editer formulaire_#FORM formulaire_#FORM-#ENV{id_blocktype,nouveau}'>
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV**{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
[(#ENV{editable})
<form method="post" action="#ENV{action}"><div>
#ACTION_FORMULAIRE
<input type="hidden" name="id_blocs_type" value="#ENV{id_blocs_type}" />
<input type="hidden" name="id_blocktype" value="#ENV{id_blocktype}" />
<div class="editer-groupe">
#GENERER_SAISIES{#ENV*{_saisies}}

@ -1,6 +1,6 @@
<?php
/**
* Gestion du formulaire de d'édition de blocs_type
* Gestion du formulaire de d'édition de blocktype
*
* @plugin Blocks
* @copyright 2023
@ -17,31 +17,31 @@ include_spip('inc/actions');
include_spip('inc/editer');
/**
* Déclaration des saisies de blocs_type
* Déclaration des saisies de blocktype
*
* @param int|string $id_blocs_type
* Identifiant du blocs_type. 'new' pour un nouveau blocs_type.
* @param int|string $id_blocktype
* Identifiant du blocktype. 'new' pour un nouveau blocktype.
* @param string $retour
* URL de redirection après le traitement
* @param int $lier_trad
* Identifiant éventuel d'un blocs_type source d'une traduction
* Identifiant éventuel d'un blocktype source d'une traduction
* @param string $config_fonc
* Nom de la fonction ajoutant des configurations particulières au formulaire
* @param array $row
* Valeurs de la ligne SQL du blocs_type, si connu
* Valeurs de la ligne SQL du blocktype, si connu
* @param string $hidden
* Contenu HTML ajouté en même temps que les champs cachés du formulaire.
* @return array[]
* Saisies du formulaire
*/
function formulaires_editer_blocs_type_saisies_dist($id_blocs_type = 'new', $retour = '', $lier_trad = 0, $config_fonc = '', $row = [], $hidden = '') {
function formulaires_editer_blocktype_saisies_dist($id_blocktype = 'new', $retour = '', $lier_trad = 0, $config_fonc = '', $row = [], $hidden = '') {
$saisies = [
[
'saisie' => 'input',
'options' => [
'nom' => 'titre',
'obligatoire' => 'oui',
'label' => _T('blocs_type:champ_titre_label'),
'label' => _T('blocktype:champ_titre_label'),
],
],
@ -49,7 +49,7 @@ function formulaires_editer_blocs_type_saisies_dist($id_blocs_type = 'new', $ret
'saisie' => 'textarea',
'options' => [
'nom' => 'description',
'label' => _T('blocs_type:champ_description_label'),
'label' => _T('blocktype:champ_description_label'),
'rows' => 5,
],
@ -59,8 +59,8 @@ function formulaires_editer_blocs_type_saisies_dist($id_blocs_type = 'new', $ret
'options' => [
'nom' => 'identifiant',
'obligatoire' => 'oui',
'label' => _T('blocs_type:champ_identifiant_label'),
'explication' => _T('blocs_type:champ_identifiant_explication'),
'label' => _T('blocktype:champ_identifiant_label'),
'explication' => _T('blocktype:champ_identifiant_explication'),
],
],
@ -71,40 +71,40 @@ function formulaires_editer_blocs_type_saisies_dist($id_blocs_type = 'new', $ret
/**
* Identifier le formulaire en faisant abstraction des paramètres qui ne représentent pas l'objet edité
*
* @param int|string $id_blocs_type
* Identifiant du blocs_type. 'new' pour un nouveau blocs_type.
* @param int|string $id_blocktype
* Identifiant du blocktype. 'new' pour un nouveau blocktype.
* @param string $retour
* URL de redirection après le traitement
* @param int $lier_trad
* Identifiant éventuel d'un blocs_type source d'une traduction
* Identifiant éventuel d'un blocktype source d'une traduction
* @param string $config_fonc
* Nom de la fonction ajoutant des configurations particulières au formulaire
* @param array $row
* Valeurs de la ligne SQL du blocs_type, si connu
* Valeurs de la ligne SQL du blocktype, si connu
* @param string $hidden
* Contenu HTML ajouté en même temps que les champs cachés du formulaire.
* @return string
* Hash du formulaire
*/
function formulaires_editer_blocs_type_identifier_dist($id_blocs_type = 'new', $retour = '', $lier_trad = 0, $config_fonc = '', $row = [], $hidden = '') {
return serialize([intval($id_blocs_type)]);
function formulaires_editer_blocktype_identifier_dist($id_blocktype = 'new', $retour = '', $lier_trad = 0, $config_fonc = '', $row = [], $hidden = '') {
return serialize([intval($id_blocktype)]);
}
/**
* Chargement du formulaire d'édition de blocs_type
* Chargement du formulaire d'édition de blocktype
*
* Déclarer les champs postés et y intégrer les valeurs par défaut
*
* @param int|string $id_blocs_type
* Identifiant du blocs_type. 'new' pour un nouveau blocs_type.
* @param int|string $id_blocktype
* Identifiant du blocktype. 'new' pour un nouveau blocktype.
* @param string $retour
* URL de redirection après le traitement
* @param int $lier_trad
* Identifiant éventuel d'un blocs_type source d'une traduction
* Identifiant éventuel d'un blocktype source d'une traduction
* @param string $config_fonc
* Nom de la fonction ajoutant des configurations particulières au formulaire
* @param array $row
* Valeurs de la ligne SQL du blocs_type, si connu
* Valeurs de la ligne SQL du blocktype, si connu
* @param string $hidden
* Contenu HTML ajouté en même temps que les champs cachés du formulaire.
* @return array
@ -112,28 +112,28 @@ function formulaires_editer_blocs_type_identifier_dist($id_blocs_type = 'new', $
* @uses formulaires_editer_objet_charger()
*
*/
function formulaires_editer_blocs_type_charger_dist($id_blocs_type = 'new', $retour = '', $lier_trad = 0, $config_fonc = '', $row = [], $hidden = '') {
$valeurs = formulaires_editer_objet_charger('blocs_type', $id_blocs_type, '', $lier_trad, $retour, $config_fonc, $row, $hidden);
function formulaires_editer_blocktype_charger_dist($id_blocktype = 'new', $retour = '', $lier_trad = 0, $config_fonc = '', $row = [], $hidden = '') {
$valeurs = formulaires_editer_objet_charger('blocktype', $id_blocktype, '', $lier_trad, $retour, $config_fonc, $row, $hidden);
$valeurs['saisies'] = call_user_func_array('formulaires_editer_blocs_type_saisies_dist', func_get_args());
$valeurs['saisies'] = call_user_func_array('formulaires_editer_blocktype_saisies_dist', func_get_args());
return $valeurs;
}
/**
* Vérifications du formulaire d'édition de blocs_type
* Vérifications du formulaire d'édition de blocktype
*
* Vérifier les champs postés et signaler d'éventuelles erreurs
*
* @param int|string $id_blocs_type
* Identifiant du blocs_type. 'new' pour un nouveau blocs_type.
* @param int|string $id_blocktype
* Identifiant du blocktype. 'new' pour un nouveau blocktype.
* @param string $retour
* URL de redirection après le traitement
* @param int $lier_trad
* Identifiant éventuel d'un blocs_type source d'une traduction
* Identifiant éventuel d'un blocktype source d'une traduction
* @param string $config_fonc
* Nom de la fonction ajoutant des configurations particulières au formulaire
* @param array $row
* Valeurs de la ligne SQL du blocs_type, si connu
* Valeurs de la ligne SQL du blocktype, si connu
* @param string $hidden
* Contenu HTML ajouté en même temps que les champs cachés du formulaire.
* @return array
@ -141,28 +141,28 @@ function formulaires_editer_blocs_type_charger_dist($id_blocs_type = 'new', $ret
* @uses formulaires_editer_objet_verifier()
*
*/
function formulaires_editer_blocs_type_verifier_dist($id_blocs_type = 'new', $retour = '', $lier_trad = 0, $config_fonc = '', $row = [], $hidden = '') {
function formulaires_editer_blocktype_verifier_dist($id_blocktype = 'new', $retour = '', $lier_trad = 0, $config_fonc = '', $row = [], $hidden = '') {
$erreurs = formulaires_editer_objet_verifier('blocs_type', $id_blocs_type, ['titre', 'identifiant']);
$erreurs = formulaires_editer_objet_verifier('blocktype', $id_blocktype, ['titre', 'identifiant']);
return $erreurs;
}
/**
* Traitement du formulaire d'édition de blocs_type
* Traitement du formulaire d'édition de blocktype
*
* Traiter les champs postés
*
* @param int|string $id_blocs_type
* Identifiant du blocs_type. 'new' pour un nouveau blocs_type.
* @param int|string $id_blocktype
* Identifiant du blocktype. 'new' pour un nouveau blocktype.
* @param string $retour
* URL de redirection après le traitement
* @param int $lier_trad
* Identifiant éventuel d'un blocs_type source d'une traduction
* Identifiant éventuel d'un blocktype source d'une traduction
* @param string $config_fonc
* Nom de la fonction ajoutant des configurations particulières au formulaire
* @param array $row
* Valeurs de la ligne SQL du blocs_type, si connu
* Valeurs de la ligne SQL du blocktype, si connu
* @param string $hidden
* Contenu HTML ajouté en même temps que les champs cachés du formulaire.
* @return array
@ -170,11 +170,11 @@ function formulaires_editer_blocs_type_verifier_dist($id_blocs_type = 'new', $re
* @uses formulaires_editer_objet_traiter()
*
*/
function formulaires_editer_blocs_type_traiter_dist($id_blocs_type = 'new', $retour = '', $lier_trad = 0, $config_fonc = '', $row = [], $hidden = '') {
$retours = formulaires_editer_objet_traiter('blocs_type', $id_blocs_type, '', $lier_trad, $retour, $config_fonc, $row, $hidden);
if (!(int)$id_blocs_type) {
// en cas de création d'un type de bloc, rediriger vers la configuration des champs
$retours['redirect'] = generer_url_ecrire('blocs_type_edit_champs', 'id_blocs_type=' . $retours['id_blocs_type']);
function formulaires_editer_blocktype_traiter_dist($id_blocktype = 'new', $retour = '', $lier_trad = 0, $config_fonc = '', $row = [], $hidden = '') {
$retours = formulaires_editer_objet_traiter('blocktype', $id_blocktype, '', $lier_trad, $retour, $config_fonc, $row, $hidden);
if (!(int)$id_blocktype) {
// en cas de création d'un type de block, rediriger vers la configuration des champs
$retours['redirect'] = generer_url_ecrire('blocktype_edit_champs', 'id_blocktype=' . $retours['id_blocktype']);
}
return $retours;
}

@ -24,7 +24,7 @@
[(#REM) declarer les hidden qui declencheront le service du formulaire
parametre : url d'action ]
#ACTION_FORMULAIRE{#ENV{action}}
<input type="hidden" name="id_blocs_type" value="#ENV{id_blocs_type}" />
<input type="hidden" name="id_blocktype" value="#ENV{id_blocktype}" />
<div class="boutons">
<span class='image_loading'></span>

@ -6,37 +6,37 @@ if (!defined('_ECRIRE_INC_VERSION')) {
include_spip('blocks_fonctions');
function formulaires_editer_blocs_type_champs_charger($id_blocs_type, $redirect = '') {
$id_blocs_type = intval($id_blocs_type);