PageRenderTime 557ms CodeModel.GetById 23ms RepoModel.GetById 12ms app.codeStats 1ms

/_plugins_/inscription2/inscription_import_export/branches/v0/exec/i2_import.php

https://bitbucket.org/pombredanne/spip-zone-treemap
PHP | 401 lines | 329 code | 51 blank | 21 comment | 42 complexity | cf1330d274be6480dc21e410fa4aa007 MD5 | raw file
  1. <?php
  2. if (!defined("_ECRIRE_INC_VERSION")) return;
  3. include_spip("inc/i2_import");
  4. include_spip('public/assembler');
  5. include_spip('inc/presentation');
  6. /**
  7. *
  8. * @return
  9. * @param int $step Le numéro de l'étape
  10. * @param object $erreur
  11. * @param object $import_link
  12. * @param object $import_form_link
  13. */
  14. function i2_import_step3(&$step, &$erreur, $import_link, $import_form_link){
  15. $table = array('spip_auteurs','spip_auteurs_elargis');
  16. $retour = urldecode(_request('retour'));
  17. $file_name = _request('file_name');
  18. $tmp_name = _request('tmp_name');
  19. $size = _request('size');
  20. $type = _request('type');
  21. $delim = _request('delim');
  22. $head = _request('head');
  23. $ajouter = _request('ajouter');
  24. $assoc_field = _request('assoc_field');
  25. $apercu = _request('apercu');
  26. if ($step==3){
  27. if (_request('annule_action'))
  28. $step--;
  29. else if ($apercu!=NULL)
  30. $step--;
  31. }
  32. if ($step==3){
  33. if ( (!$file_name)||(!$tmp_name)||(!$size)||(!$type) )
  34. $erreur[$step][] = _L("Fichier absent");
  35. if (!$delim)
  36. $erreur[$step][] = _L("Delimiteur non d&eacute;fini");
  37. if (!count($assoc_field))
  38. $erreur[$step][] = _L("Correspondances CSV-Table non d&eacute;finies");
  39. if (isset($erreur[$step])){
  40. $step--;
  41. }
  42. }
  43. if ($step==3){
  44. if (!$head) $head = false;
  45. $charger_csv = charger_fonction('importer_csv','inc');
  46. $data = $charger_csv($tmp_name, $head, $delim);
  47. if ($data==false) {
  48. $erreur[$step][] = _L("Fichier vide");
  49. }
  50. $table_fields = i2_import_table_fields($table);
  51. $new_assoc=i2_import_field_associate($data, $table_fields, $assoc_field);
  52. $test=array_diff($new_assoc,$assoc_field);
  53. if (count($test)>0){
  54. $erreur[$step][] = _L("Correspondances CSV-Table incompl&egrave;tes");
  55. }
  56. if (isset($erreur[$step])) $step--;
  57. }
  58. if ($step==3){
  59. $hidden['file_name'] = $file_name;
  60. $hidden['tmp_name'] = $tmp_name;
  61. $hidden['size'] = $size;
  62. $hidden['type'] = $type;
  63. $hidden['step'] = 3;
  64. foreach($assoc_field as $key=>$value)
  65. $hidden["assoc_field[".i2_import_nettoie_key($key)."]"] = $value;
  66. $hidden["delim"] = $delim;
  67. $hidden["head"] = $head;
  68. if (($ajouter)&&(!_request('confirme_ajoute'))){
  69. $hidden['ajouter'] = 'oui';
  70. $titre = _T('i2_import:derniers_utilisateurs',array('nb' => 5));
  71. echo "<div class='entete-formulaire'>";
  72. echo gros_titre($titre,'',false);
  73. echo "</div>";
  74. debut_cadre_relief($icone);
  75. echo '<div style="width=100%;overflow:auto">';
  76. // Extrait de la table en commençant par les dernieres maj
  77. i2_import_table_visu_extrait($table,5);
  78. echo '</div>';
  79. fin_cadre_relief();
  80. echo "<div class='formulaire_spip' id='step'>";
  81. echo $import_form_link;
  82. echo "<p class='formulaire_erreur'>";
  83. echo i2_import_show_erreurs($erreur);
  84. echo "</p>";
  85. echo "<p class='explication'>"._L("Les donn&eacute;es du fichier CSV vont &ecirc;tre ajout&eacute;es &agrave; la table comme illustr&eacute; ci-dessus.")."</p>";
  86. echo '<div style="width=100%;overflow:auto">';
  87. echo i2_import_array_visu_assoc($data, $table_fields, $assoc_field, 5);
  88. echo '</div>';
  89. foreach($hidden as $key=>$value)
  90. echo "<input type='hidden' name='$key' value='$value' />";
  91. echo "<p class='boutons'>";
  92. echo '<input type="submit" name="annule_action" value="'._T('i2_import:revenir_etape',array('step'=>($step-1))).'" class="submit" />';
  93. echo "<input type='submit' name='confirme_ajoute' value='"._L('Ajouter les donn&eacute;es')."' class='submit' />";
  94. echo "</p>";
  95. echo "</div></form>";
  96. }
  97. elseif ($ajouter){
  98. list($erreurs,$auteurs_ajoutes) = i2_import_ajoute_table_csv($data, $table, $assoc_field,$erreurs);
  99. $titre = _T('i2_import:derniers_utilisateurs',array('nb' => 10));
  100. echo "<div class='entete-formulaire'>";
  101. echo gros_titre($titre,'',false);
  102. echo "</div>";
  103. debut_cadre_relief($icone);
  104. // Extrait de la table en commençant par les dernieres maj
  105. echo '<div style="width=100%;overflow:auto">';
  106. i2_import_table_visu_extrait($table,10);
  107. echo '</div>';
  108. fin_cadre_relief();
  109. echo "<div class='formulaire_spip' id='step'>";
  110. echo $import_form_link;
  111. echo "<ul>";
  112. if (count($erreurs)){
  113. echo "<li>";
  114. echo "<p>"._T('i2_import:total_erreurs',array('nb'=>count($erreurs)))."</p>";
  115. echo "<div>";
  116. echo i2_import_show_erreurs($erreurs);
  117. echo "</div>";
  118. echo "</li>";
  119. }
  120. if(count($auteurs_ajoutes)){
  121. echo "<li>";
  122. echo "<p>"._T('i2_import:total_ajouts',array('nb'=>count($auteurs_ajoutes)))."</p>";
  123. echo "<div>";
  124. echo i2_import_show_imports($auteurs_ajoutes);
  125. echo "</div>";
  126. echo "</li>";
  127. }else{
  128. foreach($hidden as $key=>$value)
  129. echo "<input type='hidden' name='$key' value='$value' />";
  130. echo "<p class='boutons'>";
  131. echo '<input type="submit" name="annule_action" value="'._T('i2_import:revenir_etape',array('step'=>($step-1))).'" class="submit" />';
  132. echo "</p>";
  133. }
  134. echo "</ul>";
  135. echo "</div></form>";
  136. }
  137. }
  138. }
  139. function i2_import_step2(&$step, &$erreur, $import_link, $import_form_link){
  140. $table = array('spip_auteurs','spip_auteurs_elargis');
  141. $retour = urldecode(_request('retour'));
  142. $file_name = _request('file_name');
  143. $tmp_name = _request('tmp_name');
  144. $size = _request('size');
  145. $type = _request('type');
  146. $delim = _request('delim');
  147. $head = _request('head');
  148. $ajouter = _request('ajouter');
  149. $assoc_field = _request('assoc_field');
  150. $apercu = _request('apercu');
  151. if ($step==2){
  152. if (!isset($_FILES))
  153. $erreur[$step][] = _L("Probl&egrave;me inextricable...");
  154. if ((!isset($_FILES['csvfile']))&&( (!$file_name)||(!$tmp_name)||(!$size)||(!$type)))
  155. $erreur[$step][] = _L("Probl&egrave;me lors du chargement du fichier");
  156. if ((isset($_FILES['csvfile']))&&($_FILES['csvfile']['error']!=0))
  157. $erreur[$step][]=_T("i2_import:probleme_upload",array('erreur'=>$_FILES['csvfile']['error']));
  158. if (_request('annule_action'))
  159. $erreur[$step][]=_T("i2_import:annulation_action");
  160. if (isset($erreur[$step])) $step--;
  161. }
  162. if ($step==2){
  163. if (!$head) $head = false;
  164. // Pre traitement du CSV :
  165. // - on le déplace dans tmp/session
  166. // - On garde en mémoire certaines informations
  167. if (isset($_FILES['csvfile'])){
  168. $file_name = $_FILES['csvfile']['name'];
  169. $tmp_name = $_FILES['csvfile']['tmp_name'];
  170. $size = $_FILES['csvfile']['size'];
  171. $type = $_FILES['csvfile']['type'];
  172. $dest = _DIR_SESSIONS.basename($tmp_name);
  173. move_uploaded_file ( $tmp_name, $dest );
  174. $tmp_name = $dest;
  175. }
  176. if (!$delim){
  177. if ($type=="application/vnd.ms-excel")
  178. $delim = ";"; // specificite Excel de faire des fichiers csv avec des ; au lieu de ,
  179. else{
  180. $handle = fopen($tmp_name, "rt");
  181. $contenu = fread($handle, 8192);
  182. fclose($handle);
  183. if ($contenu!=FALSE){
  184. if (substr_count($contenu,",")>=substr_count($contenu,";"))
  185. $delim = ",";
  186. else
  187. $delim = ";";
  188. }
  189. else
  190. $delim = ",";
  191. }
  192. }
  193. $charger_csv = charger_fonction('importer_csv','inc');
  194. $data = $charger_csv($tmp_name, $head, $delim);
  195. if ($data==false) {
  196. $erreur[$step][] = _T("i2_import:fichier_vide");
  197. $step--;
  198. }
  199. }
  200. $table_fields = i2_import_table_fields($table);
  201. if ($data && ($step==2))
  202. $assoc_field=i2_import_field_associate($data, $table_fields, $assoc_field);
  203. if ($step==2){
  204. $hidden['file_name'] = $file_name;
  205. $hidden['tmp_name'] = $tmp_name;
  206. $hidden['size'] = $size;
  207. $hidden['type'] = $type;
  208. $hidden['step'] = 3;
  209. echo "<div class='entete-formulaire' id='step'>";
  210. echo gros_titre(_T('i2_import:previsualisation'),'',false);
  211. echo "</div>";
  212. echo "<div class='formulaire_spip'>";
  213. echo $import_form_link;
  214. foreach($hidden as $key=>$value)
  215. echo "<input type='hidden' name='$key' value='$value' />";
  216. echo "<p class='formulaire_erreur'>";
  217. echo i2_import_show_erreurs($erreur);
  218. echo "</p>";
  219. echo "<ul>";
  220. echo "<li><label for='separateur'>"._T("i2_import:separateur")."</label> ";
  221. echo "<input type='text' name='delim' id='separateur' class='text' style='width:2em;' maxlength='1' value='$delim' /></li>";
  222. echo "<li><label for='entete'>"._T("i2_import:ligne_entete")."</label>";
  223. echo "<input type='checkbox' name='head' id='entete' class='fondl' style='width:2em;' value='true'";
  224. if ($head==true)
  225. echo " checked='checked'";
  226. echo " /></li>";
  227. echo i2_import_field_configure($data, $table_fields, $assoc_field);
  228. echo "<li class='boutons'><input type='submit' name='apercu' value='"._T('i2_import:previsualiser')."' class='submit' /></li>";
  229. echo "<li class='fieldset'><fieldset>";
  230. echo "<h3 class='legend'>"._T('i2_import:previsualisation')."</h3>";
  231. echo "<div style='width:100%;margin-top:15px;overflow:auto'>";
  232. echo i2_import_array_visu_assoc($data, $table_fields, $assoc_field, 5);
  233. echo "</div>\n";
  234. echo "</fieldset></li>";
  235. echo "</ul>";
  236. echo "<p class='boutons'>";
  237. echo '<input type="submit" name="annule_action" value="'._T('i2_import:revenir_etape',array('step'=>($step-1))).'" class="submit" />';
  238. echo "<input type='submit' name='ajouter' value='"._T('i2_import:ajouter_auteurs')."' class='submit' />";
  239. echo "</p>\n";
  240. echo "</div></form>";
  241. echo "</div>";
  242. }
  243. }
  244. function i2_import_step1(&$step, &$erreur, $import_link, $import_form_link){
  245. $table = array('spip_auteurs','spip_auteurs_elargis');
  246. $retour = urldecode(_request('retour'));
  247. $file_name = _request('file_name');
  248. $tmp_name = _request('tmp_name');
  249. $size = _request('size');
  250. $type = _request('type');
  251. $delim = _request('delim');
  252. $head = _request('head');
  253. $ajouter = _request('ajouter');
  254. $assoc_field = _request('assoc_field');
  255. $apercu = _request('apercu');
  256. if ($step==1){
  257. $hidden['head'] = 'true';
  258. $hidden['step'] = 2;
  259. echo "<div class='entete-formulaire' id='step'>";
  260. echo gros_titre(_T('i2_import:import_fichier'),'',false);
  261. echo "</div>";
  262. echo "<div class='formulaire_spip'>";
  263. echo "\n\n<form action='$import_link' method='post' enctype='multipart/form-data'><div>";
  264. foreach($hidden as $key=>$value)
  265. echo "<input type='hidden' name='$key' value='$value' />";
  266. echo "<p class='formulaire_erreur'>";
  267. echo i2_import_show_erreurs($erreur);
  268. echo "</p>";
  269. echo "\n\n<ul><li>";
  270. echo "\n<label for='file_name'>"._T("i2_import:fichier_a_importer")."</label>";
  271. echo "\n<input type='file' name='csvfile' id='file_name' class='file' />";
  272. echo "\n</li></ul>";
  273. echo "\n\n<p class='boutons'>";
  274. echo "\n<input type='submit' name='Valider' value='"._T('bouton_valider')."' class='submit' />";
  275. echo "</p>";
  276. echo "</div></form></div>\n";
  277. }
  278. }
  279. function exec_i2_import(){
  280. // On doit etre Webmestre pour acceder a cette page
  281. if (!autoriser('webmestre')) {
  282. include_spip('inc/minipres');
  283. echo minipres();
  284. exit;
  285. }
  286. global $spip_lang_right;
  287. $assoc_field=array();
  288. $retour = urldecode(_request('retour'));
  289. $step = _request('step');
  290. $file_name = _request('file_name');
  291. $tmp_name = _request('tmp_name');
  292. $size = _request('size');
  293. $type = _request('type');
  294. $delim = _request('delim');
  295. $head = _request('head');
  296. $ajouter = _request('ajouter');
  297. $assoc_field = _request('assoc_field');
  298. $apercu = _request('apercu');
  299. $table = array('spip_auteurs','spip_auteurs_elargis');
  300. if (!$step)
  301. $step = 1;
  302. $operations = array();
  303. $import_link = generer_url_ecrire("i2_import",$retour ? "retour=".urlencode($retour)."#step" : "#step");
  304. include_spip('inc/filtres');
  305. $action = generer_url_ecrire('i2_import', '#step');
  306. $import_form_link = "\n<form action='".$action."#step' method='post'><div>"
  307. .form_hidden($action);
  308. $clean_link = $import_link;
  309. $commencer_page = charger_fonction('commencer_page','inc');
  310. echo $commencer_page(_T('i2_import:i2_import_titre'));
  311. pipeline('exec_init',array('args'=>$_GET,'data'=>''));
  312. echo gros_titre(_T('i2_import:i2_import_gros_titre'),'',false);
  313. echo debut_gauche('',true);
  314. echo debut_boite_info(true);
  315. echo _T('i2_import:exec_texte_boite_info');
  316. echo fin_boite_info(true);
  317. echo pipeline('affiche_gauche',array('args'=> array('exec' => 'i2_import'),'data'=>''));
  318. echo creer_colonne_droite(true);
  319. echo pipeline('affiche_droite',array('args'=> array('exec' => 'i2_import'),'data'=>''));
  320. echo debut_droite('',true);
  321. $hidden = array();
  322. // --- STEP 3 => Incorporation a la base de donnee
  323. i2_import_step3($step, $erreur, $import_link, $import_form_link);
  324. if ($step<3) {
  325. $titre = _T('i2_import:derniers_utilisateurs',array('nb' => 5));
  326. echo "<div class='entete-formulaire'>";
  327. echo gros_titre($titre,'',false);
  328. echo "</div>";
  329. echo debut_cadre_relief($icone, true);
  330. echo '<div style="width=100%;overflow:auto">';
  331. // Extrait de la table en commençant par les dernieres maj
  332. echo i2_import_table_visu_extrait($table,5);
  333. echo '</div>';
  334. echo fin_cadre_relief();
  335. }
  336. //
  337. // Icones retour
  338. //
  339. if ($retour) {
  340. echo "<div>";
  341. icone(_T('icone_retour'), $retour, $icone, "rien.gif");
  342. echo "</div>\n";
  343. }
  344. // --- STEP 2
  345. echo i2_import_step2($step, $erreur, $import_link, $import_form_link);
  346. // --- STEP 1
  347. echo i2_import_step1($step, $erreur, $import_link, $import_form_link);
  348. echo fin_gauche(),fin_page();
  349. }
  350. ?>