/** * @return toba_componente_info */ function get_metaclase() { //-- Acceso a un SUBCOMPONENTE if (isset($this->s__subcomponente)) { //Cargue un subcomponente en un request anterior. $subcomponente = $this->s__subcomponente; } else { $subcomponente = toba::memoria()->get_parametro('subcomponente'); } if (!is_null($this->s__tipo_elemento) && $this->s__tipo_elemento != '') { //Busco el info correspondiente al elemento transversal $nombre_info = 'toba_' . $this->s__tipo_elemento . '_info'; $info = new $nombre_info($this->s__id_componente); } else { $info = toba_constructor::get_info($this->s__id_componente); } if (isset($subcomponente)) { $info = $info->get_metaclase_subcomponente($subcomponente); //Para pantallas if ($info) { $this->s__subcomponente = $subcomponente; } else { throw new toba_error('ERROR cargando el SUBCOMPONENTE: No es posible acceder a la definicion del mismo.'); } } if (isset($this->s__subclase_orig)) { $info->cambiar_clase_origen($this->s__subclase_orig); } return $info; }
function generar_html_barra_vinculos() { if ($this->editable_info['molde'] || $this->editable_info['componentes'] == 0) { $vinculo = toba::vinculador()->get_url(toba_editor::get_id(), 1000110, null, array('zona' => true, 'validar' => false, 'menu' => 1)); echo '<a href="' . $vinculo . '">' . toba_recurso::imagen_toba('wizard.png', true, null, null, 'Asistente para la generación de Operaciones'); if ($this->editable_info['molde']) { echo $this->editable_info['molde_tipo_operacion_nombre']; } echo "</a>\n"; } //Acceso al EDITOR PHP if ($this->editable_info['actividad_accion'] != '') { $componente = $this->get_editable(); $id = array('proyecto' => $componente[0], 'componente' => $componente[1]); $info = toba_constructor::get_info($id, 'toba_item'); // Ir al editor $ver = $info->get_utileria_editor_ver_php(); echo "<a href='" . $ver['vinculo'] . "'>" . toba_recurso::imagen($ver['imagen'], null, null, $ver['ayuda']) . "</a>\n"; // Apertura del archivo if (admin_util::existe_archivo_subclase($this->editable_info['actividad_accion'])) { $abrir = $info->get_utileria_editor_abrir_php(); echo '<a href="' . $abrir['vinculo'] . '">' . toba_recurso::imagen($abrir['imagen'], null, null, $abrir['ayuda']) . "</a>\n"; } } parent::generar_html_barra_vinculos(); }
protected function generar_elementos($id_item) { //--- Carga el item acual $item = new toba_item_molde($this); $item->cargar($id_item); //--- Clona el ci actual $datos_destino = $this->dr_molde->tabla('molde')->get(); $datos_origen = $this->dr_molde->tabla('base')->get(); $id_origen = array(); $id_origen['proyecto'] = $datos_origen['origen_proyecto']; $id_origen['componente'] = $datos_origen['origen_item']; $item_origen = toba_constructor::get_info($id_origen, 'toba_item'); $opciones = array(); $opciones['proyecto'] = $this->id_molde_proyecto; $opciones['fuente_datos'] = $datos_destino['fuente']; $opciones['fuente_datos_proyecto'] = $this->id_molde_proyecto; if (isset($datos_destino['punto_montaje'])) { $opciones['punto_montaje'] = $datos_destino['punto_montaje']; $item->set_punto_montaje($datos_destino['punto_montaje']); } foreach ($item_origen->get_hijos() as $hijo) { $id_nuevo_hijo = $hijo->clonar($opciones, $datos_destino['carpeta_archivos'], false); $item->asociar_objeto($id_nuevo_hijo['componente']); } //-- Genera el item $item->generar(); $this->generar_archivos_consultas(); $this->guardar_log_elementos_generados(); }
function probar_item($id, $anexo, $clonar_archivos = false) { $info = toba_constructor::get_info(array('componente' => $id, 'proyecto' => 'toba_testing'), 'toba_item'); $clon = $info->clonar($anexo, $clonar_archivos, false); $this->assertTrue(is_numeric($clon['item'])); $this->assertNotEqual($clon['item'], $id); //--- Verificación return toba_constructor::get_info(array('proyecto' => $clon['proyecto'], 'componente' => $clon['item']), 'toba_item'); }
function test_eventos_ci_con_dependencias() { //Un formulario como dependencia que no tiene el 'baja' entre los predefinidos $predefinidos = array('evt__formulario__carga', 'evt__formulario__alta', 'evt__formulario__modificacion', 'evt__formulario__cancelar', 'evt__cuadro__carga', 'evt__cuadro__seleccion', 'evt__filtro__filtrar', 'evt__filtro__cancelar'); $desconocidos = array('evt__formulario__observar', 'evt__formulario__baja', 'evt__cuadro__baja'); $sospechosos = array('evt__formulario___otro', 'evt__formulario_alta', 'evt__filtro_cantar'); $et_ci = toba_constructor::get_info(array('proyecto' => 'toba_testing', 'componente' => 1323)); $this->asertar_eventos($et_ci, $predefinidos, array(), $desconocidos, $sospechosos); }
static function redireccionar_a_editor_objeto($proyecto, $objeto) { $clave = array('componente' => $objeto, 'proyecto' => $proyecto); $vinculo = toba_constructor::get_info($clave)->vinculo_editor(); admin_util::refrescar_editor_item(); echo toba_js::abrir(); echo "window.location.href='{$vinculo}'\n"; echo toba_js::cerrar(); }
function cargar($opciones, $id_item_inicial = null, $incluidos_forzados = array()) { if (!isset($id_item_inicial)) { $id_item_inicial = toba_info_editores::get_item_raiz($this->proyecto); } $en_profundidad = $this->debe_cargar_en_profundidad($id_item_inicial, $opciones); $filtro_items = ""; if (!$this->debe_cargar_todo($opciones) || $en_profundidad) { //--- Se dejan solo los items del primer nivel, excepto que este en las excepciones if (isset($id_item_inicial)) { $id_item_sano = toba_contexto_info::get_db()->quote($id_item_inicial); $filtro_padre = "(i.padre = {$id_item_sano} OR i.item= {$id_item_sano})"; //OR i.padre IN (SELECT item FROM apex_item WHERE padre='$id_item_inicial'))"; } if (!empty($incluidos_forzados) && !$en_profundidad) { $forzados = implode("', '", $incluidos_forzados); $filtro_incluidos = "( i.padre IN ('" . $forzados . "')"; $filtro_incluidos .= " OR i.item IN ('" . $forzados . "') )"; } if (isset($filtro_padre) && isset($filtro_incluidos)) { $filtro_items = "\tAND ({$filtro_padre} \n\t\t\t\t\t\t\t\t\t\tOR \n\t\t\t\t\t\t\t\t\t{$filtro_incluidos})\n\t\t\t\t\t"; } elseif (isset($filtro_padre)) { $filtro_items = "\tAND {$filtro_padre} "; } elseif (isset($filtro_incluidos)) { $filtro_items = "\tAND {$filtro_incluidos} "; } } if (isset($opciones['solo_carpetas']) && $opciones['solo_carpetas'] == 1) { $filtro_items .= "\tAND i.carpeta = 1"; } //-- Se utiliza como sql básica aquella que brinda la definición de un componente toba_item_def::set_db(toba_contexto_info::get_db()); $sql_base = toba_item_def::get_vista_extendida($this->proyecto); $sql = sql_concatenar_where($sql_base['basica']['sql'], array(" (i.solicitud_tipo IS NULL OR i.solicitud_tipo <> 'fantasma')" . $filtro_items)); $sql = sql_agregar_ordenamiento($sql, array(array('i.carpeta', 'asc'), array('i.orden', 'asc'), array('i.nombre', 'asc'))); $rs = toba_contexto_info::get_db()->consultar($sql); $this->items = array(); if (!empty($rs)) { foreach ($rs as $fila) { $id = array(); $id['componente'] = $fila['item']; $id['proyecto'] = $fila['item_proyecto']; $datos = array('basica' => $fila); if ($en_profundidad) { $info = toba_constructor::get_info($id, 'toba_item', true, null, true, true); } else { $info = toba_constructor::get_info($id, 'toba_item', false, $datos); } $this->items[$fila['item']] = $info; } $this->carpeta_inicial = $id_item_inicial; $this->mensaje = ""; $this->ordenar(); $this->filtrar($opciones); } }
/** * Crea una rama de items comenzando por la raiz * Al asumir que los niveles son pocos se hace una consulta por nivel * Quedan cargado en el objeto los ancestros de la rama */ function cargar_rama() { $item_ancestro = $this; while (!$item_ancestro->es_raiz()) { $id = array('componente' => $item_ancestro->get_id_padre(), 'proyecto' => $item_ancestro->get_proyecto()); $nodo = toba_constructor::get_info($id, 'toba_item', false); $item_ancestro->set_padre($nodo); $item_ancestro = $nodo; } }
function test_otorgar_permiso() { //Se carga un item sin permisos $item = toba_constructor::get_info(array('proyecto' => 'toba_testing', 'componente' => 1000221), 'toba_item'); //Se le asigna permisos al documentador en el proyecto de testing $item->otorgar_permiso('documentacion'); //Se vuelve a cargar debe tener permisos de documentador $item = toba_constructor::get_info(array('proyecto' => 'toba_testing', 'componente' => 1000221), 'toba_item'); $this->AssertEqual(count($item->grupos_acceso()), 1, 'Debe haber sólo 1 grupo (%s)'); $this->AssertTrue($item->grupo_tiene_permiso('documentacion'), 'Documentacion tiene derechos sobre el item'); }
function probar_objeto($id) { $nuevo_nombre = "Objeto Clonado"; $nuevos_datos = array('nombre' => $nuevo_nombre); $info = toba_constructor::get_info(array('componente' => $id, 'proyecto' => 'toba_testing')); $clon = $info->clonar($nuevos_datos, false); //--- Verificación $meta_objeto = toba_constructor::get_info(array('proyecto' => $clon['proyecto'], 'componente' => $clon['objeto'])); $this->assertEqual($nuevo_nombre, $meta_objeto->get_nombre_largo()); $this->assertTrue(is_numeric($clon['objeto'])); $this->assertNotEqual($clon['objeto'], $id); }
function cargar_dependencias() { //Si hay objetos asociados... if (isset($this->datos['_info_dependencias']) && count($this->datos['_info_dependencias']) > 0) { for ($a = 0; $a < count($this->datos['_info_dependencias']); $a++) { $clave['proyecto'] = $this->datos['_info_dependencias'][$a]['proyecto']; $clave['componente'] = $this->datos['_info_dependencias'][$a]['objeto']; $tipo = $this->datos['_info_dependencias'][$a]['clase']; $this->subelementos[$a] = toba_constructor::get_info($clave, $tipo, $this->carga_profundidad, null, true, $this->datos_resumidos); $this->subelementos[$a]->set_consumidor($this, $this->datos['_info_dependencias'][$a]); } } }
/** * Se le asigna un objeto a una pantalla de un ci que ya tenia un objeto */ function test_asignar_a_pantalla_ci_con_objetos_previos() { //Setup, se le asigna a una pantalla que ya tiene un objeto $ci_destino = array('tipo' => 'toba_ci_pantalla', 'objeto' => '1605', 'proyecto' => 'toba_testing', 'id_dependencia' => 'el_ci', 'pantalla' => '960'); //Test $asignador = new asignador_objetos($this->objeto_creado, $ci_destino); $asignador->asignar(); //Validacion $obj = toba_constructor::get_info(array('proyecto' => 'toba_testing', 'componente' => '1605'), 'toba_ci'); $hijos = $obj->get_hijos(); $this->assertEqual(count($obj->get_hijos()), 2); //Tiene dos pantallas $pantalla = $hijos[0]; $this->assertEqual($pantalla->get_id(), 'pantalla1'); $this->assertEqual(count($pantalla->get_hijos()), 2); }
function get_hijos() { // Un CN que esta asociado no muestra recursivamente sus asociaciones (puede haber relaciones circulares) // El codigo se pone aca porque tiene que ser ejecutado despues del constructor para que el flag tenga efecto // ... y esta es la unica ventana cuya ejecucion esta garantizada if (!$this->cn_asociado) { if (isset($this->datos['_info_consumo']) && count($this->datos['_info_consumo']) > 0) { $cantidad_subelementos = count($this->subelementos); for ($a = 0; $a < count($this->datos['_info_consumo']); $a++) { $clave['proyecto'] = $this->datos['_info_consumo'][$a]['proyecto']; $clave['componente'] = $this->datos['_info_consumo'][$a]['objeto']; $tipo = $this->datos['_info_consumo'][$a]['clase']; $id = $cantidad_subelementos + $a; $this->subelementos[$id] = toba_constructor::get_info($clave, $tipo, $this->carga_profundidad, null, true, $this->datos_resumidos); $this->subelementos[$id]->set_consumidor($this, $this->datos['_info_consumo'][$a]); $this->subelementos[$id]->set_asociado(); } } } return $this->subelementos; }
function evt__procesar() { list($proyecto_actual, $item_actual) = toba::zona()->get_editable(); $id = array('proyecto' => $proyecto_actual, 'componente' => $item_actual); $info_item = toba_constructor::get_info($id, 'toba_item'); $directorio = false; if ($this->opciones['con_subclases']) { $directorio = $this->opciones['carpeta_subclases']; } $nuevos_datos = array(); $nuevos_datos['proyecto'] = $this->opciones['proyecto']; $nuevos_datos['padre_proyecto'] = $this->opciones['proyecto']; $nuevos_datos['padre'] = $this->opciones['carpeta']; $nuevos_datos['punto_montaje'] = $this->opciones['punto_montaje']; $nuevos_datos['pagina_tipo_proyecto'] = $this->opciones['pagina_tipo_proyecto']; $nuevos_datos['pagina_tipo'] = $this->opciones['pagina_tipo']; if (isset($this->opciones['anexo'])) { $nuevos_datos['anexo_nombre'] = $this->opciones['anexo']; } $nuevos_datos['fuente_datos'] = $this->opciones['fuente']; $nuevos_datos['fuente_datos_proyecto'] = $this->opciones['proyecto']; $info_item->clonar($nuevos_datos, $directorio); toba::notificacion()->info('Clonado OK'); }
function post_eventos() { if ($this->disparar_importacion_columnas) { if (isset($this->s__importacion_cols['datos_tabla'])) { $clave = array('proyecto' => toba_editor::get_proyecto_cargado(), 'componente' => $this->s__importacion_cols['datos_tabla']); $dt = toba_constructor::get_info($clave, 'toba_datos_tabla'); $this->s__importacion_cols = $dt->exportar_datos_columnas($this->s__importacion_cols['pk']); //ei_arbol($this->s__importacion_cols); $cols = $this->get_entidad()->tabla('columnas'); foreach ($this->s__importacion_cols as $col) { try { $cols->nueva_fila($col); } catch (toba_error $e) { toba::notificacion()->agregar("Error agregando la columna '{$col['clave']}'. " . $e->getMessage()); } } } $this->disparar_importacion_columnas = false; } }
function evt__procesar() { abrir_transaccion('instancia'); $directorio = false; if ($this->datos['con_subclases']) { $directorio = $this->datos['carpeta_subclases']; } list($proyecto_actual, $comp_actual) = toba::zona()->get_editable(); $id = array('proyecto' => $proyecto_actual, 'componente' => $comp_actual); $info = toba_constructor::get_info($id, null, $this->datos['profundidad']); $nuevos_datos = array('anexo_nombre' => $this->datos['anexo_nombre']); $clon = $info->clonar($nuevos_datos, $directorio, false); //--- Asignación if (isset($this->destino)) { $asignador = new asignador_objetos($clon, $this->destino); $asignador->asignar(); } cerrar_transaccion('instancia'); admin_util::redireccionar_a_editor_objeto($clon['proyecto'], $clon['objeto']); }
/** * 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; }
/** * La importacion se ejecuta al final asi se procesa despues de manipular el ML de Efs */ function post_eventos() { if ($this->disparar_importacion_efs) { if (isset($this->s__importacion_efs['datos_tabla'])) { $clave = array('proyecto' => toba_editor::get_proyecto_cargado(), 'componente' => $this->s__importacion_efs['datos_tabla']); $dt = toba_constructor::get_info($clave, 'toba_datos_tabla'); $this->s__importacion_efs = $dt->exportar_datos_efs($this->s__importacion_efs['pk']); foreach ($this->s__importacion_efs as $ef) { try { if (!$this->get_tabla()->existe_fila_condicion(array($this->campo_clave => $ef[$this->campo_clave]))) { $this->get_tabla()->nueva_fila($ef); } } catch (toba_error $e) { toba::notificacion()->agregar("Error agregando el EF '{$ef[$this->campo_clave]}'. " . $e->getMessage()); } } } $this->disparar_importacion_efs = false; } }
function get_nombre_destino() { $clave = array('componente' => $this->destino['objeto'], 'proyecto' => $this->destino['proyecto']); $nombre = ''; if (isset($this->destino)) { switch ($this->destino['tipo']) { case 'toba_item': case 'toba_ci': case 'toba_datos_relacion': $info = toba_constructor::get_info($clave, $this->destino['tipo'], false); $nombre .= $info->get_nombre_corto(); break; case 'toba_ci_pantalla': //--- Si es una pantalla el info_ci se carga en profunidad para traer el nombre de la misma $info = toba_constructor::get_info($clave, 'toba_ci', true); $nombre .= $info->get_nombre_corto(); break; } } return $nombre; }
$this->registrar_parametros(); if (!isset($this->parametros['-orig_proy'])) { throw new toba_error('El parámetro -orig_proy es obligatorio'); } if (!isset($this->parametros['-orig_item'])) { throw new toba_error('El parámetro -orig_item es obligatorio'); } if (!isset($this->parametros['-dest_proy'])) { throw new toba_error('El parámetro -dest_proy es obligatorio'); } if (!isset($this->parametros['-dest_padre'])) { throw new toba_error('El parámetro -dest_padre es obligatorio'); } if (!isset($this->parametros['-dest_fuente'])) { throw new toba_error('El parámetro -dest_fuente es obligatorio'); } $id = array('proyecto' => $this->parametros['-orig_proy'], 'componente' => $this->parametros['-orig_item']); $info_item = toba_constructor::get_info($id, 'toba_item'); $nuevos_datos = array(); $nuevos_datos['proyecto'] = $this->parametros['-dest_proy']; $nuevos_datos['padre_proyecto'] = $nuevos_datos['proyecto']; $nuevos_datos['padre'] = $this->parametros['-dest_padre']; if (isset($this->parametros['-dest_anexo'])) { $nuevos_datos['anexo_nombre'] = $this->parametros['-dest_anexo']; } $nuevos_datos['fuente_datos'] = $this->parametros['-dest_fuente']; $nuevos_datos['fuente_datos_proyecto'] = $nuevos_datos['proyecto']; $directorio = isset($this->parametros['-dest_dir']) ? $this->parametros['-dest_dir'] : false; $clave = $info_item->clonar($nuevos_datos, $directorio); echo $clave['componente'];
/** * @todo Cuando los toba_info_editores se puedan usar desde consola, cambiar la consulta manual */ function actualizar_login($pisar_anterior = false) { //--- ¿Existe el proyecto editor? if (!$this->instancia->existen_metadatos_proyecto(toba_editor::get_id())) { $msg = "No se crea la operación de login porque el proyecto editor no está cargado en la instancia"; toba_logger::instancia()->info($msg); $this->manejador_interface->error($msg); return; } // Contextualizo al nucleo en el proyecto "toba_editor" toba_nucleo::instancia()->iniciar_contexto_desde_consola($this->instancia->get_id(), toba_editor::get_id()); //--- Averiguo la fuente destino $sql = "SELECT fuente_datos, pm_contexto FROM apex_proyecto WHERE proyecto = " . quote($this->identificador); $defecto = toba::db()->consultar_fila($sql); if (empty($defecto['fuente_datos'])) { throw new toba_error("El proyecto no tiene definida una fuente de datos."); } if (empty($defecto['pm_contexto'])) { throw new toba_error("El proyecto no tiene definida un punto de montaje para el contexto."); } //--- Clonando $id = array('proyecto' => toba_editor::get_id(), 'componente' => 1000042); $info_item = toba_constructor::get_info($id, 'toba_item'); $nuevos_datos = array(); $nuevos_datos['proyecto'] = $this->identificador; $nuevos_datos['padre_proyecto'] = $this->identificador; $nuevos_datos['padre'] = toba_info_editores::get_item_raiz($this->identificador); $nuevos_datos['fuente_datos'] = $defecto['fuente_datos']; $nuevos_datos['fuente_datos_proyecto'] = $this->identificador; $nuevos_datos['punto_montaje'] = $defecto['pm_contexto']; $directorio = 'login'; $clave = $info_item->clonar($nuevos_datos, $directorio); $this->manejador_interface->progreso_fin(); //--- Actualizar el item de login $this->manejador_interface->mensaje("Actualizando el proyecto...", false); $sql = "UPDATE apex_proyecto SET item_pre_sesion='{$clave['componente']}'\n\t\t\t\tWHERE proyecto='{$this->identificador}'"; $this->get_db()->ejecutar($sql); $this->manejador_interface->progreso_fin(); //--- Borrar el item viejo if ($pisar_anterior) { $this->manejador_interface->mensaje("Aun no está implementada la eliminación desde consola"); } }
function get_objetos($opciones, $en_profundidad = false, $excluir_clases = array()) { //---Metodo de Consulta (DAO) $filtro_dao = ""; if (isset($opciones['dao']) && $opciones['dao'] != '') { $filtro_dao = $this->formar_filtro_dao($opciones['dao']); if (!isset($filtro_dao)) { return array(); } } //---Clase if (isset($opciones['clase'])) { $clases = array($opciones['clase']); } else { $clases = toba_info_editores::get_lista_tipo_componentes(); if (count($excluir_clases) > 0) { foreach (array_keys($clases) as $i) { if (in_array($clases[$i], $excluir_clases)) { unset($clases[$i]); } } } } //---ID $filtro_id = isset($opciones['id']) ? 'AND o.objeto = ' . quote($opciones['id']) : ''; //---INDICE $filtro_indice = isset($opciones['indice']) ? 'AND o.identificador = ' . quote($opciones['indice']) : ''; //----Extensiones $filtro_ext = ""; if (isset($opciones['extendidos'])) { if ($opciones['extendidos'] == 'SI') { $filtro_ext = "AND\t\to.subclase IS NOT NULL"; if (isset($opciones['subclase'])) { $sub_sana = toba_contexto_info::get_db()->quote("%{$opciones['subclase']}%"); $filtro_ext .= "\nAND o.subclase ILIKE {$sub_sana} "; } } else { $filtro_ext = "AND\t\to.subclase IS NULL"; } } //---Huerfanos $filtro_huerfano = ""; $proyecto = toba_contexto_info::get_db()->quote($this->proyecto); if (isset($opciones['huerfanos']) && $opciones['huerfanos'] == 1) { $filtro_huerfano = "AND\t\to.objeto NOT IN (SELECT objeto FROM apex_item_objeto WHERE proyecto = {$proyecto})"; $filtro_huerfano .= "AND\to.objeto NOT IN (SELECT objeto_proveedor FROM apex_objeto_dependencias WHERE proyecto = {$proyecto})"; } //---Nombre $filtro_nombre = ""; if (isset($opciones['nombre']) && $opciones['nombre'] != '') { $filtro_nombre = "AND\t\to.nombre ILIKE '%{$opciones['nombre']}%'"; } //---Tabla $filtro_tabla = ""; if (isset($opciones['tabla']) && $opciones['tabla'] != '') { $tabla_sana = toba_contexto_info::get_db()->quote("%{$opciones['tabla']}%"); $subselect = "\n\t\t\t\tSELECT \n\t\t\t\t\tobjeto,\n\t\t\t\t\tobjeto_proyecto\n\t\t\t\tFROM apex_objeto_db_registros\n\t\t\t\tWHERE \n\t\t\t\t\tobjeto_proyecto = {$proyecto}\n\t\t\t\t\tAND tabla ILIKE {$tabla_sana}"; $filtro_tabla = " AND (o.objeto, o.proyecto) IN ({$subselect})"; } //-- Se utiliza como sql básica aquella que brinda la definición de un componente toba_componente_def::set_db(toba_contexto_info::get_db()); $sql_base = toba_componente_def::get_vista_extendida($this->proyecto); $sql = $sql_base['_info']['sql']; $extras = " o.clase IN ('" . implode("', '", $clases) . "')\n\t\t\t\tAND \to.proyecto = {$proyecto}\n\t\t\t\t{$filtro_dao}\t\t\t\t\n\t\t\t\t{$filtro_id}\n\t\t\t\t{$filtro_indice}\n\t\t\t\t{$filtro_ext}\n\t\t\t\t{$filtro_huerfano}\n\t\t\t\t{$filtro_nombre}\n\t\t\t\t{$filtro_tabla}\n\t\t"; $sql = sql_concatenar_where($sql, array($extras)); $sql = sql_agregar_ordenamiento($sql, array(array('o.nombre', 'asc'))); //--- Recorrido toba_componente_def::set_db(toba_contexto_info::get_db()); $datos = toba_contexto_info::get_db()->consultar($sql); $this->objetos = array(); foreach ($datos as $dato) { $agregar = true; if (isset($opciones['extensiones_rotas']) && $opciones['extensiones_rotas'] == 1) { $agregar = $this->tiene_extension_rota($dato); } if ($agregar) { $clave = array('componente' => $dato['objeto'], 'proyecto' => $this->proyecto); if (!$en_profundidad) { $info = toba_constructor::get_info($clave, $dato['clase'], false, array('_info' => $dato)); } else { $info = toba_constructor::get_info($clave, $dato['clase'], true, null, true); } if (isset($this->explicaciones[$dato['objeto']])) { $explicacion = implode("<hr />", $this->explicaciones[$dato['objeto']]); $info->set_info_extra($explicacion); } $this->objetos[] = $info; } } return $this->objetos; }