function __construct($asistente)
 {
     $this->id = $this->asistente->get_id_elemento();
     $this->proyecto = $this->asistente->get_proyecto();
     //Busco el datos relacion correspondientes al componente
     $id = toba_info_editores::get_dr_de_clase($this->clase);
     $componente = array('proyecto' => $id[0], 'componente' => $id[1]);
     $this->datos = toba_constructor::get_runtime($componente);
     $this->datos->inicializar();
     $datos = array('nombre' => $this->clase . ' generado automaticamente', 'proyecto' => $this->proyecto);
     $this->ini();
 }
 /**
  * 	Similar al anterior pero se dispara un evento seleccion e implicitamente
  *	tambien el evento modificacion
  */
 function crear_ml_para_seleccion($observador, $metodo, $datos, $parametros, $evento = 'seleccion')
 {
     $ml = toba_constructor::get_runtime(array('proyecto' => 'toba_testing', 'componente' => '1322'), 'toba_ei_formulario_ml');
     $ml->inicializar(array('nombre_formulario' => ''));
     $ml->agregar_controlador($observador);
     $ml->set_metodo_analisis($metodo);
     $_POST['ei_form1322'] = $evento;
     $_POST['objeto_form_1322__parametros'] = "{$parametros}";
     $_POST['objeto_form_1322_listafilas'] = implode('_', array_keys($datos));
     //Seteo los efs
     foreach ($datos as $id => $valor) {
         $_POST["1322lista{$id}"] = $valor['lista'];
     }
     $ml->disparar_eventos();
 }
Beispiel #3
0
 function __construct($asistente)
 {
     $this->asistente = $asistente;
     $this->asistente->registrar_molde($this);
     $this->id = $this->asistente->get_id_elemento();
     $this->proyecto = $this->asistente->get_proyecto();
     //Busco el datos relacion correspondientes al componente
     $id = toba_info_editores::get_dr_de_clase($this->clase);
     $componente = array('proyecto' => $id[0], 'componente' => $id[1]);
     $this->datos = toba_constructor::get_runtime($componente);
     $this->datos->inicializar();
     $datos = array('nombre' => $this->clase . ' generado automaticamente', 'proyecto' => $this->proyecto);
     if ($this->asistente->tiene_fuente_definida()) {
         $datos['fuente_datos_proyecto'] = $this->proyecto;
         $datos['fuente_datos'] = $this->asistente->get_fuente();
     }
     $this->datos->tabla('base')->set($datos);
     $this->ini();
 }
 /**
  * Elimina opcionalmente un conjunto de componentes pertencientes a la operación
  *
  * @param boolean $borrar_item Debe borrar el item una vez borradas sus dependencias
  * @param array $opciones Arreglo 'id_componente' => array('eliminar'=>true/false, 'eliminar_archivo'=>true/false)
  * @param boolean $con_transaccion Debe enmarcar la eliminación en una transaccion
  */
 function eliminar($borrar_item, $opciones, $con_transaccion = true)
 {
     $item = toba::zona()->get_info();
     $db = toba_contexto_info::get_db();
     $arbol_componentes = array_slice($this->arbol, 1);
     //--- Se eliminan metadatos
     if ($con_transaccion) {
         $db->abrir_transaccion();
     }
     foreach ($arbol_componentes as $comp) {
         $opcion = $opciones[$comp['componente']];
         if ($opcion['eliminar']) {
             //--- Elimina metadatos
             $id_dr = toba_info_editores::get_dr_de_clase($comp['tipo']);
             $componente = array('proyecto' => $id_dr[0], 'componente' => $id_dr[1]);
             $dr = toba_constructor::get_runtime($componente, 'toba_datos_relacion', false);
             $dr->inicializar();
             $dr->persistidor()->desactivar_transaccion();
             $dr->resetear();
             $dr->cargar(array('proyecto' => $this->id_proyecto, 'objeto' => $comp['componente']));
             $dr->eliminar_todo();
         }
     }
     //--Borro el item
     if ($borrar_item) {
         $id_dr = toba_info_editores::get_dr_de_clase('toba_item');
         $componente = array('proyecto' => $id_dr[0], 'componente' => $id_dr[1]);
         $dr = toba_constructor::get_runtime($componente, 'toba_datos_relacion', false);
         $dr->inicializar();
         $dr->persistidor()->desactivar_transaccion();
         $dr->resetear();
         $dr->cargar(array('proyecto' => $this->id_proyecto, 'item' => $this->id_item));
         $dr->eliminar_todo();
     }
     if ($con_transaccion) {
         $db->cerrar_transaccion();
     }
     //--- Se eliminan subclases
     foreach ($arbol_componentes as $comp) {
         $opcion = $opciones[$comp['componente']];
         if ($opcion['eliminar'] && $opcion['eliminar_archivo']) {
             $archivo = $this->get_path_archivo($comp);
             unlink($archivo);
         }
     }
 }
Beispiel #5
0
 protected function usar_metodo_dt($param_dt, $parametros, $es_carga_inicial = false)
 {
     //Elijo el metodo de carga dependiendo de si es masiva o no.
     if ($es_carga_inicial && isset($parametros['permite_carga_masiva']) && $parametros['permite_carga_masiva'] == '1') {
         $nombre_metodo = $parametros['metodo_masivo'];
     } else {
         $nombre_metodo = $parametros['metodo'];
     }
     $id = array('proyecto' => toba::proyecto()->get_id(), 'componente' => $parametros['tabla']);
     $dt = toba_constructor::get_runtime($id, 'toba_datos_tabla');
     if (!method_exists($dt, $nombre_metodo)) {
         $clase = get_class($dt);
         $this->log("ERROR en la carga de una columna externa. No existe el método '{$nombre_metodo}' de la clase '{$clase}'");
         throw new toba_error_def("AP_TABLA_DB: ERROR en la carga de una columna externa. No existe el método '{$nombre_metodo}' de la clase '{$clase}'");
     }
     $datos = call_user_func_array(array($dt, $nombre_metodo), $param_dt);
     return $datos;
 }
Beispiel #6
0
 function get_dr()
 {
     $dr = toba_constructor::get_runtime(array('proyecto' => 'toba_testing', 'componente' => '1516'), 'toba_datos_relacion');
     $dr->inicializar();
     return $dr;
 }
Beispiel #7
0
 /**
  * Construye una dependencia y la asocia al componente actual
  *
  * @param unknown_type $identificador
  * @param unknown_type $parametros
  * @return unknown
  * @ignore 
  */
 function cargar_dependencia($identificador)
 {
     if (!isset($this->_indice_dependencias[$identificador])) {
         throw new toba_error_def("OBJETO [cargar_dependencia]: No EXISTE una dependencia asociada al indice [{$identificador}].");
     }
     $posicion = $this->_indice_dependencias[$identificador];
     $clase = $this->_info_dependencias[$posicion]['clase'];
     $clave['proyecto'] = $this->_info_dependencias[$posicion]['proyecto'];
     $clave['componente'] = $this->_info_dependencias[$posicion]['objeto'];
     $this->_dependencias[$identificador] = toba_constructor::get_runtime($clave, $clase);
 }
Beispiel #8
0
 /**
  * Duplica un objeto y sus dependencias recursivamente
  *
  * @param array $nuevos_datos Datos a modificar en la base del objeto. Para anexar algo al nombre se utiliza el campo 'anexo_nombre'
  * @param boolean/string $dir_subclases Si el componente tiene subclases clona los archivos, en caso afirmativo indicar la ruta destino (relativa)
  * @param boolean $con_transaccion	Indica si la clonación se debe incluír en una transaccion
  * @return array Clave del objeto que resulta del clonado
  */
 function clonar($nuevos_datos, $dir_subclases = false, $con_transaccion = true)
 {
     //Se busca el id del datos_relacion de la clase
     $id_dr = toba_info_editores::get_dr_de_clase($this->datos['_info']['clase']);
     //Se construye el objeto datos_relacion
     $componente = array('proyecto' => $id_dr[0], 'componente' => $id_dr[1]);
     $dr = toba_constructor::get_runtime($componente);
     $dr->inicializar();
     //Se carga con el id_origen
     $dr->cargar(array('proyecto' => $this->proyecto, 'objeto' => $this->id));
     foreach ($nuevos_datos as $campo => $valor) {
         if ($campo == 'anexo_nombre') {
             $campo = 'nombre';
             $valor = $valor . $dr->tabla('base')->get_fila_columna(0, $campo);
         }
         $dr->tabla('base')->set_fila_columna_valor(0, $campo, $valor);
     }
     //Se le fuerza una inserción a los datos_tabla
     //Como la clave de los objetos son secuencias, esto garantiza claves nuevas
     $dr->forzar_insercion();
     if (!$con_transaccion) {
         $dr->persistidor()->desactivar_transaccion();
     }
     //--- Si tiene subclase, se copia el archivo y se cambia
     if ($dir_subclases !== false) {
         $proyecto_dest = isset($nuevos_datos['proyecto']) ? $nuevos_datos['proyecto'] : null;
         $this->clonar_subclase($dr, $dir_subclases, $proyecto_dest);
     }
     //--- Se reemplazan los datos y se clonan los hijos
     foreach ($this->subelementos as $hijo) {
         //-- Si se especifico un proyecto, se propaga
         $datos_objeto = array();
         if (isset($nuevos_datos['proyecto'])) {
             $datos_objeto['proyecto'] = $nuevos_datos['proyecto'];
         }
         //-- Si se especifica un anexo de nombre, se propaga
         if (isset($nuevos_datos['anexo_nombre'])) {
             $datos_objeto['anexo_nombre'] = $nuevos_datos['anexo_nombre'];
         }
         //-- La fuente tambien se propaga
         if (isset($nuevos_datos['fuente_datos_proyecto'])) {
             $datos_objeto['fuente_datos_proyecto'] = $nuevos_datos['fuente_datos_proyecto'];
         }
         if (isset($nuevos_datos['fuente_datos'])) {
             $datos_objeto['fuente_datos'] = $nuevos_datos['fuente_datos'];
         }
         //-- Punto de montaje tambien se propaga
         if (isset($nuevos_datos['punto_montaje'])) {
             $datos_objeto['punto_montaje'] = $nuevos_datos['punto_montaje'];
         }
         //-- SE CLONA
         $id_clon = $hijo->clonar($datos_objeto, $dir_subclases, $con_transaccion);
         //--- En el componente actual se reemplaza la dependencia por el clon
         $id_fila = $dr->tabla('dependencias')->get_id_fila_condicion(array('identificador' => $hijo->rol_en_consumidor()));
         $dr->tabla('dependencias')->modificar_fila(current($id_fila), array('objeto_proveedor' => $id_clon['componente']));
     }
     //Se intenta acceder a las pantallas/db_registros para pasarle el nuevo punto de montaje
     if (isset($nuevos_datos['punto_montaje'])) {
         //Trato de setear el punto de montaje para las pantallas
         try {
             $dr->tabla('pantallas')->set_columna_valor('punto_montaje', $nuevos_datos['punto_montaje']);
         } catch (Exception $e) {
         }
         //Trato de setear el punto de montaje para las propiedades basicas
         try {
             $dr->tabla('prop_basicas')->set_columna_valor('punto_montaje', $nuevos_datos['punto_montaje']);
         } catch (Exception $e) {
         }
         //Trato de setear el punto de montaje para los efs
         try {
             $dr->tabla('efs')->set_columna_valor('punto_montaje', $nuevos_datos['punto_montaje']);
         } catch (Exception $e) {
         }
         //Trato de setear el punto de montaje para las columnas del filtro
         try {
             $dr->tabla('cols')->set_columna_valor('punto_montaje', $nuevos_datos['punto_montaje']);
         } catch (Exception $e) {
         }
         //Trato de setear el punto de montaje para las columnas externas del datos tabla
         try {
             $dr->tabla('externas')->set_columna_valor('punto_montaje', $nuevos_datos['punto_montaje']);
         } catch (Exception $e) {
         }
     }
     $dr->sincronizar();
     //Se busca la clave del nuevo objeto
     $clave = $dr->tabla('base')->get_clave_valor(0);
     $clave['componente'] = $clave['objeto'];
     return $clave;
 }
Beispiel #9
0
 /**
  * Carga la SOLICITUD actual. Se determina el item y se controla el acceso al mismo
  */
 function cargar_solicitud_web()
 {
     if (toba::manejador_sesiones()->existe_sesion_activa()) {
         // Estoy dentro de una SESION
         $item = $this->get_id_item('item_inicio_sesion', false, true);
         if (!$item[0] || !$item[1]) {
             throw new toba_error_def('ERROR: No esta definido el ITEM de INICIO de sesion');
         }
         $this->iniciar_contexto_solicitud($item);
         $solicitud = toba_constructor::get_runtime(array('proyecto' => $item[0], 'componente' => $item[1]), 'toba_item');
         if (!$solicitud->es_item_publico()) {
             $this->autorizar_acceso_item($item);
         }
         return $solicitud;
     } else {
         // Estoy fuera de la sesion. Solo se puede acceder a lo publico
         $mensaje_error = 'La sesión no esta activa. Solo es posible acceder items PUBLICOS.';
         $item = $this->get_id_item('item_pre_sesion');
         if (!$item[0] || !$item[1]) {
             throw new toba_error_def('ERROR: No esta definido el ITEM de LOGIN');
         }
         $this->iniciar_contexto_solicitud($item);
         $solicitud = toba_constructor::get_runtime(array('proyecto' => $item[0], 'componente' => $item[1]), 'toba_item');
         if (!$solicitud->es_item_publico()) {
             // Si se arrastra una URL previa despues de finalizar la sesion y se refresca la pagina
             // el nucleo trata de cargar un item explicito por URL. El mismo no va a ser publico...
             // Esto apunta a solucionar ese error: Blanqueo el item solicitado y vuelvo a intentar.
             // (NOTA: esto puede ocultar la navegacion entre items supuestamente publicos)
             if (toba::memoria()->get_item_solicitado()) {
                 toba::logger()->notice('Fallo la carga de una operación publica. Se intenta con la operación predeterminada', 'toba');
                 toba::memoria()->set_item_solicitado(null);
                 $item = $this->get_id_item('item_pre_sesion');
                 $this->iniciar_contexto_solicitud($item);
                 $solicitud = toba_constructor::get_runtime(array('proyecto' => $item[0], 'componente' => $item[1]), 'toba_item');
                 if (!$solicitud->es_item_publico()) {
                     throw new toba_error_def($mensaje_error);
                 }
             } else {
                 throw new toba_error_def($mensaje_error);
             }
         }
         return $solicitud;
     }
 }
Beispiel #10
0
 function get_dt()
 {
     $dt = toba_constructor::get_runtime(array('proyecto' => 'toba_testing', 'componente' => '1746'), 'toba_datos_tabla');
     $dt->inicializar();
     return $dt;
 }
Beispiel #11
0
 /**
  * Construye un componente y lo mantiene en un slot interno
  *
  * @param string $clase Nombre de la clase de componente
  * @param int $posicion Posición del componente en la operación
  * @param mixed $parametros
  * @return int Indice o slot interno donde se almaceno el componente
  */
 function cargar_objeto($clase, $posicion, $parametros = null)
 {
     //-[1]- El indice	es	valido?
     if (!isset($this->indice_objetos[$clase][$posicion])) {
         $this->observar(array("toba", "error"), "SOLICITUD [get_id_objeto]: No EXISTE un OBJETO\tasociado\tal\tindice [{$clase}][{$posicion}].", false, true, true);
         return -1;
     }
     $posicion = $this->indice_objetos[$clase][$posicion];
     $indice = $this->objetos_indice_actual;
     $clave['proyecto'] = $this->info['objetos'][$posicion]['objeto_proyecto'];
     $clave['componente'] = $this->info['objetos'][$posicion]['objeto'];
     $this->objetos[$indice] = toba_constructor::get_runtime($clave, $clase);
     $this->objetos_indice_actual++;
     return $indice;
 }
 /**
  * @ignore 
  */
 protected function ef_metodo_carga_dt($id_ef, $parametros, $maestros)
 {
     $id = $this->_controlador->get_id();
     $dt = toba_constructor::get_runtime(array('proyecto' => $id[0], 'componente' => $parametros['carga_dt']), 'toba_datos_tabla');
     if (!method_exists($dt, $parametros['carga_metodo'])) {
         $clase = get_class($dt);
         throw new toba_error_def("ERROR en la carga del ef {$id_ef}. No existe el método '{$parametros['carga_metodo']}' de la clase '{$clase}'");
     }
     return call_user_func_array(array($dt, $parametros['carga_metodo']), $maestros);
 }
Beispiel #13
0
 /**
  * Retorna un componente por ID
  * @param integer $id
  * @return toba_componente
  */
 static function componente_por_id($id)
 {
     $id_comp['proyecto'] = toba_proyecto::get_id();
     $id_comp['componente'] = $id;
     $comp = toba_constructor::get_runtime($id_comp, null, true);
     if (!$comp->inicializado()) {
         $comp->inicializar();
     }
     return $comp;
 }
 /**
  * Duplica un objeto y sus dependencias recursivamente
  *
  * @param array $nuevos_datos Datos a modificar en la base del objeto. Para anexar algo al nombre se utiliza el campo 'anexo_nombre'
  * @param boolean/string $dir_subclases Si el componente tiene subclases clona los archivos, en caso afirmativo indicar la ruta destino (relativa)
  * @param boolean $con_transaccion	Indica si la clonación se debe incluír en una transaccion
  * @return array Clave del objeto que resulta del clonado
  */
 function clonar($nuevos_datos, $dir_subclases = false, $con_transaccion = true)
 {
     //Se busca el id del datos_relacion de la clase
     $id_dr = toba_info_editores::get_dr_de_clase($this->datos['_info']['clase']);
     //Se construye el objeto datos_relacion
     $componente = array('proyecto' => $id_dr[0], 'componente' => $id_dr[1]);
     $dr = toba_constructor::get_runtime($componente);
     $dr->inicializar();
     //Se carga con el id_origen
     $dr->cargar(array('proyecto' => $this->proyecto, 'objeto' => $this->id));
     foreach ($nuevos_datos as $campo => $valor) {
         if ($campo == 'anexo_nombre') {
             $campo = 'nombre';
             $valor = $valor . $dr->tabla('base')->get_fila_columna(0, $campo);
         }
         $dr->tabla('base')->set_fila_columna_valor(0, $campo, $valor);
     }
     //Se le fuerza una inserción a los datos_tabla
     //Como la clave de los objetos son secuencias, esto garantiza claves nuevas
     $dr->forzar_insercion();
     if (!$con_transaccion) {
         $dr->persistidor()->desactivar_transaccion();
     }
     //-- Punto de montaje tambien se propaga
     if (isset($nuevos_datos['punto_montaje'])) {
         $dr->tabla('prop_basicas')->set_columna_valor('punto_montaje', $nuevos_datos['punto_montaje']);
     }
     //--- Si tiene subclase, se copia el archivo y se cambia
     if ($dir_subclases !== false) {
         $proyecto_dest = isset($nuevos_datos['proyecto']) ? $nuevos_datos['proyecto'] : null;
         $this->clonar_subclase($dr, $dir_subclases, $proyecto_dest);
     }
     $dep_nuevas = array();
     $dep_viejas = array();
     //--- Se reemplazan los datos y se clonan los hijos
     foreach ($this->subelementos as $hijo) {
         //-- Si se especifico un proyecto, se propaga
         $datos_objeto = array();
         if (isset($nuevos_datos['proyecto'])) {
             $datos_objeto['proyecto'] = $nuevos_datos['proyecto'];
         }
         //-- Si se especifica un anexo de nombre, se propaga
         if (isset($nuevos_datos['anexo_nombre'])) {
             $datos_objeto['anexo_nombre'] = $nuevos_datos['anexo_nombre'];
         }
         //-- La fuente tambien se propaga
         if (isset($nuevos_datos['fuente_datos_proyecto'])) {
             $datos_objeto['fuente_datos_proyecto'] = $nuevos_datos['fuente_datos_proyecto'];
         }
         if (isset($nuevos_datos['fuente_datos'])) {
             $datos_objeto['fuente_datos'] = $nuevos_datos['fuente_datos'];
         }
         //-- Punto de montaje tambien se propaga
         if (isset($nuevos_datos['punto_montaje'])) {
             $datos_objeto['punto_montaje'] = $nuevos_datos['punto_montaje'];
         }
         //-- SE CLONA
         $id_clon = $hijo->clonar($datos_objeto, $dir_subclases, $con_transaccion);
         //--- En el componente actual se reemplaza la dependencia por el clon
         $id_fila = $dr->tabla('dependencias')->get_id_fila_condicion(array('identificador' => $hijo->rol_en_consumidor()));
         $dr->tabla('dependencias')->modificar_fila(current($id_fila), array('objeto_proveedor' => $id_clon['componente']));
         //Aca obtengo la informacion de metadatos de la tabla recien clonada y guardo tambien
         //la info de la tabla actual.
         $index = $hijo->get_id();
         $dep_nuevas[$index] = toba_constructor::get_info($id_clon, $hijo->get_clase_nombre());
         $dep_viejas[$index] = $hijo;
     }
     //Si hay dependencias clonadas entonces regenero las relaciones entre tablas y entre columnas.
     if (!empty($dep_nuevas)) {
         $this->clonar_relacion_tablas($dep_nuevas, $dr->tabla('relaciones'));
         $this->clonar_relacion_columnas($dep_nuevas, $dep_viejas, $dr->tabla('columnas_relacion'));
     }
     $dr->sincronizar();
     //Se busca la clave del nuevo objeto
     $clave = $dr->tabla('base')->get_clave_valor(0);
     $clave['componente'] = $clave['objeto'];
     return $clave;
 }
Beispiel #15
0
 /**
  * Duplica un item y sus dependencias recursivamente
  *
  * @param array $nuevos_datos Datos a modificar en la base del item. Para anexar algo al nombre se utiliza el campo 'anexo_nombre'
  * @param boolean/string $dir_subclases Si el componente tiene subclases clona los archivos, en caso afirmativo indicar la ruta destino (relativa)
  * @param boolean $con_transaccion	Indica si la clonación se debe incluír en una transaccion
  * @return array Clave del item que resulta del clonado
  */
 function clonar($nuevos_datos, $dir_subclases = false, $con_transaccion = true)
 {
     $campos_extra = array('fuente_datos', 'fuente_datos_proyecto');
     //-- Cargo el DR asociado
     $id_dr = toba_info_editores::get_dr_de_clase('toba_item');
     $componente = array('proyecto' => $id_dr[0], 'componente' => $id_dr[1]);
     $dr = toba_constructor::get_runtime($componente);
     $dr->inicializar();
     $dr->cargar(array('proyecto' => $this->proyecto, 'item' => $this->id));
     foreach ($nuevos_datos as $campo => $valor) {
         if ($campo == 'anexo_nombre') {
             $campo = 'nombre';
             $valor = $valor . $dr->tabla('base')->get_fila_columna(0, $campo);
         }
         if (!in_array($campo, $campos_extra)) {
             $dr->tabla('base')->set_fila_columna_valor(0, $campo, $valor);
         }
     }
     //Se le fuerza una inserción a los datos_tabla
     //Como la clave de los objetos son secuencias, esto garantiza claves nuevas
     $dr->forzar_insercion();
     $dr->persistidor()->desactivar_transaccion();
     if ($con_transaccion) {
         abrir_transaccion('instancia');
     }
     if (isset($nuevos_datos['fuente_datos'])) {
         $dr->tabla('permisos_tablas')->set_columna_valor('fuente_datos', $nuevos_datos['fuente_datos']);
     }
     //--- Se clonan los hijos y se agregan como dependencias
     $dr->tabla('objetos')->eliminar_filas();
     $i = 0;
     foreach ($this->subelementos as $hijo) {
         //-- Si se especifico un proyecto, se propaga
         $datos_objeto = array();
         if (isset($nuevos_datos['proyecto'])) {
             $datos_objeto['proyecto'] = $nuevos_datos['proyecto'];
         }
         //-- Si se especifica un anexo de nombre, se propaga
         if (isset($nuevos_datos['anexo_nombre'])) {
             $datos_objeto['anexo_nombre'] = $nuevos_datos['anexo_nombre'];
         }
         //-- La fuente tambien se propaga
         if (isset($nuevos_datos['fuente_datos_proyecto'])) {
             $datos_objeto['fuente_datos_proyecto'] = $nuevos_datos['fuente_datos_proyecto'];
         }
         if (isset($nuevos_datos['fuente_datos'])) {
             $datos_objeto['fuente_datos'] = $nuevos_datos['fuente_datos'];
         }
         //-- Punto de montaje tambien se propaga
         if (isset($nuevos_datos['punto_montaje'])) {
             $datos_objeto['punto_montaje'] = $nuevos_datos['punto_montaje'];
         }
         $nuevo_hijo = $hijo->clonar($datos_objeto, $dir_subclases, false);
         $fila = array('objeto' => $nuevo_hijo['componente'], 'proyecto' => $nuevo_hijo['proyecto'], 'orden' => $i);
         $dr->tabla('objetos')->nueva_fila($fila);
         $i++;
     }
     //--- GRABA
     $dr->sincronizar();
     if ($con_transaccion) {
         cerrar_transaccion('instancia');
     }
     //Se busca la clave del nuevo objeto
     $clave = $dr->tabla('base')->get_clave_valor(0);
     $clave['componente'] = $clave['item'];
     return $clave;
 }
Beispiel #16
0
 function confirmar_acciones($tabla_nombre)
 {
     //Creo el datos relacion para editar la tabla.
     $id = toba_info_editores::get_dr_de_clase('toba_datos_tabla');
     $componente = array('proyecto' => $id[0], 'componente' => $id[1]);
     $dr_sincro = toba_constructor::get_runtime($componente);
     $dr_sincro->inicializar();
     //Veo donde esta la tabla
     if (isset($this->_tablas_actualizables[$tabla_nombre])) {
         //Tengo que actualizar el DT
         $id_dt = $this->get_id_objeto($tabla_nombre);
         $dr_sincro->cargar(array('proyecto' => $this->_proyecto, 'objeto' => $id_dt));
         $dr_sincro->actualizar_campos();
         $dr_sincro->tabla('prop_basicas')->set_fila_columna_valor(0, 'esquema', $this->_tabla_x_schema[$tabla_nombre]);
         //Aca aun falta quitar las columnas
         if (isset($this->_tablas_actualizables[$tabla_nombre]['B'])) {
             foreach (array_keys($this->_tablas_actualizables[$tabla_nombre]['B']) as $borrable) {
                 $id_interno = $dr_sincro->tabla('columnas')->get_id_fila_condicion(array('columna' => $borrable));
                 $dr_sincro->tabla('columnas')->eliminar_fila(current($id_interno));
             }
         }
     } else {
         //Es un DT nuevo
         $pms_proyecto = toba_info_editores::get_pms(toba_editor::get_proyecto_cargado());
         $pm_default = current($pms_proyecto);
         $datos = array('nombre' => $tabla_nombre, 'proyecto' => $this->_proyecto, 'clase_proyecto' => 'toba', 'clase' => 'toba_datos_tabla', 'fuente_datos_proyecto' => $this->_proyecto, 'fuente_datos' => $this->_fuente, 'punto_montaje' => $pm_default['id']);
         $dr_sincro->tabla('base')->set($datos);
         $dr_sincro->tabla('prop_basicas')->set(array('ap' => 1, 'permite_actualizacion_automatica' => '1', 'punto_montaje' => $pm_default['id']));
         $dr_sincro->tabla('prop_basicas')->set_fila_columna_valor(0, 'tabla', $tabla_nombre);
         $dr_sincro->tabla('prop_basicas')->set_fila_columna_valor(0, 'esquema', $this->_tabla_x_schema[$tabla_nombre]);
         $columnas = $this->get_columnas_base($tabla_nombre);
         foreach ($columnas as $col) {
             $datos_col = array();
             $datos_col['columna'] = $col['nombre'];
             $datos_col['no_nulo_db'] = (int) $col['not_null'];
             $datos_col['pk'] = (int) $col['pk'];
             $datos_col['tipo'] = $col['tipo'];
             if ($col['secuencia'] != '') {
                 $datos_col['secuencia'] = $col['secuencia'];
             }
             if ($col['tipo'] == 'C' && $col['longitud'] > 0) {
                 $datos_col['largo'] = $col['longitud'];
             }
             $dr_sincro->tabla('columnas')->nueva_fila($datos_col);
         }
     }
     $dr_sincro->sincronizar();
     unset($dr_sincro);
 }