Browse Source

Portage de CFG pour SPIP 3...

On supprime TOUT :)
IL faut migrer (fonds/ et formulaires/x.html anciens) vers de nouveaux horizons en SPIP 3. Voir le fichier documentation.txt pour des renseignements dessus.

On ne garde que la methode de stockage "php" qui me semble la seule qui peut être encore utile.
De toutes façons, les stockage sont extensibles, donc, ceux qui voudront refaire "table" et "tablepack" le pourront.

Il reste que le stockage php est fait dans local/cfg et ce n'est pas top.
Il faudrait les migrer dans config/cfg/ par exemple pour éviter des écrasements non souhaités.
master
marcimat@rezo.net 11 years ago
commit
5fdb548dfd
  1. 10
      .gitattributes
  2. 124
      documentation.txt
  3. 101
      ecrire_config/php.php
  4. 12
      lang/paquet-cfg_fr.php
  5. 85
      lire_config/php.php
  6. 20
      paquet.xml
  7. BIN
      prive/themes/spip/images/cfg-128.png
  8. BIN
      prive/themes/spip/images/cfg-16.png
  9. BIN
      prive/themes/spip/images/cfg-22.png
  10. BIN
      prive/themes/spip/images/cfg-48.png

10
.gitattributes vendored

@ -0,0 +1,10 @@
* text=auto !eol
/documentation.txt -text
ecrire_config/php.php -text
lang/paquet-cfg_fr.php -text
lire_config/php.php -text
/paquet.xml -text
prive/themes/spip/images/cfg-128.png -text
prive/themes/spip/images/cfg-16.png -text
prive/themes/spip/images/cfg-22.png -text
prive/themes/spip/images/cfg-48.png -text

124
documentation.txt

@ -0,0 +1,124 @@
QUE FAIT CE PLUGIN CFG ?
------------------------
Ce plugin enrichi SPIP 3.x de méthodes de stockage des configurations
PRÉFÉRER DE NE PAS L'UTILISER !
-------------------------------
Il est préférable d'utiliser à la place de ce plugin
ler mécanismes de configuration fournis par défaut
dans SPIP 3, à savoir :
- prive/squelettes/contenu/xx.html (squelette appelant le formulaire #CONFIGURER_XX)
- formulaires/configurer_xx.html (squelette du formulaire CVT)
- formulaires/configurer_xx.php (chargement / vérification, traitement du formulaire CVT)
- privé/squelettes/navigation/xx.html (Éventuellement pour une navigation latérale)
- des stockage des données dans spip_meta ou spip_xx_meta
POURQUOI ALORS L'UTILISER... MALGRÉ TOUT ?
------------------------------------------
Cela dit, ce plugin sera utile dans les cas suivants :
- migration de formulaires CFG d'ancienne version utilisant
un stockage en dehors de spip_meta ou spip_xx_meta,
tel que dans des fichiers php.
QUE FOURNIT CE PLUGN ?
----------------------
- Une méthode de stockage supplémentaire :
php : stocke des informations dans des fichiers PHP
COMMENT MIGRER D'UNE ANCIENNE VERSION DE CFG À SPIP 3 ?
--------------------------------------------------------
Il faut d'une part expliquer comment fonctionne SPIP 3
et les choix qui ont été fait, et d'autre part
comment fonctionnait le plugin CFG avant SPIP 3
EN SPIP 3
---------
SPIP 3 a choisit 2 moyens distinct et qui peuvent se cumuler
pour accéder à une page de configuration d'un plugin donné.
#1 : l'accès depuis la page d'admin des plugins (via une icone)
#2 : l'accès depuis le menu de l'espace privé.
Pour #1, si le prefixe de notre plugin est xxx, la présence d'un squelette
dans ce plugin "prive/squelettes/contenu/configurer_xxx.html" affichera l'icone,
qui pointera sur la page ?exec=configurer_xxx qui charge le contenu de cette page.
Pour #2, il suffit de déclarer son lien dans le menu depuis le paquet.xml
avec par exemple :
<menu nom="configurer_xxx" titre="xxx:configuration_xxx" parent="menu_configuration" icone="images/xxx-16.png" />
Dans ces deux cas, le squelette "prive/squelettes/contenu/configurer_xxx.html" doit
gérer l'affichage des formulaires de configuration qu'il souhaite, avec des appels
un ou plusieurs #FORMULAIRE_CONFIGURER_XXX
Il est également possible de donner une page "prive/squelettes/navigation/configurer_xxx.html"
fournissant un menu de navigation pour le plugin à configurer.
Les formulaires de configuration sont à placer dans un répertoire formulaires/configurer_xxx.html
Ce sont des formulaires CVT qui acceptent de ne pas avoir de fonctions PHP de chargement, vérification ou traitement.
En leur absence, le chargement, vérification ou traitement est effectué automatiquement par SPIP
d'après les informations qu'il connait du formulaire.
Il peut extraire notamment du formulaire, via un champ hidden, le lieu de stockage désiré des informations.
CFG avant SPIP 3
----------------
Il fournissait, tout à fait à l'origine, un moyen de déclarer des formulaires
de configuration en mettant le code du formulaire dans un répertoire fonds/
Les plus vieux plugins ont cela.
Il a ensuite fourni une méthode pour utiliser également les formulaires CVT de SPIP
qu'il appelait depuis le même fichier dans fonds/, mais ces fichiers n'avaient donc
que l'appel #FORMULAIRE_xx (et non le contenu) du formulaire, permettant uentre
autre de traiter les formulaires en ajax et de s'approcher un peu plus des mécanismes de SPIP.
On peut donc se retrouver avec 2 cas :
%1) Les vieux CFG avec uniquement fonds/cfg_xx.html
%2) Les CFG récents (>1.10) avec fonds/cfg_xx.html et formulaires/xx.html
Migrer
------
Migrer vers SPIP 3 consiste à passer son ancien CFG,
d'une part de %1 à %2, puis de %2 à #1 / #2
Le fichier fonds/cfg_xx.html, est à déplacer dans
prive/squelettes/contenu/configurer_xx.html
et est élagué des <!-- param=nom -->
ou des encore plus vieux [(#REM) param=nom ]
qu'il contenait, au profit d'appels directs
aux chaines de langue par exemple <h1><:xxx:configurer_xxx:></h1>
Le fichier formulaires/xx.html sera renommé formulaires/configurer_xx.html
et pareillement élagué des paramètres <!-- param=nom --> .
S'il y avait une autorisation, elle doit se faire par #AUTORISER
dans le squelette appelant le formulaire.
Le parametre 'nom' passe en input hidden, si sa valeur est
différente de xx dans formulaires/configurer_xx.html :
<input type="hidden" name="_meta_casier" value="xx" />
Le paramètre 'casier' complète le nom s'il était présent,
par exemple s'il avait la valeur yy :
<input type="hidden" name="_meta_casier" value="xx/yy" />
Si le stockage était «metapack» (n clés dans spip_metas)
<input type="hidden" name="_meta_casier" value="" />
Stockage Php
------------
Si le stockage se faisait en php (le casier est identique) :
<input type="hidden" name="_meta_stockage" value="php" />
<input type="hidden" name="_meta_table" value="" />
S'il y avait un fichier spécifique de déclaré, le mettre dans le casier :
<input type="hidden" name="_meta_casier" value="adresse/fichier.php:nom/casier/champ" />
Autres stockages (table, tablepack)
----------------
Ils ne sont actuellement pas pris en compte par ce plugin.
Si quelqu'un veut les recoder, qu'il se lance :)

101
ecrire_config/php.php

@ -0,0 +1,101 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) return;
include_spip('lire_config/php');
function ecrire_config_php_dist($lieu, $stockage) {
list ($fichier, $casier) = cfg_php_extraire_infos($lieu);
$contenu = array();
cfg_php_lire_fichier($fichier, $contenu);
if (!cfg_php_inserer_demande($casier, $contenu, $stockage)) {
return false;
}
if (!cfg_php_enregistrer_fichier($fichier, $contenu)) {
return false;
}
return true;
}
function cfg_php_inserer_demande($casier, &$contenu, $demande) {
$casier = explode('/', $casier);
if (!$casier) {
$contenu = $demande;
return true;
}
$pointeurs = array();
$st = &$contenu;
$sc = &$st;
$c = $casier;
while (count($c) AND $cc = array_shift($c)) {
// creer l'entree si elle n'existe pas
if (!isset($sc[$cc])) {
// si on essaye d'effacer une config qui n'existe pas
// ne rien creer mais sortir
if (is_null($demande))
return false;
$sc[$cc] = array();
}
$pointeurs[$cc] = &$sc;
$sc = &$sc[$cc];
}
// si c'est une demande d'effacement
if (is_null($demande)){
$c = $casier;
$sous = array_pop($c);
// effacer, et remonter pour effacer les parents vides
do {
unset($pointeurs[$sous][$sous]);
} while ($sous = array_pop($c) AND !count($pointeurs[$sous][$sous]));
// si on a vide tous les sous casiers,
// et que le casier est vide
// vider aussi la meta
if (!$sous AND !count($st))
$st = null;
}
else
$sc = $demande;
// Maintenant que $st est modifiee
// reprenons la comme valeur a stocker dans le casier principal
$contenu = $st;
return true;
}
function cfg_php_enregistrer_fichier($fichier, $contenu) {
if (is_null($contenu)) {
return supprimer_fichier($fichier);
}
$contenu = '<?php
/**************
* Config ecrite par CFG le ' . date('r') . '
*
* NE PAS EDITER MANUELLEMENT !
***************/
$cfg = ' . var_export($contenu, true) . ';
?>
';
return ecrire_fichier($fichier, $contenu);
}
?>

12
lang/paquet-cfg_fr.php

@ -0,0 +1,12 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
// C
'cfg_description' => 'Augmente les possibilités de gestion de configuration pour d\'autres plugins.',
'cfg_slogan' => 'Gestion de configurations.',
'cfg_titre' => 'CFG',
);
?>

85
lire_config/php.php

@ -0,0 +1,85 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) return;
function lire_config_php_dist($lieu, $defaut=null, $unserialize=true ) {
list ($fichier, $casier) = cfg_php_extraire_infos($lieu);
$contenu = array();
if (!cfg_php_lire_fichier($fichier, $contenu)) {
return $unserialize ? $defaut : serialize($defaut);
}
$demande = '';
if (!cfg_php_extraire_demande($casier, $contenu, $demande)) {
return $unserialize ? $defaut : serialize($defaut);
}
return $unserialize ? $demande : serialize($demande);
}
// calcule l'emplacement du fichier
function cfg_php_extraire_infos($lieu) {
list ($fichier, $casier) = explode(':', $lieu);
if (!$casier) {
$casier = $fichier;
$fichier = '';
}
if ($fichier) {
sous_repertoire(dirname($f));
$fichier = _DIR_RACINE . $fichier;
} else {
// le premier element du casier est le nom de base du fichier. on l'enleve
$nom = array_shift($casier = explode('/', $casier));
$casier = implode('/', $casier);
sous_repertoire( _DIR_VAR . 'cfg');
$fichier = _DIR_VAR . 'cfg/' . $nom . '.php';
}
return array($fichier, $casier);
}
function cfg_php_lire_fichier($fichier, &$contenu) {
if (!file_exists($fichier)) {
return false;
}
// inclut une variable $cfg
if (!@include $fichier) {
return false;
}
if (!$cfg OR !is_array($cfg)) {
$contenu = array();
} else {
$contenu = $cfg;
}
return true;
}
function cfg_php_extraire_demande($casier, $contenu, &$demande) {
$casier = explode('/', $casier);
$pos = &$contenu;
while ($cran = array_shift($casier)) {
if (!is_array($pos)) {
return false;
}
if (!array_key_exists($cran, $pos)) {
return false;
}
$pos = &$pos[$cran];
}
$demande = $pos;
return true;
}
?>

20
paquet.xml

@ -0,0 +1,20 @@
<paquet
prefix="cfg"
categorie="maintenance"
version="3.0.0"
etat="stable"
compatibilite="[3.0.0-beta;3.0.*]"
logo="prive/themes/spip/images/cfg-128.png"
documentation=""
>
<nom>CFG</nom>
<!-- Plugin de configuration -->
<auteur>Bertrand Gugger</auteur>
<auteur>Matthieu Marcillaud</auteur>
<copyright>2008-2011</copyright>
<licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GPL</licence>
</paquet>

BIN
prive/themes/spip/images/cfg-128.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
prive/themes/spip/images/cfg-16.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 874 B

BIN
prive/themes/spip/images/cfg-22.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
prive/themes/spip/images/cfg-48.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Loading…
Cancel
Save