Exemplo n.º 1
0
 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;
 }