Fixes the code used to synchronize passwords back to Google Apps;
[platal.git] / modules / admin.php
index db8fae5..7bdd213 100644 (file)
@@ -55,6 +55,7 @@ class AdminModule extends PLModule
             'admin/jobs'                   => $this->make_hook('jobs',                   AUTH_PASSWD, 'admin,edit_directory'),
             'admin/profile'                => $this->make_hook('profile',                AUTH_PASSWD, 'admin,edit_directory'),
             'admin/phd'                    => $this->make_hook('phd',                    AUTH_PASSWD, 'admin'),
+            'admin/name'                   => $this->make_hook('admin_name',             AUTH_PASSWD, 'admin'),
             'admin/add_secondary_edu'      => $this->make_hook('add_secondary_edu',      AUTH_PASSWD, 'admin')
         );
     }
@@ -469,6 +470,7 @@ class AdminModule extends PLModule
                     }
                     $to_update['full_name'] = build_full_name($firstname, $lastname);
                     $to_update['directory_name'] = build_directory_name($firstname, $lastname);
+                    $to_update['sort_name'] = build_sort_name($firstname, $lastname);
                 }
                 if (Post::s('display_name') != $user->displayName()) {
                     $to_update['display_name'] = Post::s('display_name');
@@ -855,7 +857,10 @@ class AdminModule extends PLModule
                   default:
                     $page->killError("La formation n'est pas reconnue : " . Env::t('edu_type') . '.');
                 }
-                $best_domain = User::$sub_mail_domains[$type] . Platal::globals()->mail->domain;
+                $best_domain = XDB::fetchOneCell('SELECT  id
+                                                    FROM  email_virtual_domains
+                                                   WHERE  name = {?}',
+                                                 User::$sub_mail_domains[$type] . Platal::globals()->mail->domain);
 
                 XDB::startTransaction();
                 foreach ($lines as $line) {
@@ -866,6 +871,7 @@ class AdminModule extends PLModule
                         if (!is_null($sex)) {
                             $fullName = build_full_name($firstname, $lastname);
                             $directoryName = build_directory_name($firstname, $lastname);
+                            $sortName = build_sort_name($firstname, $lastname);
                             $birthDate = self::formatBirthDate($infos[2]);
                             if ($type == 'x') {
                                 $xorgId = Profile::getXorgId($infos[4]);
@@ -890,14 +896,14 @@ class AdminModule extends PLModule
                             XDB::execute('INSERT INTO  profile_display (pid, yourself, public_name, private_name,
                                                                         directory_name, short_name, sort_name, promo)
                                                VALUES  ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})',
-                                         $pid, $firstname, $fullName, $fullName, $directoryName, $fullName, $directoryName, $promo);
+                                         $pid, $firstname, $fullName, $fullName, $directoryName, $fullName, $sortName, $promo);
                             XDB::execute('INSERT INTO  profile_education (id, pid, eduid, degreeid, entry_year, grad_year, promo_year, flags)
                                                VALUES  (100, {?}, {?}, {?}, {?}, {?}, {?}, \'primary\')',
                                          $pid, $eduSchools[Profile::EDU_X], $degreeid, $entry_year, $grad_year, $promotion);
                             XDB::execute('INSERT INTO  accounts (hruid, type, is_admin, state, full_name, directory_name,
-                                                                 display_name, lastname, firstname, sex, best_domain)
-                                               VALUES  ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})',
-                                         $infos['hrid'], $type, 0, 'pending', $fullName, $directoryName,
+                                                                 display_name, sort_name, lastname, firstname, sex, best_domain)
+                                               VALUES  ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})',
+                                         $infos['hrid'], $type, 0, 'pending', $fullName, $directoryName, $sortName,
                                          $firstname, $lastname, $firstname, $sex, $best_domain);
                             $uid = XDB::insertId();
                             XDB::execute('INSERT INTO  account_profiles (uid, pid, perms)
@@ -919,11 +925,12 @@ class AdminModule extends PLModule
                             $firstname = capitalize_name($infos[1]);
                             $fullName = build_full_name($firstname, $lastname);
                             $directoryName = build_directory_name($firstname, $lastname);
+                            $sortName = build_sort_name($firstname, $lastname);
                             XDB::execute('INSERT INTO  accounts (hruid, type, is_admin, state, email, full_name, directory_name,
-                                                                 display_name, lastname, firstname, sex)
-                                               VALUES  ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})',
+                                                                 sort_name, display_name, lastname, firstname, sex)
+                                               VALUES  ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})',
                                          $infos['hrid'], $type, 0, 'pending', $infos[2], $fullName, $directoryName,
-                                         $firstname, $lastname, $firstname, $sex);
+                                         $sortName ,$firstname, $lastname, $firstname, $sex);
                             $newAccounts[$infos['hrid']] = $fullName;
                         }
                     }
@@ -2006,6 +2013,107 @@ class AdminModule extends PLModule
         }
 
     }
+
+    function handler_admin_name($page, $hruid = null)
+    {
+        $page->changeTpl('admin/admin_name.tpl');
+
+        if (Post::has('id')) {
+            $user = User::get(Post::t('id'));
+            if (is_null($user)) {
+                $page->trigError("L'identifiant donné ne correspond à personne ou est ambigu.");
+                exit();
+            }
+            pl_redirect('admin/name/' . $user->hruid);
+        }
+
+        $user = User::getSilent($hruid);
+        if (!is_null($user)) {
+            require_once 'name.func.inc.php';
+
+            if ($user->hasProfile()) {
+                $name_types = array(
+                    'lastname_main'      => 'Nom patronymique',
+                    'lastname_marital'   => 'Nom marital',
+                    'lastname_ordinary'  => 'Nom usuel',
+                    'firstname_main'     => 'Prénom',
+                    'firstname_ordinary' => 'Prénom usuel',
+                    'pseudonym'          => 'Pseudonyme'
+                );
+                $names = XDB::fetchOneAssoc('SELECT  lastname_main, lastname_marital, lastname_ordinary,
+                                                     firstname_main, firstname_ordinary, pseudonym
+                                               FROM  profile_public_names
+                                              WHERE  pid = {?}',
+                                            $user->profile()->id());
+            } else {
+                $name_types = array(
+                    'lastname'  => 'Nom',
+                    'firstname' => 'Prénom'
+                );
+                $names = XDB::fetchOneAssoc('SELECT  lastname, firstname
+                                               FROM  accounts
+                                              WHERE  uid = {?}',
+                                            $user->id());
+            }
+
+            if (Post::has('correct')) {
+                $new_names = array();
+                $update = true;
+                foreach ($name_types as $key => $fullname) {
+                    $new_names[$key] = Post::t($key);
+                    if (mb_strtolower($new_names[$key]) != mb_strtolower($names[$key])) {
+                        $update = false;
+                    }
+                }
+
+                if ($update) {
+                    if ($user->hasProfile()) {
+                        update_public_names($user->profile()->id(), $new_names);
+                        update_display_names($user->profile(), $new_names);
+                    } else {
+                        $new_names['full_name'] = build_full_name($new_names['firstname'], $new_names['lastname']);
+                        $new_names['directory_name'] = build_directory_name($new_names['firstname'], $new_names['lastname']);
+                        $new_names['sort_name'] = build_sort_name($new_names['firstname'], $new_names['lastname']);
+                        XDB::execute('UPDATE  accounts
+                                         SET  lastname = {?}, firstname = {?}, full_name = {?},
+                                              directory_name = {?}, sort_name = {?}
+                                       WHERE  uid = {?}',
+                                     $new_names['lastname'], $new_names['firstname'], $new_names['full_name'],
+                                     $new_names['directory_name'], $new_names['sort_name'], $user->id());
+                    }
+                    $page->trigSuccess('Mise à jour réussie.');
+                } else {
+                    $page->trigError('Seuls des changements de casse sont autorisés ici.');
+                }
+            }
+
+            if ($user->hasProfile()) {
+                $names = XDB::fetchOneAssoc('SELECT  lastname_main, lastname_marital, lastname_ordinary,
+                                                     firstname_main, firstname_ordinary, pseudonym
+                                               FROM  profile_public_names
+                                              WHERE  pid = {?}',
+                                            $user->profile()->id());
+            } else {
+                $names = XDB::fetchOneAssoc('SELECT  lastname, firstname
+                                               FROM  accounts
+                                              WHERE  uid = {?}',
+                                            $user->id());
+            }
+
+            foreach ($names as $key => $name) {
+                $names[$key] = array(
+                    'value'    => $name,
+                    'standard' => capitalize_name($name)
+                );
+                $names[$key]['different'] = ($names[$key]['value'] != $names[$key]['standard']);
+            }
+
+            $page->assign('uid', $user->id());
+            $page->assign('hruid', $user->hruid);
+            $page->assign('names', $names);
+            $page->assign('name_types', $name_types);
+        }
+    }
 }
 
 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: