You are not logged in.

Announcement

 Téléchargez la dernière version stable de GLPI      -     Et vous, que pouvez vous faire pour le projet GLPI ? :  Contribuer
 Download last stable version of GLPI                      -     What can you do for GLPI ? :  Contribute

#1 2020-03-14 13:49:35

rheritahiana
Member
Registered: 2020-03-14
Posts: 2

plugin barcode, lien généré par qrcode va toujours à id=1

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

#2 2020-03-15 12:14:55

rheritahiana
Member
Registered: 2020-03-14
Posts: 2

Re: plugin barcode, lien généré par qrcode va toujours à id=1

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

#3 2020-11-26 13:48:49

franzoa
Member
Registered: 2020-11-26
Posts: 1

Re: plugin barcode, lien généré par qrcode va toujours à id=1

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

Board footer

Powered by FluxBB