pluginsGLPI / barcode

GNU Affero General Public License v3.0
36 stars 34 forks source link

Probleme QRcode::png #125

Open chrishablet opened 1 year ago

chrishablet commented 1 year ago

onjour,

J'ai effectué de nombreuses recherches avant de poster mais je ne trouve pas de solution. Je n'arrive pas à générer de QRCode avec la fonction massiveaction.php j'ai une page blanche, en mode debug j'ai l'erreur suivante :

Uncaught Exception Error: Call to undefined method QRcode::png() in /home2/xxx/xxxx/public/marketplace/barcode/inc/qrcode.class.php at line 159

Merci pour votre aide

Hébergement mutualisé O2SWITCH

Information serveur :

Operating system: Linux cafe.o2switch.net 4.18.0-425.19.2.lve.el7h.x86_64 #1 SMP Thu Apr 6 13:40:55 UTC 2023 x86_64 PHP 7.4.33 litespeed (Core, PDO, Phar, Reflection, SPL, SimpleXML, Zend OPcache, bcmath, bz2, calendar, ctype, curl, date, dom, exif, fileinfo, filter, ftp, gd, gettext, gmp, hash, iconv, imagick, imap, intl, json, ldap, libxml, litespeed, mbstring, mysqli, mysqlnd, openssl, pcntl, pcre, pdo_mysql, pdo_pgsql, pdo_sqlite, pgsql, posix, readline, session, shmop, soap, sockets, sqlite3, standard, sysvmsg, sysvsem, sysvshm, tidy, tokenizer, xml, xmlreader, xmlrpc, xmlwriter, xsl, zip, zlib) Setup: max_execution_time="360" memory_limit="512M" post_max_size="512M" safe_mode="" session.save_handler="files" upload_max_filesize="512M" Software: Apache () Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Server Software: MariaDB Server Server Version: 10.6.14-MariaDB Server SQL Mode: Parameters: xxxxxx@localhost/xxxxxx Host info: Localhost via UNIX socket

PHP version (7.4.33) is supported.PHP version (7.4.33) is supported. Sessions configuration is OK.Sessions configuration is OK. Allocated memory is sufficient.Allocated memory is sufficient. mysqli extension is installed.mysqli extension is installed. Following extensions are installed: dom, fileinfo, json, simplexml.Following extensions are installed: dom, fileinfo, json, simplexml. curl extension is installed.curl extension is installed. gd extension is installed.gd extension is installed. intl extension is installed.intl extension is installed. libxml extension is installed.libxml extension is installed. zlib extension is installed.zlib extension is installed. The constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES is present.The constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES is present. Database engine version (10.6.14) is supported.Database engine version (10.6.14) is supported. No files from previous GLPI version detected.No files from previous GLPI version detected. The log file has been created successfully.The log file has been created successfully.

PHP 7.4 official support has ended. An upgrade to a more recent PHP version is recommended.PHP 7.4 official support has ended. An upgrade to a more recent PHP version is recommended. Web server root directory configuration seems safe.Web server root directory configuration seems safe. PHP directive "session.cookie_secure" should be set to "on" when GLPI can be accessed on HTTPS protocol. PHP directive "session.cookie_httponly" should be set to "on" to prevent client-side script to access cookie values.PHP directive "session.cookie_secure" should be set to "on" when GLPI can be accessed on HTTPS protocol. PHP directive "session.cookie_httponly" should be set to "on" to prevent client-side script to access cookie values. OS and PHP are relying on 64 bits integers.OS and PHP are relying on 64 bits integers. exif extension is installed.exif extension is installed. ldap extension is installed.ldap extension is installed. openssl extension is installed.openssl extension is installed. Following extensions are installed: bz2, Phar, zip.Following extensions are installed: bz2, Phar, zip. Zend OPcache extension is installed.Zend OPcache extension is installed. Following extensions are installed: ctype, iconv, mbstring. Following extensions are not present: sodium.Following extensions are installed: ctype, iconv, mbstring. Following extensions are not present: sodium. Write access to /home2/xxxxx/xxxxxxxxx/public/marketplace has been validated.Write access to /home2/xxx/xxxxr/public/marketplace has been validated. Access to timezone database (mysql) is not allowed.Access to timezone database (mysql) is not allowed.

marc-henri commented 6 months ago

Bonjour @chrishablet Je me permets d'intervenir dans l'exposé de votre problème afin de savoir si vous lui avez trouvé une issue ? Je rencontre le même type de message d'erreur :

[2024-03-18 17:21:49] glpiphplog.CRITICAL: *** Uncaught Exception Error: Call to undefined method QRcode::png() in /var/www/glpi-10.0.14/plugins/barcode/inc/qrcode.class.php at line 159 Backtrace : plugins/barcode/inc/qrcode.class.php:381 PluginBarcodeQRcode->generateQRcode() src/MassiveAction.php:1420 PluginBarcodeQRcode::processMassiveActionsForOneItemtype() src/MassiveAction.php:1398 MassiveAction->processForSeveralItemtypes() front/massiveaction.php:62 MassiveAction->process() public/index.php:82 require()

Voici, le contenu de la ligne 159 de ce fichier "barcode/inc/qrcode.class.php" : QRcode::png($codeContents, GLPI_PLUGIN_DOC_DIR.'/barcode/tmp'.$rand.'-'.$number.'.png', QR_ECLEVEL_L, 4);

Il s'avère que, après quelques recherches, je trouve la méthode QRcode::png dans le fichier suivant :

Dès lors que l'erreur est "Call to undefined method QRcode::png()", cela signifie que le fichier barcode/vendor/deltalab/phpqrcode/qrencode.php n'a pas été chargé par le ClassLoader. Je confirme l'erreur puisque juste avant le chargement de la méthode QRcode::png(), j'ai invoqué un test du type "if (!class_exists('QRcode', false)) {..." et cette condition est VRAI.

Donc, question : comment fonctionne le chargement des fichiers de classe de type "vendor" avec les plugins GLPI ?

EngelenH commented 4 months ago

For what it is worth ... Decided to go a different way ... The code in question is pretty old (2010 I believe). I just used chillerlan/php-qrcode as a drop-in replacement.

Just ran the composer for it and problem solved...

composer require chillerlan/php-qrcode

Using GLPI through hosting and a cpanel install and got a little tired of looking for needles in haystacks to get all the tidbits working correctly.

marc-henri commented 4 months ago

I close this monologue, hoping that it will be useful to other users of the GLPI application.

WARNING: On your GLPI 10.0.x instance, if you use the PDF (version 3.0.0) and Barcode (version 2.7.1) plugins together, be aware that Barcode will not work because the autoload function of the external "vendor" classes will give preference to the external classes of the PDF plugin rather than to those of the Barcode plugin. This results in an incompatibility causing the error: CRITICAL: *** Uncaught Exception Error: Call to undefined method QRcode::png() in /var/www/glpi-10.0.14/plugins/barcode/inc/qrcode.class.php at line 159

For the moment, I have decided to deactivate the PDF plugin which does not necessarily meet a need (unlike printing QR codes).

This does not change the fact that there is a compartmentalization defect with the GLPI (Core) classLoader, making certain plugins incompatible when other plugins are present.

-------- Français -----------

Je clôture ce monologue, espérant qu'il sera utile à d'autres usagers de l'application GLPI.

ATTENTION : Sur votre instance de GLPI 10.0.x, si vous utilisez conjointement les plugins PDF (version 3.0.0) et Barcode (version 2.7.1), sachez que Barcode ne fonctionnera pas car la fonction autoload des classes externes "vendor" accordera la préférence aux classes externes du plugin PDF plutôt qu'aux classes externes du plugin Barcode. Il en résulte une incompatibilité provoquant l'erreur : CRITICAL: *** Uncaught Exception Error: Call to undefined method QRcode::png() in /var/www/glpi-10.0.14/plugins/barcode/inc/qrcode.class.php at line 159

Pour le moment, je me suis contacté de désactiver le plugin PDF qui ne répond pas nécessairement à un besoin (au contraire de l'impression des QRCode).

Cela n'enlève rien à un défaut de cloisonnement avec le classLoader de GLPI (Core) rendant, de facto, certains plugins incompatible quand d'autres plugins sont présents.

EORIS-SUPPORT commented 1 month ago

I close this monologue, hoping that it will be useful to other users of the GLPI application.

WARNING: On your GLPI 10.0.x instance, if you use the PDF (version 3.0.0) and Barcode (version 2.7.1) plugins together, be aware that Barcode will not work because the autoload function of the external "vendor" classes will give preference to the external classes of the PDF plugin rather than to those of the Barcode plugin. This results in an incompatibility causing the error: CRITICAL: *** Uncaught Exception Error: Call to undefined method QRcode::png() in /var/www/glpi-10.0.14/plugins/barcode/inc/qrcode.class.php at line 159

For the moment, I have decided to deactivate the PDF plugin which does not necessarily meet a need (unlike printing QR codes).

This does not change the fact that there is a compartmentalization defect with the GLPI (Core) classLoader, making certain plugins incompatible when other plugins are present.

-------- Français ----------- Je clôture ce monologue, espérant qu'il sera utile à d'autres usagers de l'application GLPI.

ATTENTION : Sur votre instance de GLPI 10.0.x, si vous utilisez conjointement les plugins PDF (version 3.0.0) et Barcode (version 2.7.1), sachez que Barcode ne fonctionnera pas car la fonction autoload des classes externes "vendor" accordera la préférence aux classes externes du plugin PDF plutôt qu'aux classes externes du plugin Barcode. Il en résulte une incompatibilité provoquant l'erreur : CRITICAL: *** Uncaught Exception Error: Call to undefined method QRcode::png() in /var/www/glpi-10.0.14/plugins/barcode/inc/qrcode.class.php at line 159

Pour le moment, je me suis contacté de désactiver le plugin PDF qui ne répond pas nécessairement à un besoin (au contraire de l'impression des QRCode).

Cela n'enlève rien à un défaut de cloisonnement avec le classLoader de GLPI (Core) rendant, de facto, certains plugins incompatible quand d'autres plugins sont présents.

Hello

J'ai fait le test avec PDF désactivé mais le problème persiste.

Après analyse, il semblerait que le problème d'impression de QR-CODE , ne se présente que lorsque qu'un logo est défini dans le plugin, quand je ne définis aucun logo d'entreprise dans le plugin mes impressions de QR code fonctionnent parfaitement , dès que j'en définis un, je me retrouve bloqué sur massiveaction.php .