4 if (!defined('_ECRIRE_INC_VERSION')) {
8 function echanger_formulaire_wcs_importer_dist($fichier) {
9 include_spip('inc/xml');
10 include_spip('inc/filtres');
11 include_spip('inc/saisies');
12 $arbre = spip_xml_load($fichier, false);
14 if ($arbre and is_array($arbre) and isset($arbre['formdef'])) {
15 foreach ($arbre['formdef'] as $form) {
16 $formulaire = array();
19 $titre = filtrer_entites(trim(spip_xml_aplatit($form['name'])));
20 $formulaire['titre'] = $titre ?
$titre : _T('info_sans_titre');
22 // On vérifie que l'identifiant n'existe pas déjà
23 $formulaire['identifiant'] = str_replace('-', '_', trim(spip_xml_aplatit($form['url_name'])));
24 $deja = sql_getfetsel(
27 'identifiant = '.sql_quote($formulaire['identifiant'])
30 $formulaire['identifiant'] = $formulaire['identifiant'].'_'.time();
34 $formulaire['saisies'] = array();
35 // Par défaut le conteneur c'est le formulaire
36 $conteneur =& $formulaire;
37 foreach ($form['fields'] as $fields) {
38 foreach ($fields['field'] as $field) {
39 $changer_conteneur = false;
44 'options' => array('size'=>40)
48 $saisie['options']['label'] = filtrer_entites(trim(spip_xml_aplatit($field['label'])));
50 // On essaye de traduire tous les types de champs
51 $type = trim(spip_xml_aplatit($field['type']));
54 if ($size = intval(trim(spip_xml_aplatit($field['size'])))) {
55 $saisie['options']['maxlength'] = $size;
56 $saisie['verifier'] = array(
58 'options' => array('max'=>$size)
63 $saisie['saisie'] = 'textarea';
64 unset($saisie['options']['size']);
65 $saisie['options']['rows'] = 5;
66 $saisie['options']['cols'] = 40;
67 if ($rows = intval(trim(spip_xml_aplatit($field['rows'])))) {
68 $saisie['options']['rows'] = $rows;
70 if ($cols = intval(trim(spip_xml_aplatit($field['cols'])))) {
71 $saisie['options']['cols'] = $cols;
75 $saisie['verifier'] = array(
80 $saisie['verifier'] = array(
85 unset($saisie['options']['size']);
86 $saisie['saisie'] = 'selection';
87 $saisie['options']['cacher_option_intro'] = 'on';
90 unset($saisie['options']['size']);
91 $saisie['saisie'] = 'case';
92 $saisie['options']['label_case'] = $saisie['options']['label'];
93 unset($saisie['options']['label']);
96 $saisie['saisie'] = 'checkbox';
97 unset($saisie['options']['size']);
100 $saisie['saisie'] = 'explication';
101 $saisie['options']['texte'] = $saisie['options']['label'];
102 unset($saisie['options']['label']);
105 $saisie['saisie'] = 'fieldset';
106 unset($saisie['options']['size']);
107 $saisie['saisies'] = array();
108 $changer_conteneur = true;
109 // On remet le conteneur au niveau du formulaire
110 $conteneur =& $formulaire;
117 // On continue seulement si on a toujours une saisie
119 // Les choix pour les types select
120 if (isset($field['items']) and is_array($field['items'])) {
121 $saisie['options']['datas'] = array();
122 foreach ($field['items'] as $items) {
123 foreach ($items['item'] as $cle => $item) {
124 $titre = filtrer_entites(trim($item));
125 $saisie['options']['datas']['choix_'.$cle] = $titre;
131 $saisie['options']['nom'] = saisies_generer_nom($formulaire['saisies'], $saisie['saisie']);
134 if (trim(spip_xml_aplatit($field['required'])) == 'True') {
135 $saisie['options']['obligatoire'] = 'on';
138 // Explication éventuelle
139 if ($explication = trim(spip_xml_aplatit($field['hint']))) {
140 $saisie['options']['explication'] = $explication;
143 // On ajoute enfin la saisie
144 $conteneur['saisies'][] = $saisie;
146 // Faut-il changer de conteneur ?
147 if ($changer_conteneur) {
148 $conteneur =& $conteneur['saisies'][count($conteneur['saisies'])-1];
154 include_spip('action/editer_formulaire');
155 // On insère un nouveau formulaire
156 $id_formulaire = formulaire_inserer();
157 // Si ça a marché on transforme les tableaux et on modifie les champs
158 if ($id_formulaire > 0) {
159 if (is_array($formulaire['saisies'])) {
160 $formulaire['saisies'] = serialize($formulaire['saisies']);
162 if (is_array($formulaire['traitements'])) {
163 $formulaire['traitements'] = serialize($formulaire['traitements']);
166 $erreur = formulaire_modifier($id_formulaire, $formulaire);
171 if ($id_formulaire and !$erreur) {
172 return $id_formulaire;
174 return _T('formidable:erreur_importer_wcs').' : '.$erreur;