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(); }
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); } } }
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; }
function get_dr() { $dr = toba_constructor::get_runtime(array('proyecto' => 'toba_testing', 'componente' => '1516'), 'toba_datos_relacion'); $dr->inicializar(); return $dr; }
/** * 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); }
/** * 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; }
/** * 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; } }
function get_dt() { $dt = toba_constructor::get_runtime(array('proyecto' => 'toba_testing', 'componente' => '1746'), 'toba_datos_tabla'); $dt->inicializar(); return $dt; }
/** * 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); }
/** * 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; }
/** * 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; }
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); }