- switch ($key) {
- case "add_fwd":
- $email = trim(Env::v('email'));
- if (!isvalid_email_redirection($email)) {
- $page->trig("invalid email $email");
- } else {
- $redirect->add_email($email);
- $page->trig("Ajout de $email effectué");
- }
- break;
-
- case "del_fwd":
- if (!empty($val)) {
- $redirect->delete_email($val);
- }
- break;
-
- case "del_alias":
- if (!empty($val)) {
- XDB::execute("DELETE FROM aliases
- WHERE id={?} AND alias={?}
- AND type!='a_vie' AND type!='homonyme'", $mr['user_id'], $val);
- XDB::execute("UPDATE emails
- SET rewrite = ''
- WHERE uid = {?} AND rewrite LIKE CONCAT({?}, '@%')",
- $mr['user_id'], $val);
- fix_bestalias($mr['user_id']);
- $page->trig($val." a été supprimé");
- }
- break;
- case "activate_fwd":
- if (!empty($val)) {
- $redirect->modify_one_email($val, true);
- }
- break;
- case "deactivate_fwd":
- if (!empty($val)) {
- $redirect->modify_one_email($val, false);
- }
- break;
- case "disable_fwd":
- $redirect->disable();
- break;
- case "enable_fwd":
- $redirect->enable();
- break;
- case "clean_fwd":
- if (!empty($val)) {
- $redirect->clean_errors($val);
- }
- break;
- case "add_alias":
- global $globals;
- $alias = trim(Env::v('email'));
- if (strpos($alias, '@') !== false) {
- list($alias, $domain) = explode('@', $alias);
- } else {
- $domain = $globals->mail->domain;
- }
- if (!preg_match('/[-a-z0-9\.]+/s', $alias)) {
- $page->trig("'$alias' n'est pas un alias valide");
- }
- if ($domain == $globals->mail->alias_dom || $domain == $globals->mail->alias_dom2) {
- $req = new AliasReq($mr['user_id'], $alias, 'Admin request', false);
- if ($req->commit()) {
- $page->trig("Nouvel alias '$alias@$domain' attribué");
- } else {
- $page->trig("Impossible d'ajouter l'alias '$alias@$domain', il est probablement déjà attribué");
- }
- } elseif ($domain == $globals->mail->domain || $domain == $globals->mail->domain2) {
- if (XDB::execute("INSERT INTO aliases (id,alias,type) VALUES ({?}, {?}, 'alias')",
- $mr['user_id'], $alias)) {
- $page->trig("Nouvel alias '$alias' ajouté");
- } else {
- $page->trig("Impossible d'ajouter l'alias '$alias', il est probablement déjà attribué");
- }
- } else {
- $page->trig("Le domaine '$domain' n'est pas valide");
- }
- break;
-
- case "best":
- // 'bestalias' is the first bit of the set : 1
- // 255 is the max for flags (8 sets max)
- XDB::execute("UPDATE aliases SET flags= flags & (255 - 1) WHERE id={?}", $mr['user_id']);
- XDB::execute("UPDATE aliases
- SET flags= flags | 1
- WHERE id={?} AND alias={?}", $mr['user_id'], $val);
- break;
-
-
- // Editer un profil
- case "u_edit":
- require_once('secure_hash.inc.php');
- $pass_encrypted = Env::v('newpass_clair') != "********" ? hash_encrypt(Env::v('newpass_clair')) : Env::v('passw');
- $naiss = Env::v('naissanceN');
- $deces = Env::v('decesN');
- $perms = Env::v('permsN');
- $prenm = Env::v('prenomN');
- $nom = Env::v('nomN');
- $promo = Env::i('promoN');
- $sexe = Env::v('sexeN');
- $comm = trim(Env::v('commentN'));
- $watch = Env::v('watchN');
- $flags = '';
- if ($sexe) {
- $flags = 'femme';
- }
- if ($watch) {
- if ($flags) {
- $flags .= ',';
- }
- $flags .= 'watch';
- }
-
- if ($watch && !$comm) {
- $page->trig("Il est nécessaire de mettre un commentaire pour surveiller un compte");
- break;
- }
-
- $watch = 'SELECT naissance, deces, password, perms,
- prenom, nom, flags, promo, comment
- FROM auth_user_md5
- WHERE user_id = ' . $mr['user_id'];
- $res = XDB::query($watch);
- $old_fields = $res->fetchOneAssoc();
- $query = "UPDATE auth_user_md5 SET
- naissance = '$naiss',
- deces = '$deces',
- password = '$pass_encrypted',
- perms = '$perms',
- prenom = '".addslashes($prenm)."',
- nom = '".addslashes($nom)."',
- flags = '$flags',
- promo = $promo,
- comment = '".addslashes($comm)."'
- WHERE user_id = '{$mr['user_id']}'";
- if ($perms == 'disabled' && $old_fields['perms'] != 'disabled') {
- // A user has been banned ==> ensure his php session has been killed
- // This solution is ugly and overkill, but, it should be efficient.
- kill_sessions();
- }
- if (XDB::execute($query)) {
- user_reindex($mr['user_id']);
-
- $res = XDB::query($watch);
- $new_fields = $res->fetchOneAssoc();
-
- $mailer = new PlMailer("admin/useredit.mail.tpl");
- $mailer->assign("user", S::v('forlife'));
- $mailer->assign('old', $old_fields);
- $mailer->assign('new', $new_fields);
- $mailer->send();
+ }
+ if (Post::s('state') != $user->state) {
+ $to_update['state'] = Post::s('state');
+ }
+ if (Post::i('is_admin', 0) != ($user->is_admin ? 1 : 0)) {
+ $to_update['is_admin'] = Post::b('is_admin');
+ }
+ if (Post::s('type') != $user->type) {
+ $to_update['type'] = Post::s('type');
+ }
+ if (Post::i('watch', 0) != ($user->watch ? 1 : 0)) {
+ $to_update['flags'] = new PlFlagset();
+ $to_update['flags']->addFlag('watch', Post::i('watch'));
+ }
+ if (Post::t('comment') != $user->comment) {
+ $to_update['comment'] = Post::blank('comment') ? null : Post::t('comment');
+ }
+ }
+ if (!empty($to_update)) {
+ $set = array();
+ foreach ($to_update as $k => $value) {
+ $set[] = XDB::format($k . ' = {?}', $value);
+ }
+ XDB::execute('UPDATE accounts
+ SET ' . implode(', ', $set) . '
+ WHERE uid = ' . XDB::format('{?}', $user->id()));
+ $page->trigSuccess('Données du compte mise à jour avec succès');
+ $user = User::getWithUID($user->id());
+ }
+ // }}}
+
+ // Profile form {{{
+ if (Post::has('add_profile') || Post::has('del_profile') || Post::has('owner')) {
+ if (Post::i('del_profile', 0) != 0) {
+ XDB::execute('DELETE FROM account_profiles
+ WHERE uid = {?} AND pid = {?}',
+ $user->id(), Post::i('del_profile'));
+ } else if (!Post::blank('new_profile')) {
+ $profile = Profile::get(Post::t('new_profile'));
+ if (!$profile) {
+ $page->trigError('Le profil ' . Post::t('new_profile') . ' n\'existe pas');
+ } else {
+ XDB::execute('INSERT IGNORE INTO account_profiles (uid, pid)
+ VALUES ({?}, {?})',
+ $user->id(), $profile->id());
+ }
+ }
+ XDB::execute('UPDATE account_profiles
+ SET perms = IF(pid = {?}, CONCAT(perms, \',owner\'), REPLACE(perms, \'owner\', \'\'))
+ WHERE uid = {?}',
+ Post::i('owner'), $user->id());
+ }
+ // }}}