function handlers()
{
return array(
- 'phpinfo' => $this->make_hook('phpinfo', AUTH_MDP, 'admin'),
+ 'phpinfo' => $this->make_hook('phpinfo', AUTH_MDP, 'admin'),
'get_rights' => $this->make_hook('get_rights', AUTH_COOKIE, 'admin'),
'set_skin' => $this->make_hook('set_skin', 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'),
- 'admin/downtime' => $this->make_hook('downtime', AUTH_MDP, 'admin'),
- 'admin/homonyms' => $this->make_hook('homonyms', AUTH_MDP, 'admin'),
- 'admin/logger' => $this->make_hook('logger', AUTH_MDP, 'admin'),
- 'admin/logger/actions' => $this->make_hook('logger_actions', AUTH_MDP, 'admin'),
- 'admin/postfix/blacklist' => $this->make_hook('postfix_blacklist', AUTH_MDP, 'admin'),
- 'admin/postfix/delayed' => $this->make_hook('postfix_delayed', AUTH_MDP, 'admin'),
- 'admin/postfix/regexp_bounces' => $this->make_hook('postfix_regexpsbounces', AUTH_MDP, 'admin'),
- 'admin/postfix/whitelist' => $this->make_hook('postfix_whitelist', AUTH_MDP, 'admin'),
- 'admin/mx/broken' => $this->make_hook('mx_broken', AUTH_MDP, 'admin'),
- 'admin/skins' => $this->make_hook('skins', AUTH_MDP, 'admin'),
- 'admin/user' => $this->make_hook('user', AUTH_MDP, 'admin'),
- 'admin/add_accounts' => $this->make_hook('add_accounts', AUTH_MDP, 'admin'),
- 'admin/validate' => $this->make_hook('validate', AUTH_MDP, 'admin,edit_directory'),
- 'admin/validate/answers' => $this->make_hook('validate_answers', AUTH_MDP, 'admin'),
- 'admin/wiki' => $this->make_hook('wiki', AUTH_MDP, 'admin'),
- 'admin/ipwatch' => $this->make_hook('ipwatch', AUTH_MDP, 'admin'),
- 'admin/icons' => $this->make_hook('icons', AUTH_MDP, 'admin'),
- 'admin/geocoding' => $this->make_hook('geocoding', AUTH_MDP, 'admin'),
- 'admin/accounts' => $this->make_hook('accounts', AUTH_MDP, 'admin'),
- 'admin/account/watch' => $this->make_hook('account_watch', AUTH_MDP, 'admin'),
- 'admin/account/types' => $this->make_hook('account_types', AUTH_MDP, 'admin'),
- 'admin/jobs' => $this->make_hook('jobs', AUTH_MDP, 'admin,edit_directory'),
- 'admin/profile' => $this->make_hook('profile', AUTH_MDP, 'admin,edit_directory')
+ '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'),
+ 'admin/downtime' => $this->make_hook('downtime', AUTH_MDP, 'admin'),
+ 'admin/homonyms' => $this->make_hook('homonyms', AUTH_MDP, 'admin'),
+ 'admin/logger' => $this->make_hook('logger', AUTH_MDP, 'admin'),
+ 'admin/logger/actions' => $this->make_hook('logger_actions', AUTH_MDP, 'admin'),
+ 'admin/postfix/blacklist' => $this->make_hook('postfix_blacklist', AUTH_MDP, 'admin'),
+ 'admin/postfix/delayed' => $this->make_hook('postfix_delayed', AUTH_MDP, 'admin'),
+ 'admin/postfix/regexp_bounces' => $this->make_hook('postfix_regexpsbounces', AUTH_MDP, 'admin'),
+ 'admin/postfix/whitelist' => $this->make_hook('postfix_whitelist', AUTH_MDP, 'admin'),
+ 'admin/mx/broken' => $this->make_hook('mx_broken', AUTH_MDP, 'admin'),
+ 'admin/skins' => $this->make_hook('skins', AUTH_MDP, 'admin'),
+ 'admin/user' => $this->make_hook('user', AUTH_MDP, 'admin'),
+ 'admin/add_accounts' => $this->make_hook('add_accounts', AUTH_MDP, 'admin'),
+ 'admin/validate' => $this->make_hook('validate', AUTH_MDP, 'admin,edit_directory'),
+ 'admin/validate/answers' => $this->make_hook('validate_answers', AUTH_MDP, 'admin'),
+ 'admin/wiki' => $this->make_hook('wiki', AUTH_MDP, 'admin'),
+ 'admin/ipwatch' => $this->make_hook('ipwatch', AUTH_MDP, 'admin'),
+ 'admin/icons' => $this->make_hook('icons', AUTH_MDP, 'admin'),
+ 'admin/geocoding' => $this->make_hook('geocoding', AUTH_MDP, 'admin'),
+ 'admin/accounts' => $this->make_hook('accounts', AUTH_MDP, 'admin'),
+ 'admin/account/watch' => $this->make_hook('account_watch', AUTH_MDP, 'admin'),
+ 'admin/account/types' => $this->make_hook('account_types', AUTH_MDP, 'admin'),
+ 'admin/xnet_without_group' => $this->make_hook('xnet_without_group', AUTH_MDP, 'admin'),
+ 'admin/jobs' => $this->make_hook('jobs', AUTH_MDP, 'admin,edit_directory'),
+ 'admin/profile' => $this->make_hook('profile', AUTH_MDP, 'admin,edit_directory'),
+ 'admin/phd' => $this->make_hook('phd', AUTH_MDP, 'admin')
);
}
}
// Account Form {{{
+ require_once 'emails.inc.php';
$to_update = array();
if (Post::has('disable_weak_access')) {
$to_update['weak_password'] = null;
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()) {
+ if (require_email_update($user, Post::t('email'))) {
$to_update['email'] = Post::t('email');
$listClient->change_user_email($user->forlifeEmail(), Post::t('email'));
+ update_alias_user($user->forlifeEmail(), Post::t('email'));
}
}
if (!empty($to_update)) {
// }}}
// Email forwards form {{{
- require_once("emails.inc.php");
$redirect = ($registered ? new Redirect($user) : null);
if (Post::has('add_fwd')) {
$email = Post::t('email');
WHERE uid = {?}", $user->id());
// Then gives the bestalias flag to the given email.
list($email, $domain) = explode('@', $best_alias);
- XDB::execute("UPDATE email_source_account AS s
- INNER JOIN email_virtual_domains AS d ON (s.domain = d.id)
- SET s.flags = CONCAT_WS(',', IF(s.flags = '', NULL, s.flags), 'bestalias')
- WHERE s.uid = {?} AND s.email = {?} AND d.name = {?}", $user->id(), $email, $domain);
+ XDB::execute("UPDATE email_source_account
+ SET flags = CONCAT_WS(',', IF(flags = '', NULL, flags), 'bestalias')
+ WHERE uid = {?} AND email = {?}", $user->id(), $email);
// As having a non-null bestalias value is critical in
// plat/al's code, we do an a posteriori check on the
{
switch ($sex) {
case 'F':
- return PlUser::GENDER_FEMALE;
+ return 'female';
case 'M':
- return PlUser::GENDER_MALE;
+ return 'male';
default:
$page->trigError("La ligne $line n'a pas été ajoutée car le sexe $sex n'est pas pris en compte.");
return null;
$nameTypes = array_flip($nameTypes);
if (Env::t('add_type') == 'promo') {
- $type = 'x';
$eduSchools = DirEnum::getOptions(DirEnum::EDUSCHOOLS);
$eduSchools = array_flip($eduSchools);
$eduDegrees = DirEnum::getOptions(DirEnum::EDUDEGREES);
$grad_year = $promotion + 3;
$promo = 'X' . $promotion;
$hrpromo = $promotion;
+ $type = 'x';
break;
case 'M':
$degreeid = $eduDegrees[Profile::DEGREE_M];
$degreeid = $eduDegrees[Profile::DEGREE_D];
$grad_year = $promotion;
$entry_year = $promotion - 3;
- $promo = 'D' . $promotion;
+ $promo = 'D (en cours)';
$hrpromo = $promo;
$type = 'phd';
break;
default:
- $page->killError("La formation n'est pas reconnue:" . Env::t('edu_type') . '.');
+ $page->killError("La formation n'est pas reconnue : " . Env::t('edu_type') . '.');
}
XDB::startTransaction();
$fullName = $infos[1] . ' ' . $infos[0];
$directoryName = $infos[0] . ' ' . $infos[1];
$birthDate = self::formatBirthDate($infos[2]);
- $xorgId = Profile::getXorgId($infos[4]);
+ if ($type == 'x') {
+ $xorgId = Profile::getXorgId($infos[4]);
+ } elseif (isset($infos[4])) {
+ $xorgId = trim($infos[4]);
+ } else {
+ $xorgId = 0;
+ }
if (is_null($xorgId)) {
$page->trigError("La ligne $line n'a pas été ajoutée car le matricule École est mal renseigné.");
continue;
XDB::execute('INSERT INTO profiles (hrpid, xorg_id, ax_id, birthdate_ref, sex)
VALUES ({?}, {?}, {?}, {?}, {?})',
- $infos['hrid'], $xorgId, $infos[5], $birthDate, $sex);
+ $infos['hrid'], $xorgId, (isset($infos[5]) ? $infos[5] : null), $birthDate, $sex);
$pid = XDB::insertId();
XDB::execute('INSERT INTO profile_name (pid, name, typeid)
VALUES ({?}, {?}, {?}),
SELECT {?}, {?}, id, \'homonym\', NOW()
FROM email_virtual_domains
WHERE name = {?}',
- 'h.' . $loginbis . '.' . Platal::globals()->mail->domain,
- $loginbis, $user->mainEmailDomain());
+ User::makeHomonymHrmid($loginbis), $loginbis, $user->mainEmailDomain());
fix_bestalias($user);
send_robot_homonyme($user, $loginbis);
$op = 'list';
private static function updateLanguage(array $item) {}
- function handler_geocoding(&$page, $category = null, $action = null, $id = null)
+ function handler_geocoding($page, $category = null, $action = null, $id = null)
{
// Warning, this handler requires the following packages:
// * pkg-isocodes
ORDER BY a.hruid'));
}
+ function handler_xnet_without_group($page)
+ {
+ $page->changeTpl('admin/xnet_without_group.tpl');
+ $page->assign('accounts', XDB::iterator('SELECT a.hruid, a.state
+ FROM accounts AS a
+ LEFT JOIN group_members AS m ON (a.uid = m.uid)
+ WHERE a.type = \'xnet\' AND m.uid IS NULL
+ ORDER BY a.state, a.hruid'));
+ }
+
function handler_jobs($page, $id = -1)
{
$page->changeTpl('admin/jobs.tpl');
ORDER BY pd.directory_name');
$page->assign('updates', $res);
}
+
+ function handler_phd($page, $promo = null, $validate = false)
+ {
+ $page->changeTpl('admin/phd.tpl');
+ $eduDegrees = DirEnum::getOptions(DirEnum::EDUDEGREES);
+ $eduDegrees = array_flip($eduDegrees);
+
+ if (is_null($promo)) {
+ $promo_list = XDB::fetchColumn('SELECT DISTINCT(grad_year)
+ FROM profile_education
+ WHERE FIND_IN_SET(\'primary\', flags) AND NOT FIND_IN_SET(\'completed\', flags) AND degreeid = {?}
+ ORDER BY grad_year',
+ $eduDegrees[Profile::DEGREE_D]);
+ $page->assign('promo_list', $promo_list);
+ $page->assign('nothing', count($promo_list) == 0);
+ return;
+ }
+
+ if ($validate) {
+ S::assert_xsrf_token();
+
+ $list = XDB::iterator('SELECT pe.pid, pd.directory_name
+ FROM profile_education AS pe
+ INNER JOIN profile_display AS pd ON (pe.pid = pd.pid)
+ WHERE FIND_IN_SET(\'primary\', pe.flags) AND NOT FIND_IN_SET(\'completed\', pe.flags)
+ AND pe.degreeid = {?} AND pe.grad_year = {?}',
+ $eduDegrees[Profile::DEGREE_D], $promo);
+ while ($res = $list->next()) {
+ $pid = $res['pid'];
+ $name = $res['directory_name'];
+ if (Post::b('completed_' . $pid)) {
+ $grad_year = Post::t('grad_year_' . $pid);
+ XDB::execute('UPDATE profile_education
+ SET flags = \'primary,completed\', grad_year = {?}
+ WHERE FIND_IN_SET(\'primary\', flags) AND pid = {?}',
+ $grad_year, $pid);
+ XDB::execute('UPDATE profile_display
+ SET promo = {?}
+ WHERE pid = {?}',
+ 'D' . $grad_year, $pid);
+ $page->trigSuccess("Promotion de $name validée.");
+ }
+ }
+ }
+
+ $list = XDB::iterator('SELECT pe.pid, pd.directory_name
+ FROM profile_education AS pe
+ INNER JOIN profile_display AS pd ON (pe.pid = pd.pid)
+ WHERE FIND_IN_SET(\'primary\', pe.flags) AND NOT FIND_IN_SET(\'completed\', pe.flags)
+ AND pe.degreeid = {?} AND pe.grad_year = {?}
+ ORDER BY pd.directory_name',
+ $eduDegrees[Profile::DEGREE_D], $promo);
+ $page->assign('list', $list);
+ $page->assign('promo', $promo);
+ }
}
// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: