Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

White screen when duplicate a form #1779

Closed
mab18 opened this issue May 20, 2020 · 21 comments
Closed

White screen when duplicate a form #1779

mab18 opened this issue May 20, 2020 · 21 comments
Assignees
Labels

Comments

@mab18
Copy link

mab18 commented May 20, 2020

Describe the bug
When I want to duplicate a form, I have a blanck screen. If I go back, the form is created, I don't know if good creation. For example, it's not marked "copy".

Debug mode display an error:

PHP Notice: Undefined index: _group in /var/www/html/glpi/plugins/formcreator/inc/target_actor.class.php at line 133

Fatal error: Uncaught GlpiPlugin\Formcreator\Exception\ImportFailureException: failed to find a group in /var/www/html/glpi/plugins/formcreator/inc/target_actor.class.php:135 
Stack trace: 
#0 /var/www/html/glpi/plugins/formcreator/inc/targetticket.class.php(946): PluginFormcreatorTarget_Actor::import(Object(PluginFormcreatorLinker), Array, 32) 
#1 /var/www/html/glpi/plugins/formcreator/inc/form.class.php(2051): PluginFormcreatorTargetTicket::import(Object(PluginFormcreatorLinker), Array, 39) 
#2 /var/www/html/glpi/plugins/formcreator/inc/form.class.php(1514): PluginFormcreatorForm::import(Object(PluginFormcreatorLinker), Array) 
#3 /var/www/html/glpi/plugins/formcreator/inc/form.class.php(1579): PluginFormcreatorForm->duplicate() 
#4 /var/www/html/glpi/inc/massiveaction.class.php(990): PluginFormcreatorForm::processMassiveActionsForOneItemtype(Object(MassiveAction), Object(PluginFormcreatorForm), Array) 
#5 /var/www/html/glpi/inc/massiveaction.class.php(969): MassiveAction->processForSeveralItemtypes() 
#6 /var/www/html/glpi/fro in /var/www/html/glpi/plugins/formcreator/inc/target_actor.class.php on line 135

To Reproduce
I am not sure, but, I think the problem occurs when a form with a group is affected to tech and the form is exported to another system who don't have this group.
It's remain that the group is not shown, so it's not visible and can't be deleted. The form is broken.

Expected behavior
Could delete a bad group (marked in the form but doesn't exists in base.

Version :
GLPI 9.4.5+Form 2.9.1

@mab18
Copy link
Author

mab18 commented May 20, 2020

Hi,
Same with FC 2.9.2
I added a test : when duplicating the already duplicated, there is no error. I think it missing someting in the original that is not duplicated in target. So another copy from this target has no missing data...

@btry
Copy link
Collaborator

btry commented May 22, 2020

Hi

It seems that you have a target ticket with a group assigned as an actor (requester, observer or assigned). This group was probably deleted later.

Could you edit the target ticket and check if you see a group labelled "N/A" in the actors ?

@btry btry added the bug label May 22, 2020
@mab18
Copy link
Author

mab18 commented May 24, 2020

Hi,
Missing group in the form in target environment is not on the screen, and there is no N/A.

@btry
Copy link
Collaborator

btry commented Jun 12, 2020

Hi

Please try this fix and feedback.

@mab18
Copy link
Author

mab18 commented Jun 15, 2020

Bonjour,
J'ai réussi reproduire le cas (ayant pas mal modifié mes formulaires, mon cas de test n'en n'était plus un) :
J'ai cette erreur sans le patch :

PHP Notice: Undefined index: _group in /var/www/html/glpi/plugins/formcreator/inc/target_actor.class.php at line 133
Fatal error: Uncaught GlpiPlugin\Formcreator\Exception\ImportFailureException: failed to find a group in /var/www/html/glpi/plugins/formcreator/inc/target_actor.class.php:135 Stack trace: 
#0 /var/www/html/glpi/plugins/formcreator/inc/targetticket.class.php(946): 
PluginFormcreatorTarget_Actor::import(Object(PluginFormcreatorLinker), Array, 37) 
#1 /var/www/html/glpi/plugins/formcreator/inc/form.class.php(2082): PluginFormcreatorTargetTicket::import(Object(PluginFormcreatorLinker), Array, 45) 
#2 /var/www/html/glpi/plugins/formcreator/inc/form.class.php(1541): PluginFormcreatorForm::import(Object(PluginFormcreatorLinker), Array) 
#3 /var/www/html/glpi/plugins/formcreator/inc/form.class.php(1606): PluginFormcreatorForm->duplicate() 
#4 /var/www/html/glpi/inc/massiveaction.class.php(990): PluginFormcreatorForm::processMassiveActionsForOneItemtype(Object(MassiveAction), Object(PluginFormcreatorForm), Array) 
#5 /var/www/html/glpi/inc/massiveaction.class.php(969): MassiveAction->processForSeveralItemtypes() 
#6 /var/www/html/glpi/fro in /var/www/html/glpi/plugins/formcreator/inc/target_actor.class.php on line 135

Avec le patch :

Fatal error: Uncaught GlpiPlugin\Formcreator\Exception\ImportFailureException: failed to find a group in /var/www/html/glpi/plugins/formcreator/inc/target_actor.class.php:135 Stack trace: 
#0 /var/www/html/glpi/plugins/formcreator/inc/targetticket.class.php(946): PluginFormcreatorTarget_Actor::import(Object(PluginFormcreatorLinker), Array, 38) 
#1 /var/www/html/glpi/plugins/formcreator/inc/form.class.php(2082): PluginFormcreatorTargetTicket::import(Object(PluginFormcreatorLinker), Array, 46) 
#2 /var/www/html/glpi/plugins/formcreator/inc/form.class.php(1541): PluginFormcreatorForm::import(Object(PluginFormcreatorLinker), Array) 
#3 /var/www/html/glpi/plugins/formcreator/inc/form.class.php(1606): PluginFormcreatorForm->duplicate() 
#4 /var/www/html/glpi/inc/massiveaction.class.php(990): PluginFormcreatorForm::processMassiveActionsForOneItemtype(Object(MassiveAction), Object(PluginFormcreatorForm), Array) 
#5 /var/www/html/glpi/inc/massiveaction.class.php(969): MassiveAction->processForSeveralItemtypes() 
#6 /var/www/html/glpi/fro in /var/www/html/glpi/plugins/formcreator/inc/target_actor.class.php on line 135

A noter la 1ère ligne d'erreur ligne qui est présente sans le patch (ça n'est pas un oubli de copier/coller)

@btry
Copy link
Collaborator

btry commented Jun 15, 2020

Apparemment le patch fait son office; mais l'exception devrait être interceptée pour éviter une page blanche.

En tout cas, c'est clair, le groupe n'est pas rtrouvé dans la BDD, ou alors il y a un souci de conversion UUID / ID ou NOM / ID à résoudre.

Il faudrait lire le fichier JSON pour trouver le groupe, puis vérifier en BDD si il existe bel et bien. Si il n'existe pas, l'import devrait échouer, mais l'exception doit être interceptée pour éviter une page blanche.

@mab18
Copy link
Author

mab18 commented Jun 16, 2020

Ce formulaire provient d'un autre environnement (dev), et les groupes de même nom ne sont pas forcément numérotés (id) de façon identique dans la cible, effectivement.
Ca va rendre compliqué l'usage de l'import/export et si ça devient bloquant, cette fonctionnalité bien pratique deviendra inutile dans nombre de cas.

@btry
Copy link
Collaborator

btry commented Jun 16, 2020

Bonjour,

Je vois qu'en effet la gestion d'exceptions n'est pas faite dans le cas d'une duplication de formulaire.

Voilà un patch qui devrait rendre l'echec plus "user friendly"

Pouvez-vous l'essayer et me faire un retour ? Notez que le duplicata du formulaire ne devrait plus persister comme c'était le cas avant.

@mab18
Copy link
Author

mab18 commented Jun 16, 2020

Je regarde ;-) ...
[edit]
Aïe, ce que je craignais est arrivé : du coup, on ne peut plus dupliquer... et on ne sait pas ce qui fait planter vu que les groupes concernés ne s'affichent pas. (aucun N/A ou quoi que ce soit d'autre...)
image

On pourrait faire un compromis : afficher un warning tout en laissant la duplication se faire soustraite des erreurs ? En effet, le formulaire dupliqué avec page blanche sans le nouveau patch peut être dupliqué, lui.

L'export d'un environnement à un autre va inévitablement poser problème, et va imposer à refaire le formulaire à la main.

@btry
Copy link
Collaborator

btry commented Jun 16, 2020

Ajoutez le 2e commit du fix précédent, et ajoutez également celui-ci: 2df515b

Les groupes manquants devraient arfficher leur ID, et le formulaire dupliqué persistera en BDD, mais renommé de manière explicite.

@mab18
Copy link
Author

mab18 commented Jun 16, 2020

Celui-ci ? aaaf7a7

@btry
Copy link
Collaborator

btry commented Jun 16, 2020

Non, celui-ci : 4a1ccc1

@mab18
Copy link
Author

mab18 commented Jun 16, 2020

Cela me donne ça :
image
et
image
Ca me semble parfait ! C'est juste déroutant qu'il affiche un message d'erreur et que ce soit fait quand même, mais ce n'est pas bien grave.
Super travail !! Merci !!

@btry
Copy link
Collaborator

btry commented Jun 16, 2020

Je vais laisser le message d'erreur, ca attierra bien sur le fait que le formulaire ne fonctinnera pas comme voulu. J'espère avoir la possibilité de créer des uuid dans le coeur de GLPI 9.6 pour résoudre cela au mieux.

@mab18
Copy link
Author

mab18 commented Jun 16, 2020

Ah mais je vois que je n'ai pas appliqué 2df515b

@btry
Copy link
Collaborator

btry commented Jun 16, 2020

En effet. J'attends votre retour avant de merger ce commit

@mab18
Copy link
Author

mab18 commented Jun 16, 2020

Avec, ça me donne :
image
Je suppose que ça doit afficher un id utilisable dans d'autres cas :-)
Vu que j'ai déjà écrit que c'était super, c'est maintenant excellent ;-) On atteindra l'extraordinaire quand il y aura la traduction :-))

@mab18
Copy link
Author

mab18 commented Jun 16, 2020

Comment il y a pu avoir un ID 0 dans ce formulaire ??

@btry
Copy link
Collaborator

btry commented Jun 16, 2020

Pour trouver pourquoi il y a un ID 0, i lfaut vérifier si on a bien un nombre stocké dans le JSON, et éventuellement analyser le formulaire d'origine, et vérifier le code d'export (dans un autre ticket si on ne veut pas se perdre)

@mab18
Copy link
Author

mab18 commented Jun 16, 2020

Par comparaison des deux version, j'ai un bloc complet de question qui disparaît pour la version dupliquée. Avec un UUID, je ne sais pas retrouver dans la bdd...
Ce qui m'étonne, c'est que le groupe de tech concerné par ce bloc est identique, justement.

Ce n'est pas trop grave, je vais continuer à chercher ce qui n'allait pas sur ce formulaire précis (j'en avais d'autre) la fonction d'export perdure, ça c'est super.

Pour moi, les 3 correctifs :
6e05962
2df515b
et
4a1ccc1
corrigent cette anomalie.

@btry
Copy link
Collaborator

btry commented Jun 16, 2020

les UUID figurant dans le .json d'export sont ceux dans la BDD d'où est tiré l'export. Seuls les objets du plugin sont concernés par ces UUID.

Ils servent d'identifiant alternatifs pour ne pas s'appuyer sur des ID ai moment de l'import (ceux-ci pourraient être éjà utilisés).

Il y a à mon avis d'autres soucis dans l'import, il ya encore des PR en attente afin de corriger cela.

Je ferme ce ticket, puisque résolu. Merci pour les retours, ils sont appréciables pour améliorer cette partie du plugin.

@btry btry closed this as completed Jun 16, 2020
@btry btry added this to the 2.9.3 milestone Jun 16, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants