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); } }
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; }