[Alba-desarrollo] SVN Alba r5735 - in prosistem/alba/trunk/alba: data/sql web/instalar

commits en pressenter.com.ar commits en pressenter.com.ar
Vie Jul 11 05:30:09 CEST 2008


Author: josx
Date: 2008-07-11 00:30:09 -0300 (Fri, 11 Jul 2008)
New Revision: 5735

Added:
   prosistem/alba/trunk/alba/data/sql/datos_desde_cero_update_seq.sql
   prosistem/alba/trunk/alba/data/sql/datos_ejemplo_update_seq.sql
Modified:
   prosistem/alba/trunk/alba/web/instalar/funciones.php
   prosistem/alba/trunk/alba/web/instalar/paso3.php
   prosistem/alba/trunk/alba/web/instalar/paso6.php
Log:
Migrando instalador a PDO (a partir de esta version se necesita php 5.1 como minimo). Se arregla el soporte para postgresql pudiendose usar los sequence.

Added: prosistem/alba/trunk/alba/data/sql/datos_desde_cero_update_seq.sql
===================================================================
--- prosistem/alba/trunk/alba/data/sql/datos_desde_cero_update_seq.sql	                        (rev 0)
+++ prosistem/alba/trunk/alba/data/sql/datos_desde_cero_update_seq.sql	2008-07-11 03:30:09 UTC (rev 5735)
@@ -0,0 +1,16 @@
+ALTER SEQUENCE tipodocumento_seq RESTART WITH 8;
+ALTER SEQUENCE tipoiva_seq RESTART WITH 5;
+ALTER SEQUENCE niveltipo_seq RESTART WITH 8;
+ALTER SEQUENCE pais_seq RESTART WITH 2;
+ALTER SEQUENCE provincia_seq RESTART WITH 28;
+ALTER SEQUENCE calendariovacunacion_seq RESTART WITH 27;
+ALTER SEQUENCE distritoescolar_seq RESTART WITH 2;
+ALTER SEQUENCE organizacion_seq RESTART WITH 2;
+ALTER SEQUENCE establecimiento_seq RESTART WITH 2;
+ALTER SEQUENCE usuario_seq RESTART WITH 2;
+ALTER SEQUENCE modulo_seq RESTART WITH 51;
+ALTER SEQUENCE permiso_seq RESTART WITH 63;
+ALTER SEQUENCE rel_usuario_permiso_seq RESTART WITH 57;
+ALTER SEQUENCE tipoinforme_seq RESTART WITH 3;
+ALTER SEQUENCE adjunto_seq RESTART WITH 11;
+ALTER SEQUENCE informe_seq RESTART WITH 11;


Property changes on: prosistem/alba/trunk/alba/data/sql/datos_desde_cero_update_seq.sql
___________________________________________________________________
Name: svn:executable
   + *

Added: prosistem/alba/trunk/alba/data/sql/datos_ejemplo_update_seq.sql
===================================================================
--- prosistem/alba/trunk/alba/data/sql/datos_ejemplo_update_seq.sql	                        (rev 0)
+++ prosistem/alba/trunk/alba/data/sql/datos_ejemplo_update_seq.sql	2008-07-11 03:30:09 UTC (rev 5735)
@@ -0,0 +1,61 @@
+ALTER SEQUENCE conceptobaja_seq RESTART WITH 5;
+ALTER SEQUENCE tipodocumento_seq RESTART WITH 4;
+ALTER SEQUENCE tipoiva_seq RESTART WITH 5;
+ALTER SEQUENCE niveltipo_seq RESTART WITH 8;
+ALTER SEQUENCE pais_seq RESTART WITH 10;
+ALTER SEQUENCE tipoespacio_seq RESTART WITH 5;
+ALTER SEQUENCE tipolocacion_seq RESTART WITH 3;
+ALTER SEQUENCE locacion_seq RESTART WITH 3;
+ALTER SEQUENCE provincia_seq RESTART WITH 28;
+ALTER SEQUENCE calendariovacunacion_seq RESTART WITH 27;
+ALTER SEQUENCE distritoescolar_seq RESTART WITH 14;
+ALTER SEQUENCE organizacion_seq RESTART WITH 2;
+ALTER SEQUENCE establecimiento_seq RESTART WITH 2;
+ALTER SEQUENCE usuario_seq RESTART WITH 5;
+ALTER SEQUENCE modulo_seq RESTART WITH 51;
+ALTER SEQUENCE permiso_seq RESTART WITH 63;
+ALTER SEQUENCE rel_usuario_permiso_seq RESTART WITH 57;
+ALTER SEQUENCE tipoinforme_seq RESTART WITH 3;
+ALTER SEQUENCE adjunto_seq RESTART WITH 11;
+ALTER SEQUENCE informe_seq RESTART WITH 11;
+ALTER SEQUENCE espacio_seq RESTART WITH 12;
+ALTER SEQUENCE preferencia_seq RESTART WITH 2;
+ALTER SEQUENCE rol_seq RESTART WITH 3;
+ALTER SEQUENCE rel_establecimiento_locacion_seq RESTART WITH 3;
+ALTER SEQUENCE rel_rol_permiso_seq RESTART WITH 50;
+ALTER SEQUENCE rel_usuario_permiso_seq RESTART WITH 218;
+ALTER SEQUENCE cuenta_seq RESTART WITH 42;
+ALTER SEQUENCE alumno_seq RESTART WITH 64;
+ALTER SEQUENCE rol_responsable_seq RESTART WITH 4;
+ALTER SEQUENCE responsable_seq RESTART WITH 38;
+ALTER SEQUENCE ciclolectivo_seq RESTART WITH 2;
+ALTER SEQUENCE turno_seq RESTART WITH 7;
+ALTER SEQUENCE periodo_seq RESTART WITH 6;
+ALTER SEQUENCE tipodocente_seq RESTART WITH 5;
+ALTER SEQUENCE cargobaja_seq RESTART WITH 5;
+ALTER SEQUENCE calendariovacunacion_seq RESTART WITH 27;
+ALTER SEQUENCE rel_calendariovacunacion_a_seq_1 RESTART WITH 5;
+ALTER SEQUENCE legajocategoria_seq RESTART WITH 4;
+ALTER SEQUENCE legajopedagogico_seq RESTART WITH 3;
+ALTER SEQUENCE adjunto_seq RESTART WITH 11;
+ALTER SEQUENCE tipoasistencia_seq RESTART WITH 6;
+ALTER SEQUENCE asistencia_seq RESTART WITH 2220;
+ALTER SEQUENCE concepto_seq RESTART WITH 7;
+ALTER SEQUENCE escalanota_seq RESTART WITH 43;
+ALTER SEQUENCE boletin_conceptual_seq RESTART WITH 1141;
+ALTER SEQUENCE actividad_seq RESTART WITH 17;
+ALTER SEQUENCE boletin_actividades_seq RESTART WITH 428;
+ALTER SEQUENCE anio_seq RESTART WITH 8;
+ALTER SEQUENCE division_seq RESTART WITH 22;
+ALTER SEQUENCE repeticion_seq RESTART WITH 5;
+ALTER SEQUENCE rel_anio_actividad_seq RESTART WITH 22;
+ALTER SEQUENCE rel_alumno_division_seq RESTART WITH 80;
+ALTER SEQUENCE docente_seq RESTART WITH 21;
+ALTER SEQUENCE horarioescolartipo_seq RESTART WITH 4;
+ALTER SEQUENCE evento_seq RESTART WITH 33;
+ALTER SEQUENCE rel_division_actividad_doc_seq_2 RESTART WITH 9;
+ALTER SEQUENCE rel_docente_establecimiento_seq RESTART WITH 21;
+ALTER SEQUENCE feriado_seq RESTART WITH 13;
+ALTER SEQUENCE horarioescolar_seq RESTART WITH 19;
+ALTER SEQUENCE tipoinforme_seq RESTART WITH 3;
+ALTER SEQUENCE informe_seq RESTART WITH 11;


Property changes on: prosistem/alba/trunk/alba/data/sql/datos_ejemplo_update_seq.sql
___________________________________________________________________
Name: svn:executable
   + *

Modified: prosistem/alba/trunk/alba/web/instalar/funciones.php
===================================================================
--- prosistem/alba/trunk/alba/web/instalar/funciones.php	2008-07-11 02:44:34 UTC (rev 5734)
+++ prosistem/alba/trunk/alba/web/instalar/funciones.php	2008-07-11 03:30:09 UTC (rev 5735)
@@ -78,78 +78,56 @@
     $aSql = dump2Array($file);
     $error = false;    
     if(count($aSql) > 0 && file_exists($file)) {
+        if($protocol == 'mysql' OR $protocol == 'pgsql') {
+            $dsn = "$protocol:host=$host;dbname=$db"; // necesito saber como hacer conexion utf8
 
-        // otro pedazo de codigo para cambiarlo por PDO
-
-
-        if($protocol == 'mysql') {
-            if (mysql_connect($host,$user,$pass)) {
-                mysql_set_charset('utf8');
-                if(mysql_select_db($db)) {
-                    DebugLog("executeDump(): ejecutando BEGIN" );    
-                    mysql_query("BEGIN");
-                    foreach($aSql as $sql_line) {
-                        $res = mysql_query(trim($sql_line));
-                        if(!$res) {
-                            DebugLog("executeDump(): Fallo SQL: $sql_line");
-                            DebugLog("executeDump(): error:". mysql_error());
-                            $error = true;
-                        }
-                    }
-                    if($error == true) {
-                        DebugLog("executeDump(): Se encontraron errores ejecutando ROLLBACK y saliendo");    
-                        mysql_query("ROLLBACK");
-                        return false;
-                    } else {
-                        DebugLog("executeDump(): Sin errores ejecutando COMMIT y saliendo");    
-                        mysql_query("COMMIT");
-                        return true;
-                    }
-                }
-                else {
-                    DebugLog("executeDump(): Error al seleccionar la base: $db");    
-                    return false;
-                }
+            try {
+                $dbh = new PDO($dsn, $user, $pass);
+                $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
             }
-            else {
-                DebugLog("excuteDump(): No se puede conectar ala base de datos. " . mysql_error());
+            catch (PDOException $e) {
+                DebugLog("excuteDump(): No se puede conectar ala base de datos. " . $e->getMessage());
+                return false;
             }
-        }
 
-
-        if($protocol == 'pgsql') {
-            $conn = @pg_connect("host=$host user=$user password=$pass dbname=$db");
-            if ($conn) {
+            try {
                 DebugLog("executeDump(): ejecutando BEGIN" );
-                pg_query("BEGIN");
-                DebugLog("executeDump(): ejecutando SET CONSTRAINTS ALL DEFERRED" );
-                pg_query("SET CONSTRAINTS ALL DEFERRED");
+                $dbh->beginTransaction();
+
+                if($protocol == 'pgsql') { 
+                    DebugLog("executeDump(): ejecutando SET CONSTRAINTS ALL DEFERRED" );
+                    $dbh->exec("SET CONSTRAINTS ALL DEFERRED");
+                }
+
                 foreach($aSql as $sql_line) {
-                    $res = pg_query(trim($sql_line));
-                    if(!$res) {
-                        DebugLog("executeDump(): Fallo SQL: $sql_line");
-                        DebugLog("executeDump(): error:". pg_last_error($conn));
-                        $error = true;
+                    // esto es lamentable: saco los drop que genera el propel
+//                    if($protocol == 'pgsql' AND ( strstr($sql_line,'DROP') !== false)) {
+                        //                        continue;
+                    if($protocol == 'pgsql') {
+                        $sql_line = str_replace('DROP TABLE', 'DROP TABLE IF EXISTS', $sql_line);
+                        $sql_line = str_replace('DROP SEQUENCE', 'DROP SEQUENCE IF EXISTS', $sql_line);
                     }
+                    $dbh->exec(trim($sql_line));
                 }
-                if($error == true) {
-                    DebugLog("executeDump(): Se encontraron errores ejecutando ROLLBACK y saliendo");    
-                    pg_query("ROLLBACK");
-                    return false;
-                } else {
-                    DebugLog("executeDump(): Sin errores ejecutando COMMIT y saliendo");    
-                    pg_query("COMMIT");
-                    return true;
-                }
+
+                DebugLog("executeDump(): Sin errores ejecutando COMMIT y saliendo");
+                $dbh->commit();
             }
-            else {
-                DebugLog("excuteDump(): No se puede conectar ala base de datos. " . mysql_error());
+            catch (PDOException $e) {
+                DebugLog("executeDump(): Error en". $e->getMessage());
+                DebugLog("executeDump(): Se encontraron errores ejecutando ROLLBACK y saliendo");
+                $dbh->rollBack();
+                return false;
             }
-        }
 
+            return true;
 
+        } else {
+            DebugLog("executeDump(): El protocolo no es ni mysql ni pgsql");
+            return false;
+        }
     } else {
-        DebugLog("executeDump(): No hay instrucciones SQL en el archivo");    
+        DebugLog("executeDump(): No hay instrucciones SQL en el archivo");
         return false;
     }
 
@@ -300,7 +278,7 @@
     return extension_loaded('mysql');
 }
 function check_memorylimit() {
-    DebugLog("Comprobando limite de moeria de php");
+    DebugLog("Comprobando limite de memoria de php");
     $limite = ini_get('memory_limit');
     return ($limite >= 32);
 }
@@ -400,4 +378,4 @@
 
 
 
-?>
\ No newline at end of file
+?>

Modified: prosistem/alba/trunk/alba/web/instalar/paso3.php
===================================================================
--- prosistem/alba/trunk/alba/web/instalar/paso3.php	2008-07-11 02:44:34 UTC (rev 5734)
+++ prosistem/alba/trunk/alba/web/instalar/paso3.php	2008-07-11 03:30:09 UTC (rev 5735)
@@ -50,100 +50,59 @@
     $host = $_POST['host'];
     $user = $_POST['user'];
     $pass = $_POST['pass'];
-    $db = $_POST['db'];    
+    $db = $_POST['db'];
     $creardb = (isset($_POST['creardb']) && $_POST['creardb'] == 1);
 
     //probado conexion
     DebugLog('Probando conexión'); 
 
-    //Todo este codigo podria ser mejorado integrando PDO (a partir de PHP 5.1)
-    //ya que no habria que repetir codigo
-
-    //comprueba si completo opcion de motor de base de datos
-    if($tipo_motor_base != 'mysql' AND $tipo_motor_base != 'pgsql') {
+    // Compruebo si estan los datos minimos completos
+    if($host == '' OR $user == '' OR $db == '' OR ($tipo_motor_base != 'mysql' AND $tipo_motor_base != 'pgsql')) {
         $error_flag = true;
         $cnx_error_flag = true;
-        $cnx_error_msg = "No se sabe cual es el motor de bases de datos <br>";
+        $cnx_error_msg = "Debe completar al menos los campos Motor de bases de datos, Servidor, usuario y base de datos <br>";
         DebugLog('Error al conectar con la base de datos','E');
     } else {
-        if($tipo_motor_base == 'mysql') {
-            $conn = @mysql_connect($host,$user,$pass);
-            if (!$conn) {
-                $error_flag = true;
-                $cnx_error_flag = true;
-                $cnx_error_msg = "No se puede conectar a la base de datos: <br>" . mysql_error();
-                DebugLog('Error al conectar con la base de datos','E');
-            } else {
-                //crear base si es necesario
-                if ($creardb) {
-                    DebugLog('Probando crear base de datos...');
-                    $ret = @mysql_query('CREATE DATABASE ' . $db , $conn);
-                    if (!$ret) {
-                        $error_flag = true;
-                        $cnx_error_flag = true;
-                        $cnx_error_msg = "No se puede crear la base de datos: <br>" . mysql_error();
-                        DebugLog('No se puede crear la base de datos: ' . mysql_error() ,'E');
-                    } else {
-                        DebugLog("Base de datos $db creada correctamente");
-                    }
-                } else {
-                    DebugLog("No se creara una base de datos");
-                } 
-        
-                //conectado a la base
-                $ret = @mysql_select_db($db);
-                if (!$ret) {
-                    $error_flag = true;
-                    $cnx_error_flag = true;
-                    $cnx_error_msg = "No es posible utilizar la base $db: " . mysql_error();
-                    DebugLog("No es posible conectar a la base de datos $db: " . mysql_error(), 'E');
-                }
-                mysql_close($conn);
-            }
-            
+        $dsn = ":host=$host";
+        switch($tipo_motor_base) {
+            case 'mysql': $dsn = 'mysql'.$dsn; break;
+            case 'pgsql': $dsn = 'pgsql'.$dsn.";port=5432;user=$user;password=$pass"; break;
+            default: $dsn = null;
         }
+        if(!$creardb) {
+            $dsn .= ";dbname=$db";
+        }
 
+        try {
+            $dbh = new PDO($dsn, $user, $pass);
+        } 
+        catch (PDOException $e) {
+            $dbh = null;
+            $error_flag = true;
+            $cnx_error_flag = true;
+            $cnx_error_msg = "No se puede conectar a la base de datos: <br>" . $e->getMessage();
+            DebugLog('Error al conectar con la base de datos','E');
+        }
 
-        // Si es Postgresql
-        if($tipo_motor_base == 'pgsql') {
-            $conn = @pg_connect("host=$host user=$user password=$pass port=5432");
-            if (!$conn) {
+        //crear base si es necesario
+        if ($creardb AND $dbh != null) {
+            DebugLog('Probando crear base de datos...');
+            try {
+                @$dbh->exec('CREATE DATABASE ' . $db);
+                DebugLog("Base de datos $db creada correctamente");
+            }
+            catch(PDOException $e) {
                 $error_flag = true;
                 $cnx_error_flag = true;
-                $cnx_error_msg = "No se puede conectar a la base de datos: <br>";
-                DebugLog('Error al conectar con la base de datos','E');
-            } else {
-                //crear base si es necesario
-                if ($creardb) {
-                    DebugLog('Probando crear base de datos...');
-                    $ret = @pg_query($conn, 'CREATE DATABASE ' . $db);
-                    if (!$ret) {
-                        $error_flag = true;
-                        $cnx_error_flag = true;
-                        $cnx_error_msg = "No se puede crear la base de datos: <br>" . pg_last_error($conn);
-                        DebugLog('No se puede crear la base de datos: ' . pg_last_error($conn) ,'E');
-                    } else {
-                        DebugLog("Base de datos $db creada correctamente");
-                    }
-                } else {
-                    DebugLog("No se creara una base de datos");
-                } 
-
-                pg_close($conn);
-
-                $conn = pg_connect("host=$host user=$user password=$pass port=5432 dbname=$db");
-                //conectado a la base
-                if (!$conn) {
-                    $error_flag = true;
-                    $cnx_error_flag = true;
-                    $cnx_error_msg = "No es posible utilizar la base $db: ";
-                    DebugLog("No es posible conectar a la base de datos $db", 'E');
-                }
-                pg_close($conn);
-
+                $cnx_error_msg = "No se puede crear la base de datos: <br>" . $e->getMessage();
+                DebugLog('No se puede crear la base de datos: ' . $e->getMessage() ,'E');
             }
-        }
+        } else {
+            DebugLog("No se creara una base de datos");
+        } 
 
+        $dbh = null;
+
         $_SESSION['albainstall']['tipo_motor_base'] = $tipo_motor_base;
         $_SESSION['albainstall']['host'] = $host;
         $_SESSION['albainstall']['user'] = $user;
@@ -155,6 +114,17 @@
 else
     $error_flag = true;    
 ?>
+
+<script type="text/javascript">
+    function cambioTipo(bt) {
+        if(bt.value=="pgsql") {
+            document.forms[0].creardb.disabled = true;
+        } else {
+            document.forms[0].creardb.disabled = false;
+        }
+    }
+</script>
+
 <div id="detalle">
 <p>Detalle de conexi&oacute;n con la base de datos:</p>
 </div>
@@ -170,8 +140,8 @@
 
     <tr>
         <td>Motor de bases de datos:&nbsp;&nbsp;&nbsp;</td>
-        <td>Mysql<input type="radio" name="tipo_motor_base" value="mysql" <?php echo isset($tipo_motor_base) && $tipo_motor_base == 'mysql' ? 'checked' : ''?> >
-        Postgresql<input type="radio" name="tipo_motor_base" value="pgsql" <?php echo isset($tipo_motor_base) && $tipo_motor_base == 'pgsql' ? 'checked' : ''?> ></td>
+        <td>Mysql<input type="radio" name="tipo_motor_base" value="mysql" onChange="cambioTipo(this)"  <?php echo isset($tipo_motor_base) && $tipo_motor_base == 'mysql' ? 'checked' : ''?> >
+        Postgresql<input type="radio" name="tipo_motor_base" value="pgsql" onChange="cambioTipo(this)" <?php echo isset($tipo_motor_base) && $tipo_motor_base == 'pgsql' ? 'checked' : ''?> ></td>
     </tr>
     <tr>
         <td>Servidor:</td>
@@ -190,9 +160,9 @@
         <td><input type="text" name="db" value="<?php echo $db?>" class="texto"></td>
     </tr>
     <tr>
-        <td>Crear base de datos:<br/><span style="font-size:9px">(debe tener los permisos para poder hacerlo)</style></td>
+        <td>Crear base de datos:<br/><span style="font-size:9px">(Debe tener los permisos para poder hacerlo)</style></td>
         <td><input type="checkbox" name="creardb" value="1" <?php echo $creardb ? "checked" : ""?> class="check"></td>
-    </tr>   
+    </tr>
 </table>
 <br/>
 <input type="submit" name="btTextConn" value="Comprobar conexi&oacute;n a la Base de Datos" class="boton">
@@ -210,4 +180,4 @@
 // ir al siguiente paso
    $paso = 4;
    
-?>
\ No newline at end of file
+?>

Modified: prosistem/alba/trunk/alba/web/instalar/paso6.php
===================================================================
--- prosistem/alba/trunk/alba/web/instalar/paso6.php	2008-07-11 02:44:34 UTC (rev 5734)
+++ prosistem/alba/trunk/alba/web/instalar/paso6.php	2008-07-11 03:30:09 UTC (rev 5735)
@@ -124,6 +124,17 @@
                     $error_flag = true;
                     DebugLog("Error al cargar modelo de base de datos: $archivo","E");
                 }
+
+                //Esto se agrego para hacer update a las secuencias de postgresql
+                if($tipo_motor_base == 'pgsql') {
+                    $archivo = substr($archivo,0,-4)."_update_seq.sql";
+                    $ret = crear_base_modelo($archivo, $tipo_motor_base, $host, $user, $pass, $db);
+                    echo $ret ? IMG_OK : IMG_ERROR;
+                    if (!$ret) {
+                        $error_flag = true;
+                        DebugLog("Error al cargar modelo de base de datos: $archivo","E");
+                    }
+                }
             ?>
         </td>
     </tr>
@@ -148,4 +159,4 @@
 // finaliznado los pasos 
     DebugLog  ("============================ FIN INSTALACION ALBA - " .date('d-m-Y H:i:s'). "=======================");
     $completo = true;
-?>
\ No newline at end of file
+?>




Más información sobre la lista de distribución Alba-desarrollo