X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Fadmin.php;h=f63a6e2f557b0bef376fac460fb19165c606928e;hb=fbf66f5e730def1c20bf36004f02f46c2c96bcfc;hp=7d4923ab5a8a8cfdc3eb173ef6d947f16fb5950c;hpb=d6efb578186f1b0277533516ad5d18fcfe1e7d34;p=platal.git diff --git a/modules/admin.php b/modules/admin.php index 7d4923a..f63a6e2 100644 --- a/modules/admin.php +++ b/modules/admin.php @@ -24,36 +24,37 @@ class AdminModule extends PLModule 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/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' => $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') ); } @@ -831,12 +832,12 @@ class AdminModule extends PLModule $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(); @@ -849,8 +850,10 @@ class AdminModule extends PLModule $birthDate = self::formatBirthDate($infos[2]); if ($type == 'x') { $xorgId = Profile::getXorgId($infos[4]); - } else { + } 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é."); @@ -859,7 +862,7 @@ class AdminModule extends PLModule 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 ({?}, {?}, {?}), @@ -1265,7 +1268,7 @@ class AdminModule extends PLModule 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 @@ -1822,6 +1825,61 @@ class AdminModule extends PLModule 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: