4 if (!defined("_ECRIRE_INC_VERSION")) return;
6 function echanger_formulaire_wcs_importer_dist($fichier){
7 include_spip('inc/xml');
8 include_spip('inc/filtres');
9 include_spip('inc/saisies');
10 $arbre = spip_xml_load($fichier, false);
12 if ($arbre and is_array($arbre) and isset($arbre['formdef'])){
13 foreach($arbre['formdef'] as $form){
14 $formulaire = array();
17 $titre = filtrer_entites(trim(spip_xml_aplatit($form['name'])));
18 $formulaire['titre'] = $titre ?
$titre : _T('info_sans_titre');
20 // On vérifie que l'identifiant n'existe pas déjà
21 $formulaire['identifiant'] = str_replace('-', '_', trim(spip_xml_aplatit($form['url_name'])));
22 $deja = sql_getfetsel(
25 'identifiant = '.sql_quote($formulaire['identifiant'])
28 $formulaire['identifiant'] = $formulaire['identifiant'].'_'.time();
31 $formulaire['saisies'] = array();
32 // Par défaut le conteneur c'est le formulaire
33 $conteneur =& $formulaire;
34 foreach($form['fields'] as $fields){
35 foreach($fields['field'] as $field){
36 $changer_conteneur = false;
41 'options' => array('size'=>40)
45 $saisie['options']['label'] = filtrer_entites(trim(spip_xml_aplatit($field['label'])));
47 // On essaye de traduire tous les types de champs
48 $type = trim(spip_xml_aplatit($field['type']));
51 if ($size = intval(trim(spip_xml_aplatit($field['size'])))){
52 $saisie['options']['maxlength'] = $size;
53 $saisie['verifier'] = array(
55 'options' => array('max'=>$size)
60 $saisie['saisie'] = 'textarea';
61 unset($saisie['options']['size']);
62 $saisie['options']['rows'] = 5;
63 $saisie['options']['cols'] = 40;
64 if ($rows = intval(trim(spip_xml_aplatit($field['rows'])))){
65 $saisie['options']['rows'] = $rows;
67 if ($cols = intval(trim(spip_xml_aplatit($field['cols'])))){
68 $saisie['options']['cols'] = $cols;
72 $saisie['verifier'] = array(
77 $saisie['verifier'] = array(
82 unset($saisie['options']['size']);
83 $saisie['saisie'] = 'selection';
84 $saisie['options']['cacher_option_intro'] = 'on';
87 unset($saisie['options']['size']);
88 $saisie['saisie'] = 'case';
89 $saisie['options']['label_case'] = $saisie['options']['label'];
90 unset($saisie['options']['label']);
93 $saisie['saisie'] = 'checkbox';
94 unset($saisie['options']['size']);
97 $saisie['saisie'] = 'explication';
98 $saisie['options']['texte'] = $saisie['options']['label'];
99 unset($saisie['options']['label']);
102 $saisie['saisie'] = 'fieldset';
103 unset($saisie['options']['size']);
104 $saisie['saisies'] = array();
105 $changer_conteneur = true;
106 // On remet le conteneur au niveau du formulaire
107 $conteneur =& $formulaire;
114 // On continue seulement si on a toujours une saisie
116 // Les choix pour les types select
117 if(isset($field['items']) and is_array($field['items'])){
118 $saisie['options']['datas'] = array();
119 foreach($field['items'] as $items){
120 foreach($items['item'] as $cle=>$item){
121 $titre = filtrer_entites(trim($item));
122 $saisie['options']['datas']['choix_'.$cle] = $titre;
128 $saisie['options']['nom'] = saisies_generer_nom($formulaire['saisies'], $saisie['saisie']);
131 if (trim(spip_xml_aplatit($field['required'])) == 'True')
132 $saisie['options']['obligatoire'] = 'on';
134 // Explication éventuelle
135 if ($explication = trim(spip_xml_aplatit($field['hint'])))
136 $saisie['options']['explication'] = $explication;
138 // On ajoute enfin la saisie
139 $conteneur['saisies'][] = $saisie;
141 // Faut-il changer de conteneur ?
142 if ($changer_conteneur){
143 $conteneur =& $conteneur['saisies'][count($conteneur['saisies'])-1];
149 include_spip('action/editer_formulaire');
150 // On insère un nouveau formulaire
151 $id_formulaire = insert_formulaire();
152 // Si ça a marché on modifie les champs de base
153 if ($id_formulaire > 0 and !($erreur = formulaire_set($id_formulaire, $formulaire))){
154 // Et ensuite les saisies et les traitements
158 'saisies' => serialize($formulaire['saisies']),
159 'traitements' => serialize($formulaire['traitements'])
161 'id_formulaire = '.$id_formulaire
167 if ($id_formulaire and $ok){
168 return $id_formulaire;
171 return _T('formidable:erreur_importer_wcs');