Ejemplo n.º 1
0
 /**
  * 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();
             }
         }
     }
 }