7df626d037ad73b4c4492cb8f558502a13674f31
[lhc/web/www.git] / www / plugins / formidable / echanger / formulaire / wcs.php
1 <?php
2
3 // Sécurité
4 if (!defined('_ECRIRE_INC_VERSION')) {
5 return;
6 }
7
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);
13
14 if ($arbre and is_array($arbre) and isset($arbre['formdef'])) {
15 foreach ($arbre['formdef'] as $form) {
16 $formulaire = array();
17
18 // Le titre
19 $titre = filtrer_entites(trim(spip_xml_aplatit($form['name'])));
20 $formulaire['titre'] = $titre ? $titre : _T('info_sans_titre');
21
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(
25 'id_formulaire',
26 'spip_formulaires',
27 'identifiant = '.sql_quote($formulaire['identifiant'])
28 );
29 if ($deja) {
30 $formulaire['identifiant'] = $formulaire['identifiant'].'_'.time();
31 }
32
33 // Les champs
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;
40
41 // Le truc par défaut
42 $saisie = array(
43 'saisie' => 'input',
44 'options' => array('size'=>40)
45 );
46
47 // Le label
48 $saisie['options']['label'] = filtrer_entites(trim(spip_xml_aplatit($field['label'])));
49
50 // On essaye de traduire tous les types de champs
51 $type = trim(spip_xml_aplatit($field['type']));
52 switch ($type) {
53 case 'string':
54 if ($size = intval(trim(spip_xml_aplatit($field['size'])))) {
55 $saisie['options']['maxlength'] = $size;
56 $saisie['verifier'] = array(
57 'type' => 'taille',
58 'options' => array('max'=>$size)
59 );
60 }
61 break;
62 case 'text':
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;
69 }
70 if ($cols = intval(trim(spip_xml_aplatit($field['cols'])))) {
71 $saisie['options']['cols'] = $cols;
72 }
73 break;
74 case 'date':
75 $saisie['verifier'] = array(
76 'type' => 'date'
77 );
78 break;
79 case 'email':
80 $saisie['verifier'] = array(
81 'type' => 'email'
82 );
83 break;
84 case 'item':
85 unset($saisie['options']['size']);
86 $saisie['saisie'] = 'selection';
87 $saisie['options']['cacher_option_intro'] = 'on';
88 break;
89 case 'bool':
90 unset($saisie['options']['size']);
91 $saisie['saisie'] = 'case';
92 $saisie['options']['label_case'] = $saisie['options']['label'];
93 unset($saisie['options']['label']);
94 break;
95 case 'multiple':
96 $saisie['saisie'] = 'checkbox';
97 unset($saisie['options']['size']);
98 break;
99 case 'comment':
100 $saisie['saisie'] = 'explication';
101 $saisie['options']['texte'] = $saisie['options']['label'];
102 unset($saisie['options']['label']);
103 break;
104 case 'page':
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;
111 break;
112 case 'subtitle':
113 case 'file':
114 $saisie = null;
115 }
116
117 // On continue seulement si on a toujours une saisie
118 if ($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;
126 }
127 }
128 }
129
130 // Le nom
131 $saisie['options']['nom'] = saisies_generer_nom($formulaire['saisies'], $saisie['saisie']);
132
133 // Obligatoire
134 if (trim(spip_xml_aplatit($field['required'])) == 'True') {
135 $saisie['options']['obligatoire'] = 'on';
136 }
137
138 // Explication éventuelle
139 if ($explication = trim(spip_xml_aplatit($field['hint']))) {
140 $saisie['options']['explication'] = $explication;
141 }
142
143 // On ajoute enfin la saisie
144 $conteneur['saisies'][] = $saisie;
145
146 // Faut-il changer de conteneur ?
147 if ($changer_conteneur) {
148 $conteneur =& $conteneur['saisies'][count($conteneur['saisies'])-1];
149 }
150 }
151 }
152 }
153
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']);
161 }
162 if (is_array($formulaire['traitements'])) {
163 $formulaire['traitements'] = serialize($formulaire['traitements']);
164 }
165
166 $erreur = formulaire_modifier($id_formulaire, $formulaire);
167 }
168 }
169 }
170
171 if ($id_formulaire and !$erreur) {
172 return $id_formulaire;
173 } else {
174 return _T('formidable:erreur_importer_wcs').' : '.$erreur;
175 }
176 }