automne-cms / automne

Intuitive and powerful CMS based on Apache, PHP, MySQL
https://www.automne-cms.com
14 stars 9 forks source link

Création d'un utilisateur #71

Closed emmanuelVentura closed 11 years ago

emmanuelVentura commented 11 years ago

Lors de la création d'un utilisateur, il est impossible de le créer désactivé par défaut. $cms_user = new CMS_profile_user(); $cms_user->setActive(false); Ceci ne fonctionne pas. Il faut que l'utilisateur soit créé pour pouvoir être désactivé.

gfilliere commented 11 years ago

Qu'est-ce qui ne fonctionne pas ? Avec le code suivant le nouvel utilisateur est bien désactivé (isActive() renvoit bien false et dans la base de donnée le champ active_pru est à 0) :

$cms_user = new CMS_profile_user();
$cms_user->setActive(false);
$cms_user->writeToPersistence();
emmanuelVentura commented 11 years ago

Ok, voici mon code :

        // Initialisation de l'utilisateur Automne
        $cms_user = new CMS_profile_user();

        // Construction du profil
        $cms_user_contactData = $cms_user->getContactData();

        // Initialisation des variables
        $cms_user_success = false;
        $cms_user_errors = array();

        // Groupe(s) auxquels rattacher l'utilisateur (utiliser les ID des groupes)
        $cms_user_groups = array(1, 3);

 if (isset($_POST['cms_user_submit'])) {

            // Vérification du token
            $post_user_token = io::post('atm-token');
            if (!CMS_context::checkToken('edit-profile', $post_user_token)) {
                    $cms_user_errors[] = 'Votre formulaire a expiré. veuillez le soumettre à nouveau.';
            } else {
                    CMS_context::expireToken('edit-profile');
            }

            // Langue de l'utilisateur
            $cms_user->setLanguage("{page:self:language}");

            // Prénom
            $cms_user->setFirstName(io::post('firstname'));

            // Nom
            $post_user_lastname = io::post('lastname');
            if (trim($post_user_lastname) == '') {
                $cms_user_errors[] = 'Vous devez saisir un nom.';
            } else {
                $cms_user->setLastName();
            }

            // Genre
            $cms_user_contactData->setGender(io::post('gender'));

            // Société
            $cms_user_contactData->setCompany(io::post('company'));

            // Service
            $cms_user_contactData->setService(io::post('service'));

            // Fonction
            $cms_user_contactData->setJobTitle(io::post('jobtitle'));

            // Adresse
            $cms_user_contactData->setAddressField1(io::post('address_1'));

            // Complément d'adresse
            $cms_user_contactData->setAddressField2(io::post('address_2'));

            // Complément d'adresse
            $cms_user_contactData->setAddressField3(io::post('address_3'));

            // Code postal
            $cms_user_contactData->setZip(io::post('zip'));

            // Ville
            $cms_user_contactData->setCity(io::post('city'));

            // État
            $cms_user_contactData->setState(io::post('state'));

            // Pays
            $cms_user_contactData->setCountry(io::post('country'));

            // Téléphone
            $cms_user_contactData->setPhone(io::post('phone'));

            // Téléphone mobile
            $cms_user_contactData->setCellphone(io::post('cellphone'));

            // Fax
            $cms_user_contactData->setFax(io::post('fax'));

            // Vérification du login
            $post_user_login = io::post('login');
            if (trim($post_user_login) == '' || !io::isValidLogin($post_user_login)) {
                    $cms_user_errors[] = 'Vous devez saisir un login.';
            } else if (CMS_profile_usersCatalog::loginExists($post_user_login, new CMS_profile_user())) {
                    $cms_user_errors[] = 'Ce login existe déjà.';
            } else {
                    $cms_user->setLogin($post_user_login);
            }

            // Vérification du mot de passe
            $post_user_password = io::post('password', 'sensitiveIO::isValidPassword');
            $post_user_password_confirm = io::post('password_confirm', 'sensitiveIO::isValidPassword');
            if (trim($post_user_password) != '') {
                    if ($post_user_password != $post_user_password_confirm) {
                            $cms_user_errors[] = 'Votre mot de passe n\'a pas pu être confirmé.';
                    } else if ($cms_user->getLogin() == $post_user_password || $login == $post_user_password) {
                            $cms_user_errors[] = 'Votre mot de passe ne doit pas être votre login.';
                    } else {
                            $cms_user->setPassword($post_user_password);
                    }
            } else {
                 $cms_user_errors[] = 'Un mot de passe d\'au moins 5 caractères est requis pour la création du compte.';
            }

            // Vérification de l'adresse email
            $post_user_email = io::post('email', 'io::isValidEmail');
            if (trim($post_user_email) == '' || !io::isValidEmail($post_user_email)) {
                    $cms_user_errors[] = 'Un email valide est requis.';
            } else {
                    $cms_user_contactData->setEmail($post_user_email);
            }

            // Enregistrement des informations
            if (is_array($cms_user_errors) && count($cms_user_errors) === 0) {

                // Création de l'utilisateur
                $cms_user->setContactData($cms_user_contactData);
                $cms_user->writeToPersistence();

                // Ajout des groupes
                for($i=0; $i<count($cms_user_groups); $i++){
                    $groupe = new CMS_profile_usersGroup($cms_user_groups[$i]);
                    $groupe->addToUserAndWriteToPersistence($cms_user);
                }
                $cms_user_success = true;

                // Compte actif (true/false)
                $cms_user->setActive(false);
                $cms_user->writeToPersistence();
            }
        }   

Si je déplace le $CMS_user->setActive(false) plus haut dans le code mon utilisateur est systématiquement actif, ma parade consiste a le désactiver après l'enregistrement.

emmanuelVentura commented 11 years ago

Ok, j'ai trouvé, tu as raison, mais la cause est là :

            // Ajout des groupes
            for($i=0; $i<count($cms_user_groups); $i++){
                $groupe = new CMS_profile_usersGroup($cms_user_groups[$i]);
                $groupe->addToUserAndWriteToPersistence($cms_user);
            }

Ceci active mon utilisateur.

emmanuelVentura commented 11 years ago

Bon aux vues de la fonction ce n'est donc pas un bug même si perso je trouve cela bizarre

function addToUserAndWriteToPersistence(&$user, $writeUser = true) { if (is_a($user,"CMS_profile_user") && !$user->hasError()) { //Get current user groups ids $userGroupIds = CMS_profile_usersGroupsCatalog::getGroupsOfUser($user, true, true); //if user has no group, we must clear his profile before if (!$userGroupIds) { //reset profile clearances $user->resetClearances(); } // Update user profile $user->addPageClearances(parent::getPageClearances()); $user->addModuleClearances(parent::getModuleClearances()); $user->addModuleCategoriesClearancesStack(parent::getModuleCategoriesClearancesStack()); $user->addValidationClearances(parent::getValidationClearances()); $user->addAdminClearance(parent::getAdminClearance()); $user->addTemplateGroupsDenied(parent::getTemplateGroupsDenied()); $user->addRowGroupsDenied(parent::getRowGroupsDenied()); $user->setActive(true); if ($writeUser) { $user->writeToPersistence(); } if (!$user->hasError()) { if (!SensitiveIO::isInSet($user->getUserId(), $this->_users)) { // Insert this user in group $this->_users[] = $user->getUserId(); $sql = " insert into profileUsersByGroup set groupId_gu='".$this->_groupId."' , userId_gu='".$user->getUserID()."' "; $q = new CMS_query($sql); if ($q->hasError()) { $this->raiseError('Insertion failed'); } else { return true; } } else { return true; } } else { $this->raiseError('User error when adding group values'); } } else { $this->raiseError('Incorrect user given'); } return false; }

gfilliere commented 11 years ago

Oui il y a un $user->setActive(true); dans la méthode addToUserAndWriteToPersistence. Il y a peut-être une raison, peut-être pas...

Tu peux faire ça sinon qui ne devrait pas activer l'utilisateur :

// désactivation et sauvegarde
$cms_user->setActive(false);
$cms_user->writeToPersistence();
// Ajout des groupes
for($i=0; $i<count($cms_user_groups); $i++){
  $groupe = new CMS_profile_usersGroup($cms_user_groups[$i]);
  $groupe->addUser($cms_user);
  $groupe->writeToPersistence();
}
emmanuelVentura commented 11 years ago

Merci Guillaume