You are not logged in.
Bonjour,
J'utilise la version 9.4.5 de GLPI, avec le plugin barcode 2.4.1.
Tout semble ok à par le fait que l'url généré quand on scanne le qrcode ramème toujours à l'ordinateur id=1.
J'ai fouiné dans le code de "checkItembyInv.php" mais je ne comprenpas trop le fonctionnenement de getFromDBByCrit.
Merci pour toute aide.
include ('../../../inc/includes.php');
Session::checkRight("config", UPDATE);
// To be available when plugin is not activated
Plugin::load('barcode');
Html::header(__('Barcode', 'barcode'), $_SERVER['PHP_SELF'], "config", "plugins");
$itemtype = $_GET['itemtype'];
$item = new $itemtype();
$itemInventoryNumber[] = $_GET['inventoryNumber'];
foreach ($itemInventoryNumber as $key => $value) {
$item = $item->getFromDBByCrit(['otherserial' => $value]);
Html::redirect($itemtype::getFormURLWithID($item));
};
Html::footer();
Last edited by rheritahiana (2020-03-14 13:49:54)
Offline
Rebonjour,
Finalement, j'ai changé un autre fichier pour faire ce que je voulais.
j'ai changé la variable "$URLByInvNumber" dans le fichier /inc/qrcode.class.php du plugin par celui-ci:
$URLByInvNumber = 'URL = ' . $CFG_GLPI['url_base'] . '/front/computer.form.php?id='. $items_id;
et cela m'emmène directement sur la parche de l'ordinateur en question
Offline
Bonjour,
J'ai récemment installé GLPI 9.5 avec le plugin barcode 2.5. J'ai constaté le même problème pour les URLs générées avec le numéro d'inventaire (les URLs générées avec l'ID sont OK)
L'URL ressemble à ça:
monserveurglpi.com/glpi/marketplace/barcode/front/checkItemByInv.php?inventoryNumber=00000001&itemtype=Computer
Cette URL est ensuite redirigée sur une URL de type:
monserveurglpi.com/glpi/front/computer.form.php?id=32, après avoir recherché l'id de l'item correspondant au numéro d'inventaire spécifié dans la première URL.
En recherchant un peu, j'ai vu que checkItembyInv.php faisait appel à la fonction getFromDBByCrit (dans ...glpi/inc/commondbtm.class.php).
La fonction getFromDBByCrit faisait la bonne requête sur la DB et que la réponse de la DB était bonne. Par contre, getFromDBByCrit appelle une autre fonction getFromDB (ligne: return $this->getFromDB($row['id']);) qui elle, retourne un booléen, soit 0 soit 1.
=>La valeur retournée à checkItemByInv.php utilisé dans l'url (...marketplace/barcode/front/checkItemByInv.php) est 0 ou 1, ce qui fait que l'id est toujours soit 1, soit 0.
J'ai remplacé dans getFromDBByCrit (ligne 345 dans ...glpi/inc/commondbtm.class.php) la ligne:
return $this->getFromDB($row['id']);
par:
return $row['id'];
et l'url est maintenant redirigée correctement, par contre cela a peut-être/certainement des impacts ailleurs..
J'attends avec impatience un feedback sur ma bidouille.
Code complet de la fonction getFromDBByCrit dans ...glpi/inc/commondbtm.class.php
/**
* Get an object using some criteria
*
* @since 9.2
*
* @param Array $crit search criteria
*
* @return boolean|array
*/
public function getFromDBByCrit(array $crit) {
global $DB;
$crit = ['SELECT' => 'id',
'FROM' => $this->getTable(),
'WHERE' => $crit];
$iter = $DB->request($crit);
if (count($iter) == 1) {
$row = $iter->next();
######################
# THIS IS THE LINE I REPLACED #
#return $this->getFromDB($row['id']);
return $row['id'];
} else if (count($iter) > 1) {
Toolbox::logWarning(
sprintf(
'getFromDBByCrit expects to get one result, %1$s found!',
count($iter)
)
);
}
return false;
}
Offline