
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!