Closed emmanuelVentura closed 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();
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.
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.
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; }
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();
}
Merci Guillaume
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é.