/** * Crea los triggers, store_procedures y esquema para la auditoría de tablas del sistema * En caso que el schema exista, busca nuevos campos y tablas * @param array $tablas Tablas especificas a auditar * @param string $prefijo_tablas Tomar todas las tablas que tienen este prefijo, si es null se toman todas * @param boolean $con_transaccion Crea el esquema dentro de una transaccion * @param string $fuente Indica que se va a procesar solo una de las fuentes del proyecto * @param boolean $guardar_datos Indica que se deben guardar y restaurar los datos actuales luego del proceso */ function crear_auditoria($tablas = array(), $prefijo_tablas = null, $con_transaccion = true, $fuente = null, $lista_schemas = array(), $guardar_datos = false) { if (!is_null($fuente)) { $fuentes = array($fuente); } else { $fuentes = $this->proyecto->get_indice_fuentes(); } toba_logger::instancia()->var_dump($fuentes, 'fuentes activas'); if (empty($fuentes)) { return; } //Recorro los schemas de las fuentes del proyecto $schemas = array(); foreach ($fuentes as $id_fuente) { $schemas[$id_fuente] = aplanar_matriz(toba_info_editores::get_schemas_fuente($this->proyecto->get_id(), $id_fuente), 'schema'); } if (!is_null($fuente) && !empty($lista_schemas)) { $aux = array_intersect($schemas[$fuente], $lista_schemas); if ($aux !== false) { $schemas[$fuente] = $aux; } } toba_logger::instancia()->var_dump($schemas, 'schemas de fuentes'); //--- Tablas de auditoría $this->manejador_interface->mensaje('Creando auditoria', true); $archivo = $this->proyecto->get_dir() . '/sql/datos_auditoria.sql'; $bases = array(); foreach ($fuentes as $fuente) { try { $bases[$fuente] = $this->proyecto->get_db_negocio($fuente); if ($guardar_datos) { $id_def_base = $this->proyecto->construir_id_def_base($fuente); //Guarda los datos actuales de auditoria $this->exportar_esquema_base($id_def_base, $archivo, false, " '*_auditoria' "); } // Hace la migracion y restauracion de datos if ($con_transaccion) { $bases[$fuente]->abrir_transaccion(); } $this->procesar_schemas_fuente($bases[$fuente], $schemas[$fuente], false, $tablas, $prefijo_tablas, 'crear'); if ($guardar_datos) { $bases[$fuente]->ejecutar_archivo($archivo); } } catch (toba_error_db $e) { if (isset($bases[$fuente])) { $bases[$fuente]->abortar_transaccion(); //Si hay algun error hace revert y anula el objeto de la bd unset($bases[$fuente]); } } } $this->proyecto->generar_roles_db(); if ($con_transaccion) { foreach ($fuentes as $fuente) { if (isset($bases[$fuente])) { //Cierra la transaccion en aquellas bases presentes y sin errores $bases[$fuente]->cerrar_transaccion(); } } } }