You are not logged in.
Bonjour,
Si j'utilise TicketStatusCriteria dans un rapport, j'obtiens lors de l'appel
$query.= $report->addSqlCriteriasRestriction("WHERE");
pour la clause WHERE la syntaxe :
WHERE status=assign
au lieu de
WHERE status='assign' (avec les quotes).
(note : il est indispensable d'utiliser un glpi_tracking.status AS status dans la query puisque la clause n'est pas WHERE glpi_tracking.status='assign').
Une idée de l'origine du problème ?
(NB : Je ne peux pas passer en 0.78 pour l'instant.)
Merci d'avance
Offline
Pas compris votre question. Dans la version 1.3.0, la valeur du champ est bien protégé dans la fonction getSqlCriteriasRestriction.
A quoi correspond $report dans votre code ? (sans le code, dificile de vous aider)
CentOS 6.5 - CentOS 7.x
PHP 5.6 - PHP 7.x - MySQL 5.6 - MariaDB 10.2 + APC + oOPcache
GLPI from 0.72 to dev version
Certifiée ITIL (ITV2F, ITILF, ITILOSA)
Offline
Voici un petit démonstrateur :
<?php
//$NEEDED_ITEMS = array("enterprise");
//Options for GLPI 0.71 and newer : need slave db to access the report
$USEDBREPLICATE=0;
$DBCONNECTION_REQUIRED=0; // Really a big SQL request
define('GLPI_ROOT', '../../../..');
include (GLPI_ROOT . "/inc/includes.php");
$report = new AutoReport("test2");
//Report's search criterias
//new DateIntervalCriteria($report,"glpi_tracking.date");
new TicketStatusCriteria($report);
//Display criterias form is needed
$report->displayCriteriasForm($_SERVER['PHP_SELF']);
//If criterias have been validated
if ($report->criteriasValidated())
{
$report->setSubNameAuto();
//Names of the columns to be displayed
$colnumsnames = array ("id" => "id",
"name"=>"Titre",
"status"=>"status");
$report->setColumnsNames($colnumsnames);
//Colunmns mappings if needed
//$columns_mappings = array("priority"=>getPriorityLabelsArray());
//$report->setColumnsMappings($columns_mappings);
$query ="SELECT glpi_tracking.ID AS id,
glpi_tracking.name AS name,
glpi_tracking.status AS status
FROM glpi.glpi_tracking glpi_tracking ";
$query.= $report->addSqlCriteriasRestriction("WHERE");
print($query);
$report->setSqlRequest($query);
$report->execute();
}
else
commonFooter();
?>
résultat pour moi : la query générée est :
SELECT glpi_tracking.ID AS id, glpi_tracking.name AS name, glpi_tracking.status AS status FROM glpi.glpi_tracking glpi_tracking WHERE status=assign
et il n'y a pas de quote autour du status='assign'
et le résultat de la query contient les status new, old_notdone et plan ...
Offline
Version du plugin ?
car je confirme que dans la version 1.3.0, la valeur du champ est bien protégé dans la fonction getSqlCriteriasRestriction.
CentOS 6.5 - CentOS 7.x
PHP 5.6 - PHP 7.x - MySQL 5.6 - MariaDB 10.2 + APC + oOPcache
GLPI from 0.72 to dev version
Certifiée ITIL (ITV2F, ITILF, ITILOSA)
Offline
In the reports\inc\plugin_reports.autocriteria.class.php
find : public function getSqlCriteriasRestriction($link = 'AND') {
and replace this fonction by:
/**
* Get SQL code associated with the criteria
*/
public function getSqlCriteriasRestriction($link = 'AND') {
if (!$this->childrens)
// add control about type of getParameterValue if string we must add ''
// last code :
//return $link . " " . $this->getSqlField() . "=" . $this->getParameterValue() . " ";
if(is_numeric($this->getParameterValue()))
{
return $link . " " . $this->getSqlField() . "=" . $this->getParameterValue() . " ";
}
else
{
return $link . " " . $this->getSqlField() . "='" . $this->getParameterValue() . "' ";
}
else
return $link . " " . $this->getSqlField() . " IN (" . implode(',', getSonsOfTreeItem($this->getTable(), $this->getParameterValue())) . ") ";
}
Offline
Je confirme que vous n'avez pas la bonne version, car la function correcte est :
public function getSqlCriteriasRestriction($link = 'AND') {
return $link . " " . $this->getSqlField() . "='" . $this->parameters[$this->getName()] . "' ";
}
et comme vous le voyez, le paramètre est bien protégé
CentOS 6.5 - CentOS 7.x
PHP 5.6 - PHP 7.x - MySQL 5.6 - MariaDB 10.2 + APC + oOPcache
GLPI from 0.72 to dev version
Certifiée ITIL (ITV2F, ITILF, ITILOSA)
Offline