Fixes accessing to groups having shortnames that look like ids. Closes #1084
[platal.git] / modules / admin.php
index 509a15e..891602a 100644 (file)
@@ -27,7 +27,6 @@ class AdminModule extends PLModule
             'phpinfo'                      => $this->make_hook('phpinfo',                AUTH_MDP, 'admin'),
             'get_rights'                   => $this->make_hook('get_rights',             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'),
@@ -271,8 +270,8 @@ class AdminModule extends PLModule
             // we are viewing a session
             $res = XDB::query("SELECT  ls.*, a.alias AS username, sa.alias AS suer
                                  FROM  log_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')
+                            LEFT JOIN  aliases   AS a  ON (a.uid = ls.uid AND a.type='a_vie')
+                            LEFT JOIN  aliases   AS sa ON (sa.uid = ls.suid AND sa.type='a_vie')
                                 WHERE  ls.id = {?}", $arg);
 
             $page->assign('session', $a = $res->fetchOneAssoc());
@@ -288,7 +287,7 @@ class AdminModule extends PLModule
         } else {
             $loguser = $action == 'user' ? $arg : Env::v('loguser');
 
-            $res = XDB::query('SELECT id FROM aliases WHERE alias={?}',
+            $res = XDB::query('SELECT uid FROM aliases WHERE alias={?}',
                               $loguser);
             $loguid  = $res->fetchOneCell();
 
@@ -330,7 +329,7 @@ class AdminModule extends PLModule
                 $select = "SELECT  s.id, s.start, s.uid,
                                    a.alias as username
                              FROM  log_sessions AS s
-                        LEFT JOIN  #x4dat#.aliases   AS a  ON (a.id = s.uid AND a.type='a_vie')
+                        LEFT JOIN  aliases   AS a  ON (a.uid = s.uid AND a.type='a_vie')
                     $where
                     ORDER BY start DESC";
                 $res = XDB::iterator($select);
@@ -396,7 +395,7 @@ class AdminModule extends PLModule
             pl_redirect("admin/logger?loguser=$login&year=".date('Y')."&month=".date('m'));
         }
 
-        if(Post::has('su_button') && $registered) {
+        if(Post::has('su_account') && $registered) {
             if (!Platal::session()->startSUID($user)) {
                 $page->trigError('Impossible d\'effectuer un SUID sur ' . $user->login());
             } else {
@@ -434,8 +433,8 @@ class AdminModule extends PLModule
             if (Post::i('token_access', 0) != ($user->token_access ? 1 : 0)) {
                 $to_update['token'] = Post::i('token_access') ? rand_url_id(16) : null;
             }
-            if (Post::i('skin', 0) != $user->skin) {
-                $to_update['skin'] = Post::i('skin', 0);
+            if (Post::i('skin') != $user->skin) {
+                $to_update['skin'] = Post::i('skin');
                 if ($to_update['skin'] == 0) {
                     $to_update['skin'] = null;
                 }
@@ -545,7 +544,7 @@ class AdminModule extends PLModule
                     $page->trigError("Impossible d'ajouter l'alias '$alias@$domain', il est probablement déjà attribué");
                 }
             } elseif ($domain == $globals->mail->domain || $domain == $globals->mail->domain2) {
-                $res = XDB::execute("INSERT INTO  aliases (id, alias, type)
+                $res = XDB::execute("INSERT INTO  aliases (uid, alias, type)
                                           VALUES  ({?}, {?}, 'alias')",
                                     $user->id(), $alias);
                 $page->trigSuccess("Nouvel alias '$alias' ajouté");
@@ -554,7 +553,7 @@ class AdminModule extends PLModule
             }
         } else if (!Post::blank('del_alias')) {
             XDB::execute("DELETE FROM  aliases
-                                WHERE  id = {?} AND alias = {?} AND
+                                WHERE  uid = {?} AND alias = {?} AND
                                        type NOT IN ('a_vie', 'homonyme')",
                          $user->id(), $val);
             XDB::execute("UPDATE  emails
@@ -566,10 +565,10 @@ class AdminModule extends PLModule
         } else if (!Post::blank('best')) {
             XDB::execute("UPDATE  aliases
                              SET  flags = TRIM(BOTH ',' FROM REPLACE(CONCAT(',', flags, ','), ',bestalias,', ','))
-                           WHERE  id = {?}", $user->id());
+                           WHERE  uid = {?}", $user->id());
             XDB::execute("UPDATE  aliases
                              SET  flags = CONCAT_WS(',', IF(flags = '', NULL, flags), 'bestalias')
-                           WHERE  id = {?} AND alias = {?}", $user->id(), $val);
+                           WHERE  uid = {?} AND alias = {?}", $user->id(), $val);
             // As having a non-null bestalias value is critical in
             // plat/al's code, we do an a posteriori check on the
             // validity of the bestalias.
@@ -579,7 +578,7 @@ class AdminModule extends PLModule
 
         // OpenId form {{{
         if (Post::has('del_openid')) {
-            XDB::execute('DELETE FROM  openid_trusted
+            XDB::execute('DELETE FROM  account_auth_openid
                                 WHERE  id = {?}', Post::i('del_openid'));
         }
         // }}}
@@ -599,8 +598,8 @@ class AdminModule extends PLModule
         // }}}
 
 
-        $page->addJsLink('ui.core.js');
-        $page->addJsLink('ui.tabs.js');
+        $page->addJsLink('jquery.ui.core.js');
+        $page->addJsLink('jquery.ui.tabs.js');
 
         // Displays last login and last host information.
         $res = XDB::query("SELECT  start, host
@@ -617,7 +616,7 @@ class AdminModule extends PLModule
         $page->assign('aliases', XDB::iterator("SELECT  alias, type='a_vie' AS for_life,
                                                         FIND_IN_SET('bestalias',flags) AS best, expire
                                                   FROM  aliases
-                                                 WHERE  id = {?} AND type != 'homonyme'
+                                                 WHERE  uid = {?} AND type != 'homonyme'
                                               ORDER BY  type != 'a_vie'", $user->id()));
         $page->assign('account_types', XDB::iterator('SELECT * FROM account_types ORDER BY type'));
         $page->assign('skins', XDB::iterator('SELECT id, name FROM skins ORDER BY name'));
@@ -626,8 +625,8 @@ class AdminModule extends PLModule
                                              INNER JOIN  profiles AS p ON (ap.pid = p.pid)
                                                   WHERE  ap.uid = {?}', $user->id()));
         $page->assign('openid', XDB::iterator('SELECT  id, url
-                                                 FROM  openid_trusted
-                                                WHERE  user_id = {?}', $user->id()));
+                                                 FROM  account_auth_openid
+                                                WHERE  uid = {?}', $user->id()));
 
         // Displays email redirection and the general profile.
         if ($registered && $redirect) {
@@ -647,7 +646,7 @@ class AdminModule extends PLModule
     private static function getHrid($firstname, $lastname, $promo)
     {
         if ($firstname != null && $lastname != null && $promo != null) {
-            return User::makeForlife($firstname, $lastname, $promo);
+            return User::makeHrid($firstname, $lastname, $promo);
         }
         return null;
     }
@@ -698,18 +697,17 @@ class AdminModule extends PLModule
         $page->changeTpl('admin/add_accounts.tpl');
 
         if (Env::has('add_type') && Env::has('people')) {
-            require_once 'directory.enums.inc.php';
             $lines = explode("\n", Env::t('people'));
             $separator = Env::t('separator');
             $promotion = Env::i('promotion');
-            $nameTypes = DirEnum::getOptionsArray(DirEnum::NAMETYPES);
+            $nameTypes = DirEnum::getOptions(DirEnum::NAMETYPES);
             $nameTypes = array_flip($nameTypes);
 
             if (Env::t('add_type') == 'promo') {
                 $type = 'x';
-                $eduSchools = DirEnum::getOptionsArray(DirEnum::EDUSCHOOLS);
+                $eduSchools = DirEnum::getOptions(DirEnum::EDUSCHOOLS);
                 $eduSchools = array_flip($eduSchools);
-                $eduDegrees = DirEnum::getOptionsArray(DirEnum::EDUDEGREES);
+                $eduDegrees = DirEnum::getOptions(DirEnum::EDUDEGREES);
                 $eduDegrees = array_flip($eduDegrees);
                 var_dump($eduDegrees);
                 switch (Env::t('edu_type')) {
@@ -843,7 +841,7 @@ class AdminModule extends PLModule
                     XDB::execute("UPDATE  aliases
                                      SET  type = 'homonyme', expire=NOW()
                                    WHERE  alias = {?}", $loginbis);
-                    XDB::execute("REPLACE INTO  homonymes (homonyme_id,user_id)
+                    XDB::execute("REPLACE INTO  homonyms (homonyme_id, uid)
                                         VALUES  ({?}, {?})", $target, $target);
                     send_robot_homonyme($user, $loginbis);
                     $op = 'list';
@@ -856,19 +854,18 @@ class AdminModule extends PLModule
             $res = XDB::iterator(
                     "SELECT  a.alias AS homonyme, s.alias AS forlife,
                              IF(h.homonyme_id = s.id, a.expire, NULL) AS expire,
-                             IF(h.homonyme_id = s.id, a.type, NULL) AS type,
-                             ac.uid AS user_id
+                             IF(h.homonyme_id = s.id, a.type, NULL) AS type, ac.uid
                        FROM  aliases       AS a
-                  LEFT JOIN  homonymes     AS h ON (h.homonyme_id = a.id)
-                 INNER JOIN  aliases       AS s ON (s.id = h.user_id AND s.type='a_vie')
-                 INNER JOIN  accounts      AS ac ON (ac.uid = a.id)
+                  LEFT JOIN  homonyms      AS h  ON (h.homonyme_id = a.uid)
+                 INNER JOIN  aliases       AS s  ON (s.uid = h.uid AND s.type = 'a_vie')
+                 INNER JOIN  accounts      AS ac ON (ac.uid = a.uid)
                       WHERE  a.type = 'homonyme' OR a.expire != ''
                    ORDER BY  a.alias, forlife");
             $hnymes = Array();
             while ($tab = $res->next()) {
                 $hnymes[$tab['homonyme']][] = $tab;
             }
-            $page->assign_by_ref('hnymes',$hnymes);
+            $page->assign_by_ref('hnymes', $hnymes);
         }
     }
 
@@ -903,9 +900,9 @@ class AdminModule extends PLModule
                                WHERE  hrpid = {?}', $val, $pid);
                 $page->trigSuccess('Ajout du décès de ' . $name . ' le ' . $val . '.');
                 if($death == '0000-00-00' || empty($death)) {
-                    // TODO: FIX THIS DEPRECATED CALL
-                    require_once('user.func.inc.php');
-                    user_clear_all_subs($uid, false);   // by default, dead ppl do not loose their email
+                    $profile = Profile::get($pid);
+                    $profile->clear();
+                    $profile->owner()->clear(false);
                 }
             }
         }
@@ -925,10 +922,10 @@ class AdminModule extends PLModule
 
         $res = XDB::iterator(
                 "SELECT  a.hruid, pd.promo, p.ax_id, pd.directory_name, p.deathdate, DATE(MAX(s.start)) AS last
-                   FROM  #x4dat#.accounts         AS a
-             INNER JOIN  #x4dat#.account_profiles AS ap ON (ap.uid = a.uid AND FIND_IN_SET('owner', ap.perms))
-             INNER JOIN  #x4dat#.profiles         AS p ON (p.pid = ap.pid)
-             INNER JOIN  #x4dat#.profile_display  AS pd ON (pd.pid = p.pid)
+                   FROM  accounts         AS a
+             INNER JOIN  account_profiles AS ap ON (ap.uid = a.uid AND FIND_IN_SET('owner', ap.perms))
+             INNER JOIN  profiles         AS p ON (p.pid = ap.pid)
+             INNER JOIN  profile_display  AS pd ON (pd.pid = p.pid)
               LEFT JOIN  log_sessions        AS s ON (s.uid = a.uid AND suid = 0)
                   WHERE  a.state = 'active' AND p.deathdate IS NOT NULL
                GROUP BY  a.uid
@@ -938,7 +935,7 @@ class AdminModule extends PLModule
 
     function handler_validate(&$page, $action = 'list', $id = null)
     {
-        $page->changeTpl('admin/valider.tpl');
+        $page->changeTpl('admin/validation.tpl');
         $page->setTitle('Administration - Valider une demande');
                 $page->addCssLink('nl.css');
         $page->addJsLink('ajax.js');
@@ -965,7 +962,9 @@ class AdminModule extends PLModule
         $page->assign('categories', $categories = explode(',', str_replace("'", '', substr($a['Type'], 5, -1))));
 
         $hidden = array();
-        $res = XDB::query('SELECT hidden_requests FROM requests_hidden WHERE user_id = {?}', S::v('uid'));
+        $res = XDB::query('SELECT  hidden_requests
+                             FROM  requests_hidden
+                            WHERE  uid = {?}', S::v('uid'));
         $hide_requests = $res->fetchOneCell();
         if (Post::has('hide')) {
             $hide = array();
@@ -975,7 +974,8 @@ class AdminModule extends PLModule
                     $hide[] = $cat;
                 }
             $hide_requests = join(',', $hide);
-            XDB::query('REPLACE INTO requests_hidden (user_id, hidden_requests) VALUES({?}, {?})',
+            XDB::query('REPLACE INTO  requests_hidden (uid, hidden_requests)
+                              VALUES  ({?}, {?})',
                        S::v('uid'), $hide_requests);
         } elseif ($hide_requests)  {
             foreach (explode(',', $hide_requests) as $hide_type)
@@ -1059,7 +1059,7 @@ class AdminModule extends PLModule
     {
         $page->setTitle('Administration - Coupures');
         $page->assign('title', 'Gestion des coupures');
-        $table_editor = new PLTableEditor('admin/downtime','coupures','id');
+        $table_editor = new PLTableEditor('admin/downtime','downtimes','id');
         $table_editor->describe('debut','date',true);
         $table_editor->describe('duree','durée',false);
         $table_editor->describe('resume','résumé',true);
@@ -1191,10 +1191,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, a.hruid
-                      FROM  #x4dat#.ip_watch  AS w
+                      FROM  ip_watch  AS w
                  LEFT JOIN  log_sessions AS s  ON (s.ip = w.ip)
                  LEFT JOIN  log_sessions AS s2 ON (s2.forward_ip = w.ip)
-                 LEFT JOIN  #x4dat#.accounts  AS a  ON (a.uid = s.uid)
+                 LEFT JOIN  accounts  AS a  ON (a.uid = s.uid)
                   GROUP BY  w.ip, a.hruid
                   ORDER BY  w.state, w.ip, a.hruid";
             $it = Xdb::iterRow($sql);
@@ -1225,10 +1225,10 @@ class AdminModule extends PLModule
         } elseif ($action == 'edit') {
             $sql = "SELECT  w.detection, w.state, w.last, w.description, w.mask,
                             a1.hruid AS edit, a2.hruid AS hruid, s.host
-                      FROM  #x4dat#.ip_watch  AS w
-                 LEFT JOIN  #x4dat#.accounts  AS a1 ON (a1.uid = w.uid)
+                      FROM  ip_watch  AS w
+                 LEFT JOIN  accounts  AS a1 ON (a1.uid = w.uid)
                  LEFT JOIN  log_sessions AS s  ON (w.ip = s.ip)
-                 LEFT JOIN  #x4dat#.accounts  AS a2 ON (a2.uid = s.uid)
+                 LEFT JOIN  accounts  AS a2 ON (a2.uid = s.uid)
                      WHERE  w.ip = {?}
                   GROUP BY  a2.hruid
                   ORDER BY  a2.hruid";
@@ -1312,7 +1312,7 @@ class AdminModule extends PLModule
             $selectedJob = Env::has('selectedJob');
 
             XDB::execute("DELETE FROM  profile_phones
-                                WHERE  uid = {?} AND link_type = 'hq'",
+                                WHERE  pid = {?} AND link_type = 'hq'",
                          $id);
             XDB::execute("DELETE FROM  profile_addresses
                                 WHERE  jobid = {?} AND type = 'hq'",
@@ -1348,7 +1348,7 @@ class AdminModule extends PLModule
                              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,
+                XDB::execute("INSERT INTO  profile_phones (pid, link_type, link_id, tel_id, tel_type,
                                            search_tel, display_tel, pub)
                                    VALUES  ({?}, 'hq', 0, 0, 'fixed', {?}, {?}, 'public'),
                                            ({?}, 'hq', 0, 1, 'fax', {?}, {?}, 'public')",
@@ -1379,8 +1379,8 @@ class AdminModule extends PLModule
                                        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_phones    AS t ON (t.pid = e.id AND link_type = 'hq' AND tel_id = 0)
+                            LEFT JOIN  profile_phones    AS f ON (f.pid = 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);