J'ai trouvé un plugin qui étend l'enregistrement principal de joomla en ajoutant un nouveau champ nommé User group selector
. Il existe une méthode de déclenchement dans ce plugin nommée onUserAfterSave qui enregistre le champ personnalisé après avoir enregistré les autres champs.
Ma question est la suivante: puisqu'il utilise une autre fonction pour enregistrer le groupe d'utilisateurs (celui sélectionné par l'utilisateur) et qu'il n'y a pas de query transaction
pour cela, que se passe-t-il si le second échoue? Y-a t'il une autre possibilité?
Nom du plugin: usergroupselector
Je ne connais pas le plugin et je ne suis pas tout à fait sûr de pouvoir penser à ce que vous pourriez avoir à l'esprit et qui vous inquiète à propos d'un éventuel échec.
Mais ma logique dit que si une fonction échoue dans toutes les conditions possibles qui pourraient conduire à une défaillance de la fonction, elle ne terminera pas son opération et nous n'obtiendrons donc pas le résultat attendu.
Dans le cas du plugin tel que vous l'avez décrit, il n'ajoutera tout simplement pas l'utilisateur au groupe d'utilisateurs sélectionné.
À présent, le bon aspect du code consiste toujours à prendre en compte les erreurs éventuelles et à renvoyer un message d'erreur ou tout autre élément utile en cas d'erreur.
La première requête fonctionne correctement, tandis que le groupe d'utilisateurs est un champ obligatoire qui doit être renseigné. Dans un script php personnalisé, nous pouvons utiliser une transaction SQL, mais comment pouvons-nous le faire lorsque nous étendons le plugin joomla?
Cela semble être une situation rare d'avoir un échec juste après avoir exécuté la fonction de sauvegarde de l'utilisateur et avant de le confier au groupe d'utilisateurs sélectionné - mais si vous allez aussi loin, cela pourrait être possible.
Toutefois, la portée du plug-in que vous utilisez semble être un flux de travail simple permettant aux utilisateurs de modifier leur groupe d'utilisateurs, plutôt qu'un programme très strict qui ne devrait jamais manquer d'attribuer un nouvel utilisateur enregistré à un groupe d'utilisateurs sélectionné.
Dans ce cas, vous pouvez écrire votre propre plug-in d'enregistrement avec une fonction onUserBeforeSave, de manière à transmettre le groupe d'utilisateurs sélectionné à la création de l'utilisateur. Cependant, je ne suis pas sûr si une transaction est impliquée dans ce flux de travail. Elle effectuera donc des mises à jour tout ou rien dans les tables associées.
La fonction onUserAfterSave
du plugin utilisateur ne renvoie aucune valeur, ce qui signifie qu'aucune action ne sera entreprise en appelant la fonction en fonction du résultat de cette fonction.
Dans l'enregistrement de base, l'utilisateur sera enregistré quel que soit le résultat de la fonction onUserAfterSave. Donc, si votre logique échoue dans cette fonction, l’utilisateur sera toujours enregistré, bien que votre user group selector
La valeur ne sera pas sauvegardée.
Voici le code qui appelle cette fonction:
// Fire the after save event
$dispatcher->trigger($this->event_after_save, array($table->getProperties(), false, true, null));