3 if (!defined("_ECRIRE_INC_VERSION")) return;
5 // pour ne pas interferer avec d'eventuelles futures fonctions du core
6 // on met le tout dans un namespace ; les fonctions sont autonomes.
11 // les arguments sont dans l'entree 0 du tableau param.
12 // param[0][0] vaut toujours '' (ou presque ?)
13 function recuperer_argument_balise($pos, $p) {
14 if (!isset($p->param
[0])) {
17 if (!isset($p->param
[0][$pos])) {
20 return $p->param
[0][$pos];
25 // les arguments sont dans l'entree 0 du tableau param.
26 // param[0][0] vaut toujours '' (ou presque ?)
27 function supprimer_argument_balise($pos, $p) {
28 if (!isset($p->param
[0])) {
31 if (!isset($p->param
[0][$pos])) {
35 array_shift($p->param
[0]);
37 $debut = array_slice($p->param
[0], 0, $pos);
38 $fin = array_slice($p->param
[0], $pos+
1);
39 $p->param
[0] = array_merge($debut, $fin);
46 function recuperer_et_supprimer_argument_balise($pos, &$p) {
47 $arg = Pile
::recuperer_argument_balise($pos, $p);
48 $p = Pile
::supprimer_argument_balise($pos, $p);
55 // les arguments sont dans l'entree 0 du tableau param.
56 // param[0][0] vaut toujours '' (ou presque ?)
57 function ajouter_argument_balise($element, $p) {
58 if (isset($p->param
[0][0])) {
59 $zero = array_shift($p->param
[0]);
60 array_unshift($p->param
[0], $element);
61 array_unshift($p->param
[0], $zero);
63 if (!is_array($p->param
[0])) {
64 $p->param
[0] = array();
66 array_unshift($p->param
[0], $element);
73 // creer_argument_balise(nom) = {nom}
74 // creer_argument_balise(nom, 'coucou') = {nom=coucou}
75 // creer_argument_balise(nom, $balise) = {nom=#BALISE}
76 function creer_argument_balise($nom, $valeur = null) {
77 include_spip('public/interfaces');
82 // si #BALISE cree avec Pile::creer_balise(), le mettre en array, comme les autres
83 if (is_object($valeur)) {
84 $valeur = array($valeur);
90 if (is_null($valeur)) {
94 elseif (is_string($valeur)) {
95 $s->texte
.= "=$valeur";
99 elseif (is_array($valeur)) {
100 $s->texte
.= "="; // /!\ sans cette toute petite chose, ça ne fait pas d'egalite :)
101 $res = array_merge(array($s), $valeur);
109 function creer_et_ajouter_argument_balise($p, $nom, $valeur = null) {
110 $new = Pile
::creer_argument_balise($nom, $valeur);
111 return Pile
::ajouter_argument_balise($new, $p);
117 function creer_balise($nom, $opt) {
118 include_spip('public/interfaces');
120 $b->nom_champ
= strtoupper($nom);
121 $vars = get_class_vars('Champ'); // property_exists($b, $o); est en php 5
122 foreach ($opt as $o=>$val) {
123 #if (property_exists($b,$o)) {
124 if (array_key_exists($o, $vars)) {
126 array_unshift($val, '');
127 $b->$o = array($val);
140 * #saisie{type,nom} : champs obligatoires
142 * collecte des arguments en fonctions du parametre "nom"
143 * ajoute des arguments
144 * appelle #INCLURE avec les arguments collectes en plus
146 * il faudrait en faire une balise dynamique (?)
147 * pour avoir un code plus propre
148 * mais je n'ai pas reussi a trouver comment recuperer "valeur=#ENV{$nom}"
151 function balise_SAISIE_dist ($p) {
153 // on recupere les parametres sans les traduire en code d'execution php
154 $type_saisie = Pile
::recuperer_et_supprimer_argument_balise(1, $p); // $type
155 $titre = Pile
::recuperer_et_supprimer_argument_balise(1, $p); // $titre
157 // creer #ENV*{$titre} (* pour les cas de tableau serialises par exemple, que l'on veut reutiliser)
158 $env_titre = Pile
::creer_balise('ENV', array('param' => array($titre), 'etoile' => '*')); // #ENV*{titre}
160 // on modifie $p pour ajouter des arguments
161 // {nom=$titre, valeur=#ENV{$titre}, erreurs, type_saisie=$type, fond=saisies/_base}
162 $p = Pile
::creer_et_ajouter_argument_balise($p, 'nom', $titre);
163 $p = Pile
::creer_et_ajouter_argument_balise($p, 'valeur', $env_titre);
164 $p = Pile
::creer_et_ajouter_argument_balise($p, 'type_saisie', $type_saisie);
165 $p = Pile
::creer_et_ajouter_argument_balise($p, 'erreurs');
166 $p = Pile
::creer_et_ajouter_argument_balise($p, 'fond', 'saisies/_base');
168 // on appelle la balise #INCLURE
169 // avec les arguments ajoutes
170 if(function_exists('balise_INCLURE'))
171 return balise_INCLURE($p);
173 return balise_INCLURE_dist($p);