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();
 }
Beispiel #2
0
 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();
 }
Beispiel #3
0
 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');
 }
Beispiel #4
0
 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();
 }
Beispiel #5
0
 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);
 }
Beispiel #6
0
 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);
     }
 }
Beispiel #7
0
 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 __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();
 }
 function __wakeup()
 {
     foreach ($this->_propiedades_toba as $tipo => $props) {
         foreach ($props as $prop) {
             if ($tipo == 'componente') {
                 $valor = $this->{$prop};
                 $id = array('componente' => $valor[1], 'proyecto' => $valor[0]);
                 $this->{$prop} = toba_constructor::buscar_runtime($id);
             }
         }
     }
 }
Beispiel #11
0
 /**
  * 	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();
 }
 /**
  *	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);
 }
Beispiel #13
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();
 }
Beispiel #14
0
 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;
 }
Beispiel #15
0
 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');
 }
Beispiel #16
0
 function pre_run()
 {
     toba_constructor::set_refresco_forzado(true);
 }
Beispiel #17
0
 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;
 }
Beispiel #18
0
 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;
     }
 }
Beispiel #19
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 #20
0
 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']);
 }
Beispiel #21
0
 function get_dr()
 {
     $dr = toba_constructor::get_runtime(array('proyecto' => 'toba_testing', 'componente' => '1516'), 'toba_datos_relacion');
     $dr->inicializar();
     return $dr;
 }
Beispiel #22
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 #23
0
 function evt__form_nombre__modificacion($datos)
 {
     $this->s__datos_nombre = $datos;
     //-- Sincroniza el cambio con la base
     $path_relativo = $this->get_path_relativo();
     if ($path_relativo != '') {
         $path_relativo .= '/';
     }
     $datos['subclase_archivo'] = $path_relativo . $this->s__datos_nombre['nombre'] . '.php';
     $pm = $this->recuperar_punto_montaje();
     $this->get_metaclase()->set_subclase($this->s__datos_nombre['nombre'], $datos['subclase_archivo'], $pm->get_id());
     toba_constructor::set_refresco_forzado(true);
 }
Beispiel #24
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 #25
0
 /**
  * Fuerza a que todos los componentes requeridos en este pedido de página no surjan de algún cache (util para testeos)
  */
 static function set_refresco_forzado($refrescar)
 {
     self::$refresco_forzado = $refrescar;
 }
 function __wakeup()
 {
     $id = array('componente' => $this->id_ci[1], 'proyecto' => $this->id_ci[0]);
     $this->ci = toba_constructor::buscar_runtime($id);
 }
Beispiel #27
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 #28
0
 /**
  * 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 #29
0
 /**
  *	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 procesar()
 {
     toba::logger_ws()->debug('Servicio Llamado: ' . $this->info['basica']['item']);
     toba::logger_ws()->set_checkpoint();
     set_error_handler('toba_logger_ws::manejador_errores_recuperables', E_ALL);
     $this->validar_componente();
     //-- Pide los datos para construir el componente, WSF no soporta entregar objetos creados
     $clave = array();
     $clave['proyecto'] = $this->info['objetos'][0]['objeto_proyecto'];
     $clave['componente'] = $this->info['objetos'][0]['objeto'];
     list($tipo, $clase, $datos) = toba_constructor::get_runtime_clase_y_datos($clave, $this->info['objetos'][0]['clase'], false);
     agregar_dir_include_path(toba_dir() . '/php/3ros/wsf');
     $opciones_extension = toba_servicio_web::_get_opciones($this->info['basica']['item'], $clase);
     $wsdl = strpos($_SERVER['REQUEST_URI'], "?wsdl") !== false;
     $sufijo = 'op__';
     $metodos = array();
     $reflexion = new ReflectionClass($clase);
     foreach ($reflexion->getMethods() as $metodo) {
         if (strpos($metodo->name, $sufijo) === 0) {
             $servicio = substr($metodo->name, strlen($sufijo));
             $prefijo = $wsdl ? '' : '_';
             $metodos[$servicio] = $prefijo . $metodo->name;
         }
     }
     $opciones = array();
     $opciones['serviceName'] = $this->info['basica']['item'];
     $opciones['classes'][$clase]['operations'] = $metodos;
     $opciones = array_merge($opciones, $opciones_extension);
     $this->log->debug("Opciones del servidor: " . var_export($opciones, true), 'toba');
     $opciones['classes'][$clase]['args'] = array($datos);
     toba::logger_ws()->set_checkpoint();
     $service = new WSService($opciones);
     $service->reply();
     $this->log->debug("Fin de servicio web", 'toba');
 }