X-Git-Url: http://git.cyclocoop.org/?p=velocampus%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fecrire%2Fbase%2Fconvert_sql_utf8.php;fp=www%2Fecrire%2Fbase%2Fconvert_sql_utf8.php;h=8d3423d086071c714bca3337feaa3d92818f6258;hp=0000000000000000000000000000000000000000;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c
diff --git a/www/ecrire/base/convert_sql_utf8.php b/www/ecrire/base/convert_sql_utf8.php
new file mode 100644
index 0000000..8d3423d
--- /dev/null
+++ b/www/ecrire/base/convert_sql_utf8.php
@@ -0,0 +1,129 @@
+", _T('utf8_convert_timeout'), "
\n";
+
+ convert_sql_utf8($titre);
+
+ echo ""._T('utf8_convert_termine')."
";
+ effacer_meta('convert_sql_utf8');
+
+ // bouton "retour au site" + redirige_par_entete
+ echo "",
+ " >> ",
+ _T('icone_retour'),"
",
+ install_fin_html();
+}
+
+// http://doc.spip.org/@convert_sql_utf8
+function convert_sql_utf8($titre){
+
+ define(_DEBUG_CONVERT, false);
+ $charset_spip = $GLOBALS['meta']['charset'];
+ $charset_supporte = false;
+ $utf8_supporte = false;
+ // verifier que mysql gere le charset courant pour effectuer les conversions
+ if ($c = sql_get_charset($charset_spip)){
+ $sql_charset = $c['charset'];
+ $sql_collation = $c['collation'];
+ $charset_supporte = true;
+ }
+ if (!$charset_supporte){
+ $res = spip_query("SHOW CHARACTER SET");
+ while ($row = sql_fetch($res)){
+ if ($row['Charset']=='utf8') $utf8_supporte = true;
+ }
+ echo install_debut_html($titre);
+ echo _L("Le charset SPIP actuel $charset_spip n'est pas supporte par votre serveur MySQL
"); # non traduit car complexe & obsolete
+ if ($utf8_supporte)
+ echo _L("Votre serveur supporte utf-8, vous devriez convertir votre site en utf-8 avant de recommencer cette operation");
+ echo install_fin_html();
+ } else {
+ echo _L("Charset Actuel du site SPIP : $charset_spip
");
+ echo _L("Conversion des champs des tables spip de type latin1 vers $sql_charset (collation $sql_collation)
");
+ // lister les collations et leur charset correspondant
+ $res = spip_query("SHOW COLLATION");
+ $charset2collations = array();
+ while ($row = sql_fetch($res)){
+ $charset2collations[$row['Collation']] = $row['Charset'];
+ }
+
+ $count = 0;
+ // lister les tables spip
+ include_spip('base/serial');
+ include_spip('base/auxiliaires');
+
+ $res = spip_query("SHOW TABLES");
+ while (($row = sql_fetch($res)) /*&& ($count<1)*/){
+ $nom = array_shift($row);
+ if (preg_match(',^'.$GLOBALS['table_prefix'].'_(.*)$,',$nom,$regs)){
+ $count++;
+ $nom = $regs[1];
+ echo "
$nom
";
+ // lister les champs de la table
+ $res2 = spip_query("SHOW FULL COLUMNS FROM spip_$nom");
+ while ($row2 = sql_fetch($res2)){
+ $collation = $row2['Collation'];
+ $champ = $row2['Field'];
+ if ($collation!="NULL"
+ && isset($charset2collations[$collation])
+ && $charset2collations[$collation]=='latin1'){
+ echo "Conversion de '$champ' depuis $collation (".$charset2collations[$collation]."):";
+ // conversion de latin1 vers le charset reel du contenu
+ $type_texte= $row2['Type'];
+ $type_blob = "blob";
+ if (strpos($type_texte,"text")!==FALSE)
+ $type_blob = str_replace("text","blob",$type_texte);
+
+ // sauf si blob expressement demande dans la description !
+ if ((
+ $a = $GLOBALS['tables_principales']['spip_'.$nom]['field'][$champ]
+ OR $a = $GLOBALS['tables_auxiliaires']['spip_'.$nom]['field'][$champ]
+ ) AND preg_match(',blob,i', $a)) {
+ echo "On ignore le champ blob $nom.$champ
\n";
+ } else {
+
+ $default = $row2['Default']?(" DEFAULT ".sql_quote($row2['Default'])):"";
+ $notnull = ($row2['Null']=='YES')?"":" NOT NULL";
+ $q = "ALTER TABLE spip_$nom CHANGE $champ $champ $type_blob $default $notnull";
+ if (!_DEBUG_CONVERT)
+ $b = spip_query($q);
+ echo "$q
$b\n";
+ $q = "ALTER TABLE spip_$nom CHANGE $champ $champ $type_texte CHARACTER SET $sql_charset COLLATE $sql_collation $default $notnull";
+ if (!_DEBUG_CONVERT)
+ $b = spip_query($q);
+ echo "$q
\n";
+ }
+ }
+ }
+ // on ne change le charset par defaut de la table que quand tous ses champs sont convertis
+ $q = "ALTER TABLE spip_$nom DEFAULT CHARACTER SET $sql_charset COLLATE $sql_collation";
+ if (!_DEBUG_CONVERT)
+ $b = spip_query($q);
+ echo "$q
$b\n";
+ }
+ }
+ ecrire_meta('charset_sql_base',$sql_charset,'non');
+ ecrire_meta('charset_sql_connexion',$sql_charset,'non');
+ }
+}
+?>