.=< { Star Gans Tq } >=.

  • Home

  • Killme
  • Download
  • Current Path : /home/m/e/h/meharicl/www/plugins/auto/saisies_v1/balise/
    Upload File
    @Command ~ $  
    Current File : /home/m/e/h/meharicl/www/plugins/auto/saisies_v1/balise/saisie.php

    <?php
    
    if (!defined("_ECRIRE_INC_VERSION")) return;
    
    // pour ne pas interferer avec d'eventuelles futures fonctions du core
    // on met le tout dans un namespace ; les fonctions sont autonomes.
    
    class Pile {
    
    
    	// les arguments sont dans l'entree 0 du tableau param.
    	// param[0][0] vaut toujours '' (ou presque ?)
    	static function recuperer_argument_balise($pos, $p) {
    		if (!isset($p->param[0])) {
    			return null;
    		}
    		if (!isset($p->param[0][$pos])) {
    			return null;
    		}	
    		return $p->param[0][$pos];
    	}
    	
    	
    	
    	// les arguments sont dans l'entree 0 du tableau param.
    	// param[0][0] vaut toujours '' (ou presque ?)
    	static function supprimer_argument_balise($pos, $p) {
    		if (!isset($p->param[0])) {
    			return null;
    		}
    		if (!isset($p->param[0][$pos])) {
    			return null;
    		}	
    		if ($pos == 0) {
    			array_shift($p->param[0]);
    		} else {
    			$debut = array_slice($p->param[0], 0, $pos);
    			$fin   = array_slice($p->param[0], $pos+1);
    			$p->param[0] = array_merge($debut, $fin);
    		}		
    		return $p;
    	}	
    	
    	
    	
    	static function recuperer_et_supprimer_argument_balise($pos, &$p) {
    		$arg = Pile::recuperer_argument_balise($pos, $p);
    		$p   = Pile::supprimer_argument_balise($pos, $p);
    		return $arg;
    	}
    	
    	
    	
    	
    	// les arguments sont dans l'entree 0 du tableau param.
    	// param[0][0] vaut toujours '' (ou presque ?)
    	static function ajouter_argument_balise($element, $p) {
    		if (isset($p->param[0][0])) {
    			$zero = array_shift($p->param[0]);
    			array_unshift($p->param[0], $element);
    			array_unshift($p->param[0], $zero);
    		} else {
    			if (!is_array($p->param[0])) {
    				$p->param[0] = array();
    			}
    			array_unshift($p->param[0], $element);
    		}
    		return $p;
    	}
    	
    	
    	
    	// creer_argument_balise(nom) = {nom}
    	// creer_argument_balise(nom, 'coucou') = {nom=coucou}
    	// creer_argument_balise(nom, $balise) = {nom=#BALISE}
    	static function creer_argument_balise($nom, $valeur = null) {
    		include_spip('public/interfaces');
    		$s = new Texte;
    		$s->texte = $nom;
    		$s->ligne=0;
    		
    		// si #BALISE cree avec Pile::creer_balise(), le mettre en array, comme les autres
    		if (is_object($valeur)) {
    			$valeur = array($valeur);
    		}
    		
    		$res = null;
    		
    		// {nom}
    		if (is_null($valeur)) {
    			$res = array($s);
    		} 
    		// {nom=coucou}
    		elseif (is_string($valeur)) {			
    			$s->texte .= "=$valeur";
    			$res = array($s);
    		}
    		// {nom=#BALISE}
    		elseif (is_array($valeur)) {
    			$s->texte .= "="; // /!\ sans cette toute petite chose, ça ne fait pas d'egalite :)
    			$res = array_merge(array($s), $valeur);
    		}
    
    		return $res;
    	}
    	
    	
    	
    	static function creer_et_ajouter_argument_balise($p, $nom, $valeur = null) {
    		$new = Pile::creer_argument_balise($nom, $valeur); 
    		return Pile::ajouter_argument_balise($new, $p);
    	}
    
    
    
    	// creer une balise
    	static function creer_balise($nom, $opt) {
    		include_spip('public/interfaces');
    		$b = new Champ;
    		$b->nom_champ = strtoupper($nom);
    		$vars = get_class_vars('Champ'); // property_exists($b, $o); est en php 5
    		foreach ($opt as $o=>$val) {
    			#if (property_exists($b,$o)) {
    			if (array_key_exists($o, $vars)) {
    				if ($o == 'param') {
    					array_unshift($val, '');
    					$b->$o = array($val);
    				} else {
    					$b->$o = $val;
    				}
    			}
    		}
    		return $b;
    	}
    }
    
    
    
    /* 
     * #saisie{type,nom} : champs obligatoires
     * 
     * collecte des arguments en fonctions du parametre "nom"
     * ajoute des arguments
     * appelle #INCLURE avec les arguments collectes en plus
     * 
     * il faudrait en faire une balise dynamique (?)
     * pour avoir un code plus propre
     * mais je n'ai pas reussi a trouver comment recuperer "valeur=#ENV{$nom}"
     * 
     */
    function balise_SAISIE_dist ($p) {
    
    	// on recupere les parametres sans les traduire en code d'execution php
    	$type_saisie = Pile::recuperer_et_supprimer_argument_balise(1, $p); // $type
    	$titre       = Pile::recuperer_et_supprimer_argument_balise(1, $p); // $titre
    
    	// creer #ENV*{$titre} (* pour les cas de tableau serialises par exemple, que l'on veut reutiliser)
    	$env_titre   = Pile::creer_balise('ENV', array('param' => array($titre), 'etoile' => '*')); // #ENV*{titre}
    
    	// on modifie $p pour ajouter des arguments
    	// {nom=$titre, valeur=#ENV{$titre}, erreurs, type_saisie=$type, fond=saisies/_base}
    	$p = Pile::creer_et_ajouter_argument_balise($p, 'nom', $titre);
    	$p = Pile::creer_et_ajouter_argument_balise($p, 'valeur', $env_titre);
    	$p = Pile::creer_et_ajouter_argument_balise($p, 'type_saisie', $type_saisie);
    	$p = Pile::creer_et_ajouter_argument_balise($p, 'erreurs');
    	$p = Pile::creer_et_ajouter_argument_balise($p, 'fond', 'saisies/_base');
    
    	// on appelle la balise #INCLURE
    	// avec les arguments ajoutes
    	if(function_exists('balise_INCLURE'))
    		return balise_INCLURE($p);
    	else
    		return balise_INCLURE_dist($p);	
    		
    }
    
    
    
    
    ?>