web-dev-qa-db-fra.com

Changer le groupe d'utilisateurs dans onUserBeforeSave du plugin de profil utilisateur ne fonctionne pas

J'ai ajouté le code suivant dans onUserBeforeSave du plugin de profil utilisateur (plugins/user/profile/profile.php):

    if ($isnew)
    {
        if (!strcasecmp($data['role'], 'group0'))
        {
            $data['groups'] = array(10);
        }
        elseif (!strcasecmp($data['role'], 'group1'))
        {
            $data['groups'] = array(11);
        }

        JFactory::getApplication()->enqueueMessage(print_r($user, true));
        JFactory::getApplication()->enqueueMessage(print_r($data, true));       
    }

Les résultats de print_r indiquent que les données $ ont été modifiées avec succès, mais que le nouvel utilisateur ajouté à la base de données est toujours dans l'ancien groupe, à savoir "Enregistré".

Je ne sais pas quelle est la raison de cela. Et comment puis-je obtenir des groupes d’utilisateurs par défaut. Merci!

2
Rob L

Vous ne pouvez pas modifier les données utilisateur dans les événements onUserBeforeSave et onUserAfterSave. Ceci est juste une copie de ce qui sera/a été sauvegardé. Il serait préférable de:

  • utiliser onUserAfterSave événement
  • récupère l'objet utilisateur après la sauvegarde $user = JFactory::getUser($user_id)$user_id est l'identifiant d'un utilisateur à modifier
  • modifier les groupes d'utilisateurs comme ceci $user->groups = Array($new_user_group)
  • enregistrer l'utilisateur $user->save()
2
Artur Stępień