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