4 * Déclaration colonnes SQL des champs extras
6 * @package SPIP\Cextras\Pipelines
10 if (!defined("_ECRIRE_INC_VERSION")) return;
14 * Déclarer les nouveaux champs et les nouvelles infos des objets éditoriaux
16 * La fonction déclare tous les champs extras (saisies de type sql).
18 * Elle déclare aussi, en fonction des options choisies pour les champs
19 * - la recherche dans le champs, avec une certaine pondération,
20 * - le versionnage de champ
23 * Ne pas utiliser dans le code de cette fonction
24 * table_objet() qui ferait une réentrance et des calculs faux.
26 * @pipeline declarer_tables_objets_sql
27 * @param array $tables
28 * Description des tables
30 * Description complétée des tables
32 function cextras_declarer_tables_objets_sql($tables){
34 include_spip('inc/cextras');
36 // recuperer les champs crees par les plugins
37 // array($table => array(Liste de saisies))
38 include_spip('inc/saisies');
40 // si saisies a ete supprime par ftp, on sort tranquilou sans tuer SPIP.
41 // champs extras sera ensuite desactive par admin plugins.
42 if (!function_exists('saisies_lister_avec_sql')) {
46 $saisies_tables = pipeline('declarer_champs_extras', array());
47 foreach ($saisies_tables as $table => $saisies) {
48 if (isset($tables[$table])) {
49 $saisies = saisies_lister_avec_sql($saisies);
50 foreach ($saisies as $saisie) {
51 $nom = $saisie['options']['nom'];
52 if (!isset($tables[$table]['field'][$nom])) {
53 $tables[$table]['field'][$nom] = $saisie['options']['sql'];
55 // on l'ajoute dans la liste des champs editables
56 if (isset($tables[$table]['champs_editables'])
57 and !in_array($nom, $tables[$table]['champs_editables'])){
58 $tables[$table]['champs_editables'][] = $nom;
61 // ajouter le champ dans les analyses de recherche si demande
62 // l'option rechercher peut valoir 'on', true, ou 5 (entier) pour l'indice de ponderation
63 // par defaut, la ponderation est de 2.
64 if (isset($saisie['options']['rechercher']) and $saisie['options']['rechercher']) {
65 $ponderation = $saisie['options']['rechercher'];
66 if ($ponderation === 'on' OR $ponderation === true) {
67 // le plugin d'interface donne la valeur de ponderation dans une option separee.
68 if (isset($saisie['options']['rechercher_ponderation']) and $saisie['options']['rechercher_ponderation']) {
69 $ponderation = intval($saisie['options']['rechercher_ponderation']);
74 $ponderation = intval($ponderation);
76 $tables[$table]['rechercher_champs'][$nom] = $ponderation;
78 // option de versionnage ?
79 if (isset($saisie['options']['versionner']) and $saisie['options']['versionner']) {
80 // on l'ajoute dans la liste des champs versionnables
81 if (isset($tables[$table]['champs_versionnes'])
82 and !in_array($nom, $tables[$table]['champs_versionnes'])) {
83 $tables[$table]['champs_versionnes'][] = $nom;
95 * Déclarer les nouvelles infos sur les champs extras ajoutés
96 * en ce qui concerne les traitements automatiques sur les balises.
98 * @pipeline declarer_tables_interfaces
99 * @param array $interfaces
100 * Déclarations d'interface pour le compilateur
102 * Déclarations d'interface pour le compilateur
104 function cextras_declarer_tables_interfaces($interfaces){
106 include_spip('inc/cextras');
107 include_spip('inc/saisies');
109 // si saisies a ete supprime par ftp, on sort tranquilou sans tuer SPIP.
110 // champs extras sera ensuite desactive par admin plugins.
111 if (!function_exists('saisies_lister_avec_sql')) {
115 // recuperer les champs crees par les plugins
116 $saisies_tables = pipeline('declarer_champs_extras', array());
117 if (!$saisies_tables) {
121 foreach ($saisies_tables as $table=>$saisies) {
122 $saisies = saisies_lister_avec_sql($saisies);
123 $saisies = saisies_lister_avec_traitements($saisies);
125 foreach ($saisies as $saisie) {
126 $traitement = $saisie['options']['traitements'];
127 $balise = strtoupper($saisie['options']['nom']);
129 if (!isset($interfaces['table_des_traitements'][$balise])) {
130 $interfaces['table_des_traitements'][$balise] = array();
132 // le traitement peut etre le nom d'un define
133 $traitement = defined($traitement) ?
constant($traitement) : $traitement;
135 // SPIP 3 permet de declarer par la table sql directement.
136 $interfaces['table_des_traitements'][$balise][$table] = $traitement;
141 // ajouter les champs au tableau spip