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ón con la base de datos:</p> </div> @@ -170,8 +140,8 @@ <tr> <td>Motor de bases de datos: </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ó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 +?>