Your IP : 216.73.216.20


Current Path : /home/e/t/i/etiennec/www/oldsite/plugins/auto/cfg/inc/
Upload File :
Current File : /home/e/t/i/etiennec/www/oldsite/plugins/auto/cfg/inc/cfg.php

<?php

/**
 * Plugin générique de configuration pour SPIP
 *
 * @license    GNU/GPL
 * @package    plugins
 * @subpackage cfg
 * @category   outils
 * @copyright  (c) toggg, marcimat 2007-2008
 * @link       http://www.spip-contrib.net/
 * @version    $Id: cfg.php 38187 2010-05-14 18:31:13Z esj@rezo.net $
 */

if (!defined("_ECRIRE_INC_VERSION")) return;



/**
 * Renvoie la liste des configurations disponibles dans le path
 * ou dans le dossier donne en argument
 * 
 * @param string $dir
 * @return Array
 */
function liste_cfg($dir='') {
	// Faire la liste des elements qui ont un cfg ; ca peut etre des plugins
	// mais aussi des squelettes ou n'importe quoi
	$liste = array();
	// tous les repertoires
	if (!$dir){
		foreach (creer_chemin() as $dir) {
			$liste = array_merge($liste, preg_files($d=$dir.'fonds/', $d.'cfg_[^/]*[.]html$'));
		}
	// ou seulement celui demande
	} else {	
		$dir = rtrim(rtrim($dir),'/').'/';
		$liste = preg_files($d=$dir.'fonds/', $d.'cfg_[^/]*[.]html$');
	}

	if ($liste) {
		$l = array();
		foreach($liste as $cfg) {
			$fonds = substr(basename($cfg,'.html'),4);
			$l[$fonds] = $cfg;
		}
		ksort($l);
		return $l;
	}
}

/**
 * Renvoie une icone avec un lien vers la page de configuration d'un repertoire donné
 * 
 * @param string $dir
 * @return string
 */
function icone_lien_cfg($dir, $script='cfg') {
	$ret = '';
	if ($onglets = lister_onglets_cfg($dir, $script)){
		foreach ($onglets as $fonds=>$ong){
			if ($ong['afficher'])
				$ret .= '<a href="'.$ong['url'].'">'
					.'<img src="'._DIR_PLUGIN_CFG.'cfg-16.png"
						width="16" height="16"
						alt="'._T('icone_configuration_site').' '.$fonds.'"
						title="'._T('icone_configuration_site').' '.$fonds.'"
					/></a>';					
		}
	}

	return $ret;
}



/**
 * retourne un tableau contenant une liste de fonds cfg et leurs parametres
 * d'onglet (oui/non/titre_parent), plus quelques autres parametres (url, titre, icone),
 * pour un repertoire donne (sinon tout le path)
 * 
 * @param string $dir
 * @return string
 */
function lister_onglets_cfg($dir='', $script='cfg'){
	$onglets = array();
	
	// scruter les onglets affichables
	if ($l = liste_cfg($dir)) {
		foreach($l as $fonds => $cfg) {

			if (!isset($onglets[$fonds])) 
				$onglets[$fonds] = array();
			$args = array();
			$args['afficher'] = false;
			
			// On va chercher la config cible
			// et on regarde ses donnees pour faire l'onglet
			// seulement si l'onglet doit etre affiche
			include_spip('inc/cfg');
			$tmp = new cfg($fonds);

			if ($tmp->autoriser()){
				$args['onglet'] = $tmp->form->param['onglet'];
				$args['url'] = generer_url_ecrire($script, 'cfg='.$fonds);
				// titre
				if (!$args['titre'] = $tmp->form->param['titre'])
					$args['titre'] = $fonds;
				// icone	
				$path = dirname(dirname($cfg));	
				$args['icone'] = '';
				if ($tmp->form->param['icone'])
					$args['icone'] = $path.'/'.$tmp->form->param['icone'];
				else if (file_exists($path.'/plugin.xml'))
					$args['icone'] = 'plugin-24.gif';
				else
					$args['icone'] = _DIR_PLUGIN_CFG.'cfg-doc-22.png';	
				
				// l'afficher ?
				if ($tmp->form->param['onglet'] == 'oui')
					$args['afficher'] = true;
			}
			
			$onglets[$fonds] = array_merge($args, $onglets[$fonds]); // conserver les donnees deja presentes ('enfant_actif')
		}
	}
	return $onglets;	
}
	


/**
 * la classe cfg represente une page de configuration
 *
 * @package    plugins
 * @subpackage cfg
 */
class cfg
{
	var $form; // la classe cfg_formulaire
	
	/**
	 *
	 * @param string $nom
	 * @param string $cfg_id
	 * @param Array $opt
	 */
	function cfg($nom, $cfg_id = '', $opt = array()) {
		include_spip('inc/cfg_formulaire');
		$this->form = new cfg_formulaire($nom, $cfg_id, $opt);
	}

	/**
	 * Controller les droits pour traiter le formulaire de config
	 *
	 * @return int # 0 ou 1
	 */
	function autoriser()  {return $this->form->autoriser(); }
	
	/**
	 *
	 * @return boolean
	 */
	function traiter()  {return $this->form->traiter();}
	
	/**
	 *
	 * @return string
	 */
	function get_titre(){ return $this->form->param['titre'];}
	
	/**
	 *
	 * @return string
	 */
	function get_nom()  { return $this->form->param['nom'];}
	
	/**
	 *
	 * @return string
	 */
	function get_boite(){ 
		if (!(($titre = $this->form->param['titre']) && ($boite = $this->form->param['boite']))){
			$boite=($titre)?$titre: _T('icone_configuration_site') . ' ' . $this->form->param['nom'];
		}
		return $boite;
	}

	/**
	 * pour pouvoir testé si la presentation des formulaires doit etre appliquee ou non
	 * m'est avis que ca devrait virer cette 'presentation=auto'...
	 * c'est comme 'rediriger', il n'y a que le plugin 'autorite' qui l'utilise
	 * 
	 * @return string
	 */
	function get_presentation() { return $this->form->param['presentation'];	}
	
	/**
	 * Affiche la boite d'info des liens vers les autres fonds CFG
	 *
	 * Les liens sont definis par la variable liens
	 * <code><!-- liens*=moncfg --></code>
	 * s'il y a une chaine de langue 'moncfg', le texte sera traduit
	 * ou
	 * <code><!-- liens*=prefixe_plugin:moncfg --></code>
	 * pour utiliser la chaine de langue de prefixe_plugin
	 *
	 * @return string
	 */
	function liens()
	{
		$return = '';
		// liens simples
		foreach ($this->form->param['liens'] as $lien) {
			$nom = _T($lien);
			$lien =  array_pop(explode(':',$lien)); // ne garder que la derniere partie de la chaine de langue
			$return .= ($l = $this->generer_lien($lien, $nom)) ? "<li>$l</li>\n" : "";
		}
		return ($return)?"<ul>$return</ul>":'';
	}


	/**
	 * Affiche un lien vers le fond dont le nom ($lien)
	 * est passe en parametre
	 * a condition que le fichier fonds/cfg_$lien.html existe
	 *
	 * @param string $lien
	 * @param string $nom
	 * @return string
	 */
	function generer_lien($lien, $nom='')
	{
		// nom est une chaine, pas une cle de tableau.
		if (empty($nom) OR !is_string($nom)) $nom = $lien;
		if (!find_in_path('fonds/cfg_'.$lien.'.html')) return "";
		
		// si c'est le lien actif, pas de <a>
		if (_request('cfg') == $lien) 
			return "$nom\n";
		else
			return "<a href='" . generer_url_ecrire("cfg","cfg=$lien") . "'>$nom</a>\n"; // &cfg_id= <-- a ajouter ?
	}
	
	
	/**
	 * Les liens multi sont appelles par liens_multi*=nom_du_fond
	 * a condition que le fichier fonds/cfg_$lien.html existe
	 *
	 * @return string
	 */
	function liens_multi(){
		// liens multiples
		foreach ($this->form->param['liens_multi'] as $lien) {
			$nom = _T($lien);
			$lien =  array_pop(explode(':',$lien)); // ne garder que la derniere partie de la chaine de langue
			$return .= ($l = $this->generer_lien_multi($lien, $nom)) ? "<li>$l</li>\n" : "";
		}
		return ($return)?"<ul>$return</ul>":'';
	}

	/**
	 *
	 * @param string $lien
	 * @param string $nom
	 * @return string
	 */
	function generer_lien_multi($lien, $nom=''){
		// nom est une chaine, pas une cle de tableau.
		if (empty($nom) OR !is_string($nom)) $nom = $lien;
		if (!find_in_path('fonds/cfg_'.$lien.'.html')) return "";
		
		$dedans = '';
		if (($exi = lire_config($lien)) && is_array($exi)) {
			foreach ($exi as $compte => $info) {
				$lid = $lien . "_" . $compte;
				$dedans .= "\n<label for='$lid'>$compte</label>\n"
						.  "<input type='image' id='$lid' name='cfg_id' value='$compte' "
						.  "src='".find_in_path('images/triangle.gif')."' style='vertical-align: text-top;'/><br />\n";
			}
		}
		// On ajoute un bouton 'nouveau'
		return    "<form method='get' action='".generer_url_ecrire('')."'><div>\n"
				. "<h4>$nom</h4>\n"
				. "<input type='hidden' name='exec' value='cfg' />\n"
				. "<input type='hidden' name='cfg' value='$lien' />\n"
				. "<label for='$lien" . "_'>" . _T('cfg:nouveau') . "</label>\n"
				. "<input type='image' id='$lien" . "_' name='nouveau' value='1' "
				. "src='".find_in_path('images/creer.gif')."' style='vertical-align: text-top;'/><br />\n" 
				. $dedans
				. "\n</div></form>\n";
	
	}
	
	/**
	 * Affiche la liste des onglets de CFG
	 *
	 * Recupere les fonds CFG et analyse ceux-ci
	 * - si onglet=oui : affiche l'onglet (valeur par defaut)
	 * - si onglet=non : n'affiche pas l'onglet
	 * - si onglet=fond_cfg_parent : n'affiche pas l'onglet, mais 'exposera'
	 * l'element parent indique (sous entendu que
	 * le parent n'a pas 'onglet=non' sinon rien ne sera expose...
	 *
	 * @return string # Le code HTML
	 */
	function barre_onglets(){
		
		// determiner les onglets a cacher et a mettre en surbrillance
		if ($onglets = lister_onglets_cfg()){
			foreach ($onglets as $fonds=>$ong){
				$o = $ong['onglet'];

				// onglet actif
				if ($o == 'oui')	
					$onglets[$fonds]['actif'] = ($fonds == _request('cfg'));
				// rendre actif un parent si l'enfant est actif (onglet=nom_du_parent
				// (/!\ ne pas le desactiver s'il a deja ete mis actif)
				if ($o && $o!='oui' && $o!='non'){
					if (!isset($onglets[$o])) 
						$onglets[$o]=array();
					
					if (!isset($onglets[$o]['enfant_actif'])) 
						$onglets[$o]['enfant_actif']=false;
						
					$onglets[$o]['enfant_actif'] = ($onglets[$o]['enfant_actif'] OR $fonds == _request('cfg'));
				}
			}
		}

		// retourner le code des onglets selectionnes
		$res = "";
		if ($onglets) {
			$res = debut_onglet();
			$n = -1;
			foreach ($onglets as $titre=>$args){
				if ($args['afficher']){
					// Faire des lignes s'il y en a effectivement plus de 6
					if (!(++$n%6) && ($n>0))
						$res .= fin_onglet().debut_onglet();
						
					$res .= onglet(
							$args['titre'], 
							$args['url'], 
							'cfg', 
							($args['actif'] || $args['enfant_actif']), 
							$args['icone']);
				}	
			}
			
			$res .= fin_onglet();
			
		}
		return $res;
	}
	

	/**
	 * affiche le descriptif du formulaire
	 *
	 * @return string
	 */
	function descriptif(){
		if ($d = $this->form->param['descriptif'])
			return propre($d);	
	}
	
	/**
	 * affiche une colonne à gauche
	 *
	 * @return string
	 */
	function gauche(){
		if ($d = $this->form->param['gauche'])
			return propre($d);	
	}
	
	/**
	 * affiche le message en cas d'acces interdit
	 *
	 * @return string
	 */
	function acces_refuse(){
		include_spip('inc/minipres');
		return minipres(_T('info_acces_refuse'), 
			$this->form->param['refus']
				? $this->form->param['refus']
				: " (cfg {$this->form->param[nom]} - {$this->form->vue} - {$this->form->param[cfg_id]})");
	}
	
	/**
	 * afficher les messages de cfg
	 *
	 * @return string
	 */
	function messages(){
		$m = $this->form->messages; $messages = array();
		if (count($m['message_ok'])) 		$messages[] = join('<br />', $m['message_ok']);
		if (count($m['message_erreur'])) 	$messages[] = join('<br />', $m['message_erreur']);
		if (count($m['erreurs'])) 			$messages[] = join('<br />', $m['erreurs']);
		
		if ($messages = trim(join('<br />', $messages))) {
			return propre($messages);
		}
		return '';
	}
	
	/**
	 * affichage du formulaire (ou a defaut du texte 'choisir le module a configurer')
	 * 
	 * @return string
	 */
	function formulaire() {
		$retour = "";	
		if (!$formulaire = $this->form->formulaire()) {
			// Page appellee sans formulaire valable
			$retour .= "<img src='"._DIR_PLUGIN_CFG.'cfg.png'."' style='float:right' alt='' />\n";
			$retour .=  "<h3>" . _T("cfg:choisir_module_a_configurer") . "</h3>";
		} else {
			$retour .= $formulaire;
		}
		return $retour;
	}
}

?>