Ocomon 6.0.1 - Problemas ao editar configurações estendidas

1. Ocomon 6.0.1 - Problemas ao editar configurações estendidas

Luiz Fernando
Magskull

(usa Debian)

Enviado em 03/04/2025 - 17:20h

Tomei coragem de atualizar a aplicação para versão: 6.0.1, tava indo tudo perfeito e bonito até que fui atualizar configurações estendidas e de primeira, um dos campos do formulario responsável por definir o canal padrão não carregou, tinha mexido nisso na versão 4, estou procurando a documentação do que fiz mais ainda não encontrei, mas de qualquer forma, existe um problema que retorna o seguinte erro na página:

Fatal error: Uncaught TypeError: getChannels(): Argument #2 ($id) must be of type ?int, string given, called in /var/www/html/ocomon/admin/geral/config_plus.php on line 80 and defined in /var/www/html/ocomon/includes/functions/dbFunctions.php:7657 Stack trace: #0 /var/www/html/ocomon/admin/geral/config_plus.php(80): getChannels() #1 {main} thrown in /var/www/html/ocomon/includes/functions/dbFunctions.php on line 7657

Tambem no log do Apache:

[Wed Apr 02 16:13:17.686505 2025] [php:error] [pid 15806:tid 15806] [client 200.212.74.55:15230] PHP Fatal error: Uncaught TypeError: getChannels(): Argument #2 ($id) must be of type ?int, string given, called in /var/www/html/ocomon/admin/geral/config_plus.php on line 80 and defined in /var/www/html/ocomon/includes/functions/dbFunctions.php:7657\nStack trace:\n#0 /var/www/html/ocomon/admin/geral/config_plus.php(80): getChannels()\n#1 {main}\n thrown in /var/www/html/ocomon/includes/functions/dbFunctions.php on line 7657, referer: https://helpdesk.grifon.com.br/ocomon/index.php


  


2. Re: Ocomon 6.0.1 - Problemas ao editar configurações estendidas

Buckminster
Buckminster

(usa Debian)

Enviado em 03/04/2025 - 23:30h

PHP:
Argument #2 ($id) must be of type ?int, string given,

Apache:
Argument #2 ($id) must be of type ?int, string given,

As mensagens dizem em Português:
"O argumento deve ser do tipo Inteiro, foi dada uma String."

Acredito que você já saiba disso.

Linha 80 e adjacentes do arquivo config_plus.php:
"/* Canal da Solicitação para chamados abertos por e-mail*/
80 - $channelToOpenTickets = getChannels($conn, $configs['API_TICKET_BY_MAIL_CHANNEL'])['name'];
/* Cliente de entrada para chamados abertos por e-mail */
$clientToOpenTickets = TRANS('FILL_EMPTY');"

Linha 7657 e adjacentes do arquivo dbFunctions.php:
"/**
* getChannels
* Retorna um array com a listagem dos canais de entrada ou do canal específico caso o id seja informado
* O $type filtra se os canais exibidos estão marcados como only_set_by_system:0|1 (de utilização por meios automatizados)
* @param \PDO $conn
* @param null|int $id
* @param null|string $type : restrict|open| null:todos => Tipos de canais
* @return array
*/
7657 - function getChannels (\PDO $conn, ?int $id = null, ?string $type = null): array
{
$return = [];

$terms = '';
$typeList = ["restrict", "open"];
..."

Veja esse trecho:
" * Retorna um array com a listagem dos canais de entrada ou do canal específico caso o id seja informado"
E se o ID não for informado?
Se o ID não for informado acredito que retorna uma string, vazia, mas uma string.
Talvez um is_numeric resolva, é somente um palpite, não me aprofundei.

Estou instalando o Apache2, PHP, etc, para executar o Ocomon.

Outro ponto:
No arquivo dbFunctions.php se o rowCount() for maior que zero e o código entra no foreach a variável $data[] é utilizada para armazenar os resultados, mas a primeira ocorrência da variável $data é em

function getTagsList(\PDO $conn, ?int $id = null): array
{
$data = [];
$terms = "";

na linha 210 do arquivo dbFunctions.php.

Não instalei o MySQL ainda, mas quando você tem um $id e também um $type, o código pode acabar gerando um SQL com WHERE duas vezes.
Para evitar isso você precisa concatenar as condições corretamente.
Então, ao invés de sobrescrever $terms diretamente na função

$terms = "";
if ($id) {
$terms = " WHERE id = :id ";

você pode fazer uma verificação, tipo assim:

A partir da linha 212 do arquivo dbFunctions.php em vez de

if ($id) {
$terms = "WHERE id = :id ";
}

Introduza

if ($type) {
if (in_array($type, $typeList)) {
$terms .= ($terms ? "AND " : "WHERE ") . "only_set_by_system = :type ";
$filter = ($type == "restrict" ? 1 : 0);
} else {
$return[] = "Invalid type for channel";
return $return;
}

E daí continua como está ali:
$sql = "SELECT id, tag_name FROM input_tags {$terms} ORDER BY tag_name";
etc, etc...
}
Isso garantirá que, independentemente se o id e o type forem passados, a cláusula WHERE será construída corretamente.

Também:
$terms inicializa vazia/null/semnada como "" (string) Linha 211:
$terms = "";

E depois retorna da consulta como um Inteiro na linha 213 (pois acredito que o id seja um inteiro):
$terms = " WHERE id = :id ";
na Linha 213 do arquivo dbFunctions.php.

Não sei se me fiz claro.


_________________________________________________________
Always listen the Buck!
Enquanto o cursor estiver pulsando, há vida!


3. Re: Ocomon 6.0.1 - Problemas ao editar configurações estendidas

Amarildo Sertorio dos Santos
amarildosertorio

(usa Fedora)

Enviado em 04/04/2025 - 08:38h

Sugiro que seja reportado ao mantenedor.

https://ocomon.com.br/site/atualizacao-versao-6-0-1/


4. Re: Ocomon 6.0.1 - Problemas ao editar configurações estendidas

Luiz Fernando
Magskull

(usa Debian)

Enviado em 04/04/2025 - 11:11h

Olá Buckminster, vou testar suas recomendações e retorno aqui mais tarde.


E sim, amarildosertorio, validando a correção, irei entrar em contato com o mantenedor, inclusive enviei uma issue no giuthub, mas ainda sem retorno.

Obrigado a todos.


5. Re: Ocomon 6.0.1 - Problemas ao editar configurações estendidas

Buckminster
Buckminster

(usa Debian)

Enviado em 04/04/2025 - 15:46h

Magskull escreveu:

Olá Buckminster, vou testar suas recomendações e retorno aqui mais tarde.


E sim, amarildosertorio, validando a correção, irei entrar em contato com o mantenedor, inclusive enviei uma issue no giuthub, mas ainda sem retorno.

Obrigado a todos.


Instalei o Ocomon completo aqui (Apache2, PHP8.4, Mysql, IMAP, LDAP, etc).
Alterei os registros e não deu mensagem nenhuma de erro aqui, localmente.
Configurações Estendidas > Editar > Fiz alterações nos campos LDAP > Confirmar: Registro alterado com sucesso.
Qual campo em específico do formulário que está dando erro?


_________________________________________________________
Always listen the Buck!
Enquanto o cursor estiver pulsando, há vida!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts