From 506684c298f224993837cf8303eb856b21004295 Mon Sep 17 00:00:00 2001 From: Frederico Camargo Date: Wed, 17 Dec 2025 11:45:39 -0300 Subject: [PATCH 01/20] =?UTF-8?q?FDP-589=20Preservar=20a=20extens=C3=A3o?= =?UTF-8?q?=20do=20arquivo=20original=20do=20tipo=20imagem=20salvo=20em=20?= =?UTF-8?q?disco=20quando=20do=20upload=20de=20representantes=20digitais?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/system/objeto_base.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/lib/system/objeto_base.php b/src/lib/system/objeto_base.php index a886e46..3171ac0 100755 --- a/src/lib/system/objeto_base.php +++ b/src/lib/system/objeto_base.php @@ -3257,7 +3257,7 @@ public function ler_representantes_digitais($pn_codigo, $pn_representante_digita $va_campos_select[] = "representante_digital.legenda as representante_digital_legenda"; $va_campos_select[] = "representante_digital.sequencia as sequencia"; $va_campos_select[] = "representante_digital.publicado_online as representante_digital_publicado_online"; - + $va_wheres_select[] = "representante_digital.recurso_sistema_codigo = (?) "; $va_tipos_parametros_select[] = "i"; $va_parametros_select[] = $this->recurso_sistema_codigo; @@ -3979,8 +3979,10 @@ public function salvar_representantes_digitais($ps_campo_nome, $pa_valores, $pa_ elseif (@getimagesize($va_arquivo["tmp_name"])) { $vs_formato = "jpg"; - $vs_novo_nome_arquivo = $vs_novo_nome_arquivo . "." . $vs_formato; + $vs_novo_nome_arquivo_original = $vs_novo_nome_arquivo . "." . pathinfo($va_arquivo["name"], PATHINFO_EXTENSION); + $vs_novo_nome_arquivo = $vs_novo_nome_arquivo . "." . $vs_formato; + $vn_imagens_processadas = 0; foreach ($va_path_arquivo_destino as $key => $value) @@ -4000,7 +4002,7 @@ public function salvar_representantes_digitais($ps_campo_nome, $pa_valores, $pa_ if ($vb_salvar_arquivo_original) { - if ($this->mover_arquivo($va_arquivo["tmp_name"], $va_pasta_images["original"] . $vs_novo_nome_arquivo)) + if ($this->mover_arquivo($va_arquivo["tmp_name"], $va_pasta_images["original"] . $vs_novo_nome_arquivo_original)) { $vn_imagens_processadas++; } From 508ee60cb434b20534e7c118b740d8e19fcd9f1b Mon Sep 17 00:00:00 2001 From: Frederico Camargo Date: Wed, 17 Dec 2025 11:46:25 -0300 Subject: [PATCH 02/20] =?UTF-8?q?FDP-588=20Alterar=20fun=C3=A7=C3=B5es=20d?= =?UTF-8?q?e=20download=20de=20representantes=20digitais=20para=20baixar?= =?UTF-8?q?=20a=20vers=C3=A3o=20original=20do=20arquivo,=20se=20ela=20exis?= =?UTF-8?q?tir?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../campo_representantes_digitais.php | 7 +++- app/functions/download.php | 8 ++--- app/functions/file_handler.php | 32 ++++++++++++++++--- src/lib/system/objeto_base.php | 1 + 4 files changed, 38 insertions(+), 10 deletions(-) diff --git a/app/components/campo_representantes_digitais.php b/app/components/campo_representantes_digitais.php index 267d090..7c93842 100755 --- a/app/components/campo_representantes_digitais.php +++ b/app/components/campo_representantes_digitais.php @@ -138,7 +138,12 @@ $vs_rp_legenda = $va_valores_linha["representante_digital_legenda"] ?? ""; $vs_rd_formato = $va_valores_linha["representante_digital_formato"] ?? ""; - $vs_download_link = "functions/serve_file.php?file=" . $vs_rd_path . "&size=original&download=1&name=" . $vs_label_objeto . "-" . $vn_numero_campo; + $vs_file_extension = isset($va_valores_linha["representante_digital_nome_original"]) ? strtolower(pathinfo($va_valores_linha["representante_digital_nome_original"], PATHINFO_EXTENSION)) : strtolower(pathinfo($vs_rd_path, PATHINFO_EXTENSION)); + $vs_file_hash = pathinfo($vs_rd_path, PATHINFO_FILENAME); + + $vs_download_file = $vs_file_hash . "." . $vs_file_extension; + + $vs_download_link = "functions/serve_file.php?file=" . $vs_download_file . "&size=original&download=1&name=" . $vs_label_objeto . "-" . $vn_numero_campo; // if ($pa_parametros_campo["tipo"] == 2) // $vs_download_link .= "&folder=documents"; diff --git a/app/functions/download.php b/app/functions/download.php index 7650a90..51b5af5 100644 --- a/app/functions/download.php +++ b/app/functions/download.php @@ -55,11 +55,9 @@ foreach ($va_files as $va_rd) { $ps_size = 'original'; - if ($va_rd['representante_digital_formato'] != "pdf") - { - $ps_size = 'large'; - } - $vs_file_path = get_file_path($va_rd['representante_digital_path'], $ps_size); + + $vs_file_path = get_file_path($va_rd['representante_digital_path'], $ps_size, null, $va_rd['representante_digital_nome_original']); + if (file_exists($vs_file_path)) { $zip->addFile($vs_file_path, $vs_identificador . "-$counter." . pathinfo($vs_file_path, PATHINFO_EXTENSION)); diff --git a/app/functions/file_handler.php b/app/functions/file_handler.php index cd77dab..7d8cedf 100644 --- a/app/functions/file_handler.php +++ b/app/functions/file_handler.php @@ -1,6 +1,6 @@ Date: Thu, 18 Dec 2025 13:56:51 -0300 Subject: [PATCH 03/20] =?UTF-8?q?FDP-590=20Corrigir=20passagem=20de=20par?= =?UTF-8?q?=C3=A2metros=20quando=20a=20filtragem=20=C3=A9=20realizada=20no?= =?UTF-8?q?=20pr=C3=B3prio=20JOIN=20do=20SELECT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/system/objeto_base.php | 54 ++++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/src/lib/system/objeto_base.php b/src/lib/system/objeto_base.php index a886e46..12f3539 100755 --- a/src/lib/system/objeto_base.php +++ b/src/lib/system/objeto_base.php @@ -691,6 +691,8 @@ public function ler_numero_registros($pa_filtros_busca = null, $pa_log_info = nu $va_parametros_select = array(); $va_campos_select = array(); $va_joins_select = array(); + $va_tipos_parametros_joins = array(); + $va_parametros_joins = array(); $va_wheres_select = array(); $va_tabelas_adicionadas = array(); @@ -725,7 +727,7 @@ public function ler_numero_registros($pa_filtros_busca = null, $pa_log_info = nu } } - $this->montar_filtros_busca($va_filtros_busca, $vo_objeto, $va_joins_select, $va_wheres_select, $va_tipos_parametros_select, $va_parametros_select, $va_tabelas_adicionadas, $pb_retornar_ramos_inferiores); + $this->montar_filtros_busca($va_filtros_busca, $vo_objeto, $va_joins_select, $va_tipos_parametros_joins, $va_parametros_joins, $va_wheres_select, $va_tipos_parametros_select, $va_parametros_select, $va_tabelas_adicionadas, $pb_retornar_ramos_inferiores); $this->montar_parametros_log($pa_log_info, $vo_objeto, $va_joins_select, $va_wheres_select, $va_tipos_parametros_select, $va_parametros_select); @@ -741,7 +743,7 @@ public function ler_numero_registros($pa_filtros_busca = null, $pa_log_info = nu if (count($va_selects)) { - $va_resultado_temp = $vo_banco->consultar($va_selects, $va_tipos_parametros_select, $va_parametros_select, null, null, false); + $va_resultado_temp = $vo_banco->consultar($va_selects, array_merge($va_tipos_parametros_joins, $va_tipos_parametros_select), array_merge($va_parametros_joins, $va_parametros_select), null, null, false); foreach ($va_resultado_temp as $va_item) { foreach ($va_item as $vs_key => $vn_codigo) { @@ -892,7 +894,7 @@ private function montar_valores_busca($pa_parametro, &$pa_valores_busca = array( return $vb_tem_valor; } - private function montar_filtros_busca($pa_filtros_busca, $po_objeto, &$pa_joins_select = array(), &$pa_wheres_select = array(), &$pa_tipos_parametros_select = array(), &$pa_parametros_select = array(), &$pa_tabelas_adicionadas = array(), $pb_retornar_ramos_inferiores = true, &$pa_joins_trail = array(), $pn_primeiro_registro = 0, $pn_numero_registros = 0) + private function montar_filtros_busca($pa_filtros_busca, $po_objeto, &$pa_joins_select = array(), &$pa_tipos_parametros_joins = array(), &$pa_parametros_joins = array(), &$pa_wheres_select = array(), &$pa_tipos_parametros_select = array(), &$pa_parametros_select = array(), &$pa_tabelas_adicionadas = array(), $pb_retornar_ramos_inferiores = true, &$pa_joins_trail = array(), $pn_primeiro_registro = 0, $pn_numero_registros = 0) { if (isset($pa_filtros_busca)) { @@ -1054,7 +1056,7 @@ private function montar_filtros_busca($pa_filtros_busca, $po_objeto, &$pa_joins_ // O terceiro parâmetro vazio quer dizer que ainda não foi feito nenhum join para este filtro ///////////////////////////////////////////////////////////////////////////////////////////// - $this->montar_filtro_busca($va_filtro, $po_objeto, '', $va_valores_busca, $vs_operador, $vs_interrogacoes, $pa_joins_select, $pa_wheres_select, $pa_tipos_parametros_select, $pa_parametros_select, $pa_tabelas_adicionadas, $vs_operador_logico, $pb_retornar_ramos_inferiores, $pa_joins_trail, $pn_primeiro_registro, $pn_numero_registros); + $this->montar_filtro_busca($va_filtro, $po_objeto, '', $va_valores_busca, $vs_operador, $vs_interrogacoes, $pa_joins_select, $pa_tipos_parametros_joins, $pa_parametros_joins, $pa_wheres_select, $pa_tipos_parametros_select, $pa_parametros_select, $pa_tabelas_adicionadas, $vs_operador_logico, $pb_retornar_ramos_inferiores, $pa_joins_trail, $pn_primeiro_registro, $pn_numero_registros); } } } @@ -1062,7 +1064,7 @@ private function montar_filtros_busca($pa_filtros_busca, $po_objeto, &$pa_joins_ } } - private function montar_filtro_busca($pa_filtro, $po_objeto, $ps_ultima_tabela_filtro, $pa_valores_busca, $ps_operador, $ps_interrogacoes, &$pa_joins_select = array(), &$pa_wheres_select = array(), &$pa_tipos_parametros_select = array(), &$pa_parametros_select = array(), &$pa_tabelas_adicionadas = array(), $ps_operador_logico = 'AND', $pb_retornar_ramos_inferiores = true, &$pa_joins_trail = array(), $pn_primeiro_registro = 0, $pn_numero_registros = 0) + private function montar_filtro_busca($pa_filtro, $po_objeto, $ps_ultima_tabela_filtro, $pa_valores_busca, $ps_operador, $ps_interrogacoes, &$pa_joins_select = array(), &$pa_tipos_parametros_joins = array(), &$pa_parametros_joins = array(), &$pa_wheres_select = array(), &$pa_tipos_parametros_select = array(), &$pa_parametros_select = array(), &$pa_tabelas_adicionadas = array(), $ps_operador_logico = 'AND', $pb_retornar_ramos_inferiores = true, &$pa_joins_trail = array(), $pn_primeiro_registro = 0, $pn_numero_registros = 0) { // A partir daqui, vamos procurar o campo/atributo ao qual o filtro se refere //////////////////////////////////////////////////////////////////////////// @@ -1103,7 +1105,7 @@ private function montar_filtro_busca($pa_filtro, $po_objeto, $ps_ultima_tabela_f $vo_objeto_pai = new $po_objeto->objeto_pai($po_objeto->objeto_pai); - $this->montar_filtro_busca($va_novo_filtro, $vo_objeto_pai, $ps_ultima_tabela_filtro, $pa_valores_busca, $ps_operador, $ps_interrogacoes, $pa_joins_select, $pa_wheres_select, $pa_tipos_parametros_select, $pa_parametros_select, $pa_tabelas_adicionadas, $ps_operador_logico, $pb_retornar_ramos_inferiores, $pa_joins_trail); + $this->montar_filtro_busca($va_novo_filtro, $vo_objeto_pai, $ps_ultima_tabela_filtro, $pa_valores_busca, $ps_operador, $ps_interrogacoes, $pa_joins_select, $pa_tipos_parametros_joins, $pa_parametros_joins, $pa_wheres_select, $pa_tipos_parametros_select, $pa_parametros_select, $pa_tabelas_adicionadas, $ps_operador_logico, $pb_retornar_ramos_inferiores, $pa_joins_trail); } elseif (isset($po_objeto->atributos[$va_filtro[0]]) || isset($po_objeto->chave_primaria[$va_filtro[0]])) { @@ -1400,8 +1402,8 @@ private function montar_filtro_busca($pa_filtro, $po_objeto, $ps_ultima_tabela_f foreach ($va_valores_busca as $va_valor_busca) { - $pa_parametros_select[] = $va_valor_busca; - $pa_tipos_parametros_select[] = "i"; + $pa_parametros_joins[] = $va_valor_busca; + $pa_tipos_parametros_joins[] = "i"; } } } @@ -1435,7 +1437,7 @@ private function montar_filtro_busca($pa_filtro, $po_objeto, $ps_ultima_tabela_f } } - $this->montar_filtro_busca($va_novo_filtro, $vo_objeto_relacionamento, $vs_ultima_tabela_filtro, $pa_valores_busca, $ps_operador, $ps_interrogacoes, $pa_joins_select, $pa_wheres_select, $pa_tipos_parametros_select, $pa_parametros_select, $pa_tabelas_adicionadas, $ps_operador_logico, $pb_retornar_ramos_inferiores, $pa_joins_trail); + $this->montar_filtro_busca($va_novo_filtro, $vo_objeto_relacionamento, $vs_ultima_tabela_filtro, $pa_valores_busca, $ps_operador, $ps_interrogacoes, $pa_joins_select, $pa_tipos_parametros_joins, $pa_parametros_joins, $pa_wheres_select, $pa_tipos_parametros_select, $pa_parametros_select, $pa_tabelas_adicionadas, $ps_operador_logico, $pb_retornar_ramos_inferiores, $pa_joins_trail); } } else { // Se o filtro for chave primária ou atributo da tabela do objeto, a montagem é simples @@ -1610,23 +1612,25 @@ private function montar_filtro_busca($pa_filtro, $po_objeto, $ps_ultima_tabela_f { if (isset($v_campo_relacionamento[0]) && isset($v_campo_relacionamento[1])) { - $pa_tipos_parametros_select[] = $po_objeto->relacionamentos[$va_filtro[0]]["tipos_campos_relacionamento"][$contador]; - $pa_parametros_select[] = $v_campo_relacionamento[1]; + $pa_tipos_parametros_joins[] = $po_objeto->relacionamentos[$va_filtro[0]]["tipos_campos_relacionamento"][$contador]; + $pa_parametros_joins[] = $v_campo_relacionamento[1]; + $pa_joins_select[] = " AND " . $vs_alias_tabela_join . "." . $v_campo_relacionamento[0] . " = (?)"; } } + $contador++; } - - } $vs_tabela_banco = $vs_alias_tabela_join; $vs_campo_tabela = reset($po_objeto->relacionamentos[$va_filtro[0]]["campos_relacionamento"]); + if (is_array($vs_campo_tabela)) { $vs_campo_tabela = reset($vs_campo_tabela); } + $vs_tipo_dado_campo = reset($po_objeto->relacionamentos[$va_filtro[0]]["tipos_campos_relacionamento"]); } @@ -1922,8 +1926,10 @@ public function ler_lista($pa_filtros_busca = null, $ps_visualizacao = "lista", $va_resultado = array(); $va_selects = array(); - $va_tipos_parametros_select = array(); - $va_parametros_select = array(); + + $va_tipos_parametros_unificados = array(); + $va_parametros_unificados = array(); + $va_order_by = array(); $va_group_by = array(); @@ -1977,6 +1983,11 @@ public function ler_lista($pa_filtros_busca = null, $ps_visualizacao = "lista", $va_joins_select = array(); $va_wheres_select = array(); + $va_tipos_parametros_joins = array(); + $va_parametros_joins = array(); + $va_tipos_parametros_select = array(); + $va_parametros_select = array(); + $va_tabelas_adicionadas = array(); $va_tabelas_adicionadas[$vs_tabela_banco][] = $vs_tabela_banco; @@ -2120,7 +2131,7 @@ public function ler_lista($pa_filtros_busca = null, $ps_visualizacao = "lista", } } - $this->montar_filtros_busca($va_filtros_busca, $vo_objeto, $va_joins_select, $va_wheres_select, $va_tipos_parametros_select, $va_parametros_select, $va_tabelas_adicionadas, $pb_retornar_ramos_inferiores, $va_joins_trail, $pn_primeiro_registro, $pn_numero_registros); + $this->montar_filtros_busca($va_filtros_busca, $vo_objeto, $va_joins_select, $va_tipos_parametros_joins, $va_parametros_joins, $va_wheres_select, $va_tipos_parametros_select, $va_parametros_select, $va_tabelas_adicionadas, $pb_retornar_ramos_inferiores, $va_joins_trail, $pn_primeiro_registro, $pn_numero_registros); $this->montar_parametros_log($pa_log_info, $vo_objeto, $va_joins_select, $va_wheres_select, $va_tipos_parametros_select, $va_parametros_select); @@ -2136,6 +2147,9 @@ public function ler_lista($pa_filtros_busca = null, $ps_visualizacao = "lista", "concatenadores" => (isset($va_filtros_busca["concatenadores"]) ? $va_filtros_busca["concatenadores"] : array()) ]; + $va_tipos_parametros_unificados = array_merge($va_tipos_parametros_unificados, array_merge($va_tipos_parametros_joins, $va_tipos_parametros_select)); + $va_parametros_unificados = array_merge($va_parametros_unificados, array_merge($va_parametros_joins, $va_parametros_select)); + $contador++; } } @@ -2147,7 +2161,7 @@ public function ler_lista($pa_filtros_busca = null, $ps_visualizacao = "lista", $vs_limit = " LIMIT " . ($pn_primeiro_registro - 1) . ", " . $pn_numero_registros; $vo_banco = $this->get_banco(); - $va_resultado = $vo_banco->consultar($va_selects, $va_tipos_parametros_select, $va_parametros_select, $va_order_by, $vs_limit, true, $va_group_by); + $va_resultado = $vo_banco->consultar($va_selects, $va_tipos_parametros_unificados, $va_parametros_unificados, $va_order_by, $vs_limit, true, $va_group_by); } // Agora vamos montar o objeto pai, atributos que @@ -2422,6 +2436,8 @@ public function ler_lista_quantitativa($ps_id_relacionamento, $ps_label_objeto_r $va_campos_select = array(); $va_joins_select = array(); + $va_tipos_parametros_joins = array(); + $va_parametros_joins = array(); $va_wheres_select = array(); $vs_limit = ""; @@ -2544,7 +2560,7 @@ public function ler_lista_quantitativa($ps_id_relacionamento, $ps_label_objeto_r $va_filtros_busca[reset($va_atributo_objeto)] = $va_atributo_objeto["valor_padrao"]; } - $this->montar_filtros_busca($va_filtros_busca, $this, $va_joins_select, $va_wheres_select, $va_tipos_parametros_select, $va_parametros_select, $va_tabelas_adicionadas, $pb_retornar_ramos_inferiores); + $this->montar_filtros_busca($va_filtros_busca, $this, $va_joins_select, $va_tipos_parametros_joins, $va_parametros_joins, $va_wheres_select, $va_tipos_parametros_select, $va_parametros_select, $va_tabelas_adicionadas, $pb_retornar_ramos_inferiores); $va_group_by[] = $ps_label_objeto_relacionamento; $va_group_by[] = "Q_codigo"; @@ -2560,7 +2576,7 @@ public function ler_lista_quantitativa($ps_id_relacionamento, $ps_label_objeto_r ]; $vo_banco = $this->get_banco(); - $va_resultados = $vo_banco->consultar($va_selects, $va_tipos_parametros_select, $va_parametros_select, $va_order_by, $vs_limit, true, $va_group_by); + $va_resultados = $vo_banco->consultar($va_selects, array_merge($va_tipos_parametros_joins, $va_tipos_parametros_select), array_merge($va_parametros_joins, $va_parametros_select), $va_order_by, $vs_limit, true, $va_group_by); if ($vo_objeto_relacionamento->hierarquico) { From ed39a32fc18e1613cbddbd59846cb79daf50383e Mon Sep 17 00:00:00 2001 From: samuel Date: Fri, 19 Dec 2025 14:29:16 -0300 Subject: [PATCH 04/20] FDP-59 Adicionar mensagem no campo representantes digitais, informando necessidade de criar o registro para que ele seja exibido --- app/assets/css/style.css | 4 ++++ app/functions/montar_campos.php | 29 ++++++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/app/assets/css/style.css b/app/assets/css/style.css index ed75fd4..b0b599d 100644 --- a/app/assets/css/style.css +++ b/app/assets/css/style.css @@ -15019,4 +15019,8 @@ padding-right: 0px; display: inline-flex !important; align-items: center; justify-content: center; +} + +.fs-7 { + font-size: 0.85rem !important; } \ No newline at end of file diff --git a/app/functions/montar_campos.php b/app/functions/montar_campos.php index a1cd110..55052b4 100755 --- a/app/functions/montar_campos.php +++ b/app/functions/montar_campos.php @@ -198,6 +198,27 @@ if (isset($va_parametros_campo["foco"])) $vs_campo_foco = $va_parametros_campo["nome"]; } + elseif ($vs_campo_key == 'representante_digital_codigo' && !isset($va_campos[$vs_campo_key])) + { + echo ' +
+
+

+ + +

+
+
'; + } } if (!$vb_atualizacao_campo && ($vs_modo != "listagem") && isset($va_aba["campos"]) && count($va_aba["campos"])) @@ -209,4 +230,10 @@ $contador++; } -?> \ No newline at end of file +?> + + From cc1ec6280186c4ed65bbec42f6a76a8ebcb3edd0 Mon Sep 17 00:00:00 2001 From: samuel Date: Fri, 19 Dec 2025 14:31:08 -0300 Subject: [PATCH 05/20] FDP-40 Corrigir plural/singular da quantidade de itens no dashboard --- app/components/dashboard_estatisticas.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/dashboard_estatisticas.php b/app/components/dashboard_estatisticas.php index d436c4c..c87657b 100644 --- a/app/components/dashboard_estatisticas.php +++ b/app/components/dashboard_estatisticas.php @@ -29,7 +29,7 @@ From 1f5c3626fadbac0d130ef641b72182467b85ca0d Mon Sep 17 00:00:00 2001 From: samuel Date: Mon, 5 Jan 2026 11:37:31 -0300 Subject: [PATCH 06/20] =?UTF-8?q?FDP-588=20Alterar=20fun=C3=A7=C3=B5es=20d?= =?UTF-8?q?e=20download=20de=20representantes=20digitais=20para=20baixar?= =?UTF-8?q?=20a=20vers=C3=A3o=20original=20do=20arquivo,=20se=20ela=20exis?= =?UTF-8?q?tir?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/constants.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/config/constants.php b/config/constants.php index ee6acfa..033de9a 100644 --- a/config/constants.php +++ b/config/constants.php @@ -69,10 +69,14 @@ "assets/custom/img/logo.png" : "assets/img/favicon.png", "media_types" => [ - "image/jpeg" => [ + "image/jpg" => [ "folder" => "images", "format" => "jpg" ], + "image/jpeg" => [ + "folder" => "images", + "format" => "jpeg" + ], "image/png" => [ "folder" => "images", "format" => "png" From 44444e5c10c908a2ee2e4d1a22fe019fc94c00e1 Mon Sep 17 00:00:00 2001 From: samuel Date: Mon, 5 Jan 2026 18:06:24 -0300 Subject: [PATCH 07/20] FDP-591 Corrigir salvamento dos valores [presumido] e [sem data] dos campos datas do cadastro de material audiovisual MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (solução temporária, existe uma divergência no gênero gramatical presumido x presumida e na forma como a chave é acessada _presumido x _data_presumida) --- src/lib/html/html_date_input.php | 4 ++-- src/lib/system/objeto_base.php | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/lib/html/html_date_input.php b/src/lib/html/html_date_input.php index e71fe6e..066a1c3 100755 --- a/src/lib/html/html_date_input.php +++ b/src/lib/html/html_date_input.php @@ -91,8 +91,8 @@ public function build(&$pa_valores_form=null, $pa_parametros_campo=array()) $vb_campo_preenchido = true; } - if (isset($pa_valores_form[$pa_parametros_campo["nome"] . "_presumido" . $vs_sufixo_nome_campo])) - $vb_presumido = $pa_valores_form[$pa_parametros_campo["nome"] . "_presumido" . $vs_sufixo_nome_campo]; + if (isset($pa_valores_form[$pa_parametros_campo["nome"] . "_presumido" . $vs_sufixo_nome_campo]) || isset($pa_valores_form[$pa_parametros_campo["nome"] . "_data_presumida" . $vs_sufixo_nome_campo])) + $vb_presumido = $pa_valores_form[$pa_parametros_campo["nome"] . "_presumido" . $vs_sufixo_nome_campo] ?? $pa_valores_form[$pa_parametros_campo["nome"] . "_data_presumida" . $vs_sufixo_nome_campo]; else $vb_presumido = 0; diff --git a/src/lib/system/objeto_base.php b/src/lib/system/objeto_base.php index 7b2b07f..7a543b5 100755 --- a/src/lib/system/objeto_base.php +++ b/src/lib/system/objeto_base.php @@ -4976,8 +4976,8 @@ private function tratar_data($ps_nome_campo, $pa_atributo, $pa_valores_form) $vo_data->set_ano_final($pa_valores_form[$ps_nome_campo . "_ano_final"]); } - if (isset($pa_valores_form[$ps_nome_campo . "_presumido"])) - $vo_data->set_presumido($pa_valores_form[$ps_nome_campo . "_presumido"]); + if (isset($pa_valores_form[$ps_nome_campo . "_presumido"])|| isset($pa_valores_form[$ps_nome_campo . "_data_presumida"])) + $vo_data->set_presumido($pa_valores_form[$ps_nome_campo . "_presumido"] ?? $pa_valores_form[$ps_nome_campo . "_data_presumida"]); else $vo_data->set_presumido(0); @@ -5043,9 +5043,9 @@ private function tratar_data($ps_nome_campo, $pa_atributo, $pa_valores_form) else $vb_presumido = 0; - if (isset($pa_atributo["presumido"])) + if (isset($pa_atributo["presumido"]) || isset($pa_atributo["presumida"])) { - $this->va_campos[] = $pa_atributo["presumido"]; + $this->va_campos[] = $pa_atributo["presumido"] ?? $pa_atributo["presumida"]; $this->va_tipos_parametros[] = "i"; $this->va_parametros[] = $vb_presumido; } @@ -5635,8 +5635,8 @@ public function salvar_relacionamentos($pa_valores_form, $pn_codigo, $pn_idioma_ $vb_tem_valores_preenchidos = true; } - if (isset($pa_valores_form[$vs_campo_relacionamento . "_data_presumida" . "_" . $contador])) - $va_valores[$vs_campo_relacionamento . "_data_presumida"] = $pa_valores_form[$vs_campo_relacionamento . "_data_presumida" . "_" . $contador]; + if (isset($pa_valores_form[$vs_campo_relacionamento . "_presumida" . "_" . $contador])) + $va_valores[$vs_campo_relacionamento . "_data_presumida"] = $pa_valores_form[$vs_campo_relacionamento . "_presumida" . "_" . $contador]; if (isset($pa_valores_form[$vs_campo_relacionamento . "_sem_data" . "_" . $contador]) && $pa_valores_form[$vs_campo_relacionamento . "_sem_data" . "_" . $contador] != "") { @@ -6072,7 +6072,7 @@ public function inserir_relacionamento($ps_tabela, $pa_chave_primaria, $pn_codig foreach ($va_campos_temp as $vs_key_campo => $va_campo) { - if (is_array($va_campo)) + if (is_array($va_campo)) { $vs_campo = reset($va_campo); From 8c0e40ca4148b855e58a95eb759398288d9562f1 Mon Sep 17 00:00:00 2001 From: Frederico Camargo Date: Tue, 6 Jan 2026 14:14:41 -0300 Subject: [PATCH 08/20] =?UTF-8?q?FDP-527=20Permitir=20que=20o=20usu=C3=A1r?= =?UTF-8?q?io=20crie=20visualiza=C3=A7=C3=B5es=20com=20metadados=20selecio?= =?UTF-8?q?nados=20para=20exibi=C3=A7=C3=A3o=20nas=20telas=20de=20listagem?= =?UTF-8?q?=20e=20na=20ficha?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/functions/montar_listagem.php | 6 ++--- src/lib/system/objeto_base.php | 10 ++++++-- src/lib/system/visualizacao.php | 39 +++++++++++++------------------ 3 files changed, 27 insertions(+), 28 deletions(-) diff --git a/app/functions/montar_listagem.php b/app/functions/montar_listagem.php index 3e49395..85a3c02 100644 --- a/app/functions/montar_listagem.php +++ b/app/functions/montar_listagem.php @@ -276,13 +276,13 @@ } - if (isset($vs_label_campo_visualizacao["id_field"])) + if (!empty($vs_label_campo_visualizacao["id_field"])) $vb_id_field = true; - if (isset($vs_label_campo_visualizacao["main_field"])) + if (!empty($vs_label_campo_visualizacao["main_field"])) $vb_main_field = true; - if (isset($vs_label_campo_visualizacao["descriptive_field"])) + if (!empty($vs_label_campo_visualizacao["descriptive_field"])) $vb_descriptive_field = true; if (isset($vs_label_campo_visualizacao["label"])) diff --git a/src/lib/system/objeto_base.php b/src/lib/system/objeto_base.php index 7a543b5..7a6073f 100755 --- a/src/lib/system/objeto_base.php +++ b/src/lib/system/objeto_base.php @@ -363,7 +363,8 @@ public function get_registros_filhos() public function get_visualizacao($ps_visualizacao) { - if (intval($ps_visualizacao) && !isset($this->visualizacoes[$ps_visualizacao])) { + if (intval($ps_visualizacao) && !isset($this->visualizacoes[$ps_visualizacao])) + { $vo_visualizacao = new visualizacao; $va_visualizacao = $vo_visualizacao->ler($ps_visualizacao, "ficha"); @@ -382,7 +383,12 @@ public function get_visualizacao($ps_visualizacao) if ($ps_key_campo_visualizacao == $va_campo_sistema_nome[0]) { $this->visualizacoes[$ps_visualizacao]["campos"][$ps_key_campo_visualizacao] = $va_campo_visualizacao; - $this->visualizacoes[$ps_visualizacao]["ordem_campos"][$va_campo_sistema["visualizacao_campo_sistema_codigo"]["campo_sistema_nome"]] = $va_campo_sistema["visualizacao_campo_sistema_codigo"]["campo_sistema_alias"]; + $this->visualizacoes[$ps_visualizacao]["ordem_campos"][$va_campo_sistema["visualizacao_campo_sistema_codigo"]["campo_sistema_nome"]] = [ + "label" => $va_campo_sistema["visualizacao_campo_sistema_codigo"]["campo_sistema_alias"], + "main_field" => $this->visualizacoes["ficha"]["ordem_campos"][$ps_key_campo_visualizacao]["main_field"] ?? false, + "id_field" => $this->visualizacoes["ficha"]["ordem_campos"][$ps_key_campo_visualizacao]["id_field"] ?? false, + "descriptive_field" => $this->visualizacoes["ficha"]["ordem_campos"][$ps_key_campo_visualizacao]["descriptive_field"] ?? false + ]; } } diff --git a/src/lib/system/visualizacao.php b/src/lib/system/visualizacao.php index 295c328..6c12e55 100755 --- a/src/lib/system/visualizacao.php +++ b/src/lib/system/visualizacao.php @@ -70,7 +70,7 @@ public function inicializar_relacionamentos($pn_recurso_sistema_codigo = null) [ 'visualizacao_campo_sistema_codigo' => 'campo_sistema_codigo', 'visualizacao_campo_sistema_sequencia' => [ - 'sequencia', + 'ordem', 'valor_sequencial' => true ], ], @@ -111,7 +111,7 @@ public function inicializar_campos_edicao() "sem_valor" => false, "conectar" => [ [ - "campo" => "visualizacao_campos_sistema", + "campo" => "visualizacao_campo_sistema_codigo", "atributo" => "campo_sistema_recurso_sistema_codigo" ] ] @@ -125,29 +125,22 @@ public function inicializar_campos_edicao() ]; $va_campos_edicao["visualizacao_campo_sistema_codigo"] = [ - "html_multi_itens_input", - "nome" => "visualizacao_campo_sistema_codigo", + "html_autocomplete", + "nome" => ["visualizacao_campo_sistema", "visualizacao_campo_sistema_codigo"], "label" => "Campos", - "dependencia_linha" => ["campo" => "visualizacao_recurso_sistema_codigo"], - "subcampos" => [ - "visualizacao_campo_sistema_codigo" => - [ - "html_combo_input", - "nome" => "visualizacao_campo_sistema_codigo", - "label" => "Campo", - "objeto" => "campo_sistema", - "atributos" => ["campo_sistema_codigo", "campo_sistema_alias"], - "atributo" => "campo_sistema_codigo", - "sem_valor" => false, - "dependencia" => [ - "campo" => "visualizacao_recurso_sistema_codigo", - "atributo" => "campo_sistema_recurso_sistema_codigo" - ], - "campo_pai" => "visualizacao_campo_sistema_codigo" - ] - - ], + "objeto" => "campo_sistema", + "atributos" => ["campo_sistema_codigo", "campo_sistema_alias"], + "multiplos_valores" => true, + "procurar_por" => "campo_sistema_alias", + "visualizacao" => "lista", + "permitir_cadastro" => false, "draggable" => true, + "dependencia" => [ + [ + "campo" => "visualizacao_recurso_sistema_codigo", + "atributo" => "campo_sistema_recurso_sistema_codigo" + ] + ] ]; $va_campos_edicao["visualizacao_contexto_visualizacao_codigo"] = [ From 3ff50462c39ffb73ba647e428d8dec330a5e9542 Mon Sep 17 00:00:00 2001 From: Frederico Camargo Date: Wed, 7 Jan 2026 09:42:21 -0300 Subject: [PATCH 09/20] =?UTF-8?q?FDP-593=20Corrigir=20tentativa=20de=20ger?= =?UTF-8?q?a=C3=A7=C3=A3o=20autom=C3=A1tica=20de=20identificador=20de=20or?= =?UTF-8?q?dena=C3=A7=C3=A3o=20[id=5Fsort]=20na=20edi=C3=A7=C3=A3o=20em=20?= =?UTF-8?q?lote?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/system/objeto_base.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/lib/system/objeto_base.php b/src/lib/system/objeto_base.php index 7a6073f..5e27fc5 100755 --- a/src/lib/system/objeto_base.php +++ b/src/lib/system/objeto_base.php @@ -4802,6 +4802,9 @@ private function montar_campos_salvamento($pa_valores_form = array(), $ps_id_obj } $vs_valor_atributo = $this->$vs_funcao($va_valores_parametros); + + if ($vs_valor_atributo === false) + continue; } $this->va_campos[] = $va_atributo["coluna_tabela"]; From eb353b5e56f0be0f2088ae1c76386fdf462b2cb1 Mon Sep 17 00:00:00 2001 From: samuel Date: Wed, 7 Jan 2026 11:16:06 -0300 Subject: [PATCH 10/20] =?UTF-8?q?FDP-584=20Corre=C3=A7=C3=A3o=20busca=20po?= =?UTF-8?q?r=20identificador=20(permitir=20que=20os=20bot=C3=B5es=20navegu?= =?UTF-8?q?em=20pelos=20itens=20de=20forma=20sequencial)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/dashboard_resultado_busca.php | 2 +- app/editar.php | 90 +++++++++++++++++++- 2 files changed, 89 insertions(+), 3 deletions(-) diff --git a/app/components/dashboard_resultado_busca.php b/app/components/dashboard_resultado_busca.php index 37bec52..783a2d0 100644 --- a/app/components/dashboard_resultado_busca.php +++ b/app/components/dashboard_resultado_busca.php @@ -20,7 +20,7 @@ if ($vb_busca_id && count($va_itens_listagem)) { - print ''; + print ''; } if (count($va_itens_listagem)) diff --git a/app/editar.php b/app/editar.php index ec48203..8f354e4 100644 --- a/app/editar.php +++ b/app/editar.php @@ -149,7 +149,17 @@ else $_SESSION[$vs_id_objeto_tela]["campo_paginacao"] = "paginacao_topo"; - if (in_array($vn_objeto_codigo, ["p", "n", "f", "l"])) +// p = previous +// n = next +// f = first +// l = last + + +// s = synchronize ou start (?) + + $vb_sincronizar = isset($_REQUEST["sincronizar"]) && $_REQUEST["sincronizar"] ?? false; + + if (in_array($vn_objeto_codigo, ["p", "n", "f", "l"]) || $vb_sincronizar) { if ( ($vn_objeto_codigo == "p") && ($vn_pagina_atual > 1) ) $vn_pagina_atual = $vn_pagina_atual - 1; @@ -166,14 +176,90 @@ $vn_pagina_atual = $vn_numero_maximo_paginas; $vn_objeto_codigo = $_SESSION[$vs_id_objeto_tela]["codigo_ultimo_lista"]; } + elseif ($vb_sincronizar) { + function sanitize_identifier($vs_raw_identifier) { + $vs_regex_pattern = '/[^0-9]/'; + return preg_replace($vs_regex_pattern, '', $vs_raw_identifier); + } + + $vs_identifier_key_sort = "item_acervo_identificador"; + + $va_current_object_identifier = $vo_objeto->ler($vn_objeto_codigo, "lista", $vn_idioma_catalogacao_codigo)[$vs_identifier_key_sort]; + $va_current_object_identifier = sanitize_identifier($va_current_object_identifier); + + function search_object_page($po_objeto, $pn_object_identifier, $pn_current_page, $pn_min, $pn_max) + { + if ($pn_min > $pn_max) + { + return false; + } + + $vn_registros_por_pagina = 20; + $vn_primeiro_registro = ($pn_current_page - 1) * $vn_registros_por_pagina + 1; + if ($vn_primeiro_registro < 1) + { + return false; + } + + $va_lista_objetos = $po_objeto->ler_lista([], "lista", $vn_primeiro_registro, $vn_registros_por_pagina, "item_acervo_codigo_0_item_acervo_identificador_sort", "ASC"); + $va_identificadores_lista_objetos = array_map(function ($pa_registro) + { + return (int)sanitize_identifier($pa_registro["item_acervo_identificador_sort"]); + }, $va_lista_objetos); + + + if (array_search($pn_object_identifier, $va_identificadores_lista_objetos)) + { + $vn_pagina_atual = $pn_current_page; + return $pn_current_page; + } + + $vn_list_first_item = reset($va_identificadores_lista_objetos); + $vn_list_last_item = end($va_identificadores_lista_objetos); + + if ((int)$pn_object_identifier > $vn_list_last_item) + { + $pn_min = $pn_current_page + 1; + + } + elseif ((int)$pn_object_identifier < $vn_list_first_item) + { + $pn_max = $pn_current_page - 1; + + } else + { + return false; + } + + if ($pn_min > $pn_max) + { + return false; + } + + $vn_next_page = floor(($pn_min + $pn_max) / 2); + if ($vn_next_page < 1) { + return false; + } + + return search_object_page($po_objeto, $pn_object_identifier, $vn_next_page, $pn_min, $pn_max); + } + + $vn_numero_maximo_paginas = ceil($vo_objeto->ler_numero_registros([]) / 20); + $vn_middle_page = floor($vn_numero_maximo_paginas / 2); + $vn_pagina_atual = search_object_page($vo_objeto, $va_current_object_identifier, $vn_middle_page, 1, $vn_numero_maximo_paginas); + + + } $_SESSION[$vs_id_objeto_tela][$_SESSION[$vs_id_objeto_tela]["campo_paginacao"]] = $vn_pagina_atual; $vb_usar_parametros_sessao = true; $vs_modo = "listagem"; - + + require dirname(__FILE__)."/functions/montar_listagem.php"; + $vs_modo = "edicao"; // A listagem_codigos só é atualizada após a chamada para /montar_listagem.php From 9bbfcca249255da170890d80644f99448c58e2f7 Mon Sep 17 00:00:00 2001 From: samuel Date: Wed, 7 Jan 2026 11:30:51 -0300 Subject: [PATCH 11/20] =?UTF-8?q?FDP-584=20Corre=C3=A7=C3=A3o=20index=200/?= =?UTF-8?q?false=20em=20array=5Fsearch=20(quando=20o=20item=20est=C3=A1=20?= =?UTF-8?q?na=20primeira=20p=C3=A1gina)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/editar.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/editar.php b/app/editar.php index 8f354e4..b581d1f 100644 --- a/app/editar.php +++ b/app/editar.php @@ -208,10 +208,10 @@ function search_object_page($po_objeto, $pn_object_identifier, $pn_current_page, }, $va_lista_objetos); - if (array_search($pn_object_identifier, $va_identificadores_lista_objetos)) + if (in_array((int)$pn_object_identifier, $va_identificadores_lista_objetos, true)) { - $vn_pagina_atual = $pn_current_page; return $pn_current_page; + } $vn_list_first_item = reset($va_identificadores_lista_objetos); From 7fa7f06b7ba03a2e06d018f10c2922f1cd46dd4e Mon Sep 17 00:00:00 2001 From: samuel Date: Wed, 7 Jan 2026 14:54:28 -0300 Subject: [PATCH 12/20] =?UTF-8?q?FDP-584=20Migrar=20l=C3=B3gica=20de=20bus?= =?UTF-8?q?ca=20de=20p=C3=A1gina=20para=20dashboard=5Fresultado=5Fbusca.ph?= =?UTF-8?q?p?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/dashboard_resultado_busca.php | 92 +++++++++++++++++++- app/editar.php | 77 ---------------- app/functions/montar_listagem.php | 1 + 3 files changed, 91 insertions(+), 79 deletions(-) diff --git a/app/components/dashboard_resultado_busca.php b/app/components/dashboard_resultado_busca.php index 783a2d0..3b87fe2 100644 --- a/app/components/dashboard_resultado_busca.php +++ b/app/components/dashboard_resultado_busca.php @@ -14,13 +14,101 @@ $va_parametros_filtros_consulta[$vo_dashboard->get_filtro_busca_geral($vs_id_objeto_tela)] = [$vs_termo_busca, "LIKE"]; $vs_formato_listagem = "default"; + require dirname(__FILE__) . "/../functions/montar_listagem.php"; $va_itens_listagem = $va_itens_listagem ?? []; - if ($vb_busca_id && count($va_itens_listagem)) + if ($vb_busca_id && count($va_itens_listagem) != 0) { - print ''; + + $in = 1; + function sanitize_identifier($vs_raw_identifier) { + $vs_regex_pattern = '/[^0-9]/'; + return preg_replace($vs_regex_pattern, '', $vs_raw_identifier); + } + + $vs_identifier_key_sort = "item_acervo_identificador"; + $vn_objeto_codigo = $va_itens_listagem[0][$vo_objeto->get_chave_primaria()[0]]; + + $va_current_object_identifier = $vo_objeto->ler($vn_objeto_codigo, "lista", $vn_idioma_catalogacao_codigo)[$vs_identifier_key_sort]; + $va_current_object_identifier = sanitize_identifier($va_current_object_identifier); + + + + function search_object_page($po_objeto, $pn_object_identifier, $pn_current_page, $pn_min, $pn_max) + { + if ($pn_min > $pn_max) + { + return false; + } + + $vn_registros_por_pagina = 20; + $vn_primeiro_registro = ($pn_current_page - 1) * $vn_registros_por_pagina + 1; + if ($vn_primeiro_registro < 1) + { + return false; + } + + $va_lista_objetos = $po_objeto->ler_lista([], "lista", $vn_primeiro_registro, $vn_registros_por_pagina, "item_acervo_codigo_0_item_acervo_identificador_sort", "ASC"); + $va_identificadores_lista_objetos = array_map(function ($pa_registro) + { + return (int)sanitize_identifier($pa_registro["item_acervo_identificador_sort"]); + }, $va_lista_objetos); + + + if (in_array((int)$pn_object_identifier, $va_identificadores_lista_objetos, true)) + { + return $pn_current_page; + + } + + $vn_list_first_item = reset($va_identificadores_lista_objetos); + $vn_list_last_item = end($va_identificadores_lista_objetos); + + if ((int)$pn_object_identifier > $vn_list_last_item) + { + $pn_min = $pn_current_page + 1; + + } + elseif ((int)$pn_object_identifier < $vn_list_first_item) + { + $pn_max = $pn_current_page - 1; + + } else + { + return false; + } + + if ($pn_min > $pn_max) + { + return false; + } + + $vn_next_page = floor(($pn_min + $pn_max) / 2); + if ($vn_next_page < 1) { + return false; + } + + return search_object_page($po_objeto, $pn_object_identifier, $vn_next_page, $pn_min, $pn_max); + + } + + if (count($va_itens_listagem)) { + + $vn_numero_maximo_paginas = ceil($vo_objeto->ler_numero_registros([]) / 20); + $vn_middle_page = floor($vn_numero_maximo_paginas / 2); + $vn_pagina_atual = search_object_page($vo_objeto, $va_current_object_identifier, $vn_middle_page, 1, $vn_numero_maximo_paginas); + + $_SESSION[$vs_id_objeto_tela][$_SESSION[$vs_id_objeto_tela]["campo_paginacao"]] = $vn_pagina_atual; + + $vb_usar_parametros_sessao = true; + $vs_modo = "listagem"; + +// require dirname(__FILE__) . "/../functions/montar_listagem.php"; + } + + print ''; } if (count($va_itens_listagem)) diff --git a/app/editar.php b/app/editar.php index b581d1f..944bd12 100644 --- a/app/editar.php +++ b/app/editar.php @@ -154,9 +154,6 @@ // f = first // l = last - -// s = synchronize ou start (?) - $vb_sincronizar = isset($_REQUEST["sincronizar"]) && $_REQUEST["sincronizar"] ?? false; if (in_array($vn_objeto_codigo, ["p", "n", "f", "l"]) || $vb_sincronizar) @@ -176,80 +173,6 @@ $vn_pagina_atual = $vn_numero_maximo_paginas; $vn_objeto_codigo = $_SESSION[$vs_id_objeto_tela]["codigo_ultimo_lista"]; } - elseif ($vb_sincronizar) { - function sanitize_identifier($vs_raw_identifier) { - $vs_regex_pattern = '/[^0-9]/'; - return preg_replace($vs_regex_pattern, '', $vs_raw_identifier); - } - - $vs_identifier_key_sort = "item_acervo_identificador"; - - $va_current_object_identifier = $vo_objeto->ler($vn_objeto_codigo, "lista", $vn_idioma_catalogacao_codigo)[$vs_identifier_key_sort]; - $va_current_object_identifier = sanitize_identifier($va_current_object_identifier); - - function search_object_page($po_objeto, $pn_object_identifier, $pn_current_page, $pn_min, $pn_max) - { - if ($pn_min > $pn_max) - { - return false; - } - - $vn_registros_por_pagina = 20; - $vn_primeiro_registro = ($pn_current_page - 1) * $vn_registros_por_pagina + 1; - if ($vn_primeiro_registro < 1) - { - return false; - } - - $va_lista_objetos = $po_objeto->ler_lista([], "lista", $vn_primeiro_registro, $vn_registros_por_pagina, "item_acervo_codigo_0_item_acervo_identificador_sort", "ASC"); - $va_identificadores_lista_objetos = array_map(function ($pa_registro) - { - return (int)sanitize_identifier($pa_registro["item_acervo_identificador_sort"]); - }, $va_lista_objetos); - - - if (in_array((int)$pn_object_identifier, $va_identificadores_lista_objetos, true)) - { - return $pn_current_page; - - } - - $vn_list_first_item = reset($va_identificadores_lista_objetos); - $vn_list_last_item = end($va_identificadores_lista_objetos); - - if ((int)$pn_object_identifier > $vn_list_last_item) - { - $pn_min = $pn_current_page + 1; - - } - elseif ((int)$pn_object_identifier < $vn_list_first_item) - { - $pn_max = $pn_current_page - 1; - - } else - { - return false; - } - - if ($pn_min > $pn_max) - { - return false; - } - - $vn_next_page = floor(($pn_min + $pn_max) / 2); - if ($vn_next_page < 1) { - return false; - } - - return search_object_page($po_objeto, $pn_object_identifier, $vn_next_page, $pn_min, $pn_max); - } - - $vn_numero_maximo_paginas = ceil($vo_objeto->ler_numero_registros([]) / 20); - $vn_middle_page = floor($vn_numero_maximo_paginas / 2); - $vn_pagina_atual = search_object_page($vo_objeto, $va_current_object_identifier, $vn_middle_page, 1, $vn_numero_maximo_paginas); - - - } $_SESSION[$vs_id_objeto_tela][$_SESSION[$vs_id_objeto_tela]["campo_paginacao"]] = $vn_pagina_atual; diff --git a/app/functions/montar_listagem.php b/app/functions/montar_listagem.php index 3e49395..b1f136c 100644 --- a/app/functions/montar_listagem.php +++ b/app/functions/montar_listagem.php @@ -203,6 +203,7 @@ $vn_primeiro_registro = ($vn_pagina_atual -1)*NUMERO_ITENS_PAGINA_LISTAGEM + 1; $vn_numero_registros_lista = NUMERO_ITENS_PAGINA_LISTAGEM; } + else $vn_numero_registros_lista = $vn_numero_registros; From 2c1223a2b3de2bfe4c1ac0f45faf5d8ed0b66112 Mon Sep 17 00:00:00 2001 From: samuel Date: Wed, 7 Jan 2026 15:49:45 -0300 Subject: [PATCH 13/20] =?UTF-8?q?FDP-584=20Corre=C3=A7=C3=A3o=20passagem?= =?UTF-8?q?=20e=20conserva=C3=A7=C3=A3o=20de=20n=C3=BAmero=20de=20registro?= =?UTF-8?q?s=20e=20p=C3=A1gina=20atual=20entre=20itera=C3=A7=C3=B5es=20das?= =?UTF-8?q?hboard=5Fresultado=5Fbusca.php=20->=20editar.php?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/dashboard_resultado_busca.php | 11 +++++------ app/editar.php | 12 +++++++++--- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/app/components/dashboard_resultado_busca.php b/app/components/dashboard_resultado_busca.php index 3b87fe2..7195dea 100644 --- a/app/components/dashboard_resultado_busca.php +++ b/app/components/dashboard_resultado_busca.php @@ -22,7 +22,6 @@ if ($vb_busca_id && count($va_itens_listagem) != 0) { - $in = 1; function sanitize_identifier($vs_raw_identifier) { $vs_regex_pattern = '/[^0-9]/'; return preg_replace($vs_regex_pattern, '', $vs_raw_identifier); @@ -96,16 +95,16 @@ function search_object_page($po_objeto, $pn_object_identifier, $pn_current_page, if (count($va_itens_listagem)) { + $vn_numero_registros = $vo_objeto->ler_numero_registros([]); + $_SESSION[$vs_id_objeto_tela]["numero_registros"] = $vn_numero_registros; + $vn_numero_maximo_paginas = ceil($vo_objeto->ler_numero_registros([]) / 20); $vn_middle_page = floor($vn_numero_maximo_paginas / 2); $vn_pagina_atual = search_object_page($vo_objeto, $va_current_object_identifier, $vn_middle_page, 1, $vn_numero_maximo_paginas); - $_SESSION[$vs_id_objeto_tela][$_SESSION[$vs_id_objeto_tela]["campo_paginacao"]] = $vn_pagina_atual; - - $vb_usar_parametros_sessao = true; - $vs_modo = "listagem"; + $_SESSION[$vs_id_objeto_tela]['campo_paginacao'] = $vn_pagina_atual; + $_SESSION[$vs_id_objeto_tela]['sincronizar'] = 1; -// require dirname(__FILE__) . "/../functions/montar_listagem.php"; } print ''; diff --git a/app/editar.php b/app/editar.php index 944bd12..b87b209 100644 --- a/app/editar.php +++ b/app/editar.php @@ -145,7 +145,11 @@ $vn_pagina_atual = 1; if (isset($_SESSION[$vs_id_objeto_tela]["campo_paginacao"]) && isset($_SESSION[$vs_id_objeto_tela][$_SESSION[$vs_id_objeto_tela]["campo_paginacao"]])) - $vn_pagina_atual = $_SESSION[$vs_id_objeto_tela][$_SESSION[$vs_id_objeto_tela]["campo_paginacao"]]; + $vn_pagina_atual = $_SESSION[$vs_id_objeto_tela][$_SESSION[$vs_id_objeto_tela]["campo_paginacao"]] ; + elseif (isset($_SESSION[$vs_id_objeto_tela]["campo_paginacao"]) && ($_SESSION[$vs_id_objeto_tela]["campo_paginacao"])) + { + $vn_pagina_atual = $_SESSION[$vs_id_objeto_tela]["campo_paginacao"]; + } else $_SESSION[$vs_id_objeto_tela]["campo_paginacao"] = "paginacao_topo"; @@ -154,9 +158,11 @@ // f = first // l = last - $vb_sincronizar = isset($_REQUEST["sincronizar"]) && $_REQUEST["sincronizar"] ?? false; - if (in_array($vn_objeto_codigo, ["p", "n", "f", "l"]) || $vb_sincronizar) + $vb_sincronizar = isset($_SESSION[$vs_id_objeto_tela]["sincronizar"]); + + + if (in_array($vn_objeto_codigo, ["p", "n", "f", "l"]) || isset($vb_sincronizar)) { if ( ($vn_objeto_codigo == "p") && ($vn_pagina_atual > 1) ) $vn_pagina_atual = $vn_pagina_atual - 1; From 1a2559b39d6a940d2894bb14beab191dcd60f340 Mon Sep 17 00:00:00 2001 From: Frederico Camargo Date: Thu, 8 Jan 2026 11:04:03 -0300 Subject: [PATCH 14/20] =?UTF-8?q?FDP-527=20Permitir=20que=20o=20usu=C3=A1r?= =?UTF-8?q?io=20crie=20visualiza=C3=A7=C3=B5es=20com=20metadados=20selecio?= =?UTF-8?q?nados=20para=20exibi=C3=A7=C3=A3o=20nas=20telas=20de=20listagem?= =?UTF-8?q?=20e=20na=20ficha?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/barra_visualizacoes.php | 2 +- app/components/ler_valor.php | 8 +++++++ app/functions/montar_listagem.php | 3 +++ app/listar.php | 2 +- src/lib/system/objeto_base.php | 32 +++++++++++++++++++------- src/lib/system/periodo.php | 2 ++ 6 files changed, 39 insertions(+), 10 deletions(-) diff --git a/app/components/barra_visualizacoes.php b/app/components/barra_visualizacoes.php index 0625785..71139be 100644 --- a/app/components/barra_visualizacoes.php +++ b/app/components/barra_visualizacoes.php @@ -6,7 +6,7 @@ "nome" => "visualizacao_codigo", "label" => "Visualização", "objeto" => "visualizacao", - "sem_valor" => true, + "sem_valor" => false, "dependencia" => [ [ "campo" => "recurso_sistema_codigo", diff --git a/app/components/ler_valor.php b/app/components/ler_valor.php index 004c39c..c28c645 100644 --- a/app/components/ler_valor.php +++ b/app/components/ler_valor.php @@ -14,6 +14,11 @@ function ler_valor1($ps_atributo, $pa_item, $pa_opcoes_campo=null, $pn_numero_it return ""; } + if (isset($pa_item[$ps_atributo]) && isset($pa_opcoes_campo["valores"])) + { + return $pa_opcoes_campo["valores"][$pa_item[$ps_atributo]] ?? ""; + } + if (isset($pa_opcoes_campo["formato"]["data"])) { $vo_data = new Periodo; @@ -34,6 +39,9 @@ function ler_valor1($ps_atributo, $pa_item, $pa_opcoes_campo=null, $pn_numero_it if (isset($pa_item[$ps_atributo . "_sem_data"])) $vo_data->set_sem_data($pa_item[$ps_atributo . "_sem_data"]); + if (isset($pa_item[$ps_atributo . "_periodo"])) + $vo_data->set_complemento($pa_item[$ps_atributo . "_periodo"]); + if ($pa_opcoes_campo["formato"]["data"] == "ano") $va_data = $vo_data->get_data_exibicao(); diff --git a/app/functions/montar_listagem.php b/app/functions/montar_listagem.php index 85a3c02..b5398d6 100644 --- a/app/functions/montar_listagem.php +++ b/app/functions/montar_listagem.php @@ -218,6 +218,9 @@ } else { + if ($vs_visualizacao == "ficha") + $vs_visualizacao = "Ficha"; + $va_visualizacao_lista = $vo_objeto->get_visualizacao($vs_visualizacao); if (isset($va_visualizacao_lista["ordem_campos"])) diff --git a/app/listar.php b/app/listar.php index 964f695..0972627 100755 --- a/app/listar.php +++ b/app/listar.php @@ -38,7 +38,7 @@ if (isset($_GET['visualizacao_codigo'])) $vs_visualizacao = $_GET['visualizacao_codigo']; else - $vs_visualizacao = "navegacao"; + $vs_visualizacao = "Listagem"; $vb_back_from_editing = false; if (isset($_GET['back']) && $_GET['back']) diff --git a/src/lib/system/objeto_base.php b/src/lib/system/objeto_base.php index 5e27fc5..370ef2a 100755 --- a/src/lib/system/objeto_base.php +++ b/src/lib/system/objeto_base.php @@ -363,12 +363,22 @@ public function get_registros_filhos() public function get_visualizacao($ps_visualizacao) { - if (intval($ps_visualizacao) && !isset($this->visualizacoes[$ps_visualizacao])) + if (!isset($this->visualizacoes[$ps_visualizacao]) && $this->recurso_sistema_codigo) { + $va_filtro = array(); + + if (intval($ps_visualizacao)) + $va_filtro = ["visualizacao_codigo" => $ps_visualizacao]; + else + $va_filtro = ["visualizacao_recurso_sistema_codigo" => $this->recurso_sistema_codigo, "visualizacao_nome" => $ps_visualizacao]; + $vo_visualizacao = new visualizacao; - $va_visualizacao = $vo_visualizacao->ler($ps_visualizacao, "ficha"); + $va_visualizacao = $vo_visualizacao->ler_lista($va_filtro, "ficha"); + + if (count($va_visualizacao)) + { + $va_visualizacao = $va_visualizacao[0]; - if (count($va_visualizacao)) { $this->visualizacoes[$ps_visualizacao]["campos"][$this->chave_primaria[0]] = $this->visualizacoes["ficha"]["campos"][$this->chave_primaria[0]]; if (isset($this->visualizacoes["navegacao"]["order_by"])) @@ -383,11 +393,12 @@ public function get_visualizacao($ps_visualizacao) if ($ps_key_campo_visualizacao == $va_campo_sistema_nome[0]) { $this->visualizacoes[$ps_visualizacao]["campos"][$ps_key_campo_visualizacao] = $va_campo_visualizacao; + $this->visualizacoes[$ps_visualizacao]["ordem_campos"][$va_campo_sistema["visualizacao_campo_sistema_codigo"]["campo_sistema_nome"]] = [ "label" => $va_campo_sistema["visualizacao_campo_sistema_codigo"]["campo_sistema_alias"], - "main_field" => $this->visualizacoes["ficha"]["ordem_campos"][$ps_key_campo_visualizacao]["main_field"] ?? false, - "id_field" => $this->visualizacoes["ficha"]["ordem_campos"][$ps_key_campo_visualizacao]["id_field"] ?? false, - "descriptive_field" => $this->visualizacoes["ficha"]["ordem_campos"][$ps_key_campo_visualizacao]["descriptive_field"] ?? false + "main_field" => $this->visualizacoes["ficha"]["ordem_campos"][$va_campo_sistema["visualizacao_campo_sistema_codigo"]["campo_sistema_nome"]]["main_field"] ?? false, + "id_field" => $this->visualizacoes["ficha"]["ordem_campos"][$va_campo_sistema["visualizacao_campo_sistema_codigo"]["campo_sistema_nome"]]["id_field"] ?? false, + "descriptive_field" => $this->visualizacoes["ficha"]["ordem_campos"][$va_campo_sistema["visualizacao_campo_sistema_codigo"]["campo_sistema_nome"]]["descriptive_field"] ?? false ]; } } @@ -406,8 +417,13 @@ public function get_visualizacao($ps_visualizacao) if (isset($this->visualizacoes[$ps_visualizacao])) return $this->visualizacoes[$ps_visualizacao]; - else - return $this->visualizacoes["navegacao"]; + else + { + if ($ps_visualizacao == "Ficha") + return $this->visualizacoes["ficha"]; + else + return $this->visualizacoes["navegacao"]; + } } public function get_campos_visualizacao($ps_visualizacao) diff --git a/src/lib/system/periodo.php b/src/lib/system/periodo.php index f9bab95..4511a85 100755 --- a/src/lib/system/periodo.php +++ b/src/lib/system/periodo.php @@ -638,6 +638,8 @@ public function get_data_exibicao($ps_separador='') if ($this->get_presumido()) $vs_data_exibicao = "[" . $vs_data_exibicao . "]"; + if ($this->get_complemento()) + $vs_data_exibicao .= " (" . $this->get_complemento() . ")"; return $vs_data_exibicao; } From 4ff474f5e62712a890b4d3a637e848bc61d15a63 Mon Sep 17 00:00:00 2001 From: Frederico Camargo Date: Thu, 8 Jan 2026 11:54:12 -0300 Subject: [PATCH 15/20] =?UTF-8?q?FDP-527=20Permitir=20que=20o=20usu=C3=A1r?= =?UTF-8?q?io=20crie=20visualiza=C3=A7=C3=B5es=20com=20metadados=20selecio?= =?UTF-8?q?nados=20para=20exibi=C3=A7=C3=A3o=20nas=20telas=20de=20listagem?= =?UTF-8?q?=20e=20na=20ficha?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/barra_visualizacoes.php | 10 ++++++++++ app/ficha.php | 3 +++ app/functions/montar_listagem.php | 7 ++----- app/listar.php | 5 ++++- src/lib/system/objeto_base.php | 26 ++++++++++++++++++-------- src/lib/system/visualizacao.php | 18 +++++++++++++++++- 6 files changed, 54 insertions(+), 15 deletions(-) diff --git a/app/components/barra_visualizacoes.php b/app/components/barra_visualizacoes.php index 71139be..e7d3f74 100644 --- a/app/components/barra_visualizacoes.php +++ b/app/components/barra_visualizacoes.php @@ -7,10 +7,15 @@ "label" => "Visualização", "objeto" => "visualizacao", "sem_valor" => false, + "atributo_obrigatorio" => true, "dependencia" => [ [ "campo" => "recurso_sistema_codigo", "atributo" => "visualizacao_recurso_sistema_codigo" + ], + [ + "campo" => "visualizacao_contexto_visualizacao_codigo", + "atributo" => "visualizacao_contexto_visualizacao_codigo" ] ], "filtro" => [ @@ -31,6 +36,11 @@ $va_valores["recurso_sistema_id"] = $vs_id_objeto_tela; $va_valores["recurso_sistema_codigo"] = $vn_recurso_sistema_codigo; + if ($vs_modo == "listagem") + $va_valores["visualizacao_contexto_visualizacao_codigo"] = 3; + elseif ($vs_modo == "ficha") + $va_valores["visualizacao_contexto_visualizacao_codigo"] = 4; + $vo_combo_visualizacoes->build($va_valores, $va_parametros_campo); ?> diff --git a/app/ficha.php b/app/ficha.php index 580c163..91d1e88 100644 --- a/app/ficha.php +++ b/app/ficha.php @@ -40,7 +40,10 @@ if (isset($_GET['visualizacao_codigo'])) $vs_visualizacao = $_GET['visualizacao_codigo']; else + { $vs_visualizacao = "ficha"; + $vn_contexto_visualizacao = 4; + } $va_registros_filhos = array(); diff --git a/app/functions/montar_listagem.php b/app/functions/montar_listagem.php index b5398d6..db71352 100644 --- a/app/functions/montar_listagem.php +++ b/app/functions/montar_listagem.php @@ -217,11 +217,8 @@ $va_itens_listagem = $va_objetos_lista; } else - { - if ($vs_visualizacao == "ficha") - $vs_visualizacao = "Ficha"; - - $va_visualizacao_lista = $vo_objeto->get_visualizacao($vs_visualizacao); + { + $va_visualizacao_lista = $vo_objeto->get_visualizacao($vs_visualizacao, ($vn_contexto_visualizacao ?? null)); if (isset($va_visualizacao_lista["ordem_campos"])) $va_campos_visualizacao = $va_visualizacao_lista["ordem_campos"]; diff --git a/app/listar.php b/app/listar.php index 0972627..a8c78c0 100755 --- a/app/listar.php +++ b/app/listar.php @@ -38,7 +38,10 @@ if (isset($_GET['visualizacao_codigo'])) $vs_visualizacao = $_GET['visualizacao_codigo']; else - $vs_visualizacao = "Listagem"; + { + $vs_visualizacao = "navegacao"; + $vn_contexto_visualizacao = 3; + } $vb_back_from_editing = false; if (isset($_GET['back']) && $_GET['back']) diff --git a/src/lib/system/objeto_base.php b/src/lib/system/objeto_base.php index 370ef2a..6d37d38 100755 --- a/src/lib/system/objeto_base.php +++ b/src/lib/system/objeto_base.php @@ -361,17 +361,24 @@ public function get_registros_filhos() return $this->registros_filhos; } - public function get_visualizacao($ps_visualizacao) + public function get_visualizacao($ps_visualizacao, $pn_contexto_codigo = null) { - if (!isset($this->visualizacoes[$ps_visualizacao]) && $this->recurso_sistema_codigo) + if ($this->recurso_sistema_codigo && (isset($pn_contexto_codigo) ||!isset($this->visualizacoes[$ps_visualizacao])) ) { $va_filtro = array(); if (intval($ps_visualizacao)) $va_filtro = ["visualizacao_codigo" => $ps_visualizacao]; + elseif (isset($pn_contexto_codigo)) + { + $va_filtro = ["visualizacao_recurso_sistema_codigo" => $this->recurso_sistema_codigo, "visualizacao_contexto_visualizacao_codigo" => $pn_contexto_codigo]; + $ps_visualizacao = $pn_contexto_codigo; + } else $va_filtro = ["visualizacao_recurso_sistema_codigo" => $this->recurso_sistema_codigo, "visualizacao_nome" => $ps_visualizacao]; + $va_filtro["visualizacao_habilitado"] = 1; + $vo_visualizacao = new visualizacao; $va_visualizacao = $vo_visualizacao->ler_lista($va_filtro, "ficha"); @@ -379,6 +386,14 @@ public function get_visualizacao($ps_visualizacao) { $va_visualizacao = $va_visualizacao[0]; + if (!empty($va_visualizacao["visualizacao_incluir_representante_digital"])) + { + $this->visualizacoes[$ps_visualizacao]["campos"]["representante_digital_codigo"] = [ + "nome" => "representante_digital_codigo", + "formato" => ["campo" => "representante_digital_path"] + ]; + } + $this->visualizacoes[$ps_visualizacao]["campos"][$this->chave_primaria[0]] = $this->visualizacoes["ficha"]["campos"][$this->chave_primaria[0]]; if (isset($this->visualizacoes["navegacao"]["order_by"])) @@ -418,12 +433,7 @@ public function get_visualizacao($ps_visualizacao) if (isset($this->visualizacoes[$ps_visualizacao])) return $this->visualizacoes[$ps_visualizacao]; else - { - if ($ps_visualizacao == "Ficha") - return $this->visualizacoes["ficha"]; - else - return $this->visualizacoes["navegacao"]; - } + return $this->visualizacoes["navegacao"]; } public function get_campos_visualizacao($ps_visualizacao) diff --git a/src/lib/system/visualizacao.php b/src/lib/system/visualizacao.php index 6c12e55..653e986 100755 --- a/src/lib/system/visualizacao.php +++ b/src/lib/system/visualizacao.php @@ -51,6 +51,12 @@ public function inicializar_atributos() 'tipo_dado' => 'b' ]; + $va_atributos['visualizacao_incluir_representante_digital'] = [ + 'visualizacao_incluir_representante_digital', + 'coluna_tabela' => 'incluir_representante_digital', + 'tipo_dado' => 'b' + ]; + return $va_atributos; } @@ -143,6 +149,12 @@ public function inicializar_campos_edicao() ] ]; + $va_campos_edicao["visualizacao_incluir_representante_digital"] = [ + "html_checkbox_input", + "nome" => "visualizacao_incluir_representante_digital", + "label" => "Incluir representantes digitais" + ]; + $va_campos_edicao["visualizacao_contexto_visualizacao_codigo"] = [ "html_combo_input", "nome" => "visualizacao_contexto_visualizacao_codigo", @@ -155,7 +167,7 @@ public function inicializar_campos_edicao() $va_campos_edicao["visualizacao_habilitado"] = [ "html_checkbox_input", "nome" => "visualizacao_habilitado", - "label" => "Habilitado" + "label" => "Habilitada" ]; return $va_campos_edicao; @@ -199,6 +211,10 @@ public function inicializar_visualizacoes() "nome" => "visualizacao_habilitado" ]; + $va_campos_visualizacao["visualizacao_incluir_representante_digital"] = [ + "nome" => "visualizacao_incluir_representante_digital" + ]; + $this->visualizacoes["navegacao"]["campos"] = $va_campos_visualizacao; $this->visualizacoes["navegacao"]["order_by"] = ["visualizacao_nome" => "Nome"]; $this->visualizacoes["navegacao"]["ordem_campos"] = [ From a1e312f497ee23970ad2954a21a846ebbe19a80e Mon Sep 17 00:00:00 2001 From: Frederico Camargo Date: Thu, 8 Jan 2026 14:08:10 -0300 Subject: [PATCH 16/20] =?UTF-8?q?FDP-527=20Permitir=20que=20o=20usu=C3=A1r?= =?UTF-8?q?io=20crie=20visualiza=C3=A7=C3=B5es=20com=20metadados=20selecio?= =?UTF-8?q?nados=20para=20exibi=C3=A7=C3=A3o=20nas=20telas=20de=20listagem?= =?UTF-8?q?=20e=20na=20ficha?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/system/objeto_base.php | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/lib/system/objeto_base.php b/src/lib/system/objeto_base.php index 6d37d38..6c11bf3 100755 --- a/src/lib/system/objeto_base.php +++ b/src/lib/system/objeto_base.php @@ -1991,7 +1991,12 @@ public function ler_lista($pa_filtros_busca = null, $ps_visualizacao = "lista", $va_filtros_busca = $va_filtros_busca_union[$contador]; if ($vs_objeto) - $vo_objeto = new $vs_objeto($vs_objeto); + { + if ($vs_objeto == $this->tabela_banco) + $vo_objeto = $this; + else + $vo_objeto = new $vs_objeto($vs_objeto); + } if (method_exists($vo_objeto, "get_filtros_interditados")) { @@ -2214,18 +2219,23 @@ public function ler_lista($pa_filtros_busca = null, $ps_visualizacao = "lista", $va_visualizacao = $vo_objeto->get_visualizacao($ps_visualizacao)["campos"]; - foreach ($va_visualizacao as $ps_key_campo_visualizacao => $va_campo_visualizacao) { + foreach ($va_visualizacao as $ps_key_campo_visualizacao => $va_campo_visualizacao) + { // Primeiro, ver se o campo de visualização é atributo ////////////////////////////////////////////////////// - if (isset($vo_objeto->atributos[$va_campo_visualizacao["nome"]])) { - if (isset($vo_objeto->atributos[$va_campo_visualizacao["nome"]]["objeto"])) { - if (isset($va_item_resultado[$ps_key_campo_visualizacao])) { + if (isset($vo_objeto->atributos[$va_campo_visualizacao["nome"]])) + { + if (isset($vo_objeto->atributos[$va_campo_visualizacao["nome"]]["objeto"])) + { + if (isset($va_item_resultado[$ps_key_campo_visualizacao])) + { $vs_id_objeto = $vo_objeto->atributos[$va_campo_visualizacao["nome"]]["objeto"]; $vo_objeto_chave_estrangeira = new $vs_id_objeto($vs_id_objeto); - if ($va_item_resultado[$ps_key_campo_visualizacao]) { + if ($va_item_resultado[$ps_key_campo_visualizacao]) + { $va_objeto_chave_estrangeira = $vo_objeto_chave_estrangeira->ler($va_item_resultado[$ps_key_campo_visualizacao], "lista", $pn_idioma_codigo); $va_item_resultado[$ps_key_campo_visualizacao] = $va_objeto_chave_estrangeira; } @@ -2345,6 +2355,9 @@ public function ler_lista($pa_filtros_busca = null, $ps_visualizacao = "lista", if (isset($va_item_resultado[$vo_objeto_pai->chave_primaria[0]])) { + $vo_objeto_pai->visualizacoes[$ps_visualizacao]["campos"] = $va_visualizacao; + $vo_objeto_pai->visualizacoes[$ps_visualizacao]["campos"][$vo_objeto_pai->chave_primaria[0]] = $vo_objeto_pai->visualizacoes["ficha"]["campos"][$vo_objeto_pai->chave_primaria[0]]; + $va_resultado_pai = $vo_objeto_pai->ler($va_item_resultado[$vo_objeto_pai->chave_primaria[0]], $ps_visualizacao, $pn_idioma_codigo); $va_item_resultado = array_merge($va_item_resultado, $va_resultado_pai); From 84e90b47136638807ad93a1a000f722abb92af9b Mon Sep 17 00:00:00 2001 From: Frederico Camargo Date: Thu, 29 Jan 2026 11:30:32 -0300 Subject: [PATCH 17/20] =?UTF-8?q?FDP-584=20Refatora=C3=A7=C3=A3o=20do=20us?= =?UTF-8?q?o=20de=20atributos,=20envio=20da=20listagem=20de=20c=C3=B3digos?= =?UTF-8?q?,=20modo=20de=20compara=C3=A7=C3=A3o=20e=20lugar=20da=20fun?= =?UTF-8?q?=C3=A7=C3=A3o=20de=20busca=20pela=20p=C3=A1gina?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/dashboard_resultado_busca.php | 97 ++++---------------- src/lib/system/objeto_base.php | 89 +++++++++++++++++- 2 files changed, 105 insertions(+), 81 deletions(-) diff --git a/app/components/dashboard_resultado_busca.php b/app/components/dashboard_resultado_busca.php index 7195dea..ddd4fbb 100644 --- a/app/components/dashboard_resultado_busca.php +++ b/app/components/dashboard_resultado_busca.php @@ -21,91 +21,28 @@ if ($vb_busca_id && count($va_itens_listagem) != 0) { - - function sanitize_identifier($vs_raw_identifier) { - $vs_regex_pattern = '/[^0-9]/'; - return preg_replace($vs_regex_pattern, '', $vs_raw_identifier); - } - - $vs_identifier_key_sort = "item_acervo_identificador"; + $vs_identifier_attribute = $vo_objeto->tem_atributo("item_acervo_identificador_sort") ? "item_acervo_identificador_sort" : "item_acervo_identificador"; + $vn_objeto_codigo = $va_itens_listagem[0][$vo_objeto->get_chave_primaria()[0]]; + $vs_current_object_identifier = $va_itens_listagem[0][$vs_identifier_attribute]; - $va_current_object_identifier = $vo_objeto->ler($vn_objeto_codigo, "lista", $vn_idioma_catalogacao_codigo)[$vs_identifier_key_sort]; - $va_current_object_identifier = sanitize_identifier($va_current_object_identifier); - - - - function search_object_page($po_objeto, $pn_object_identifier, $pn_current_page, $pn_min, $pn_max) - { - if ($pn_min > $pn_max) - { - return false; - } - - $vn_registros_por_pagina = 20; - $vn_primeiro_registro = ($pn_current_page - 1) * $vn_registros_por_pagina + 1; - if ($vn_primeiro_registro < 1) - { - return false; - } - - $va_lista_objetos = $po_objeto->ler_lista([], "lista", $vn_primeiro_registro, $vn_registros_por_pagina, "item_acervo_codigo_0_item_acervo_identificador_sort", "ASC"); - $va_identificadores_lista_objetos = array_map(function ($pa_registro) - { - return (int)sanitize_identifier($pa_registro["item_acervo_identificador_sort"]); - }, $va_lista_objetos); - - - if (in_array((int)$pn_object_identifier, $va_identificadores_lista_objetos, true)) - { - return $pn_current_page; - - } + $vn_numero_registros = $vo_objeto->ler_numero_registros([]); + $vn_numero_paginas = ceil($vo_objeto->ler_numero_registros([]) / 20); + $vn_middle_page = floor($vn_numero_paginas / 2); - $vn_list_first_item = reset($va_identificadores_lista_objetos); - $vn_list_last_item = end($va_identificadores_lista_objetos); + list($vn_pagina_atual, $va_codigos_listagem) = $vo_objeto->encontrar_pagina_item_acervo($vs_current_object_identifier, $vs_identifier_attribute, $vn_middle_page, 1, $vn_numero_paginas); - if ((int)$pn_object_identifier > $vn_list_last_item) - { - $pn_min = $pn_current_page + 1; + $vn_primeiro_registro = ($vn_pagina_atual - 1)*20 + 1; + $vn_ultimo_registro = $vn_primeiro_registro + 19; - } - elseif ((int)$pn_object_identifier < $vn_list_first_item) - { - $pn_max = $pn_current_page - 1; - - } else - { - return false; - } - - if ($pn_min > $pn_max) - { - return false; - } - - $vn_next_page = floor(($pn_min + $pn_max) / 2); - if ($vn_next_page < 1) { - return false; - } - - return search_object_page($po_objeto, $pn_object_identifier, $vn_next_page, $pn_min, $pn_max); - - } - - if (count($va_itens_listagem)) { - - $vn_numero_registros = $vo_objeto->ler_numero_registros([]); - $_SESSION[$vs_id_objeto_tela]["numero_registros"] = $vn_numero_registros; - - $vn_numero_maximo_paginas = ceil($vo_objeto->ler_numero_registros([]) / 20); - $vn_middle_page = floor($vn_numero_maximo_paginas / 2); - $vn_pagina_atual = search_object_page($vo_objeto, $va_current_object_identifier, $vn_middle_page, 1, $vn_numero_maximo_paginas); - - $_SESSION[$vs_id_objeto_tela]['campo_paginacao'] = $vn_pagina_atual; - $_SESSION[$vs_id_objeto_tela]['sincronizar'] = 1; - - } + if ($vn_ultimo_registro > $vn_numero_registros) + $vn_ultimo_registro = $vn_numero_registros; + + //$_SESSION[$vs_id_objeto_tela]["numero_registros"] = count($va_lista_objetos); + $_SESSION[$vs_id_objeto_tela]["numero_registros"] = $vn_numero_registros; + $_SESSION[$vs_id_objeto_tela]['campo_paginacao'] = 'paginacao_top'; + $_SESSION[$vs_id_objeto_tela]['paginacao_top'] = $vn_pagina_atual; + $_SESSION[$vs_id_objeto_tela]["listagem_codigos"] = $va_codigos_listagem; print ''; } diff --git a/src/lib/system/objeto_base.php b/src/lib/system/objeto_base.php index 7a543b5..d8920b3 100755 --- a/src/lib/system/objeto_base.php +++ b/src/lib/system/objeto_base.php @@ -218,6 +218,18 @@ public function get_atributos() return $this->inicializar_atributos(); } + public function tem_atributo($ps_atributo_id) + { + if (!isset($this->atributos[$ps_atributo_id]) && $this->objeto_pai) + { + $vo_objeto_pai = new $this->objeto_pai; + + return isset($vo_objeto_pai->atributos[$ps_atributo_id]); + } + + return isset($this->atributos[$ps_atributo_id]); + } + public function get_atributo_identificador() { foreach ($this->atributos as $va_atributo) @@ -1958,7 +1970,9 @@ public function ler_lista($pa_filtros_busca = null, $ps_visualizacao = "lista", if (isset($va_filtros_busca_union)) $va_filtros_busca = $va_filtros_busca_union[$contador]; - if ($vs_objeto) + if ($vs_objeto == $this->tabela_banco) + $vo_objeto = $this; + else $vo_objeto = new $vs_objeto($vs_objeto); if (method_exists($vo_objeto, "get_filtros_interditados")) @@ -2313,6 +2327,9 @@ public function ler_lista($pa_filtros_busca = null, $ps_visualizacao = "lista", if (isset($va_item_resultado[$vo_objeto_pai->chave_primaria[0]])) { + $vo_objeto_pai->visualizacoes[$ps_visualizacao]["campos"] = $va_visualizacao; + $vo_objeto_pai->visualizacoes[$ps_visualizacao]["campos"][$vo_objeto_pai->chave_primaria[0]] = $vo_objeto_pai->visualizacoes["ficha"]["campos"][$vo_objeto_pai->chave_primaria[0]]; + $va_resultado_pai = $vo_objeto_pai->ler($va_item_resultado[$vo_objeto_pai->chave_primaria[0]], $ps_visualizacao, $pn_idioma_codigo); $va_item_resultado = array_merge($va_item_resultado, $va_resultado_pai); @@ -2421,6 +2438,76 @@ public function ler_lista($pa_filtros_busca = null, $ps_visualizacao = "lista", return $va_resultado; } + function encontrar_pagina_item_acervo($ps_object_identifier, $ps_identifier_attribute, $pn_current_page, $pn_min, $pn_max) + { + if ($pn_min > $pn_max) + { + return false; + } + + $vn_registros_por_pagina = 20; + $vn_primeiro_registro = ($pn_current_page - 1) * $vn_registros_por_pagina + 1; + + if ($vn_primeiro_registro < 1) + { + return false; + } + + $vs_identifier_attribute = $this->get_atributo_identificador(); + + if (isset($this->get_visualizacao("navegacao")["order_by"])) + $vs_main_sorter_attribute = array_keys($this->get_visualizacao("navegacao")["order_by"])[0]; + + + $va_lista_objetos = $this->ler_lista([], "lista", $vn_primeiro_registro, $vn_registros_por_pagina, $vs_main_sorter_attribute, "ASC"); + + $va_codigos_objetos = array(); + + foreach ($va_lista_objetos as $va_objeto) + { + $va_identificadores_lista_objetos[] = $va_objeto[$ps_identifier_attribute]; + $va_codigos_objetos[] = $va_objeto[$this->get_chave_primaria()[0]]; + } + + if (in_array($ps_object_identifier, $va_identificadores_lista_objetos, true)) + { + return array($pn_current_page, $va_codigos_objetos); + } + + $va_identificadores_lista_objetos[] = $ps_object_identifier; + + sort($va_identificadores_lista_objetos); + + $vn_list_first_item = reset($va_identificadores_lista_objetos); + $vn_list_last_item = end($va_identificadores_lista_objetos); + + if ($ps_object_identifier == $vn_list_last_item) + { + $pn_min = $pn_current_page + 1; + } + elseif ($ps_object_identifier == $vn_list_first_item) + { + $pn_max = $pn_current_page - 1; + } + else + { + return false; + } + + if ($pn_min > $pn_max) + { + return false; + } + + $vn_next_page = floor(($pn_min + $pn_max) / 2); + + if ($vn_next_page < 1) { + return false; + } + + return $this->encontrar_pagina_item_acervo($ps_object_identifier, $ps_identifier_attribute, $vn_next_page, $pn_min, $pn_max); + } + public function ler_lista_quantitativa($ps_id_relacionamento, $ps_label_objeto_relacionamento, $pa_filtros_busca = null, $pb_ordenar_por_quantidade = false) { if (isset($pa_filtros_busca)) From 5cf05554686e469767e91fd147de11707c2b66f9 Mon Sep 17 00:00:00 2001 From: Frederico Camargo Date: Thu, 5 Feb 2026 11:48:14 -0300 Subject: [PATCH 18/20] =?UTF-8?q?FDP-584=20-=20Na=20gera=C3=A7=C3=A3o=20de?= =?UTF-8?q?=20pagina=C3=A7=C3=A3o=20a=20partir=20da=20busca=20pelo=20ident?= =?UTF-8?q?ificador,=20corrigir=20c=C3=A1lculo=20da=20p=C3=A1gina=20centra?= =?UTF-8?q?l=20quando=20s=C3=B3=20existe=201=20p=C3=A1gina?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/dashboard_resultado_busca.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/dashboard_resultado_busca.php b/app/components/dashboard_resultado_busca.php index ddd4fbb..70f2e8e 100644 --- a/app/components/dashboard_resultado_busca.php +++ b/app/components/dashboard_resultado_busca.php @@ -28,7 +28,7 @@ $vn_numero_registros = $vo_objeto->ler_numero_registros([]); $vn_numero_paginas = ceil($vo_objeto->ler_numero_registros([]) / 20); - $vn_middle_page = floor($vn_numero_paginas / 2); + $vn_middle_page = ($vn_numero_paginas > 1) ? floor($vn_numero_paginas / 2) : 1; list($vn_pagina_atual, $va_codigos_listagem) = $vo_objeto->encontrar_pagina_item_acervo($vs_current_object_identifier, $vs_identifier_attribute, $vn_middle_page, 1, $vn_numero_paginas); From 5071584d28a72f1055557a36354784dae3e76dfc Mon Sep 17 00:00:00 2001 From: Frederico Camargo Date: Thu, 5 Feb 2026 12:02:46 -0300 Subject: [PATCH 19/20] =?UTF-8?q?FDP-584=20Na=20gera=C3=A7=C3=A3o=20de=20p?= =?UTF-8?q?agina=C3=A7=C3=A3o=20a=20partir=20da=20busca=20por=20identifica?= =?UTF-8?q?dor,=20tornar=20a=20ordena=C3=A7=C3=A3o=20case=20insensite?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/system/objeto_base.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/system/objeto_base.php b/src/lib/system/objeto_base.php index d8920b3..a4e4936 100755 --- a/src/lib/system/objeto_base.php +++ b/src/lib/system/objeto_base.php @@ -2476,7 +2476,7 @@ function encontrar_pagina_item_acervo($ps_object_identifier, $ps_identifier_attr $va_identificadores_lista_objetos[] = $ps_object_identifier; - sort($va_identificadores_lista_objetos); + natcasesort($va_identificadores_lista_objetos); $vn_list_first_item = reset($va_identificadores_lista_objetos); $vn_list_last_item = end($va_identificadores_lista_objetos); From 42f9a2d73f8429220426d21a88bbcebb2e479069 Mon Sep 17 00:00:00 2001 From: Frederico Camargo Date: Wed, 11 Feb 2026 09:28:03 -0300 Subject: [PATCH 20/20] =?UTF-8?q?IG-267=20Corrigir=20exibi=C3=A7=C3=A3o=20?= =?UTF-8?q?de=20resultados=20a=20partir=20da=20p=C3=A1gina=202=20em=20busc?= =?UTF-8?q?as=20de=20listas=20hier=C3=A1rquicas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/system/objeto_base.php | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/lib/system/objeto_base.php b/src/lib/system/objeto_base.php index 3403b94..92ff69a 100755 --- a/src/lib/system/objeto_base.php +++ b/src/lib/system/objeto_base.php @@ -1593,7 +1593,7 @@ private function montar_filtro_busca($pa_filtro, $po_objeto, $ps_ultima_tabela_f $pa_wheres_select[] = $vs_tabela_banco . "." . $vs_campo_tabela . " IS NOT NULL "; } //elseif (($pb_retornar_ramos_inferiores) && $vo_objeto_coluna->campo_hierarquico && ($va_filtro[0] != $po_objeto->campo_hierarquico)) - elseif (($pb_retornar_ramos_inferiores) && $vo_objeto_coluna->campo_hierarquico && !is_null($pa_valores_busca[0])) + elseif (($pb_retornar_ramos_inferiores) && $vo_objeto_coluna->campo_hierarquico && ($this->tipo_hierarquia != "subordinada") && !is_null($pa_valores_busca[0])) { $this->adicionar_ramos_hierarquicos($po_objeto, $vo_objeto_coluna, $vs_campo_tabela, $vs_tipo_dado_campo, $pa_valores_busca, $ps_operador, $ps_interrogacoes, $ps_operador_logico, false, $pn_primeiro_registro, $pn_numero_registros); } @@ -1637,7 +1637,7 @@ private function montar_filtro_busca($pa_filtro, $po_objeto, $ps_ultima_tabela_f $pa_wheres_select[] = $vs_alias_tabela_join . "." . $vs_campo_tabela_join . " IS NULL "; } } - elseif (($pb_retornar_ramos_inferiores) && isset($vo_objeto_tabela_intermediaria) && $vo_objeto_tabela_intermediaria->campo_hierarquico) + elseif (($pb_retornar_ramos_inferiores) && isset($vo_objeto_tabela_intermediaria) && $vo_objeto_tabela_intermediaria->campo_hierarquico && ($this->tipo_hierarquia != "subordinada")) { $vs_campo = "codigo"; $vs_tipo_campo = "i"; @@ -1829,11 +1829,7 @@ private function adicionar_ramos_hierarquicos($po_objeto, $po_objeto_coluna, &$p "wheres" => $va_wheres_select, ]; - $vs_limit = ""; - if ($pn_primeiro_registro && $po_objeto_coluna->tabela_banco == $po_objeto->tabela_banco) - $vs_limit = " LIMIT " . ($pn_primeiro_registro - 1) . ", " . $pn_numero_registros; - - $va_objetos_match_filtro_busca = $this->banco_dados->consultar($va_selects, $va_tipos_parametros_select, $va_parametros_select, null, $vs_limit); + $va_objetos_match_filtro_busca = $this->banco_dados->consultar($va_selects, $va_tipos_parametros_select, $va_parametros_select); $pa_valores_busca = array(); $va_interrogracoes = array(); @@ -1864,6 +1860,9 @@ private function adicionar_ramos_hierarquicos($po_objeto, $po_objeto_coluna, &$p $pa_valores_busca[] = $vn_codigo_no; $va_interrogracoes[] = "?"; } + + if ($pn_primeiro_registro && ($po_objeto_coluna->tabela_banco == $po_objeto->tabela_banco) && (count($pa_valores_busca) > ($pn_primeiro_registro + $pn_numero_registros - 1))) + break; } if ($po_objeto_coluna->tabela_banco == $po_objeto->tabela_banco)