[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / ecrire / inc / cvt_configurer.php
index da1901f..3d67851 100644 (file)
@@ -3,14 +3,25 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2016                                                *
+ *  Copyright (c) 2001-2017                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
  *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
 \***************************************************************************/
 
-if (!defined('_ECRIRE_INC_VERSION')) return;
+/**
+ * Les formulaires CVT de configuration.
+ *
+ * Prendre en compte les `#FORMULAIRE_CONFIGURER_XX`
+ * dans les squelettes de SPIP
+ *
+ * @package SPIP\Core\Formulaires\CVT\Configurer
+ */
+
+if (!defined('_ECRIRE_INC_VERSION')) {
+       return;
+}
 
 include_spip('inc/config');
 
@@ -20,28 +31,31 @@ include_spip('inc/config');
  * @param array $flux
  * @return array
  */
-function cvtconf_formulaire_charger($flux){
+function cvtconf_formulaire_charger($flux) {
        if (
                $form = $flux['args']['form']
-               and strncmp($form,'configurer_',11)==0 // un #FORMULAIRE_CONFIGURER_XXX
+               and strncmp($form, 'configurer_', 11) == 0 // un #FORMULAIRE_CONFIGURER_XXX
        ) {
                // Pour tous les formulaires CONFIGURER, ayant une fonction charger ou pas, on teste si autorisé
                include_spip('inc/autoriser');
-               if (!autoriser('configurer', '_'.substr($form,11))) {
+               if (!autoriser('configurer', '_' . substr($form, 11))) {
                        return false;
                }
-               
+
                // S'il n'y a pas de fonction charger(), on génère un contexte automatiquement
-               if (!charger_fonction("charger","formulaires/$form/",true)) {
+               if (!charger_fonction("charger", "formulaires/$form/", true)) {
                        $flux['data'] = cvtconf_formulaires_configurer_recense($form);
                        $flux['data']['editable'] = true;
-                       if (_request('var_mode')=='configurer' AND autoriser('webmestre')){
-                               if (!_AJAX) var_dump($flux['data']);
+                       if (_request('var_mode') == 'configurer' and autoriser('webmestre')) {
+                               if (!_AJAX) {
+                                       var_dump($flux['data']);
+                               }
                                // reinjecter pour la trace au traitement
                                $flux['data']['_hidden'] = "<input type='hidden' name='var_mode' value='configurer' />";
                        }
                }
        }
+
        return $flux;
 }
 
@@ -51,14 +65,15 @@ function cvtconf_formulaire_charger($flux){
  * @param array $flux
  * @return array
  */
-function cvtconf_formulaire_traiter($flux){
+function cvtconf_formulaire_traiter($flux) {
        if ($form = $flux['args']['form']
-         AND strncmp($form,'configurer_',11)==0 // un #FORMULAIRE_CONFIGURER_XXX
-               AND !charger_fonction("traiter","formulaires/$form/",true) // sans fonction traiter()
-               ) {
-               $trace = cvtconf_formulaires_configurer_enregistre($form,$flux['args']['args']);
-               $flux['data'] = array('message_ok'=>_T('config_info_enregistree').$trace,'editable'=>true);
+               and strncmp($form, 'configurer_', 11) == 0 // un #FORMULAIRE_CONFIGURER_XXX
+               and !charger_fonction("traiter", "formulaires/$form/", true) // sans fonction traiter()
+       ) {
+               $trace = cvtconf_formulaires_configurer_enregistre($form, $flux['args']['args']);
+               $flux['data'] = array('message_ok' => _T('config_info_enregistree') . $trace, 'editable' => true);
        }
+
        return $flux;
 }
 
@@ -74,64 +89,73 @@ function cvtconf_formulaire_traiter($flux){
  *   arguments de l'appel de la fonction traiter ($args = func_get_args();)
  * @return string
  */
-function cvtconf_formulaires_configurer_enregistre($form,$args){
-               $valeurs = array();
-               // charger les valeurs
-               // ce qui permet de prendre en charge une fonction charger() existante
-               // qui prend alors la main sur l'auto detection
-               if ($charger_valeurs = charger_fonction("charger","formulaires/$form/",true))
-                       $valeurs = call_user_func_array($charger_valeurs,$args);
-               $valeurs = pipeline(
-                       'formulaire_charger',
-                       array(
-                               'args'=>array('form'=>$form,'args'=>$args,'je_suis_poste'=>false),
-                               'data'=>$valeurs)
-               );
-               // ne pas stocker editable !
-               unset($valeurs['editable']);
-
-               // recuperer les valeurs postees
-               $store = array();
-               foreach($valeurs as $k=>$v){
-                       if (substr($k,0,1)!=='_')
-                               $store[$k] = _request($k);
+function cvtconf_formulaires_configurer_enregistre($form, $args) {
+       $valeurs = array();
+       // charger les valeurs
+       // ce qui permet de prendre en charge une fonction charger() existante
+       // qui prend alors la main sur l'auto detection
+       if ($charger_valeurs = charger_fonction("charger", "formulaires/$form/", true)) {
+               $valeurs = call_user_func_array($charger_valeurs, $args);
+       }
+       $valeurs = pipeline(
+               'formulaire_charger',
+               array(
+                       'args' => array('form' => $form, 'args' => $args, 'je_suis_poste' => false),
+                       'data' => $valeurs
+               )
+       );
+       // ne pas stocker editable !
+       unset($valeurs['editable']);
+
+       // recuperer les valeurs postees
+       $store = array();
+       foreach ($valeurs as $k => $v) {
+               if (substr($k, 0, 1) !== '_') {
+                       $store[$k] = _request($k);
                }
+       }
 
-               return cvtconf_configurer_stocker($form,$valeurs,$store);
+       return cvtconf_configurer_stocker($form, $valeurs, $store);
 }
 
 /**
- * Definir la regle de conteneur, en fonction de la presence
- * des
- * _meta_table : nom de la table meta ou stocker (par defaut 'meta')
- * _meta_casier : nom du casier dans lequel serializer (par defaut xx de formulaire_configurer_xx)
- * _meta_prefixe : prefixer les meta (alternative au casier) dans la table des meta (par defaur rien)
- * _meta_stockage : Methode externe de stockage. Aucune n'est fournie par le core.
+ * Définir la règle de conteneur, en fonction de la présence de certaines données
+ *
+ * - `_meta_table` : nom de la table `spip_metas` ou stocker (par défaut 'meta')
+ * - `_meta_casier` : nom du casier dans lequel sérialiser (par défaut xx de `formulaire_configurer_xx`)
+ * - `_meta_prefixe` : préfixer les `meta` (alternative au casier) dans la table des meta (par defaur rien)
+ * - `_meta_stockage` : Méthode externe de stockage. Aucune n'est fournie par le core.
  *
  * @param string $form
  * @param array $valeurs
  * @return array
  */
-function cvtconf_definir_configurer_conteneur($form,$valeurs) {
-               // stocker en base
-               // par defaut, dans un casier serialize dans spip_meta (idem CFG)
-               $casier = substr($form,11);
-               $table = 'meta';
-               $prefixe = '';
-               $stockage = '';
-
-               if (isset($valeurs['_meta_casier']))   $casier   = $valeurs['_meta_casier'];
-               if (isset($valeurs['_meta_prefixe']))  $prefixe  = $valeurs['_meta_prefixe'];
-               if (isset($valeurs['_meta_stockage'])) $stockage = $valeurs['_meta_stockage'] . '::';
-                       
-               // si on indique juste une table, il faut vider les autres proprietes
-               // car par defaut on utilise ni casier ni prefixe dans ce cas
-               if (isset($valeurs['_meta_table'])) {
-                       $table = $valeurs['_meta_table'];
-                       $casier = (isset($valeurs['_meta_casier'])?$valeurs['_meta_casier']:'');
-               }
-       
-               return array($table,$casier,$prefixe,$stockage);
+function cvtconf_definir_configurer_conteneur($form, $valeurs) {
+       // stocker en base
+       // par defaut, dans un casier serialize dans spip_meta (idem CFG)
+       $casier = substr($form, 11);
+       $table = 'meta';
+       $prefixe = '';
+       $stockage = '';
+
+       if (isset($valeurs['_meta_casier'])) {
+               $casier = $valeurs['_meta_casier'];
+       }
+       if (isset($valeurs['_meta_prefixe'])) {
+               $prefixe = $valeurs['_meta_prefixe'];
+       }
+       if (isset($valeurs['_meta_stockage'])) {
+               $stockage = $valeurs['_meta_stockage'] . '::';
+       }
+
+       // si on indique juste une table, il faut vider les autres proprietes
+       // car par defaut on utilise ni casier ni prefixe dans ce cas
+       if (isset($valeurs['_meta_table'])) {
+               $table = $valeurs['_meta_table'];
+               $casier = (isset($valeurs['_meta_casier']) ? $valeurs['_meta_casier'] : '');
+       }
+
+       return array($table, $casier, $prefixe, $stockage);
 }
 
 /**
@@ -141,94 +165,101 @@ function cvtconf_definir_configurer_conteneur($form,$valeurs) {
  * @param string $form
  * @return array
  */
-function cvtconf_formulaires_configurer_recense($form){
-       $valeurs = array('editable'=>' ');
+function cvtconf_formulaires_configurer_recense($form) {
+       $valeurs = array('editable' => ' ');
 
        // sinon cas analyse du squelette
-       if ($f = find_in_path($form.'.' . _EXTENSION_SQUELETTES, 'formulaires/')
-               AND lire_fichier($f, $contenu)) {
+       if ($f = find_in_path($form . '.' . _EXTENSION_SQUELETTES, 'formulaires/')
+               and lire_fichier($f, $contenu)
+       ) {
 
-               for ($i=0;$i<2;$i++) {
+               for ($i = 0; $i < 2; $i++) {
                        // a la seconde iteration, evaluer le fond avec les valeurs deja trouvees
                        // permet de trouver aussi les name="#GET{truc}"
-                       if ($i==1) $contenu = recuperer_fond("formulaires/$form",$valeurs);
+                       if ($i == 1) {
+                               $contenu = recuperer_fond("formulaires/$form", $valeurs);
+                       }
 
-                       $balises = array_merge(extraire_balises($contenu,'input'),
-                               extraire_balises($contenu,'textarea'),
-                               extraire_balises($contenu,'select'));
+                       $balises = array_merge(extraire_balises($contenu, 'input'),
+                               extraire_balises($contenu, 'textarea'),
+                               extraire_balises($contenu, 'select'));
 
-                       foreach($balises as $b) {
+                       foreach ($balises as $b) {
                                if ($n = extraire_attribut($b, 'name')
-                                       AND preg_match(",^([\w\-]+)(\[\w*\])?$,",$n,$r)
-                                       AND !in_array($n,array('formulaire_action','formulaire_action_args'))
-                                       AND extraire_attribut($b,'type')!=='submit') {
-                                               $valeurs[$r[1]] = '';
-                                               // recuperer les valeurs _meta_xx qui peuvent etre fournies
-                                               // en input hidden dans le squelette
-                                               if (strncmp($r[1],'_meta_',6)==0)
-                                                       $valeurs[$r[1]] = extraire_attribut($b,'value');
+                                       and preg_match(",^([\w\-]+)(\[\w*\])?$,", $n, $r)
+                                       and !in_array($n, array('formulaire_action', 'formulaire_action_args'))
+                                       and extraire_attribut($b, 'type') !== 'submit'
+                               ) {
+                                       $valeurs[$r[1]] = '';
+                                       // recuperer les valeurs _meta_xx qui peuvent etre fournies
+                                       // en input hidden dans le squelette
+                                       if (strncmp($r[1], '_meta_', 6) == 0) {
+                                               $valeurs[$r[1]] = extraire_attribut($b, 'value');
                                        }
+                               }
                        }
                }
        }
 
 
-       cvtconf_configurer_lire_meta($form,$valeurs);
+       cvtconf_configurer_lire_meta($form, $valeurs);
+
        return $valeurs;
 }
 
 /**
  * Stocker les metas
+ *
  * @param string $form
  * @param array $valeurs
  * @param array $store
  * @return string
  */
-function cvtconf_configurer_stocker($form,$valeurs,$store) {
+function cvtconf_configurer_stocker($form, $valeurs, $store) {
        $trace = '';
-       list($table,$casier,$prefixe,$stockage) = cvtconf_definir_configurer_conteneur($form,$valeurs);
+       list($table, $casier, $prefixe, $stockage) = cvtconf_definir_configurer_conteneur($form, $valeurs);
        // stocker en base
        // par defaut, dans un casier serialize dans spip_meta (idem CFG)
-       if (!isset($GLOBALS[$table]))
+       if (!isset($GLOBALS[$table])) {
                lire_metas($table);
+       }
+
+       $prefixe = ($prefixe ? $prefixe . '_' : '');
+       $table = ($table) ? "/$table/" : "";
+       $casier = ($casier) ? rtrim($casier, '/') . '/' : ""; // slash final, sinon rien
 
-       $prefixe = ($prefixe?$prefixe.'_':'');
-       $table = ($table) ? "/$table/" : ""; 
-       $casier = ($casier) ? rtrim($casier,'/').'/' : ""; // slash final, sinon rien
-       
-       foreach($store as $k=>$v){
+       foreach ($store as $k => $v) {
                ecrire_config("$stockage$table$prefixe$casier$k", $v);
-               if (_request('var_mode')=='configurer' AND autoriser('webmestre')){
-                       $trace .= "<br />table $table : ".$prefixe.$k." = $v;";
+               if (_request('var_mode') == 'configurer' and autoriser('webmestre')) {
+                       $trace .= "<br />table $table : " . $prefixe . $k . " = $v;";
                }
        }
+
        return $trace;
 }
 
 /**
  * Lecture en base des metas d'un form
+ *
  * @param string $form
  * @param array $valeurs
  */
-function cvtconf_configurer_lire_meta($form,&$valeurs) {
-       list($table,$casier,$prefixe,$stockage) = cvtconf_definir_configurer_conteneur($form,$valeurs);
+function cvtconf_configurer_lire_meta($form, &$valeurs) {
+       list($table, $casier, $prefixe, $stockage) = cvtconf_definir_configurer_conteneur($form, $valeurs);
 
-       $table = ($table) ? "/$table/" : ""; 
-       $prefixe = ($prefixe?$prefixe.'_':'');
+       $table = ($table) ? "/$table/" : "";
+       $prefixe = ($prefixe ? $prefixe . '_' : '');
        if ($casier) {
                $meta = lire_config("$stockage$table$prefixe$casier");
                $prefixe = '';
-       }
-       else {
+       } else {
                $table = rtrim($table, '/');
                $meta = lire_config("$stockage$table");
        }
 
-       foreach($valeurs as $k=>$v){
-               if (substr($k,0,1)!=='_')
-               $valeurs[$k] = (isset($meta[$prefixe.$k])?$meta[$prefixe.$k]:'');
+       foreach ($valeurs as $k => $v) {
+               if (substr($k, 0, 1) !== '_') {
+                       $valeurs[$k] = (isset($meta[$prefixe . $k]) ? $meta[$prefixe . $k] : null);
+               }
        }
 }
-
-
-?>