From ef933c09d23a68d71c9e6bdb1a80c465e51479d3 Mon Sep 17 00:00:00 2001
From: Laurent Destailleur <eldy@users.sourceforge.net>
Date: Fri, 18 Mar 2005 00:57:30 +0000
Subject: [PATCH] =?UTF-8?q?Fix:=20On=20cr=E9e=20les=20fonctions=20si=20le?=
 =?UTF-8?q?=20fichier=20functions.sql=20existe?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 htdocs/install/etape2.php     | 633 ++++++++++++++++++++--------------
 pgsql/functions/functions.sql |   2 +-
 2 files changed, 374 insertions(+), 261 deletions(-)

diff --git a/htdocs/install/etape2.php b/htdocs/install/etape2.php
index fb488610828..26309b921b6 100644
--- a/htdocs/install/etape2.php
+++ b/htdocs/install/etape2.php
@@ -1,6 +1,6 @@
 <?php
-/* Copyright (C) 2004 Rodolphe Quiedeville <rodolphe@quiedeville.org> 
- * Copyright (C) 2004 Laurent Destailleur  <eldy@users.sourceforge.net>
+/* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
+ * Copyright (C) 2004-2005 Laurent Destailleur  <eldy@users.sourceforge.net>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -20,6 +20,7 @@
  * $Source$
  *
  */
+
 include_once("./inc.php");
 
 $setuplang=isset($_POST["selectlang"])?$_POST["selectlang"]:(isset($_GET["selectlang"])?$_GET["selectlang"]:$langcode);
@@ -33,296 +34,408 @@ $etape = 2;
 
 if (file_exists($conffile))
 {
-  include_once($conffile);
+    include_once($conffile);
 }
 
 if($dolibarr_main_db_type == "mysql")
 {
-  require ($dolibarr_main_document_root . "/lib/mysql.lib.php");		
-  $choix=1;
+    require ($dolibarr_main_document_root . "/lib/mysql.lib.php");
+    $choix=1;
 }
 else
 {
-  require ($dolibarr_main_document_root . "/lib/pgsql.lib.php");
-  require ($dolibarr_main_document_root . "/lib/grant.postgres.php");
-  $choix=2;
+    require ($dolibarr_main_document_root . "/lib/pgsql.lib.php");
+    require ($dolibarr_main_document_root . "/lib/grant.postgres.php");
+    $choix=2;
 }
-			
+
 require ($dolibarr_main_document_root . "/conf/conf.class.php");
 
 if ($_POST["action"] == "set")
 {
-  print '<h2>'.$langs->trans("Database").'</h2>';
-
-  print '<table cellspacing="0" cellpadding="4" border="0" width="100%">';
-  $error=0;
-
-  $conf = new Conf();// on pourrait s'en passer
-  $conf->db->host = $dolibarr_main_db_host;
-  $conf->db->name = $dolibarr_main_db_name;
-  $conf->db->user = $dolibarr_main_db_user;
-  $conf->db->pass = $dolibarr_main_db_pass;
-  $db = new DoliDb();
-  $ok = 0;
-  if ($db->connected == 1)
+    print '<h2>'.$langs->trans("Database").'</h2>';
+
+    print '<table cellspacing="0" cellpadding="4" border="0" width="100%">';
+    $error=0;
+
+    $conf = new Conf();// on pourrait s'en passer
+    $conf->db->host = $dolibarr_main_db_host;
+    $conf->db->name = $dolibarr_main_db_name;
+    $conf->db->user = $dolibarr_main_db_user;
+    $conf->db->pass = $dolibarr_main_db_pass;
+    $db = new DoliDb();
+    $ok = 0;
+    if ($db->connected == 1)
     {
-      print "<tr><td>";
-      print $langs->trans("ServerConnection")." : $dolibarr_main_db_host</td><td>".$langs->trans("OK")."</td></tr>";
-      $ok = 1 ;
+        print "<tr><td>";
+        print $langs->trans("ServerConnection")." : $dolibarr_main_db_host</td><td>".$langs->trans("OK")."</td></tr>";
+        $ok = 1 ;
     }
-  else
+    else
     {
-      print "<tr><td>Erreur lors de la cr�ation de : $dolibarr_main_db_name</td><td>".$langs->trans("Error")."</td></tr>";
+        print "<tr><td>Erreur lors de la cr�ation de : $dolibarr_main_db_name</td><td>".$langs->trans("Error")."</td></tr>";
     }
-  /***************************************************************************************
-   *
-   *
-   */
-  if ($ok)
+
+    if ($ok)
     {
-      if($db->database_selected == 1)
-	{
-	  
-	  dolibarr_syslog("Connexion r�ussie � la base : $dolibarr_main_db_name");
-	}
-      else
-	{
-	  $ok = 0 ;
-	}
+        if($db->database_selected == 1)
+        {
+
+            dolibarr_syslog("Connexion r�ussie � la base : $dolibarr_main_db_name");
+        }
+        else
+        {
+            $ok = 0 ;
+        }
     }
-  /***************************************************************************************
-   *
-   *
-   */
-  if ($ok)
+
+
+    /***************************************************************************************
+    *
+    * Chargement fichiers tables/*.sql (non *.key.sql)
+    * A faire avant les fichiers *.key.sql
+    *
+    ***************************************************************************************/
+    if ($ok)
     {
-      $ok = 0;
-      if ($choix == 1)
-	{
-	  $dir = "../../mysql/tables/";						
-	}
-      else
-	{
-	  $dir = "../../pgsql/tables/";						
-	}
-     
-      $handle=opendir($dir);
-      $table_exists = 0;
-      while (($file = readdir($handle))!==false)
-	{
-	  if (substr($file, strlen($file) - 4) == '.sql' && substr($file,0,4) == 'llx_' && substr($file, - 8) <> '.key.sql')
-	    {
-	      $name = substr($file, 0, strlen($file) - 4);
-	      //print "<tr><td>Cr�ation de la table $name</td>";
-	      $buffer = '';
-	      $fp = fopen($dir.$file,"r"); 
-	      if ($fp)
-		{
-		  while (!feof ($fp))
-		    {
-		      $buf = fgets($fp, 4096);
-		      if (substr($buf, 0, 2) <> '--')
-			{
-			  $buffer .= $buf;
-			}
-		    }
-		  fclose($fp);
-		}
-
-	      if ($db->query($buffer))				
-		{
-		  //print "<td>OK requete ==== $buffer</td></tr>";
-		}
-	      else
-		{
-		  if ($db->errno() == DB_ERROR_TABLE_ALREADY_EXISTS)
-		    {
-		      //print "<td>D�j� existante</td></tr>";
-		      $table_exists = 1;
-		    }
-		  else
-		    {
-		      print "<tr><td>Cr�ation de la table $name</td>";
-		      print "<td>".$langs->trans("Error")." ".$db->errno()." ".$db->error()."</td></tr>";
-		      $error++;
-		    }
-		}
-	    }
-	 
-	}
-     
-      //droit sur les tables
-      if ($db->query($grant_query))
-	{
-	  print "<tr><td>Grant User '$nom' </td><td>".$langs->trans("OK")."</td></tr>";
-	}
-      closedir($handle);
-     
-      if ($error == 0)
-	{
-	  print '<tr><td>';
-	  print $langs->trans("TablesAndPrimaryKeyCreation").'</td><td>'.$langs->trans("OK").'</td></tr>';
-	  $ok = 1;
-	}
+        if ($choix==1) $dir = "../../mysql/tables/";
+        else $dir = "../../pgsql/tables/";
+
+        $ok = 0;
+        $handle=opendir($dir);
+        $table_exists = 0;
+        while (($file = readdir($handle))!==false)
+        {
+            if (substr($file, strlen($file) - 4) == '.sql' && substr($file,0,4) == 'llx_' && substr($file, -8) <> '.key.sql')
+            {
+                $name = substr($file, 0, strlen($file) - 4);
+                $buffer = '';
+                $fp = fopen($dir.$file,"r");
+                if ($fp)
+                {
+                    while (!feof ($fp))
+                    {
+                        $buf = fgets($fp, 4096);
+                        if (substr($buf, 0, 2) <> '--')
+                        {
+                            $buffer .= $buf;
+                        }
+                    }
+                    fclose($fp);
+                }
+
+                //print "<tr><td>Cr�ation de la table $name/td>";
+
+                if ($db->query($buffer))
+                {
+                    //print "<td>OK requete ==== $buffer</td></tr>";
+                }
+                else
+                {
+                    if ($db->errno() == DB_ERROR_TABLE_ALREADY_EXISTS)
+                    {
+                        //print "<td>D�j� existante</td></tr>";
+                        $table_exists = 1;
+                    }
+                    else
+                    {
+                        print "<tr><td>".$langs->trans("CreateTableAndPrimaryKey",$name)."</td>";
+                        print "<td>".$langs->trans("Error")." ".$db->errno()." ".$db->error()."</td></tr>";
+                        $error++;
+                    }
+                }
+            }
+
+        }
+        closedir($handle);
+
+        if ($error == 0)
+        {
+            print '<tr><td>';
+            print $langs->trans("TablesAndPrimaryKeysCreation").'</td><td>'.$langs->trans("OK").'</td></tr>';
+            $ok = 1;
+        }
+    }
+
+
+    /***************************************************************************************
+    *
+    * Chargement fichiers tables/*.key.sql
+    * A faire apr�s les fichiers *.sql
+    *
+    ***************************************************************************************/
+    if ($ok)
+    {
+        if ($choix==1) $dir = "../../mysql/tables/";
+        else $dir = "../../pgsql/tables/";
+
+        $okkeys = 0;
+        $handle=opendir($dir);
+        $table_exists = 0;
+        while (($file = readdir($handle))!==false)
+        {
+            if (substr($file, strlen($file) - 4) == '.sql' && substr($file,0,4) == 'llx_' && substr($file, -8) == '.key.sql')
+            {
+                $name = substr($file, 0, strlen($file) - 4);
+                //print "<tr><td>Cr�ation de la table $name</td>";
+                $buffer = '';
+                $fp = fopen($dir.$file,"r");
+                if ($fp)
+                {
+                    while (!feof ($fp))
+                    {
+                        $buf = fgets($fp, 4096);
+                        if (substr($buf, 0, 2) <> '--')
+                        {
+                            $buffer .= $buf;
+                        }
+                    }
+                    fclose($fp);
+                }
+
+                // Si plusieurs requetes, on boucle sur chaque
+                $listesql=split(';',$buffer);
+                foreach ($listesql as $buffer) {                
+                    if (trim($buffer)) {
+                        //print "<tr><td>Cr�ation des cl�s et index de la table $name: '$buffer'</td>";
+                        if ($db->query(trim($buffer)))
+                        {
+                            //print "<td>OK requete ==== $buffer</td></tr>";
+                        }
+                        else
+                        {
+                            if ($db->errno() == DB_ERROR_CANNOT_CREATE || eregi('duplicate key name',$db->error()))
+                            {
+                                //print "<td>D�j� existante</td></tr>";
+                                $key_exists = 1;
+                            }
+                            else
+                            {
+                                print "<tr><td>".$langs->trans("CreateOtherKeysForTable",$name)."</td>";
+                                print "<td>".$langs->trans("Error")." ".$db->errno()." ".$db->error()."</td></tr>";
+                                $error++;
+                            }
+                        }
+                    }
+                }
+            }
+
+        }
+        closedir($handle);
+
+        if ($error == 0)
+        {
+            print '<tr><td>';
+            print $langs->trans("OtherKeysCreation").'</td><td>'.$langs->trans("OK").'</td></tr>';
+            $okkeys = 1;
+        }
     }
+    
+    
+    /***************************************************************************************
+    *
+    * Positionnement des droits
+    *
+    ***************************************************************************************/
+    if ($ok)
+    {
+        // Droits sur les tables
+        if ($grant_query) {
+            if ($db->query($grant_query))
+            {
+                print "<tr><td>Grant User</td><td>".$langs->trans("OK")."</td></tr>";
+            }
+        }
+    }   
+
 
-  /***************************************************************************************
-   *
-   * Chargement fichier data.sql
-   *
-   ***************************************************************************************/
-  if ($ok == 1)
+    /***************************************************************************************
+    *
+    * Chargement fichier functions.sql
+    *
+    ***************************************************************************************/
+    if ($ok)
     {
-      //
-      // Donn�es
-      //
-      if ($choix==1)
-	{
-	  $dir = "../../mysql/data/";
-	  $file = "data.sql";
-	  $fp = fopen($dir.$file,"r");
-	  if ($fp)
-	    {
-	      while (!feof ($fp))
-		{
-		  $buffer = fgets($fp, 4096);
-		  
-		  if (strlen(trim(ereg_replace("--","",$buffer))))
-		    {
-		      if ($db->query($buffer))
-			{
-			  $ok = 1;
-			}
-		      else
-			{
-			  if ($db->errno() == DB_ERROR_RECORD_ALREADY_EXISTS)
-			    {
-			      // print "<tr><td>Insertion ligne : $buffer</td><td>
-			    }
-			  else
-			    {
-			      $ok = 0;
-			      print "Erreur SQL ".$db->errno()." sur requete '$buffer': ".$db->error()."<br>";
-			    }
-			}
-		    }
-		}
-	      fclose($fp);
-	    }
-	}//choix==1
-      else
-	{
-	  $dir = "../../pgsql/data/";
-	  $file = "data.sql";
-	  $fp = fopen($dir.$file,"r");
-	  $buffer='';
-	  if ($fp)
-	    {
-	      while (!feof ($fp))
-	        {
-		  $buffer .= fgets($fp, 4096);		
-		}			 					 
-	      if ($db->query($buffer))
-		{
-		  $ok = 1;
-		}
-	      else
-		{
-		  if ($db->errno() == DB_ERROR_RECORD_ALREADY_EXISTS)
-		    {
-		      // print "<tr><td>Insertion ligne : $buffer</td><td>D�ja existante</td></tr>";
-		    }	
-		  else
-		    {
-		      $ok = 0;
-		      print "Erreur SQL ".$db->errno()." sur requete '$buffer': ".$db->error()."<br>";
-		    }
-		}						
-	      //}//while
-	      fclose($fp);
-	    }
-	}//else
-			      
-      
-      print "<tr><td>".$langs->trans("ReferenceDataLoading")."</td>";
-      if ($ok)
-	{	  
-	  print "<td>".$langs->trans("OK")."</td></tr>";
-	}
-      else
-	{
-	  print "<td>".$langs->trans("Error")."</td></tr>";
-	  $ok = 1 ;
-	}
+        if ($choix==1) $dir = "../../mysql/functions/";
+        else $dir = "../../pgsql/functions/";
+
+        // Cr�ation donn�es
+        $file = "functions.sql";
+        if (file_exists($dir.$file)) {
+            $fp = fopen($dir.$file,"r");
+            if ($fp)
+            {
+                while (!feof ($fp))
+                {
+                    $buffer = fgets($fp, 4096);
+                    if (substr($buf, 0, 2) <> '--')
+                    {
+                        $buffer .= $buf;
+                    }
+                }
+                fclose($fp);
+            }
+
+            // Si plusieurs requetes, on boucle sur chaque
+            $listesql=split('�',eregi_replace(";';",";'�",$buffer));
+            foreach ($listesql as $buffer) {                
+                if (trim($buffer)) {
+    
+                    if ($db->query(trim($buffer)))
+                    {
+                        $ok = 1;
+                    }
+                    else
+                    {
+                        if ($db->errno() == DB_ERROR_RECORD_ALREADY_EXISTS)
+                        {
+                            // print "<tr><td>Insertion ligne : $buffer</td><td>
+                        }
+                        else
+                        {
+                            $ok = 0;
+                            print "Erreur SQL ".$db->errno()." sur requete '$buffer': ".$db->error()."<br>";
+                        }
+                    }
+                }
+            }
+
+            print "<tr><td>".$langs->trans("FunctionsCreation")."</td>";
+            if ($ok)
+            {
+                print "<td>".$langs->trans("OK")."</td></tr>";
+            }
+            else
+            {
+                print "<td>".$langs->trans("Error")."</td></tr>";
+                $ok = 1 ;
+            }
+
+        }
+    }    
+
+
+    /***************************************************************************************
+    *
+    * Chargement fichier data.sql
+    *
+    ***************************************************************************************/
+    if ($ok)
+    {
+        if ($choix==1) $dir = "../../mysql/data/";
+        else $dir = "../../pgsql/data/";
+
+        // Cr�ation donn�es
+        $file = "data.sql";
+        $fp = fopen($dir.$file,"r");
+        if ($fp)
+        {
+            while (!feof ($fp))
+            {
+                $buffer = fgets($fp, 4096);
+
+                if (strlen(trim(ereg_replace("--","",$buffer))))
+                {
+                    if ($db->query($buffer))
+                    {
+                        $ok = 1;
+                    }
+                    else
+                    {
+                        if ($db->errno() == DB_ERROR_RECORD_ALREADY_EXISTS)
+                        {
+                            // print "<tr><td>Insertion ligne : $buffer</td><td>
+                        }
+                        else
+                        {
+                            $ok = 0;
+                            print "Erreur SQL ".$db->errno()." sur requete '$buffer': ".$db->error()."<br>";
+                        }
+                    }
+                }
+            }
+            fclose($fp);
+        }
+
+        print "<tr><td>".$langs->trans("ReferenceDataLoading")."</td>";
+        if ($ok)
+        {
+            print "<td>".$langs->trans("OK")."</td></tr>";
+        }
+        else
+        {
+            print "<td>".$langs->trans("Error")."</td></tr>";
+            $ok = 1 ;
+        }
     }
 
 
-  /***************************************************************************************
-   *
-   * Les variables qui ecrase le chemin par defaut sont red�finies
-   *
-   ***************************************************************************************/
-  if ($ok == 1)
+    /***************************************************************************************
+    *
+    * Les variables qui ecrase le chemin par defaut sont red�finies
+    *
+    ***************************************************************************************/
+    if ($ok == 1)
     {
-      $sql[0] = "UPDATE llx_const SET value = '".$dolibarr_main_data_root."/facture',
-						 type = 'chaine',
-						 visible = 0
- 						 where name  ='FAC_OUTPUTDIR';" ;
-				
-      $sql[1] = "UPDATE llx_const SET value = '".$dolibarr_main_data_root."/propale',
-						type = 'chaine',
-						visible = 0
-						where name  = 'PROPALE_OUTPUTDIR';" ;
-				
-      $sql[2] = "UPDATE llx_const SET value = '".$dolibarr_main_data_root."/ficheinter',
-						 type = 'chaine',
-						 visible = 0
-						 where name  = 'FICHEINTER_OUTPUTDIR';" ;
-				
-      $sql[3] = "UPDATE llx_const SET value='".$dolibarr_main_data_root."/societe',
-	                     type = 'chaine',
-						 visible = 0
-						 where name  = 'SOCIETE_OUTPUTDIR';" ;
-				
-      $sql[4] = "DELETE from llx_const where name like '%_OUTPUT_URL';";
-
-
-      $sql[5] = "UPDATE llx_const SET value='".$langs->defaultlang."',
-	                     type = 'chaine',
-						 visible = 0
-						 where name  = 'MAIN_LANG_DEFAULT';" ;
-      
-      $result = 0;
-			
-      for ($i=0; $i < sizeof($sql);$i++)
-	{
-	  if ($db->query($sql[$i]))
-	    {
-	      $result++;
-	    }
-	}
-      
-      if ($result == sizeof($sql))
-	{
-	  if ($error == 0)
-	    {	  
-	      $db->query("DELETE FROM llx_const WHERE name='MAIN_NOT_INSTALLED'");		  
-	    }
-	}
+        $sql[0] = "UPDATE llx_const SET value = '".$dolibarr_main_data_root."/facture',
+        type = 'chaine',
+        visible = 0
+        where name  ='FAC_OUTPUTDIR';" ;
+
+        $sql[1] = "UPDATE llx_const SET value = '".$dolibarr_main_data_root."/propale',
+        type = 'chaine',
+        visible = 0
+        where name  = 'PROPALE_OUTPUTDIR';" ;
+
+        $sql[2] = "UPDATE llx_const SET value = '".$dolibarr_main_data_root."/ficheinter',
+        type = 'chaine',
+        visible = 0
+        where name  = 'FICHEINTER_OUTPUTDIR';" ;
+
+        $sql[3] = "UPDATE llx_const SET value='".$dolibarr_main_data_root."/societe',
+        type = 'chaine',
+        visible = 0
+        where name  = 'SOCIETE_OUTPUTDIR';" ;
+
+        $sql[4] = "DELETE from llx_const where name like '%_OUTPUT_URL';";
+
+
+        $sql[5] = "UPDATE llx_const SET value='".$langs->defaultlang."',
+        type = 'chaine',
+        visible = 0
+        where name  = 'MAIN_LANG_DEFAULT';" ;
+
+        $result = 0;
+
+        for ($i=0; $i < sizeof($sql);$i++)
+        {
+            if ($db->query($sql[$i]))
+            {
+                $result++;
+            }
+        }
+
+        if ($result == sizeof($sql))
+        {
+            if ($error == 0)
+            {
+                $db->query("DELETE FROM llx_const WHERE name='MAIN_NOT_INSTALLED'");
+            }
+        }
     }
 
 
-  /***************************************************************************************
-   *
-   *
-   *
-   *
-   ***************************************************************************************/
+    /***************************************************************************************
+    *
+    *
+    *
+    *
+    ***************************************************************************************/
 
 
-  print '</table>';
+    print '</table>';
 
-  $db->close();
+    $db->close();
 }
 pFooter(!$ok);
 ?>
diff --git a/pgsql/functions/functions.sql b/pgsql/functions/functions.sql
index 35679e004d9..c32702a5e58 100644
--- a/pgsql/functions/functions.sql
+++ b/pgsql/functions/functions.sql
@@ -36,4 +36,4 @@ CREATE OR REPLACE FUNCTION FROM_UNIXTIME(BIGINT, VARCHAR)
 RETURNS TIMESTAMP WITH TIME ZONE
 LANGUAGE SQL
 IMMUTABLE STRICT
-AS 'SELECT TIMESTAMP WITH TIME ZONE \'epoch\' + $1 * interval \'1 second\';';
\ No newline at end of file
+AS 'SELECT TIMESTAMP WITH TIME ZONE \'epoch\' + $1 * interval \'1 second\' ;';
\ No newline at end of file
-- 
GitLab