[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / plugins / saisies / formulaires / construire_formulaire.php
index f389534..86138dc 100644 (file)
@@ -51,12 +51,18 @@ function formulaires_construire_formulaire_charger($identifiant, $formulaire_ini
        $contexte['fond_generer'] = 'formulaires/inc-generer_saisies_configurables';
 
        // On cherche jquery UI pour savoir si on pourra glisser-déplacer
-       // SPIP 3.1 - jquery_ui
-       if (find_in_path('javascript/ui/sortable.js') and find_in_path('javascript/ui/draggable.js')) {
+       $contexte['_jquery_ui_all'] = false;
+
+       // SPIP 3.2
+       if ($jquery_ui_all = find_in_path('javascript/ui/jquery-ui.js')) {
+               $contexte['_jquery_ui_all'] = $jquery_ui_all;
+       // SPIP 3.1
+       } elseif (find_in_path('javascript/ui/sortable.js') and find_in_path('javascript/ui/draggable.js')) {
                $contexte['_chemin_ui'] = 'javascript/ui/';
+       // SPIP 3.0
        } elseif (find_in_path('javascript/ui/jquery.ui.sortable.js') and find_in_path('javascript/ui/jquery.ui.draggable.js')) {
-               // SPIP 3 - jquery_ui
                $contexte['_chemin_ui'] = 'javascript/ui/jquery.ui.';
+       // Plugin jquery-ui absent.
        } else {
                $contexte['_chemin_ui'] = false;
        }
@@ -71,8 +77,10 @@ function formulaires_construire_formulaire_verifier($identifiant, $formulaire_in
        $configurer_saisie = $enregistrer_saisie = '';
 
        // Pas d'erreur si l'on ne demande rien
-       if (!($nom_ou_id = $configurer_saisie  = _request('configurer_saisie')
-               or $nom_ou_id = $enregistrer_saisie = _request('enregistrer_saisie'))) {
+       if (
+               !($nom_ou_id = $configurer_saisie  = _request('configurer_saisie')
+               or $nom_ou_id = $enregistrer_saisie = _request('enregistrer_saisie'))
+       ) {
                return $erreurs;
        }
 
@@ -85,7 +93,8 @@ function formulaires_construire_formulaire_verifier($identifiant, $formulaire_in
        if ($nom_ou_id[0] == '@') {
                $saisies_actuelles = saisies_lister_par_identifiant($formulaire_actuel);
                $nom = $saisies_actuelles[$nom_ou_id]['options']['nom'];
-       } else {
+       }
+       else {
                $saisies_actuelles = saisies_lister_par_nom($formulaire_actuel);
                $nom = $nom_ou_id;
        }
@@ -101,7 +110,7 @@ function formulaires_construire_formulaire_verifier($identifiant, $formulaire_in
 
        $saisie = $saisies_actuelles[$nom_ou_id];
        $formulaire_config = $saisies_disponibles[$saisie['saisie']]['options'];
-       array_walk_recursive($formulaire_config, 'formidable_transformer_nom', "saisie_modifiee_${nom}[options][@valeur@]");
+       array_walk_recursive($formulaire_config, 'construire_formulaire_transformer_nom', "saisie_modifiee_${nom}[options][@valeur@]");
        $formulaire_config = saisie_identifier(array('saisies'=>$formulaire_config));
        $formulaire_config = $formulaire_config['saisies'];
 
@@ -121,8 +130,10 @@ function formulaires_construire_formulaire_verifier($identifiant, $formulaire_in
        }
 
        // S'il y a l'option adéquat, on ajoute le champ pour modifier le nom
-       if (isset($options['modifier_nom']) and $options['modifier_nom']
-               and $chemin_nom = saisies_chercher($formulaire_config, "saisie_modifiee_${nom}[options][description]", true)) {
+       if (
+               isset($options['modifier_nom']) and $options['modifier_nom']
+               and $chemin_nom = saisies_chercher($formulaire_config, "saisie_modifiee_${nom}[options][description]", true)
+       ) {
                $chemin_nom[] = 'saisies';
                $chemin_nom[] = '0';
 
@@ -155,21 +166,38 @@ function formulaires_construire_formulaire_verifier($identifiant, $formulaire_in
        if ($chemin_validation = saisies_chercher($formulaire_config, "saisie_modifiee_${nom}[options][validation]", true)) {
                include_spip('inc/verifier');
                $liste_verifications = verifier_lister_disponibles();
+               
+               // La vérification fichiers ne sert que pour la saisie fichiers, et réciproquement, cette saisies n'utilise que cette vérification
+               if ($saisie['saisie'] == 'fichiers') {
+                       $liste_verifications = array('fichiers'=>$liste_verifications['fichiers']);
+               } else {
+                       unset($liste_verifications['fichiers']);
+               }
+               uasort ($liste_verifications,'verifier_trier_par_titre');
                $chemin_validation[] = 'saisies';
                $chemin_validation[] = 1000000; // à la fin
 
                // On construit la saisie à insérer et les fieldset des options
-               $saisie_liste_verif = array(
-                       'saisie' => 'selection',
-                       'options' => array(
-                               'nom' => "saisie_modifiee_${nom}[verifier][type]",
-                               'label' => _T('saisies:construire_verifications_label'),
-                               'option_intro' => _T('saisies:construire_verifications_aucune'),
-                               'conteneur_class' => 'liste_verifications',
-                               'datas' => array()
-                       )
-               );
-
+               if ($saisie['saisie'] == 'fichiers') {
+                       $saisie_liste_verif = array(
+                               'saisie' => 'hidden',
+                               'options' => array(
+                                       'nom' => "saisie_modifiee_${nom}[verifier][type]",
+                                       'defaut' => 'fichiers'  
+                               )
+                       );
+               } else {
+                       $saisie_liste_verif = array(
+                               'saisie' => 'selection',
+                               'options' => array(
+                                       'nom' => "saisie_modifiee_${nom}[verifier][type]",
+                                       'label' => _T('saisies:construire_verifications_label'),
+                                       'option_intro' => _T('saisies:construire_verifications_aucune'),
+                                       'conteneur_class' => 'liste_verifications',
+                                       'datas' => array()
+                               )
+                       );
+               }
                foreach ($liste_verifications as $type_verif => $verif) {
                        $saisie_liste_verif['options']['datas'][$type_verif] = $verif['titre'];
                        // Si le type de vérif a des options, on ajoute un fieldset
@@ -183,14 +211,14 @@ function formulaires_construire_formulaire_verifier($identifiant, $formulaire_in
                                        ),
                                        'saisies' => $verif['options']
                                );
-                               array_walk_recursive($groupe, 'formidable_transformer_nom', "saisie_modifiee_${nom}[verifier][$type_verif][@valeur@]");
+                               array_walk_recursive($groupe, 'construire_formulaire_transformer_nom', "saisie_modifiee_${nom}[verifier][$type_verif][@valeur@]");
+                               array_walk_recursive($groupe, 'construire_formulaire_transformer_afficher_si', "saisie_modifiee_${nom}[verifier][$type_verif]");
                                $verif_options[$type_verif] = $groupe;
                        }
                }
                $verif_options = array_merge(array($saisie_liste_verif), $verif_options);
        }
-
-
+       
        // Permettre d'intégrer des saisies et fieldset au formulaire de configuration.
        // Si des vérifications sont à faire, elles seront prises en compte
        // lors des tests de vérifications à l'enregistrement.
@@ -210,6 +238,7 @@ function formulaires_construire_formulaire_verifier($identifiant, $formulaire_in
                $saisie_modifiee = _request("saisie_modifiee_${nom}");
                // On cherche les erreurs de la configuration
                $vraies_erreurs = saisies_verifier($formulaire_config);
+               
                // Si on autorise à modifier le nom ET qu'il doit être unique : on vérifie
                if (isset($options['modifier_nom']) and $options['modifier_nom']
                        and isset($options['nom_unique']) and $options['nom_unique']) {
@@ -218,6 +247,7 @@ function formulaires_construire_formulaire_verifier($identifiant, $formulaire_in
                                $vraies_erreurs["saisie_modifiee_${nom}[options][nom]"] = _T('saisies:erreur_option_nom_unique');
                        }
                }
+               
                // On regarde s'il a été demandé un type de vérif
                if (isset($saisie_modifiee['verifier']['type'])
                        and (($type_verif = $saisie_modifiee['verifier']['type']) != '')
@@ -234,7 +264,6 @@ function formulaires_construire_formulaire_verifier($identifiant, $formulaire_in
                }
        }
        $erreurs['configurer_'.$nom] = $formulaire_config;
-       $erreurs['positionner'] = '#configurer_'.$nom;
 
        if ($enregistrer_saisie) {
                if ($vraies_erreurs) {
@@ -313,6 +342,7 @@ function formulaires_construire_formulaire_traiter($identifiant, $formulaire_ini
                        }
                        $saisie = array_replace_recursive($saisie, $defaut);
                }
+               
                $formulaire_actuel = saisies_inserer($formulaire_actuel, $saisie);
        }
 
@@ -383,19 +413,28 @@ function formulaires_construire_formulaire_traiter($identifiant, $formulaire_ini
 
 // À utiliser avec un array_walk_recursive()
 // Applique une transformation à la @valeur@ de tous les champs "nom" d'un formulaire, y compris loin dans l'arbo
-function formidable_transformer_nom(&$valeur, $cle, $transformation) {
+function construire_formulaire_transformer_nom(&$valeur, $cle, $transformation) {
        if ($cle == 'nom' and is_string($valeur)) {
                $valeur = str_replace('@valeur@', $valeur, $transformation);
        }
 }
 
+// À utiliser avec un array_walk_recursive()
+// Applique une transformation à la valeur de tous les champs "afficher_si" d'un formulaire, y compris loin dans l'arbo
+function construire_formulaire_transformer_afficher_si(&$valeur, $cle, $transformation) {
+       if ($cle == 'afficher_si' and is_string($valeur)) {
+               $valeur = preg_replace("#@(.*)@#", '@'.$transformation.'[${1}]@', $valeur);
+       }
+}
+
 // Préparer une saisie pour la transformer en truc configurable
-function formidable_generer_saisie_configurable($saisie, $env) {
+function construire_formulaire_generer_saisie_configurable($saisie, $env) {
        // On récupère le nom
        $nom = $saisie['options']['nom'];
        $identifiant = isset($saisie['identifiant']) ? $saisie['identifiant'] : '';
        // On cherche si ya un formulaire de config
        $formulaire_config = isset($env['erreurs']['configurer_'.$nom]) ? $env['erreurs']['configurer_'.$nom] : '';
+       
        // On ajoute une classe
        if (!isset($saisie['options']['conteneur_class'])) {
                $saisie['options']['conteneur_class'] = ''; // initialisation
@@ -419,7 +458,7 @@ function formidable_generer_saisie_configurable($saisie, $env) {
                                        'nom' => $nom,
                                        'identifiant' => $identifiant,
                                        'formulaire_config' => $formulaire_config,
-                                       'deplacable' => $env['_chemin_ui']
+                                       'deplacable' => (!empty($env['_jquery_ui_all']) or !empty($env['_chemin_ui']))
                                )
                        ),
                        'debut'
@@ -495,7 +534,6 @@ function formidable_generer_saisie_configurable($saisie, $env) {
                // Un test pour savoir si on prend le _request ou bien
                $erreurs_test = $env['erreurs'];
                unset($erreurs_test['configurer_'.$nom]);
-               unset($erreurs_test['positionner']);
                unset($erreurs_test['message_erreur']);
 
                if ($erreurs_test) {
@@ -522,15 +560,17 @@ function formidable_generer_saisie_configurable($saisie, $env) {
                        )
                        .'<'.saisie_balise_structure_formulaire('li').' class="boutons">
                                <input type="hidden" name="enregistrer_saisie" value="'.$nom.'" />
-                               <button type="submit" class="submit link" name="enregistrer_saisie" value="">'._T('bouton_annuler').'</button>
-                               <input type="submit" class="submit" name="enregistrer" value="'._T('bouton_valider').'" />
+                               <button type="submit" class="submit link noscroll" name="enregistrer_saisie" value="">'._T('bouton_annuler').'</button>
+                               <input type="submit" class="submit noscroll" name="enregistrer" value="'._T('bouton_valider').'" />
                        </'.saisie_balise_structure_formulaire('li').'>'
                        .'</'.saisie_balise_structure_formulaire('ul').'></div>',
                        'fin'
                );
        }
+       
        // On génère le HTML de la saisie
        $html = saisies_generer_html($saisie, $env);
+       
        return $html;
 }
 
@@ -555,27 +595,28 @@ function saisie_option_contenu_vide($var) {
 function saisies_groupe_inserer($formulaire_actuel, $saisie) {
        include_spip('inclure/configurer_saisie_fonctions');
 
-               //le groupe de saisies
-               $saisies_charger_infos = saisies_charger_infos($saisie, $saisies_repertoire = 'saisies/groupes');
+       //le groupe de saisies
+       $saisies_charger_infos = saisies_charger_infos($saisie, $saisies_repertoire = 'saisies/groupes');
 
-               //le tableau est-il en options ou en saisies ?
-               $classique_yaml=count($saisies_charger_infos['options']);
-               $formidable_yaml=count($saisies_charger_infos['saisies']);
-               if ($classique_yaml>0) {
-                       $champ_options = 'options';
-               }
-               if ($formidable_yaml>0) {
-                       $champ_options = 'saisies';
-               }
+       //le tableau est-il en options ou en saisies ?
+       $classique_yaml=count($saisies_charger_infos['options']);
+       $formidable_yaml=count($saisies_charger_infos['saisies']);
+       if ($classique_yaml>0) {
+               $champ_options = 'options';
+       }
+       if ($formidable_yaml>0) {
+               $champ_options = 'saisies';
+       }
 
-               //les champs du groupe
-               foreach ($saisies_charger_infos[$champ_options] as $info_saisie) {
-                       unset($info_saisie['identifiant']);
-                       $saisies_disponibles = saisies_lister_disponibles();
-                       $construire_nom = $info_saisie[$champ_options]['nom'] ? $info_saisie[$champ_options]['nom'] : $info_saisie['saisie'];
-                       $nom = $info_saisie[$champ_options]['nom'] = saisies_generer_nom($formulaire_actuel, $construire_nom);
+       //les champs du groupe
+       foreach ($saisies_charger_infos[$champ_options] as $info_saisie) {
+               unset($info_saisie['identifiant']);
+               $saisies_disponibles = saisies_lister_disponibles();
+               $construire_nom = $info_saisie[$champ_options]['nom'] ? $info_saisie[$champ_options]['nom'] : $info_saisie['saisie'];
+               $nom = $info_saisie[$champ_options]['nom'] = saisies_generer_nom($formulaire_actuel, $construire_nom);
 
-                       $formulaire_actuel = saisies_inserer($formulaire_actuel, $info_saisie);
-               }
-               return $formulaire_actuel;
+               $formulaire_actuel = saisies_inserer($formulaire_actuel, $info_saisie);
+       }
+       
+       return $formulaire_actuel;
 }