X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Fadmin.php;h=af06bef04ed8b815503904681d714d1fd2aa8e29;hb=ee71865181e96e7b0754ef9e7da4b3cb26f4c1d7;hp=9c84011c0e18472a5c51338307ec6de22eb0801d;hpb=8e3803d81ad0d7cc45174c3fe285d47df2adb579;p=platal.git diff --git a/modules/admin.php b/modules/admin.php index 9c84011..af06bef 100644 --- a/modules/admin.php +++ b/modules/admin.php @@ -24,30 +24,31 @@ class AdminModule extends PLModule function handlers() { return array( - 'phpinfo' => $this->make_hook('phpinfo', AUTH_MDP, 'admin'), - 'admin' => $this->make_hook('default', AUTH_MDP, 'admin'), - 'admin/ax-xorg' => $this->make_hook('ax_xorg', 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'), + 'phpinfo' => $this->make_hook('phpinfo', AUTH_MDP, 'admin'), + 'admin' => $this->make_hook('default', AUTH_MDP, 'admin'), + 'admin/ax-xorg' => $this->make_hook('ax_xorg', 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/synchro_ax' => $this->make_hook('synchro_ax', AUTH_MDP, 'admin'), - 'admin/user' => $this->make_hook('user', AUTH_MDP, 'admin'), - 'admin/promo' => $this->make_hook('promo', AUTH_MDP, 'admin'), - 'admin/validate' => $this->make_hook('validate', AUTH_MDP, 'admin'), - '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/accounts' => $this->make_hook('accounts', 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/synchro_ax' => $this->make_hook('synchro_ax', AUTH_MDP, 'admin'), + 'admin/user' => $this->make_hook('user', AUTH_MDP, 'admin'), + 'admin/promo' => $this->make_hook('promo', AUTH_MDP, 'admin'), + 'admin/validate' => $this->make_hook('validate', AUTH_MDP, 'admin'), + '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/accounts' => $this->make_hook('accounts', AUTH_MDP, 'admin'), + 'admin/jobs' => $this->make_hook('jobs', AUTH_MDP, 'admin'), ); } @@ -71,20 +72,20 @@ class AdminModule extends PLModule if (Env::has('del')) { $crc = Env::v('crc'); XDB::execute("UPDATE postfix_mailseen SET release = 'del' WHERE crc = {?}", $crc); - $page->trigSuccess($crc." verra tous ses emails supprimés !"); + $page->trigSuccess($crc . " verra tous ses emails supprimés !"); } elseif (Env::has('ok')) { $crc = Env::v('crc'); XDB::execute("UPDATE postfix_mailseen SET release = 'ok' WHERE crc = {?}", $crc); - $page->trigSuccess($crc." a le droit de passer !"); + $page->trigSuccess($crc . " a le droit de passer !"); } $sql = XDB::iterator( "SELECT crc, nb, update_time, create_time, - FIND_IN_SET('del', release) AS del, - FIND_IN_SET('ok', release) AS ok - FROM postfix_mailseen + FIND_IN_SET('del', p.release) AS del, + FIND_IN_SET('ok', p.release) AS ok + FROM postfix_mailseen AS p WHERE nb >= 30 - ORDER BY release != ''"); + ORDER BY p.release != ''"); $page->assign_by_ref('mails', $sql); } @@ -129,7 +130,7 @@ class AdminModule extends PLModule MONTH(MAX(start)), MONTH(MIN(start)), DAYOFMONTH(MAX(start)), DAYOFMONTH(MIN(start)) - FROM logger.sessions"); + FROM #logger#.sessions"); list($ymax, $ymin, $mmax, $mmin, $dmax, $dmin) = $res->fetchOneRow(); if (($year < $ymin) || ($year == $ymin && $month < $mmin)) { @@ -167,7 +168,7 @@ class AdminModule extends PLModule if ($year) { $res = XDB::query("SELECT YEAR (MAX(start)), YEAR (MIN(start)), MONTH(MAX(start)), MONTH(MIN(start)) - FROM logger.sessions"); + FROM #logger#.sessions"); list($ymax, $ymin, $mmax, $mmin) = $res->fetchOneRow(); if (($year < $ymin) || ($year > $ymax)) { @@ -197,7 +198,7 @@ class AdminModule extends PLModule $years[0] = "----"; // retrieve available years - $res = XDB::query("select YEAR(MAX(start)), YEAR(MIN(start)) FROM logger.sessions"); + $res = XDB::query("select YEAR(MAX(start)), YEAR(MIN(start)) FROM #logger#.sessions"); list($max, $min) = $res->fetchOneRow(); for($i = intval($min); $i<=$max; $i++) { @@ -257,16 +258,16 @@ class AdminModule extends PLModule // we are viewing a session $res = XDB::query("SELECT ls.*, a.alias AS username, sa.alias AS suer - FROM logger.sessions AS ls - LEFT JOIN aliases AS a ON (a.id = ls.uid AND a.type='a_vie') - LEFT JOIN aliases AS sa ON (sa.id = ls.suid AND sa.type='a_vie') + FROM #logger#.sessions AS ls + LEFT JOIN #x4dat#.aliases AS a ON (a.id = ls.uid AND a.type='a_vie') + LEFT JOIN #x4dat#.aliases AS sa ON (sa.id = ls.suid AND sa.type='a_vie') WHERE ls.id = {?}", $arg); $page->assign('session', $a = $res->fetchOneAssoc()); $res = XDB::iterator('SELECT a.text, e.data, e.stamp - FROM logger.events AS e - LEFT JOIN logger.actions AS a ON e.action=a.id + FROM #logger#.events AS e + LEFT JOIN #logger#.actions AS a ON e.action=a.id WHERE e.session={?}', $arg); while ($myarr = $res->next()) { $page->append('events', $myarr); @@ -316,8 +317,8 @@ class AdminModule extends PLModule $where = $this->_makeWhere($year, $month, $day, $loguid); $select = "SELECT s.id, s.start, s.uid, a.alias as username - FROM logger.sessions AS s - LEFT JOIN aliases AS a ON (a.id = s.uid AND a.type='a_vie') + FROM #logger#.sessions AS s + LEFT JOIN #x4dat#.aliases AS a ON (a.id = s.uid AND a.type='a_vie') $where ORDER BY start DESC"; $res = XDB::iterator($select); @@ -331,9 +332,9 @@ class AdminModule extends PLModule // attach events $sql = "SELECT s.id, a.text - FROM logger.sessions AS s - LEFT JOIN logger.events AS e ON(e.session=s.id) - INNER JOIN logger.actions AS a ON(a.id=e.action) + FROM #logger#.sessions AS s + LEFT JOIN #logger#.events AS e ON(e.session=s.id) + INNER JOIN #logger#.actions AS a ON(a.id=e.action) $where"; $res = XDB::iterator($sql); @@ -359,10 +360,11 @@ class AdminModule extends PLModule require_once("emails.inc.php"); if (S::has('suid')) { - $page->kill("Déjà en SUID !!!"); + $page->kill("Déjà en SUID !!!"); } // Loads the user identity using the environment. + $user = null; if ($login) { $user = User::get($login); } else if (Env::has('user_id')) { @@ -378,7 +380,7 @@ class AdminModule extends PLModule return; } - // Handles specific requests (AX sync, su, ...). + // Handles specific requests (AX sync, su...). if(Env::has('logs_button') && $registered) { pl_redirect("admin/logger?loguser=$login&year=".date('Y')."&month=".date('m')); } @@ -463,6 +465,7 @@ class AdminModule extends PLModule // Checks for alias' user validity. if (!preg_match('/[-a-z0-9\.]+/s', $alias)) { $page->trigError("'$alias' n'est pas un alias valide"); + break; } // Eventually adds the alias to the right domain. @@ -572,12 +575,12 @@ class AdminModule extends PLModule user_reindex($user->id()); $new_fields = XDB::query($watch_query, $user->id())->fetchOneAssoc(); - // Redacts the password in the notification, to avoiding transmitting + // Redacts the password in the notification, to avoid transmitting // sensitive information by email. $new_fields['password'] = ($old_fields['password'] != $new_fields['password'] ? 'new' : 'old'); $old_fields['password'] = 'old'; - // Emails the admins to notify the profile update. + // Notifies the admins of the profile update. $mailer = new PlMailer("admin/useredit.mail.tpl"); $mailer->assign("admin", S::user()->login()); $mailer->assign("user", $user->login()); @@ -586,9 +589,9 @@ class AdminModule extends PLModule $mailer->send(); $globals->updateNbIns(); - $page->trigSuccess("Update was successful."); + $page->trigSuccess("La mise à jour a été faite avec succès."); } else { - $page->trigError("Update failed, please double check your values."); + $page->trigError("La mise à jour a échoué. S'il te plaît, vérifie les valeurs."); } // Checks for changes, and updates other tables of plat/al. @@ -627,7 +630,7 @@ class AdminModule extends PLModule require_once('user.func.inc.php'); user_clear_all_subs($user->id()); $globals->updateNbIns(); - $page->trigSuccess("'" . $user->id() . "' a été désinscrit !"); + $page->trigSuccess($user->login() . ' a été désinscrit !'); $mailer = new PlMailer("admin/useredit.mail.tpl"); $mailer->assign("admin", S::user()->login()); @@ -638,9 +641,9 @@ class AdminModule extends PLModule // Forum ban update. case "b_edit": - XDB::execute("DELETE FROM forums.innd WHERE uid = {?}", $user->id()); + XDB::execute("DELETE FROM #forums#.innd WHERE uid = {?}", $user->id()); if (Env::v('write_perm') != "" || Env::v('read_perm') != "" || Env::v('commentaire') != "" ) { - XDB::execute("INSERT INTO forums.innd + XDB::execute("INSERT INTO #forums#.innd SET ipmin = '0', ipmax = '4294967295', write_perm = {?}, read_perm = {?}, comment = {?}, priority = '200', uid = {?}", @@ -652,7 +655,7 @@ class AdminModule extends PLModule // Displays last login and last host information. $res = XDB::query("SELECT start, host - FROM logger.sessions + FROM #logger#.sessions WHERE uid = {?} AND suid = 0 ORDER BY start DESC LIMIT 1", $user->id()); @@ -687,22 +690,25 @@ class AdminModule extends PLModule // Displays forum bans. $res = XDB::query("SELECT write_perm, read_perm, comment - FROM forums.innd + FROM #forums#.innd WHERE uid = {?}", $user->id()); $bans = $res->fetchOneAssoc(); $page->assign('bans', $bans); } - function getHruid($line, $key) + function getHruid($line, $key, $relation) { - var_dump($line); - if (!isset($line['nom']) || !isset($line['prenom']) || !isset($line['promo'])) { - return null; + $prenom = CSVImporter::getValue($line, 'prenom', $relation['prenom']); + $nom = CSVImporter::getValue($line, 'nom', $relation['nom']); + $promo = CSVImporter::getValue($line, 'promo', $relation['promo']); + + if ($prenom != 'NULL' && $nom != 'NULL' && $promo != 'NULL') { + return make_forlife($prenom, $nom, $promo); } - return make_forlife($line['prenom'], $line['nom'], $line['promo']); + return null; } - function getMatricule($line, $key) + function getMatricule($line, $key, $relation) { $mat = $line['matricule']; $year = intval(substr($mat, 0, 3)); @@ -722,7 +728,7 @@ class AdminModule extends PLModule $action = Env::v('valid_promo') == 'Ajouter des membres' ? 'add' : 'ax'; pl_redirect('admin/promo/' . $action . '/' . Env::i('promo')); } else { - $page->trigError('Promo non valide'); + $page->trigError('Promotion non valide.'); } } @@ -888,9 +894,9 @@ class AdminModule extends PLModule $page->setTitle('Administration - Décédés'); $res = XDB::iterator( - "SELECT u.promo, u.nom, u.prenom, u.deces, u.matricule_ax, u.hruid, DATE(MAX(s.start)) AS last - FROM auth_user_md5 AS u - LEFT JOIN logger.sessions AS s ON (s.uid = u.user_id AND suid = 0) + "SELECT u.promo, u.nom, u.prenom, u.deces, u.hruid, DATE(MAX(s.start)) AS last + FROM #x4dat#.auth_user_md5 AS u + LEFT JOIN #logger#.sessions AS s ON (s.uid = u.user_id AND suid = 0) WHERE perms IN ('admin', 'user') AND deces <> 0 GROUP BY u.user_id ORDER BY u.promo, u.nom"); @@ -1037,7 +1043,7 @@ class AdminModule extends PLModule function handler_logger_actions(&$page, $action = 'list', $id = null) { $page->setTitle('Administration - Actions'); $page->assign('title', 'Gestion des actions de logger'); - $table_editor = new PLTableEditor('admin/logger/actions','logger.actions','id'); + $table_editor = new PLTableEditor('admin/logger/actions','#logger#.actions','id'); $table_editor->describe('text','intitulé',true); $table_editor->describe('description','description',true); $table_editor->apply($page, $action, $id); @@ -1118,7 +1124,6 @@ class AdminModule extends PLModule } $page->changeTpl('admin/wiki.tpl'); - $page->addJsLink('jquery.js'); $page->assign('wiki_pages', $wiki_tree); $page->assign('perms_opts', $perms); } @@ -1168,10 +1173,10 @@ class AdminModule extends PLModule IF(w.ip = s2.ip, s2.host, s2.forward_host), IF(w.ip = s.ip, s.host, s.forward_host)), w.mask, w.detection, w.state, u.hruid - FROM ip_watch AS w - LEFT JOIN logger.sessions AS s ON (s.ip = w.ip) - LEFT JOIN logger.sessions AS s2 ON (s2.forward_ip = w.ip) - LEFT JOIN auth_user_md5 AS u ON (u.user_id = s.uid) + FROM #x4dat#.ip_watch AS w + LEFT JOIN #logger#.sessions AS s ON (s.ip = w.ip) + LEFT JOIN #logger#.sessions AS s2 ON (s2.forward_ip = w.ip) + LEFT JOIN #x4dat#.auth_user_md5 AS u ON (u.user_id = s.uid) GROUP BY w.ip, u.hruid ORDER BY w.state, w.ip, u.hruid"; $it = Xdb::iterRow($sql); @@ -1202,10 +1207,10 @@ class AdminModule extends PLModule } elseif ($action == 'edit') { $sql = "SELECT w.detection, w.state, w.last, w.description, w.mask, u1.hruid AS edit, u2.hruid AS hruid, s.host - FROM ip_watch AS w - LEFT JOIN auth_user_md5 AS u1 ON (u1.user_id = w.uid) - LEFT JOIN logger.sessions AS s ON (w.ip = s.ip) - LEFT JOIN auth_user_md5 AS u2 ON (u2.user_id = s.uid) + FROM #x4dat#.ip_watch AS w + LEFT JOIN #x4dat#.auth_user_md5 AS u1 ON (u1.user_id = w.uid) + LEFT JOIN #logger#.sessions AS s ON (w.ip = s.ip) + LEFT JOIN #x4dat#.auth_user_md5 AS u2 ON (u2.user_id = s.uid) WHERE w.ip = {?} GROUP BY u2.hruid ORDER BY u2.hruid"; @@ -1260,6 +1265,114 @@ class AdminModule extends PLModule WHERE perms = \'admin\' ORDER BY nom, prenom')); } + + function handler_jobs(&$page, $id = -1) + { + $page->changeTpl('admin/jobs.tpl'); + + if (Env::has('search')) { + $res = XDB::query("SELECT e.id, e.name, e.acronym + FROM profile_job_enum AS e + WHERE e.name LIKE CONCAT('% ', {?}, '%') OR e.acronym LIKE CONCAT('% ', {?}, '%')", + Env::t('job'), Env::t('job')); + + if ($res->numRows() <= 20) { + $page->assign('jobs', $res->fetchAllAssoc()); + } else { + $page->trigError("Il y a trop d'entreprises correspondant à ton choix. Affine-le !"); + } + + $page->assign('askedJob', Env::v('job')); + return; + } + + if (Env::has('edit')) { + // TODO: use address and phone classes to update profile_job_enum and profile_phones once they are done. + + S::assert_xsrf_token(); + $selectedJob = Env::has('selectedJob'); + + XDB::execute("DELETE FROM profile_phones + WHERE uid = {?} AND link_type = 'hq'", + $id); + XDB::execute("DELETE FROM profile_addresses + WHERE jobid = {?} AND type = 'hq'", + $id); + XDB::execute('DELETE FROM profile_job_enum + WHERE id = {?}', + $id); + + if (Env::has('change')) { + XDB::execute('UPDATE profile_job + SET jobid = {?} + WHERE jobid = {?}', + Env::i('newJobId'), $id); + + $page->trigSuccess("L'entreprise a bien été remplacée."); + } else { + require_once 'profil.func.inc.php'; + require_once 'geocoding.inc.php'; + + $display_tel = format_display_number(Env::v('tel'), $error_tel); + $display_fax = format_display_number(Env::v('fax'), $error_fax); + $gmapsGeocoder = new GMapsGeocoder(); + $address = array('text' => Env::t('address')); + $address = $gmapsGeocoder->getGeocodedAddress($address); + Geocoder::getAreaId($address, 'administrativeArea'); + Geocoder::getAreaId($address, 'subAdministrativeArea'); + Geocoder::getAreaId($address, 'locality'); + + XDB::execute('UPDATE profile_job_enum + SET name = {?}, acronym = {?}, url = {?}, email = {?}, + NAF_code = {?}, AX_code = {?}, holdingid = {?} + WHERE id = {?}', + Env::t('name'), Env::t('acronym'), Env::t('url'), Env::t('email'), + Env::t('NAF_code'), Env::i('AX_code'), Env::i('holdingId'), $id); + + XDB::execute("INSERT INTO profile_phones (uid, link_type, link_id, tel_id, tel_type, + search_tel, display_tel, pub) + VALUES ({?}, 'hq', 0, 0, 'fixed', {?}, {?}, 'public'), + ({?}, 'hq', 0, 1, 'fax', {?}, {?}, 'public')", + $id, format_phone_number(Env::v('tel')), $display_tel, + $id, format_phone_number(Env::v('fax')), $display_fax); + + XDB::execute("INSERT INTO profile_addresses (jobid, type, id, accuracy, + text, postalText, postalCode, localityId, + subAdministrativeAreaId, administrativeAreaId, + countryId, latitude, longitude, updateTime, + north, south, east, west) + VALUES ({?}, 'hq', 0, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, + {?}, {?}, FROM_UNIXTIME({?}), {?}, {?}, {?}, {?})", + $id, $address['accuracy'], $address['text'], $address['postalText'], + $address['postalCode'], $address['localityId'], + $address['subAdministrativeAreaId'], $address['administrativeAreaId'], + $address['countryId'], $address['latitude'], $address['longitude'], + $address['updateTime'], $address['north'], $address['south'], + $address['east'], $address['west']); + + $page->trigSuccess("L'entreprise a bien été mise à jour."); + } + } + + if (!Env::has('change') && $id != -1) { + $res = XDB::query("SELECT e.id, e.name, e.acronym, e.url, e.email, e.NAF_code, e.AX_code, + h.id AS holdingId, h.name AS holdingName, h.acronym AS holdingAcronym, + t.display_tel AS tel, f.display_tel AS fax, a.text AS address + FROM profile_job_enum AS e + LEFT JOIN profile_job_enum AS h ON (e.holdingid = h.id) + LEFT JOIN profile_phones AS t ON (t.uid = e.id AND link_type = 'hq' AND tel_id = 0) + LEFT JOIN profile_phones AS f ON (f.uid = e.id AND link_type = 'hq' AND tel_id = 1) + LEFT JOIN profile_addresses AS a ON (a.jobid = e.id AND a.type = 'hq') + WHERE e.id = {?}", + $id); + + if ($res->numRows() == 0) { + $page->trigError('Auncune entreprise ne correspond à cet identifiant.'); + } else { + $page->assign('selectedJob', $res->fetchOneAssoc()); + } + } + } } // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: