diff --git a/htdocs/includes/boxes/modules_boxes.php b/htdocs/includes/boxes/modules_boxes.php index d97bfe08f56a9c46232eed84b329dd8b35f0b799..c5d67553703c32a474c856a6830399561b6030f5 100644 --- a/htdocs/includes/boxes/modules_boxes.php +++ b/htdocs/includes/boxes/modules_boxes.php @@ -215,12 +215,14 @@ class ModeleBoxes } } + // Complete line to max + /* while ($i < $this->max) { $var=!$var; print '<tr '.$bcx[$var].'><td colspan="'.$nbcol.'"> </td></tr>'; $i++; - } + }*/ print "</table>\n"; } diff --git a/htdocs/install/etape0.php b/htdocs/install/etape0.php index 6a2de7c80e832ba0656208232216f0476eaab2e0..22ecfc580fecba04862657864b5b1f8ba9044cd7 100644 --- a/htdocs/install/etape0.php +++ b/htdocs/install/etape0.php @@ -136,7 +136,7 @@ if (! $error) } //print $_POST["db_type"].",".$_POST["db_host"].",$userroot,$passroot,$databasefortest,".$_POST["db_port"]; $db = new DoliDb($_POST["db_type"],$_POST["db_host"],$userroot,$passroot,$databasefortest,$_POST["db_port"]); - + dolibarr_syslog("databasefortest=".$databasefortest." connected=".$db->connected." database_selected=".$db->database_selected, LOG_DEBUG); //print "databasefortest=".$databasefortest." connected=".$db->connected." database_selected=".$db->database_selected; @@ -229,17 +229,21 @@ if (! $error && $db->connected) $listOfCharacterSet=$db->getListOfCharacterSet(); $listOfCollation=$db->getListOfCollation(); - // Choice of dolibarr_main_db_charaster_set + // Choice of dolibarr_main_db_character_set ?> <tr> <td valign="top" class="label"><?php echo $langs->trans("CharacterSetDatabase"); ?></td> <td valign="top" class="label"><?php if (sizeof($listOfCharacterSet)) { - print '<select name="dolibarr_main_db_charaster_set" '.$disabled.'>'; + print '<select name="dolibarr_main_db_character_set" '.$disabled.'>'; $selected=""; foreach ($listOfCharacterSet as $characterSet) { + // We keep only utf8 and iso + $linedisabled=false; + if (! eregi('(utf8|latin1)',$characterSet['charset'])) $linedisabled=true; + if ($defaultCharacterSet == $characterSet['charset'] ) { $selected="selected"; @@ -248,16 +252,16 @@ if (! $error && $db->connected) { $selected=""; } - print '<option value="'.$characterSet['charset'].'" '.$selected.'>'.$characterSet['charset'].' ('.$characterSet['description'].')</option>'; + print '<option value="'.$characterSet['charset'].'" '.$selected.($linedisabled?' disabled="true"':'').'>'.$characterSet['charset'].' ('.$characterSet['description'].')</option>'; } print '</select>'; if ($disabled=="disabled"){ - print '<input type="hidden" name="dolibarr_main_db_charaster_set" value="'.$defaultCharacterSet.'">'; + print '<input type="hidden" name="dolibarr_main_db_character_set" value="'.$defaultCharacterSet.'">'; } } else { - print '<input type="text" name="dolibarr_main_db_charaster_set" value="'.$defaultCharacterSet.'">'; + print '<input type="text" name="dolibarr_main_db_character_set" value="'.$defaultCharacterSet.'">'; } ?></td> <td class="label"> @@ -279,6 +283,10 @@ if (! $error && $db->connected) $selected=""; foreach ($listOfCollation as $collation) { + // We keep only utf8 and iso + $linedisabled=false; + if (! eregi('(utf8_general|latin1_swedish)',$collation['collation'])) $linedisabled=true; + if ($defaultCollationConnection == $collation['collation']) { $selected="selected"; @@ -287,7 +295,7 @@ if (! $error && $db->connected) { $selected=""; } - print '<option value="'.$collation['collation'].'" '.$selected.'>'.$collation['collation'].'</option>'; + print '<option value="'.$collation['collation'].'" '.$selected.($linedisabled?' disabled="true"':'').'>'.$collation['collation'].'</option>'; } print '</select>'; if ($disabled=="disabled"){ diff --git a/htdocs/install/etape1.php b/htdocs/install/etape1.php index a9a7a08f1d5c53ca5c366f36f7921065ed8ccbf5..4b7429d206b4afb75668dc3e9877ffd3f5a4017c 100644 --- a/htdocs/install/etape1.php +++ b/htdocs/install/etape1.php @@ -81,11 +81,12 @@ if ($_POST["action"] == "set") { if (! eregi('^db_pass',$cle)) dolibarr_install_syslog("Choice for ".$cle." = ".$valeur); } - + + // Show title of step print '<h3>'.$langs->trans("ConfigurationFile").'</h3>'; print '<table cellspacing="0" width="100%" cellpadding="1" border="0">'; - // Verification validite parametre main_dir + // Check parameter main_dir if (! $error) { if (! is_dir($main_dir)) @@ -103,115 +104,22 @@ if ($_POST["action"] == "set") } } - // Sauvegarde fichier configuration + // Chargement driver acces bases if (! $error) { - $fp = fopen("$conffile", "w"); - - if($fp) - { - clearstatcache(); - - fputs($fp, '<?php'); - fputs($fp,"\n"); - fputs($fp,"#\n"); - fputs($fp,"# File generated by Dolibarr installer on ".dolibarr_print_date(gmmktime(),'')); - fputs($fp,"\n"); - fputs($fp,"#\n"); - fputs($fp,"# Take a look at conf.php.example file for an example of conf.php file\n"); - fputs($fp,"# and explanations for all possibles parameters.\n"); - fputs($fp,"#\n"); - - fputs($fp, '$dolibarr_main_url_root="'.$_POST["main_url"].'";'); - fputs($fp,"\n"); - - fputs($fp, '$dolibarr_main_document_root="'.$main_dir.'";'); - fputs($fp,"\n"); - - fputs($fp, '$dolibarr_main_data_root="'.$main_data_dir.'";'); - fputs($fp,"\n"); - - fputs($fp, '$dolibarr_main_db_host="'.$_POST["db_host"].'";'); - fputs($fp,"\n"); - - fputs($fp, '$dolibarr_main_db_port="'.$_POST["db_port"].'";'); - fputs($fp,"\n"); - - fputs($fp, '$dolibarr_main_db_name="'.$_POST["db_name"].'";'); - fputs($fp,"\n"); - - fputs($fp, '$dolibarr_main_db_user="'.$_POST["db_user"].'";'); - fputs($fp,"\n"); - - fputs($fp, '$dolibarr_main_db_pass="'.$_POST["db_pass"].'";'); - fputs($fp,"\n"); - - fputs($fp, '$dolibarr_main_db_type="'.$_POST["db_type"].'";'); - fputs($fp,"\n"); - - fputs($fp, '$dolibarr_main_db_character_set="'.$_POST["dolibarr_main_db_charaster_set"].'";'); - fputs($fp,"\n"); - - fputs($fp, '$dolibarr_main_db_collation="'.$_POST["dolibarr_main_db_collation"].'";'); - fputs($fp,"\n"); - - /* Authentication */ - if ($_POST["db_type"] == 'mssql') - { - fputs($fp, '$dolibarr_main_authentication="dolibarr_mdb2";'); - } - else - { - fputs($fp, '$dolibarr_main_authentication="dolibarr";'); - } - fputs($fp,"\n"); - - /* Preparation integration SMARTY */ - fputs($fp, '$dolibarr_smarty_libs_dir="";'); - fputs($fp,"\n"); - - fputs($fp, '$dolibarr_smarty_compile="";'); - fputs($fp,"\n"); - - fputs($fp, '$dolibarr_smarty_cache="";'); - fputs($fp,"\n"); - /* Fin Smarty*/ - - fputs($fp, '?>'); - fclose($fp); - - if (file_exists("$conffile")) - { - include("$conffile"); // On force rechargement. Ne pas mettre include_once ! - conf($dolibarr_main_document_root); - - print "<tr><td>"; - print $langs->trans("SaveConfigurationFile"); - print "</td><td>"; - print $langs->trans("OK"); - print "</td></tr>"; - } - else - { - $error++; - } - } - - // Chargement driver acces bases - require_once($dolibarr_main_document_root."/lib/databases/".$dolibarr_main_db_type.".lib.php"); + dolibarr_install_syslog("etape1: Directory '".$main_dir."' exists"); + require_once($main_dir."/lib/databases/".$_POST["db_type"].".lib.php"); } /*************************************************************************** - * Creation des r�pertoires + * Create directories ***************************************************************************/ - // Creation des sous-r�pertoires main_data_dir + // Create subdirectory main_data_dir if (! $error) { - dolibarr_install_syslog("etape1: Directory '".$main_dir."' exists"); - // R�pertoire des documents if (! is_dir($main_data_dir)) { @@ -277,8 +185,14 @@ if ($_POST["action"] == "set") } } + // Write conf file on disk + if (! $error) + { + $error+=write_conf_file($conffile); + } + /** - * Cr�ation des Bases de donn�es + * Create database and admin user database */ if (! $error) { @@ -293,7 +207,7 @@ if ($_POST["action"] == "set") */ if (isset($_POST["db_create_user"]) && $_POST["db_create_user"] == "on") { - dolibarr_install_syslog("etape1: Creation de l'utilisateur: ".$dolibarr_main_db_user); + dolibarr_install_syslog("etape1: Create database user: ".$dolibarr_main_db_user); //print $conf->db->host." , ".$conf->db->name." , ".$conf->db->user." , ".$conf->db->port; $databasefortest=$conf->db->name; @@ -382,23 +296,32 @@ if ($_POST["action"] == "set") /* - * Si creation database demand�e, on la cr�e + * If database creation is asked, we create it */ if (! $error && (isset($_POST["db_create_database"]) && $_POST["db_create_database"] == "on")) { - dolibarr_install_syslog("etape1: Create database : ".$dolibarr_main_db_name); + dolibarr_install_syslog("etape1: Create database : ".$dolibarr_main_db_name, LOG_DEBUG); $db = new DoliDb($conf->db->type,$conf->db->host,$userroot,$passroot,'',$conf->db->port); if ($db->connected) { - - if ($db->DDLCreateDb($dolibarr_main_db_name)) + if ($db->DDLCreateDb($dolibarr_main_db_name, $dolibarr_main_db_character_set, $dolibarr_main_db_collation)) { print '<tr><td>'; print $langs->trans("DatabaseCreation").' : '; print $dolibarr_main_db_name; print '</td>'; print "<td>".$langs->trans("OK")."</td></tr>"; + + $check1=$db->getDefaultCharacterSetDatabase(); + $check2=$db->getDefaultCollationDatabase(); + dolibarr_install_syslog('etape1: Note that default server was charset='.$check1.' collation='.$check2, LOG_DEBUG); + + // If values differs, we save conf file again + //if ($check1 != $dolibarr_main_db_character_set) dolibarr_install_syslog('etape1: Value for character_set is not the one asked for database creation', LOG_WARNING); + //if ($check2 != $dolibarr_main_db_collation) dolibarr_install_syslog('etape1: Value for collation is not the one asked for database creation', LOG_WARNING); + // TODO + } else { @@ -445,7 +368,7 @@ if ($_POST["action"] == "set") */ if (! $error) { - dolibarr_install_syslog("etape1: connexion de type=".$conf->db->type." sur host=".$conf->db->host." port=".$conf->db->port." user=".$conf->db->user." name=".$conf->db->name); + dolibarr_install_syslog("etape1: connexion de type=".$conf->db->type." sur host=".$conf->db->host." port=".$conf->db->port." user=".$conf->db->user." name=".$conf->db->name, LOG_DEBUG); //print "connexion de type=".$conf->db->type." sur host=".$conf->db->host." port=".$conf->db->port." user=".$conf->db->user." name=".$conf->db->name; $db = new DoliDb($conf->db->type,$conf->db->host,$conf->db->user,$conf->db->pass,$conf->db->name,$conf->db->port); @@ -455,7 +378,7 @@ if ($_POST["action"] == "set") // si acc�s serveur ok et acc�s base ok, tout est ok, on ne va pas plus loin, on a m�me pas utilis� le compte root. if ($db->database_selected == 1) { - dolibarr_install_syslog("etape1: la connexion au serveur par le user ".$conf->db->user." est reussie"); + dolibarr_install_syslog("etape1: connexion to server by user ".$conf->db->user." is ok", LOG_DEBUG); print "<tr><td>"; print $langs->trans("ServerConnection")." : "; print $dolibarr_main_db_host; @@ -463,7 +386,7 @@ if ($_POST["action"] == "set") print $langs->trans("OK"); print "</td></tr>"; - dolibarr_install_syslog("etape1: la connexion a la base : ".$conf->db->name.",par le user : ".$conf->db->user." est reussie"); + dolibarr_install_syslog("etape1: connexion to database : ".$conf->db->name.", by user : ".$conf->db->user." is ok", LOG_DEBUG); print "<tr><td>"; print $langs->trans("DatabaseConnection")." : "; print $dolibarr_main_db_name; @@ -475,7 +398,7 @@ if ($_POST["action"] == "set") } else { - dolibarr_install_syslog("etape1: la connexion au serveur par le user ".$conf->db->user." est reussie"); + dolibarr_install_syslog("etape1: connexion to server by user ".$conf->db->user." is ok", LOG_DEBUG); print "<tr><td>"; print $langs->trans("ServerConnection")." : "; print $dolibarr_main_db_host; @@ -483,7 +406,7 @@ if ($_POST["action"] == "set") print $langs->trans("OK"); print "</td></tr>"; - dolibarr_install_syslog("etape1: la connexion a la base ".$conf->db->name.",par le user ".$conf->db->user." a �chou�"); + dolibarr_install_syslog("etape1: connexion to database ".$conf->db->name.", bu user : ".$conf->db->user." has failed", LOG_ERROR); print "<tr><td>"; print $langs->trans("DatabaseConnection")." : "; print $dolibarr_main_db_name; @@ -526,4 +449,113 @@ if ($_POST["action"] == "set") } pFooter($error,$setuplang); + + +/** + * Save configuration file + */ +function write_conf_file($conffile) +{ + global $conf,$langs; + global $_POST,$main_dir,$main_data_dir; + global $dolibarr_main_url_root,$dolibarr_main_document_root,$dolibarr_main_data_root,$dolibarr_main_db_host; + global $dolibarr_main_db_port,$dolibarr_main_db_name,$dolibarr_main_db_user,$dolibarr_main_db_pass; + global $dolibarr_main_db_type,$dolibarr_main_db_character_set,$dolibarr_main_db_collation,$dolibarr_main_authentication; + global $dolibarr_smarty_libs_dir,$dolibarr_smarty_compile,$dolibarr_smarty_cache; + + $error=0; + + $fp = fopen("$conffile", "w"); + if($fp) + { + clearstatcache(); + + fputs($fp, '<?php'); + fputs($fp,"\n"); + fputs($fp,"#\n"); + fputs($fp,"# File generated by Dolibarr installer on ".dolibarr_print_date(gmmktime(),'')); + fputs($fp,"\n"); + fputs($fp,"#\n"); + fputs($fp,"# Take a look at conf.php.example file for an example of conf.php file\n"); + fputs($fp,"# and explanations for all possibles parameters.\n"); + fputs($fp,"#\n"); + + fputs($fp, '$dolibarr_main_url_root="'.$_POST["main_url"].'";'); + fputs($fp,"\n"); + + fputs($fp, '$dolibarr_main_document_root="'.$main_dir.'";'); + fputs($fp,"\n"); + + fputs($fp, '$dolibarr_main_data_root="'.$main_data_dir.'";'); + fputs($fp,"\n"); + + fputs($fp, '$dolibarr_main_db_host="'.$_POST["db_host"].'";'); + fputs($fp,"\n"); + + fputs($fp, '$dolibarr_main_db_port="'.$_POST["db_port"].'";'); + fputs($fp,"\n"); + + fputs($fp, '$dolibarr_main_db_name="'.$_POST["db_name"].'";'); + fputs($fp,"\n"); + + fputs($fp, '$dolibarr_main_db_user="'.$_POST["db_user"].'";'); + fputs($fp,"\n"); + + fputs($fp, '$dolibarr_main_db_pass="'.$_POST["db_pass"].'";'); + fputs($fp,"\n"); + + fputs($fp, '$dolibarr_main_db_type="'.$_POST["db_type"].'";'); + fputs($fp,"\n"); + + fputs($fp, '$dolibarr_main_db_character_set="'.$_POST["dolibarr_main_db_character_set"].'";'); + fputs($fp,"\n"); + + fputs($fp, '$dolibarr_main_db_collation="'.$_POST["dolibarr_main_db_collation"].'";'); + fputs($fp,"\n"); + + /* Authentication */ + if ($_POST["db_type"] == 'mssql') + { + fputs($fp, '$dolibarr_main_authentication="dolibarr_mdb2";'); + } + else + { + fputs($fp, '$dolibarr_main_authentication="dolibarr";'); + } + fputs($fp,"\n"); + + /* Preparation integration SMARTY */ + fputs($fp, '$dolibarr_smarty_libs_dir="";'); + fputs($fp,"\n"); + + fputs($fp, '$dolibarr_smarty_compile="";'); + fputs($fp,"\n"); + + fputs($fp, '$dolibarr_smarty_cache="";'); + fputs($fp,"\n"); + /* Fin Smarty*/ + + fputs($fp, '?>'); + fclose($fp); + + if (file_exists("$conffile")) + { + include("$conffile"); // On force rechargement. Ne pas mettre include_once ! + conf($dolibarr_main_document_root); + + print "<tr><td>"; + print $langs->trans("SaveConfigurationFile"); + print "</td><td>"; + print $langs->trans("OK"); + print "</td></tr>"; + } + else + { + $error++; + } + } + + return $error; +} + ?> diff --git a/htdocs/lib/databases/mssql.lib.php b/htdocs/lib/databases/mssql.lib.php index 8b6c7ba9d40db58b17ea749dc768d7e6ff5015c1..e4e35ab9d13f98d8937464616180bed24b6eff19 100644 --- a/htdocs/lib/databases/mssql.lib.php +++ b/htdocs/lib/databases/mssql.lib.php @@ -707,13 +707,15 @@ class DoliDb } /** - \brief Cr�ation d'une nouvelle base de donn�e - \param database nom de la database � cr�er - \return resource resource d�finie si ok, null si k - \remarks Ne pas utiliser les fonctions xxx_create_db (xxx=mssql, ...) car elles sont deprecated - On force creation de la base avec le charset forcecharset - */ - function DDLCreateDb($database) + * \brief Create a new database + * \param database Database name to create + * \param charset Charset used to store data + * \param collation Charset used to sort data + * \return resource resource defined if OK, null if KO + * \remarks Ne pas utiliser les fonctions xxx_create_db (xxx=mssql, ...) car elles sont deprecated + * On force creation de la base avec le charset forcecharset + */ + function DDLCreateDb($database,$charset='',$collation='') { // ALTER DATABASE dolibarr_db DEFAULT CHARACTER SET latin DEFAULT COLLATE latin1_swedish_ci $sql = 'CREATE DATABASE '.$database; diff --git a/htdocs/lib/databases/mysql.lib.php b/htdocs/lib/databases/mysql.lib.php index 24be80e3e798569382dacf1d8473ec17220d57a3..05f2e2f0931ce81b6f9a4638d9b85d9b58e10759 100644 --- a/htdocs/lib/databases/mysql.lib.php +++ b/htdocs/lib/databases/mysql.lib.php @@ -697,15 +697,20 @@ class DoliDb /** * \brief Create a new database * \param database Database name to create + * \param charset Charset used to store data + * \param collation Charset used to sort data * \return resource resource defined if OK, null if KO * \remarks Do not use function xxx_create_db (xxx=mysql, ...) as they are deprecated * We force to create database with charset this->forcecharset and collate this->forcecollate */ - function DDLCreateDb($database) + function DDLCreateDb($database,$charset='',$collation='') { + if (empty($charset)) $charset=$this->forcecharset; + if (empty($collation)) $collation=$this->collation; + // ALTER DATABASE dolibarr_db DEFAULT CHARACTER SET latin DEFAULT COLLATE latin1_swedish_ci $sql = 'CREATE DATABASE '.$database; - $sql.= ' DEFAULT CHARACTER SET '.$this->forcecharset.' DEFAULT COLLATE '.$this->forcecollate; + $sql.= ' DEFAULT CHARACTER SET '.$charset.' DEFAULT COLLATE '.$collation; dolibarr_syslog($sql,LOG_DEBUG); $ret=$this->query($sql); @@ -714,6 +719,7 @@ class DoliDb // We try again for compatibility with Mysql < 4.1.1 $sql = 'CREATE DATABASE '.$database; $ret=$this->query($sql); + dolibarr_syslog($sql,LOG_DEBUG); } return $ret; } diff --git a/htdocs/lib/databases/mysqli.lib.php b/htdocs/lib/databases/mysqli.lib.php index 211a9941a7b8f7b162189f182133243ffd587c16..ca42edd6ca2f313a64962806e194ee1ff10409eb 100644 --- a/htdocs/lib/databases/mysqli.lib.php +++ b/htdocs/lib/databases/mysqli.lib.php @@ -711,15 +711,20 @@ class DoliDb /** * \brief Create a new database * \param database Database name to create - * \return resource resource defined if OK, null if KO + * \param charset Charset used to store data + * \param collation Charset used to sort data + * \return resource resource defined if OK, null if KO * \remarks Do not use function xxx_create_db (xxx=mysql, ...) as they are deprecated * We force to create database with charset this->forcecharset and collate this->forcecollate */ - function DDLCreateDb($database) + function DDLCreateDb($database,$charset='',$collation='') { + if (empty($charset)) $charset=$this->forcecharset; + if (empty($collation)) $collation=$this->collation; + // ALTER DATABASE dolibarr_db DEFAULT CHARACTER SET latin DEFAULT COLLATE latin1_swedish_ci $sql = 'CREATE DATABASE '.$database; - $sql.= ' DEFAULT CHARACTER SET '.$this->forcecharset.' DEFAULT COLLATE '.$this->forcecollate; + $sql.= ' DEFAULT CHARACTER SET '.$charset.' DEFAULT COLLATE '.$collation; dolibarr_syslog($sql,LOG_DEBUG); $ret=$this->query($sql); @@ -728,6 +733,7 @@ class DoliDb // We try again for compatibility with Mysql < 4.1.1 $sql = 'CREATE DATABASE '.$database; $ret=$this->query($sql); + dolibarr_syslog($sql,LOG_DEBUG); } return $ret; } diff --git a/htdocs/lib/databases/pgsql.lib.php b/htdocs/lib/databases/pgsql.lib.php index 8978fda0e26815047ea3ec93bc6b1cf48fdd63e4..f21b128398277d6927dbe98fdcc8e1e11efefc16 100644 --- a/htdocs/lib/databases/pgsql.lib.php +++ b/htdocs/lib/databases/pgsql.lib.php @@ -798,14 +798,19 @@ class DoliDb /** - \brief Cr�ation d'une nouvelle base de donn�e - \param database nom de la database � cr�er - \return resource resource d�finie si ok, null si ko - \remarks Ne pas utiliser les fonctions xxx_create_db (xxx=mysql, ...) car elles sont deprecated - */ - function DDLCreateDb($database) + * \brief Create a new database + * \param database Database name to create + * \param charset Charset used to store data + * \param collation Charset used to sort data + * \return resource resource defined if OK, null if KO + * \remarks Ne pas utiliser les fonctions xxx_create_db (xxx=mysql, ...) car elles sont deprecated + */ + function DDLCreateDb($database,$charset='',$collation='') { - $ret=$this->query('CREATE DATABASE '.$database.' OWNER '.$this->db_user.' ENCODING \''.$this->forcecharset.'\' ;'); + if (empty($charset)) $charset=$this->forcecharset; + if (empty($collation)) $collation=$this->collation; + + $ret=$this->query('CREATE DATABASE '.$database.' OWNER '.$this->db_user.' ENCODING \''.$charset.'\' ;'); return $ret; }