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 2023-04-25 19:32:24

dim007
Member
Registered: 2023-04-25
Posts: 3

How to override a GLPI file? Comment surcharger un fichier de GLPI ?

Hello,

It's been a while I develop my own modifications on GLPI (php / javascript) and I often wondered how to override a "native" GLPI file (in objective to develop a "clean" plugin).

Today it's a file from the "glpi/src/" directory that I'm interested to override (Item_Rack.php).

The goal here is to offer possibility to the administrator to select direction of slots in racks views (from bottom to top or reversed) and this for each rack.
IRL you can have racks in conventional direction but also have racks for which slots are numbered from top to bottom. Hence the need to be able to choose the numbering direction you want to see applied for each rack.

I already coded the modification (which works perfectly) but I had to modify the "Item_Rack.php" file to make it work.

I think a better way may exist to do it (in many other tools like CMS for example, you can easily make overrides with no need to modify the original files) but after having read documentation and forums, I didn't find anything like that.
Closest thing to this concept is the "hooks" system, but at first sight it doesn't fit my needs because it seems that you can ONLY use the hooks already available in the system.

I'd like to know if files overrides are supported in a way, or if it's possible to create custom hooks to fit my needs (create a plugin with no modification of the original GLPI files needed).

Others must have already faced same issue, I would like to know how to proceed in this case.

Thanks to those who will try to help! smile

PS: If there's no possibility to override, I'd like to push the mofication on the GLPI git project, if any. Btw the feature could be integrated in next version as I suppose that could be interresting for lot of people.

________________________________________________________________

Bonjour,

Ça fait déjà un moment que je dév mes propres modifications sur l'outil GLPI (scripts php / javascript) et je me suis souvent demandé comment réaliser la surcharge d'un fichier "natif" de GLPI (dans l'objectif de développer un plugin "propre").

Aujourd'hui, dans le cas qui m'intéresse, c'est un des fichiers du répertoire "glpi/src/" qu'il m'intéresserait d'overrider (Item_Rack.php).

Le but est d'offrir la possibilité à l'administrateur de sélectionner le sens des slots dans les vues des baies (du bas vers le haut ou l'inverse) et ce pour chaque baie.
"Dans la vraie vie", on peut très bien avoir des baies dans le sens conventionnel mais aussi avoir des baies dont les emplacements sont numérotés du haut vers le bas. D'où le besoin de pouvoir choisir le sens de numérotation qu'on veut voir appliqué pour chaque baie.

J'ai déjà codé la modification (qui fonctionne parfaitement) mais j'ai dû modifier le fichier "Item_Rack.php" afin que ça fonctionne.

Je me dis qu'il doit bien y avoir une possibilité de autrement (dans beaucoup d'autres outils comme des CMS par exemple, on peut réaliser des overrides facilement ce qui permet de ne pas avoir à modifier les fichiers originaux) mais après avoir épluché la doc et les forums, je n'ai rien trouvé de tel (ce qui se rapproche le plus de ce concept est le système de "hooks", mais qui à première vue ne correspond pas à mon besoin car il semble qu'on ne puisse utiliser QUE les hooks déjà implémentés et disponibles dans le système).

D'autres ont certainement déjà dû être confrontés au même problème, j'aimerai savoir comment on procède dans ce cas.

Merci pour ceux qui s'intéresseront au sujet smile

PS : si un override est réellement impossible à pratiquer (ce qui semble être le cas) dans ce cas j'aimerai proposer la modification sur le Git officiel du projet GLPI (s'il en existe bien un ?). Je suppose que cette fonctionnalité devrait intéresser bon nombre d'administrateurs de parcs informatiques.

Last edited by dim007 (2023-04-26 19:18:32)

Offline

#2 2023-05-01 23:33:07

dim007
Member
Registered: 2023-04-25
Posts: 3

Re: How to override a GLPI file? Comment surcharger un fichier de GLPI ?

I reply to myself here (for history), having had no help on my questions.

Override on GLPI core files is not planned. The only possible thing is to "extend" an existing class, what doesn't fit my need here (I need to modify the native GLPI behavior).
What I wanted to do is a method called "monkey-patching" (en.wikipedia.org/wiki/Monkey_patch), it's not easily possible to apply on GLPI unless installing some PECL extension on server side, what I cannot do on a production server.

However, I could write a plugin to do the job another way while the plugin installation process:
- make a backup of the original core file
- then copy custom files to the GLPI directories

Then I can run GLPI with the custom php/javascript code. Custom files are deleted while the plugin uninstall process, and the original core file is restored from the backup.
I couldn't find a better way to proceed, If someone has an idea to do otherwise, please tell me.

The plugin : github.com/dim00z/racksdirections
________________________________________________________________

Je réponds à mon propre post (pour archive), n'ayant eu aucune réponse jusqu'ici.

La surcharge d'un fichier du coeur de GLPI n'est définitivement pas supportée. Ce qui s'en rapproche le plus, c'est la méthode qui consiste à "étendre' une classe existante, ce qui ne correspond pas à mon besoin ici (je veux modifier le fonctionnement natif de GLPI).
La méthode qui consiste à modifier une classe existante en cours d'exécution (et non pas "étendre" une classe existante) sans altérer les fichiers originaux se nomme le "monkey-patching" (en.wikipedia.org/wiki/Monkey_patch), ce n'est pas évident à appliquer car il faut mettre en place une extension PECL particulière sur le serveur afin de permettre la chose, ce que je ne ferai pas sur un serveur en production.

Quoi qu'il en soit, j'ai pu coder un plugin qui se charge de faire le job autrement pendant son process d'installation :
- réalise une copie de sauvegarde du fichier core original
- copie ensuite des fichiers avec du code personnalisé dans les répertoires de GLPI

A partir de là je peux exécuter GLPI avec mon code personnalisé. Les fichiers additionnels sont supprimés pendant le processus de désinstallation du plugin (au cas où), et le fichier core original est restauré depuis la sauvegarde.
Je n'ai pas trouvé d'autre façon de procéder pour parvenir à ce que je voulais faire, si quelqu'un a une meilleure idée, svp faites le moi savoir.

Le plugin en question : github.com/dim00z/racksdirections

Last edited by dim007 (2023-05-03 00:08:10)

Offline

#3 2023-05-04 15:29:42

hcimadomo-procsi
Member
Registered: 2017-07-12
Posts: 27

Re: How to override a GLPI file? Comment surcharger un fichier de GLPI ?

bonjour,
je suis dans le meme besoin. J'ai mis un dev sur le coup pour explorer la solution monkey-patch. L'idée du plugin qui sauvegarde/restaure les fichiers originaux necessite quand meme de refaire les modifs de code a chaque version.
cordialement

Offline

#4 2023-05-04 17:14:31

dim007
Member
Registered: 2023-04-25
Posts: 3

Re: How to override a GLPI file? Comment surcharger un fichier de GLPI ?

Refaire les modifs à chaque version, pas forcément, mais à minima de vérifier si le fichier core a changé entre la dernière hotfix et la précédente (et effectivement de refaire le patch si nécessaire).
De mon point de vue, ça reste moins coûteux que d'avoir à installer les extensions PECL qui vont bien pour pouvoir ensuite exploiter runkit7... sans garantie de fonctionnement absolue au final.

D'un autre point de vue, si vous devez modifier des fichiers du coeur de GLPI, c'est sans doute pour y apporter une fonctionnalité qui n'y est pas encore présente ?
=> dans ce cas il faut peut-être envisager de proposer vos modifications directement sur la branche de dév de GLPI, de façons à ce que tout le monde puisse profiter de l'amélioration en question.

Last edited by dim007 (2023-05-05 09:20:28)

Offline

Board footer

Powered by FluxBB