$ong){ if ($ong['afficher']) $ret .= '' .''._T('icone_configuration_site').' '.$fonds.''; } } 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 * * s'il y a une chaine de langue 'moncfg', le texte sera traduit * ou * * 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)) ? "
  • $l
  • \n" : ""; } return ($return)?"":''; } /** * 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 if (_request('cfg') == $lien) return "$nom\n"; else return "$nom\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)) ? "
  • $l
  • \n" : ""; } return ($return)?"":''; } /** * * @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\n" . "
    \n"; } } // On ajoute un bouton 'nouveau' return "
    \n" . "

    $nom

    \n" . "\n" . "\n" . "\n" . "
    \n" . $dedans . "\n
    \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('
    ', $m['message_ok']); if (count($m['message_erreur'])) $messages[] = join('
    ', $m['message_erreur']); if (count($m['erreurs'])) $messages[] = join('
    ', $m['erreurs']); if ($messages = trim(join('
    ', $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 .= "\n"; $retour .= "

    " . _T("cfg:choisir_module_a_configurer") . "

    "; } else { $retour .= $formulaire; } return $retour; } } ?>