{
return array(
'phpinfo' => $this->make_hook('phpinfo', AUTH_MDP, 'admin'),
- 'get_rights' => $this->make_hook('get_rights', AUTH_MDP, 'admin'),
+ 'get_rights' => $this->make_hook('get_rights', AUTH_COOKIE, 'admin'),
'admin' => $this->make_hook('default', AUTH_MDP, 'admin'),
'admin/dead-but-active' => $this->make_hook('dead_but_active', AUTH_MDP, 'admin'),
'admin/deaths' => $this->make_hook('deaths', AUTH_MDP, 'admin'),
exit;
}
- function handler_get_rights(&$page, $level)
+ function handler_get_rights(&$page)
{
if (S::suid()) {
$page->kill('Déjà en SUID');
}
- $user =& S::user();
- Platal::session()->startSUID($user, $level);
-
- pl_redirect('/');
+ S::assert_xsrf_token();
+ $level = Post::s('account_type');
+ if ($level != 'admin') {
+ $user = User::getSilentWithUID(S::user()->id());
+ $user->is_admin = false;
+ $types = DirEnum::getOptions(DirEnum::ACCOUNTTYPES);
+ if (!empty($types[$level])) {
+ $user->setPerms($types[$level]);
+ }
+ S::set('suid_startpage', $_SERVER['HTTP_REFERER']);
+ Platal::session()->startSUID($user);
+ }
+ if (!empty($_SERVER['HTTP_REFERER'])) {
+ http_redirect($_SERVER['HTTP_REFERER']);
+ } else {
+ pl_redirect('/');
+ }
}
function handler_default(&$page)
pl_redirect('admin/accounts');
}
+ $listClient = new MMList(S::user());
$login = $user->login();
$registered = ($user->state != 'pending');
if (Post::t('comment') != $user->comment) {
$to_update['comment'] = Post::blank('comment') ? null : Post::t('comment');
}
+ if (!$user->checkPerms(User::PERM_MAIL) && Post::t('email') != $user->forlifeEmail()) {
+ $to_update['email'] = Post::t('email');
+ $listClient->change_user_email($user->forlifeEmail(), Post::t('email'));
+ }
}
if (!empty($to_update)) {
$res = XDB::query('SELECT *
$diff[$k] = array($oldValues[$k], trim($value, "'"));
unset($oldValues[$k]);
}
- XDB::execute('UPDATE accounts
- SET ' . implode(', ', $set) . '
- WHERE uid = ' . XDB::format('{?}', $user->id()));
+ XDB::rawExecute('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());
$page->assign('host', $host);
// Display mailing lists
- $list = new MMList(S::user());
- $page->assign('mlists', $list->get_all_user_lists($user->forlifeEmail()));
+ $page->assign('mlists', $listClient->get_all_user_lists($user->forlifeEmail()));
// Display active aliases.
$page->assign('virtuals', $user->emailAliases());
$entry_year = $promotion;
$grad_year = $promotion + 3;
$promo = 'X' . $promotion;
+ $hrpromo = $promotion;
break;
case 'M':
$degreeid = $eduDegrees[Profile::DEGREE_M];
$grad_year = $promotion;
$entry_year = $promotion - 2;
$promo = 'M' . $promotion;
+ $hrpromo = $promo;
+ $type = 'master';
break;
case 'D':
$degreeid = $eduDegrees[Profile::DEGREE_D];
$grad_year = $promotion;
$entry_year = $promotion - 3;
$promo = 'D' . $promotion;
+ $hrpromo = $promo;
+ $type = 'phd';
break;
default:
$page->killError("La formation n'est pas reconnue:" . Env::t('edu_type') . '.');
}
+ XDB::execute("SET AUTOCOMMIT = 0");
+ XDB::execute("START TRANSACTION");
foreach ($lines as $line) {
- if ($infos = self::formatNewUser($page, $line, $separator, $promotion, 6)) {
+ if ($infos = self::formatNewUser($page, $line, $separator, $hrpromo, 6)) {
$sex = self::formatSex($page, $infos[3], $line);
if (!is_null($sex)) {
$fullName = $infos[1] . ' ' . $infos[0];
$infos['hrid'], $xorgId, $infos[5], $birthDate, $sex);
$pid = XDB::insertId();
XDB::execute('INSERT INTO profile_name (pid, name, typeid)
- VALUES ({?}, {?}, {?})',
- $pid, $infos[0], $nameTypes['name_ini']);
- XDB::execute('INSERT INTO profile_name (pid, name, typeid)
- VALUES ({?}, {?}, {?})',
- $pid, $infos[1], $nameTypes['firstname_ini']);
+ VALUES ({?}, {?}, {?}),
+ ({?}, {?}, {?}),
+ ({?}, {?}, {?}),
+ ({?}, {?}, {?})',
+ $pid, $infos[0], $nameTypes['name_ini'],
+ $pid, $infos[0], $nameTypes['lastname'],
+ $pid, $infos[1], $nameTypes['firstname_ini'],
+ $pid, $infos[1], $nameTypes['firstname']);
XDB::execute('INSERT INTO profile_display (pid, yourself, public_name, private_name,
directory_name, short_name, sort_name, promo)
VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})',
VALUES ({?}, {?}, {?}, {?}, {?}, {?})',
$pid, $eduSchools[Profile::EDU_X], $degreeid, $entry_year, $grad_year, 'primary');
XDB::execute('INSERT INTO accounts (hruid, type, is_admin, state, full_name, directory_name, display_name, sex)
- VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?})',
- $infos['hrid'], $type, 0, 'active', $fullName, $directoryName, $infos[1], $sex);
+ VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})',
+ $infos['hrid'], $type, 0, 'pending', $fullName, $directoryName, $infos[1], $sex);
$uid = XDB::insertId();
XDB::execute('INSERT INTO account_profiles (uid, pid, perms)
VALUES ({?}, {?}, {?})',
$uid, $pid, 'owner');
+ Profile::rebuildSearchTokens($pid);
}
}
}
+ XDB::execute("COMMIT");
} else if (Env::t('add_type') == 'account') {
$type = Env::t('type');
$newAccounts = array();
if (!is_null($sex)) {
$fullName = $infos[1] . ' ' . $infos[0];
$directoryName = $infos[0] . ' ' . $infos[1];
- XDB::execute('INSERT INTO accounts (hruid, type, is_admin, state, email, full_name, directory_name, display_name, sex)
- VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})',
- $infos['hrid'], $type, 0, 'active', $infos[2], $fullName, $directoryName, $infos[1], $sex);
+ XDB::execute('INSERT INTO accounts (hruid, type, is_admin, state,
+ email, full_name, directory_name,
+ display_name, sex)
+ VALUES ({?}, {?}, {?}, {?},
+ {?}, {?}, {?}, {?}, {?})',
+ $infos['hrid'], $type, 0, 'pending',
+ $infos[2], $fullName, $directoryName,
+ $infos[1], $sex);
$newAccounts[$infos['hrid']] = $infos[1] . ' ' . $infos[0];
}
}