protected function generar_schema_diff() { $schema_o = $this->get_schema_original(); $schema_logs_o = $schema_o . '_logs'; $schema_t = $this->get_schema_personalizacion(); $schema_logs_t = $schema_t . '_logs'; $this->get_db()->abrir_transaccion(); try { //1.- Renombrar el schema actual, al schema personalizado para que no rompa luego $this->get_db()->renombrar_schema($schema_logs_o, $schema_logs_t); $this->get_db()->renombrar_schema($schema_o, $schema_t); //2.- Indicarle al proyecto cual es el directorio de carga de los metadatos que debe usar $this->get_proyecto()->get_instancia()->set_dir_carga_proyecto($this->proyecto->get_id(), self::dir_metadatos_originales); //3.- Realizar la carga de la instancia, re-creando previamente el schema original que consta en bases.ini $this->get_proyecto()->get_instancia()->crear_schema(); $this->get_db()->retrazar_constraints(); $this->get_proyecto()->get_instancia()->cargar_autonomo(); $this->get_db()->cerrar_transaccion(); $this->get_db()->set_schema($schema_o); } catch (toba_error_db $e) { $this->get_db()->abortar_transaccion(); toba_logger::instancia()->error($e->getMessage()); throw new toba_error_usuario('Hubo un inconveniente al intentar exportar la personalización, revise el log'); } }
function purgar_auditoria($tiempo = 0, $tablas = array(), $prefijo_tablas = null, $con_transaccion = true) { $this->manejador_interface->mensaje('Limpiando las tablas de auditoria', true); $fuentes = $this->proyecto->get_indice_fuentes(); toba_logger::instancia()->var_dump($fuentes, 'fuentes activas'); if (empty($fuentes)) { return; } $schemas = array(); foreach ($fuentes as $fuente) { $schemas[$fuente] = aplanar_matriz(toba_info_editores::get_schemas_fuente($this->proyecto->get_id(), $fuente), 'schema'); } toba_logger::instancia()->var_dump($schemas, 'schemas de fuentes'); foreach ($fuentes as $fuente) { try { $base = $this->proyecto->get_db_negocio($fuente); $this->procesar_schemas_fuente($base, $schemas[$fuente], $con_transaccion, $tablas, $prefijo_tablas, 'purgar', $tiempo); unset($base); } catch (toba_error_db $e) { if (isset($base)) { $base->abortar_transaccion(); //Si hay algun error hace revert y anula el objeto de la bd unset($base); } } } }
/** * Shortcut para crear el punto de montaje de la personalización de un proyecto */ function crear_pm_personalizacion() { $id_proyecto = $this->proyecto->get_id(); $punto = new toba_punto_montaje_pers(); $punto->set_etiqueta(toba_modelo_pms::pm_pers); $punto->set_proyecto($id_proyecto); $punto->set_proyecto_referenciado($id_proyecto); $punto->set_descripcion('Punto de montaje por defecto de la personalización de todos los proyectos de toba'); $punto->set_path('personalizacion/php'); $this->guardar($punto); }
/** * Marca las clases como extendidas del tipo $tipo * @param toba_modelo_proyecto $proyecto * @param string $tipo valores posibles: toba | proyecto */ static function marcar_clases_extendidas(toba_modelo_proyecto $proyecto, $tipo = 'toba') { $db = $proyecto->get_db(); $id_proyecto = $db->quote($proyecto->get_id()); $set = $tipo == 'toba' ? 'extension_toba=true' : 'extension_proyecto=true'; $sql = "UPDATE apex_proyecto SET {$set} WHERE proyecto={$id_proyecto}"; $db->ejecutar($sql); }